Mutik's DotD Script

Fork of ForTheGoodOfAll DotD script with new look and strongly optimized js code

目前為 2015-06-05 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name Mutik's DotD Script
  3. // @namespace tag://kongregate
  4. // @description Fork of ForTheGoodOfAll DotD script with new look and strongly optimized js code
  5. // @author Mutik
  6. // @version 1.1.37
  7. // @grant GM_xmlhttpRequest
  8. // @grant GM_setValue
  9. // @grant GM_getValue
  10. // @grant unsafeWindow
  11. // @include http://www.kongregate.com/games/5thPlanetGames/dawn-of-the-dragons*
  12. // @include *50.18.191.15/kong/?DO_NOT_SHARE_THIS_LINK*
  13. // @hompage http://www.dotdraids.pl
  14. // ==/UserScript==
  15.  
  16. //best loop atm: for(var i=0, l=obj.length; i<l; ++i) - for with caching and pre-increment
  17.  
  18. if (window.location.host == "www.kongregate.com") {
  19. function main() {
  20.  
  21. if (typeof GM_setValue == 'undefined') {
  22. var GM_setValue = function (name, value) {
  23. localStorage.setItem(name, (typeof value).substring(0, 1) + value);
  24. };
  25. }
  26. if (typeof GM_getValue == 'undefined') {
  27. var GM_getValue = function (name, dvalue) {
  28. var value = localStorage.getItem(name);
  29. if (typeof value != 'string') return dvalue;
  30. else {
  31. var type = value.substring(0, 1);
  32. value = value.substring(1);
  33. if (type == 'b') return (value == 'true');
  34. else if (type == 'n') return Number(value);
  35. else return value;
  36. }
  37. };
  38. }
  39. //if (typeof GM_deleteValue == 'undefined') var GM_deleteValue = function(name) { localStorage.removeItem(name) };
  40.  
  41. window.FPX = {
  42. LandBasePrices: [4000, 15000, 25000, 50000, 75000, 110000, 300000, 600000, 1200000],
  43. LandBaseIncome: [100, 300, 400, 700, 900, 1200, 2700, 4500, 8000],
  44. LandCostRatio: function (owned) {
  45. var landCosts = [4000, 15000, 25000, 50000, 75000, 110000, 300000, 600000, 1200000];
  46. var icr = [1, 1, 1, 1, 1, 1, 1, 1, 1];
  47. /*Income/Cost ratio*/
  48. var i = 9;
  49. while (i--) {
  50. landCosts[i] += FPX.LandBasePrices[i] * owned[i] / 10;
  51. icr[i] = FPX.LandBaseIncome[i] / landCosts[i];
  52. }
  53. return icr;
  54. }
  55. };
  56. window.timeSince = function (date, after) {
  57. if (typeof date === 'number') date = new Date(date);
  58. var seconds = Math.abs(Math.floor((new Date().getTime() - date.getTime()) / 1000));
  59. var interval = Math.floor(seconds / 31536000);
  60. var pretext = 'about ', posttext = after ? ' left' : ' ago';
  61. if (interval >= 1) return pretext + interval + ' year' + (interval == 1 ? '' : 's') + posttext;
  62. interval = Math.floor(seconds / 2592000);
  63. if (interval >= 1) return pretext + interval + ' month' + (interval == 1 ? '' : 's') + posttext;
  64. interval = Math.floor(seconds / 86400);
  65. if (interval >= 1) return pretext + interval + ' day' + (interval == 1 ? '' : 's') + posttext;
  66. interval = Math.floor(seconds / 3600);
  67. if (interval >= 1) return pretext + interval + ' hour' + (interval == 1 ? '' : 's') + posttext;
  68. interval = Math.floor(seconds / 60);
  69. if (interval >= 1) return interval + ' minute' + (interval == 1 ? '' : 's') + posttext;
  70. return Math.floor(seconds) + ' second' + (seconds == 1 ? '' : 's') + posttext;
  71. };
  72. window.isNumber = function (n) {
  73. return !isNaN(parseFloat(n)) && isFinite(n);
  74. };
  75. window.SRDotDX = {
  76. version: { major: "1.1.37", minor: 'Mutik\'s DotD Extension' },
  77. c: function (ele) {
  78. function Cele(ele) {
  79. this._ele = ele;
  80. this.ele = function() {return this._ele};
  81. this.set = function(param) {for (var attr in param) if (param.hasOwnProperty(attr)) this._ele.setAttribute(attr,param[attr]); return this};
  82. this.text = function(text) {this._ele.appendChild(document.createTextNode(text)); return this};
  83. this.html = function(text,overwrite) {this._ele.innerHTML = overwrite ? text : (this._ele.innerHTML + text); return this};
  84. this.on = function(event,func,bubble) {this._ele.addEventListener(event, func, bubble); return this};
  85. this.del = function() {this._ele.parentNode.removeChild(this._ele); return null};
  86. this.attach = function(method,dele) {
  87. if (typeof dele === 'string') dele = document.getElementById(dele);
  88. if (!(dele instanceof Node)) throw 'Invalid attachment element specified';
  89. else if (!/^(?:to|before|after)$/i.test(method)) throw 'Invalid append method specified';
  90. else if (method === 'to') dele.appendChild(this._ele);
  91. else if (method === 'before') dele.parentNode.insertBefore(this._ele, dele);
  92. else if (dele.nextSibling === null) dele.parentNode.appendChild(this._ele);
  93. else dele.parentNode.insertBefore(this._ele, dele.nextSibling);
  94. return this
  95. };
  96. }
  97. if (typeof ele === 'string') ele = ele.charAt(0) === '#' ? document.getElementById(ele.substring(1)) : document.createElement(ele);
  98. if (ele instanceof Node) return new Cele(ele);
  99. throw 'Invalid element type specified';
  100. },
  101. util: {
  102. isArrEq: function(a,b) {
  103. if(a.length !== b.length) return false;
  104. var ca = a.slice().sort().join(",");
  105. var cb = b.slice().sort().join(",");
  106. return ca === cb;
  107. },
  108. getChatLinks: function() {
  109. var obj, out = '<p style="font: normal 9pt \'Trebuchet MS\'">';
  110. for(var i = 0; i < SRDotDX.linksHistory.length; i++) {
  111. obj = SRDotDX.linksHistory[i];
  112. out += '('+(new Date(obj.t).toLocaleTimeString())+') <b>'+obj.u+'</b>: '+obj.m+'<br>';
  113. }
  114. out += '</p>';
  115. var x = window.open();
  116. x.document.open();
  117. x.document.write(out);
  118. x.document.close();
  119. },
  120. getChatNumber: function() {
  121. var cont = document.getElementsByClassName('chat_room_template'), ele;
  122. for (var i = 0; i < cont.length; i++) {
  123. ele = cont[i].getAttribute('style');
  124. if (ele == null || ele == '') return i;
  125. }
  126. return 1;
  127. },
  128. getQueryVariable: function(v,s) {
  129. var query = String(s || window.location.search.substring(1));
  130. if (query.indexOf('?') > -1) query = query.substring(query.indexOf('?') + 1);
  131. var vars = query.split('&');
  132. var i = vars.length;
  133. while(i--) {
  134. var pair = vars[i].split('=');
  135. if (decodeURIComponent(pair[0]) == v) return decodeURIComponent(pair[1]);
  136. }
  137. return '';
  138. },
  139. getRaidFromUrl: function(url) {
  140. var r = {id: 0, boss: '', hash: '', diff: 0, sid: 1}, cnt = 0, i;
  141.  
  142. var reg = /[?&]([^=]+)=([^?&]+)/ig, p = url.replace(/&amp;/gi, '&').replace(/kv_&/gi, '&kv_').replace(/http:?/gi, '');
  143. while ((i = reg.exec(p)) != null) {
  144. switch (i[1]) {
  145. case 'kv_raid_id':
  146. case 'raid_id': r.id = parseInt(i[2]); cnt++; break;
  147. case 'kv_difficulty':
  148. case 'difficulty': r.diff = parseInt(i[2]); cnt++; break;
  149. case 'kv_raid_boss':
  150. case 'raid_boss': r.boss = i[2]; cnt++; break;
  151. case 'kv_hash':
  152. case 'hash': r.hash = i[2]; cnt++; break;
  153. case 'kv_serverid':
  154. case 'serverid': r.sid = parseInt(i[2]); cnt++; break;
  155. }
  156. }
  157. if (cnt < 4) return null;
  158.  
  159. return r;
  160. },
  161. getGameRoomNumber: function() {
  162. if(typeof holodeck == 'object' && typeof holodeck.chatWindow == 'function') return parseInt(holodeck.chatWindow()._rooms_by_type.game._room.name.slice(-2));
  163. //var rooms = document.getElementsByClassName('room_name'), i = rooms.length;
  164. //while(i--) if(!rooms[i-1].innerHTML.indexOf('Dawn of the Dragons')) return parseInt(rooms[i-1].innerHTML.slice(-2));
  165. return 0;
  166. },
  167. getShortNum: function(num) {
  168. if (isNaN(num) || num < 0) return num;
  169. if (num >= 1000000000000) return (num / 1000000000000).toPrecision(4) + 't';
  170. if (num >= 1000000000) return (num / 1000000000).toPrecision(4) + 'b';
  171. if (num >= 1000000) return (num / 1000000).toPrecision(4) + 'm';
  172. if (num >= 1000) return (num / 1000).toPrecision(4) + 'k';
  173. return num + ''
  174. },
  175. getShortNumMil: function(num) {
  176. if (isNaN(num) || num < 0) return num;
  177. if (num >= 1000000) return (num / 1000000).toPrecision(4) + 't';
  178. if (num >= 1000) return (num / 1000).toPrecision(4) + 'b';
  179. return num.toPrecision(4) + 'm'
  180. },
  181. objToUriString: function(obj) {
  182. if (typeof obj == 'object') {
  183. var str = '';
  184. for (var i in obj) str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]) + '&';
  185. str = str.substring(0, str.length - 1);
  186. return str
  187. }
  188. return '';
  189. },
  190. extEcho: function(msg) {
  191. var cn = SRDotDX.util.getChatNumber();
  192. var cw = document.getElementsByClassName('chat_message_window')[cn];
  193. var p = cw.getElementsByTagName('p');
  194. var m;
  195. if(p.length > 0 && p[p.length-1].className.indexOf('script') >= 0) {
  196. m = p[p.length-1].getElementsByClassName('message')[0];
  197. m.innerHTML = m.innerHTML + '<hr>' + msg;
  198. }
  199. else {
  200. m = SRDotDX.c('div').ele();
  201. var mi = SRDotDX.c('div').attach('to',m).ele();
  202. var mi2 = SRDotDX.c('p').set({class: 'script'}).attach('to',mi).ele();
  203. SRDotDX.c('span').set({class: 'username DotDeXtension'}).html("DotDeXtension",true).attach('to',mi2);
  204. SRDotDX.c('span').set({class: 'separator'}).html(": ",true).attach('to',mi2);
  205. SRDotDX.c('span').set({class: 'message', name: 'SRDotDX_DotDeXtension'}).html('<br>'+msg,true).attach('to',mi2);
  206. SRDotDX.c('span').set({class: 'clear'}).attach('to',mi2);
  207. var div = cw.lastChild;
  208. if(div) div.appendChild(mi);
  209. else cw.appendChild(m);
  210. }
  211. setTimeout(SRDotDX.gui.scrollChat, 100, cn);
  212. },
  213. serialize: function(obj) {
  214. var str = [];
  215. for (var p in obj) if (obj[p] != null)str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
  216. return str.join("&");
  217. },
  218. stringFormat: function() {
  219. var s = arguments[0];
  220. for (var i = 0; i < arguments.length - 1; i++) {
  221. var reg = new RegExp("\\{" + i + "\\}", "gm");
  222. s = s.replace(reg, arguments[i + 1]);
  223. }
  224. return s;
  225. }
  226. },
  227. config: (function() {
  228. var tmp, reqSave = false;
  229. try {tmp = JSON.parse(GM_getValue('SRDotDX', '{}'));}
  230. catch (e) {tmp = {};reqSave = true }
  231.  
  232. //Raids tab vars
  233. tmp.filterSearchStringR = typeof tmp.filterSearchStringR == 'string' ? tmp.filterSearchStringR : '';
  234. tmp.fltIncVis = typeof tmp.fltIncVis == 'boolean' ? tmp.fltIncVis : false;
  235. tmp.fltExclFull = typeof tmp.fltExclFull == 'boolean' ? tmp.fltExclFull : false;
  236. tmp.fltShowAll = typeof tmp.fltShowAll == 'boolean' ? tmp.fltShowAll : false;
  237.  
  238. //Options tab vars
  239. tmp.importFiltered = typeof tmp.importFiltered == 'boolean' ? tmp.importFiltered : true;
  240. tmp.hideRaidLinks = typeof tmp.hideRaidLinks == 'boolean' ? tmp.hideRaidLinks : false;
  241. tmp.hideBotLinks = typeof tmp.hideBotLinks == 'boolean' ? tmp.hideBotLinks : false;
  242. tmp.hideVisitedRaids = typeof tmp.hideVisitedRaids == 'boolean' ? tmp.hideVisitedRaids : false;
  243. tmp.hideVisitedRaidsInRaidList = typeof tmp.hideVisitedRaidsInRaidList == 'boolean' ? tmp.hideVisitedRaidsInRaidList : false;
  244. tmp.markMyRaidsVisted = typeof tmp.markMyRaidsVisted == 'boolean' ? tmp.markMyRaidsVisted : false;
  245. tmp.markImportedVisited = typeof tmp.markImportedVisited == 'boolean' ? tmp.markImportedVisited : false;
  246. tmp.FPXLandOwnedCount = typeof tmp.FPXLandOwnedCount == 'object' ? tmp.FPXLandOwnedCount : [0, 0, 0, 0, 0, 0, 0, 0, 0];
  247. tmp.prettyPost = typeof tmp.prettyPost == 'boolean' ? tmp.prettyPost : false;
  248. tmp.clearRMB = typeof tmp.clearRMB == 'boolean' ? tmp.clearRMB : false;
  249. tmp.useMaxRaidCount = typeof tmp.useMaxRaidCount == 'boolean' ? tmp.useMaxRaidCount : false;
  250. tmp.maxRaidCount = !(typeof tmp.maxRaidCount === 'undefined') ? tmp.maxRaidCount : 3000;
  251. tmp.autoImportPaste = typeof tmp.autoImportPaste == 'boolean' ? tmp.autoImportPaste : false;
  252. tmp.confirmForLargePaste = typeof tmp.confirmForLargePaste == 'boolean' && tmp.confirmPasteSize ? tmp.confirmForLargePaste : false;
  253. tmp.confirmPasteSize = typeof tmp.confirmPasteSize == 'number' ? tmp.confirmPasteSize : 1000;
  254. tmp.showStatusOverlay = typeof tmp.showStatusOverlay == 'boolean' ? tmp.showStatusOverlay : false;
  255. tmp.confirmDeletes = typeof tmp.confirmDeletes == 'boolean' ? tmp.confirmDeletes : true;
  256. tmp.autoPostPaste = typeof tmp.autoPostPaste == 'boolean' ? tmp.autoPostPaste : false;
  257. tmp.whisperTo = typeof tmp.whisperTo == 'string' ? tmp.whisperTo : '';
  258. tmp.formatLinkOutput = typeof tmp.formatLinkOutput == 'boolean' ? tmp.formatLinkOutput : false;
  259. tmp.linkShowFs = typeof tmp.linkShowFs == 'boolean' ? tmp.linkShowFs : false;
  260. tmp.linkShowAp = typeof tmp.linkShowAp == 'boolean' ? tmp.linkShowAp : false;
  261. tmp.unvisitedRaidPruningMode = typeof tmp.unvisitedRaidPruningMode == 'number' ? tmp.unvisitedRaidPruningMode : 1;
  262. tmp.selectedRaids = typeof tmp.selectedRaids == 'string' ? tmp.selectedRaids : '';
  263. tmp.pastebinUrl = typeof tmp.pastebinUrl == 'string' ? tmp.pastebinUrl : '';
  264. tmp.bckColor = typeof tmp.bckColor == 'string' ? tmp.bckColor : 'fff';
  265. tmp.lastImported = typeof tmp.lastImported == 'number' ? tmp.lastImported : (new Date().getTime() - 1728000000);
  266. tmp.hideKongForum = typeof tmp.hideKongForum == 'boolean' ? tmp.hideKongForum : false;
  267. tmp.hideGameDetails = typeof tmp.hideGameDetails == 'boolean' ? tmp.hideGameDetails : false;
  268. tmp.hideGameTitle = typeof tmp.hideGameTitle == 'boolean' ? tmp.hideGameTitle : true;
  269. tmp.chatFilterString = typeof tmp.chatFilterString == 'string' ? tmp.chatFilterString : '';
  270. tmp.filterSearchStringC = typeof tmp.filterSearchStringC == 'string' ? tmp.filterSearchStringC : '';
  271. tmp.chatSize = typeof tmp.chatSize == 'number' ? tmp.chatSize : 300;
  272. tmp.sbEnable = typeof tmp.sbEnable == 'boolean' ? tmp.sbEnable : true;
  273. tmp.sbSlim = typeof tmp.sbSlim == 'boolean' ? tmp.sbSlim : false;
  274. tmp.sbRightSide = typeof tmp.sbRightSide == 'boolean' ? tmp.sbRightSide : false;
  275. tmp.formatLinks = typeof tmp.formatLinks == 'boolean' ? tmp.formatLinks : false;
  276. tmp.slimKongBar = typeof tmp.slimKongBar == 'boolean' ? tmp.slimKongBar : false;
  277. tmp.kongUser = typeof tmp.kongUser == 'string' ? tmp.kongUser : 'Guest';
  278. tmp.kongAuth = typeof tmp.kongAuth == 'string' ? tmp.kongAuth : '0';
  279. tmp.kongId = typeof tmp.kongId == 'string' ? tmp.kongId : '0';
  280. tmp.kongMsg = typeof tmp.kongMsg == 'boolean' ? tmp.kongMsg : false;
  281. tmp.hideGameTab = typeof tmp.hideGameTab == 'boolean' ? tmp.hideGameTab : false;
  282. tmp.hideAccTab = typeof tmp.hideAccTab == 'boolean' ? tmp.hideAccTab : false;
  283. tmp.dotdxTabName = typeof tmp.dotdxTabName == 'string' ? tmp.dotdxTabName : 'Raids';
  284. tmp.themeNum = typeof tmp.themeNum == 'number' ? tmp.themeNum : 1;
  285. tmp.fontNum = typeof tmp.fontNum == 'number' ? tmp.fontNum : 0;
  286. tmp.ignMode = typeof tmp.ignMode == 'number' ? tmp.ignMode : 1;
  287. tmp.hideScrollBar = typeof tmp.hideScrollBar == 'boolean' ? tmp.hideScrollBar : false;
  288. tmp.hideWChat = typeof tmp.hideWChat == 'boolean' ? tmp.hideWChat : false;
  289. tmp.leftWChat = typeof tmp.leftWChat == 'boolean' ? tmp.leftWChat : false;
  290. tmp.removeWChat = typeof tmp.removeWChat == 'boolean' ? tmp.removeWChat : false;
  291. tmp.filterChatLinks = typeof tmp.filterChatLinks == 'boolean' ? tmp.filterChatLinks : true;
  292. tmp.filterRaidList = typeof tmp.filterRaidList == 'boolean' ? tmp.filterRaidList : false;
  293. tmp.newRaidsAtTopOfList = typeof tmp.newRaidsAtTopOfList == 'boolean' ? tmp.newRaidsAtTopOfList : false;
  294. tmp.serverMode = typeof tmp.serverMode == 'number' ? tmp.serverMode : 1;
  295. tmp.sbConfig = typeof tmp.sbConfig == 'object' ? tmp.sbConfig : [
  296. {"type": "label", "name": "Camps"},
  297. {"type": "btn", "name": "GoC", "cmd": "/camp goc"},
  298. {"type": "btn", "name": "MaM", "cmd": "/camp mam"},
  299. {"type": "btn", "name": "FW", "cmd": "/camp fw"},
  300. {"type": "label", "name": "Tiers"},
  301. {"type": "btn", "name": "Bella", "cmd": "/raid bella"},
  302. {"type": "btn", "name": "Xerk", "cmd": "/raid xerkara"},
  303. {"type": "btn", "name": "Tisi", "cmd": "/raid tisi"},
  304. {"type": "label", "name": "Join"},
  305. {"type": "btn", "name": "Farms", "cmd": "SRDotDX.gui.quickImportAndJoin(\'farm:nnm\',false)"},
  306. {"type": "label", "name": "Utils"},
  307. {"type": "btn", "color": "g", "name": "(Re)Load", "sname": "Reld", "cmd": "SRDotDX.reload()"},
  308. {"type": "btn", "color": "r", "name": "Unload", "sname": "Kill", "cmd": "/kill"},
  309. {"type": "btn", "name": "Room 1", "sname": "CR1", "cmd": "SRDotDX.gui.gotoRoom(1)"},
  310. {"type": "btn", "name": "Room 2", "sname": "CR2", "cmd": "SRDotDX.gui.gotoRoom(2)"},
  311. {"type": "btn", "name": "Room 8", "sname": "CR8", "cmd": "SRDotDX.gui.gotoRoom(8)"},
  312. {"type": "label", "name": "Sheets", "sname": "Help"},
  313. {"type": "btn", "name": "Magic", "sname": "Mag", "cmd": "https://docs.google.com/spreadsheets/d/1O0eVSnzlACP9XJDq0VN4kN51ESUusec3-gD4dKPHRNU"},
  314. {"type": "btn", "name": "Mount", "sname": "Mnt", "cmd": "https://docs.google.com/spreadsheet/ccc?key=0AiSpM5yAo8atdER2NEhHY3VjckRhdWctWV8yampQZUE"},
  315. {"type": "btn", "name": "Gear", "cmd": "https://docs.google.com/spreadsheet/lv?key=0AvP2qXrWcHBxdHpXZkUzTHNGNkVWbjE5c2VEZUNNMUE"},
  316. {"type": "label", "name": "Raids"},
  317. {"type": "jtxt"},
  318. {"type": "btn", "color": "g", "name": "Join", "cmd": "SRDotDX.gui.joinSelectedRaids(true)"},
  319. {"type": "btn", "color": "b", "name": "Import", "sname": "Imp", "cmd": "SRDotDX.gui.importFromServer()"},
  320. {"type": "btn", "color": "y", "name": "RaidBot", "sname": "Bot", "cmd": "SRDotDX.gui.switchBot()"}
  321. ];
  322.  
  323. if (typeof tmp.mutedUsers !== 'object') tmp.mutedUsers = {};
  324. if (typeof tmp.ignUsers !== 'object') tmp.ignUsers = {};
  325. if (typeof tmp.friendUsers !== 'object') tmp.friendUsers = {};
  326. if (typeof tmp.raidList !== 'object') tmp.raidList = {};
  327. if (typeof tmp.filters !== 'object') tmp.filters = [{},{}];
  328. if (typeof tmp.lastFilter !== 'object') tmp.lastFilter = typeof tmp.lastFilter === 'string' ? [tmp.lastFilter, tmp.lastFilter] : ["",""];
  329. if (tmp.filters.length !== 2) { var tmpFlt = [tmp.filters, tmp.filters]; tmp.filters = tmpFlt; }
  330. if (tmp.lastImported > (new Date().getTime())) tmp.lastImported = (new Date().getTime() - 1728000000);
  331. if (reqSave) GM_setValue('SRDotDX', JSON.stringify(tmp));
  332.  
  333. // Delete expired raids
  334. for (var id in tmp.raidList) {
  335. if(tmp.raidList.hasOwnProperty(id)) {
  336. if (typeof tmp.raidList[id].magic === "undefined") tmp.raidList[id].magic = [0, 0, 0, 0, 0, 0];
  337. if (typeof tmp.raidList[id].hp === "undefined") tmp.raidList[id].hp = 1.0;
  338. if (typeof tmp.raidList[id].sid === "undefined") tmp.raidList[id].sid = 1;
  339. if (typeof tmp.raidList[id].cs === "undefined") tmp.raidList[id].cs = 0;
  340. if (typeof tmp.raidList[id].fs === "undefined") tmp.raidList[id].fs = 1;
  341. if (typeof tmp.raidList[id].ni === "undefined") tmp.raidList[id].ni = false;
  342. }
  343. }
  344.  
  345. tmp.addRaid = function (hash, id, boss, diff, sid, visited, user, ts, room, magic, hp, cs, fs) {
  346. if ((/ /).test(user)) {
  347. var reg = new RegExp('[0-9]+|[0-9a-zA-Z_]+', 'g');
  348. room = reg.exec(user);
  349. user = reg.exec(user);
  350. }
  351. if (typeof SRDotDX.config.raidList[id] !== 'object') {
  352. var tStamp = typeof ts === 'undefined' || ts === null ? parseInt(new Date().getTime() / 1000) : parseInt(ts);
  353. SRDotDX.config.raidList[id] = {
  354. hash: hash, id: id, boss: boss, diff: diff, sid: sid, visited: visited, user: user, timeStamp: tStamp,
  355. expTime: (typeof SRDotDX.raids[boss] === 'object' ? (SRDotDX.raids[boss].stat === 'H' ? 1 : SRDotDX.raids[boss].duration) : 24) * 3600 + tStamp,
  356. room: room === undefined || room === null ? SRDotDX.util.getGameRoomNumber() : parseInt(room),
  357. magic: magic === undefined || magic === null ? [0,0,0,0,0,0] : magic,
  358. hp: hp === undefined || hp === null ? 1.0 : parseFloat(hp),
  359. cs: cs === undefined || cs === null ? 0 : parseInt(cs),
  360. fs: fs === undefined || fs === null ? (typeof SRDotDX.raids[boss] === 'object' ? SRDotDX.raids[boss].size : 1) : parseInt(fs),
  361. ni: magic === undefined
  362. };
  363. SRDotDX.gui.addRaid(id);
  364. }
  365. return SRDotDX.config.raidList[id]
  366. };
  367. tmp.save = function (b) {
  368. b = typeof b == 'undefined' ? true : b;
  369. GM_setValue('SRDotDX', JSON.stringify(SRDotDX.config));
  370. if(b) setTimeout(SRDotDX.config.save, 60000, true);
  371. else console.log('[DotDX] Manual config save invoked');
  372. };
  373. tmp.extSave = function(){SRDotDX.gframe('dotdx.save#'+JSON.stringify({'removeWChat':SRDotDX.config.removeWChat,'leftWChat':SRDotDX.config.leftWChat,'hideWChat':SRDotDX.config.hideWChat}));};
  374. return tmp;
  375. })(),
  376. linksHistory: [],
  377. request: {
  378. importLock: false,
  379. joinAfterImport: false,
  380. fromChat: false,
  381. quickBtnLock: true,
  382. filterSearchStringT: "",
  383. raids: function (isinit, hours) {
  384. if (!SRDotDX.gui.joining) {
  385. var secs = 15 - parseInt((new Date().getTime() - SRDotDX.config.lastImported) / 1000);
  386. if (secs > 0) {
  387. SRDotDX.util.extEcho("You can import again in " + secs + " seconds.");
  388. return
  389. }
  390. console.log("[DotDX] Importing raids from raids server ...");
  391. if (!isinit) this.initialize("Requesting raids");
  392. else SRDotDX.request.tries++;
  393. var h = hours ? ('&h=' + hours) : '';
  394. SRDotDX.request.req({
  395. eventName: "dotd.getraids",
  396. url: "http://mutik.erley.org/download.php?u=" + SRDotDX.config.kongUser + h,
  397. method: "GET",
  398. headers: {"Content-Type": "application/JSON"},
  399. timeout: 30000
  400. });
  401. }
  402. },
  403. poster: function (isInit) {
  404. var txt = document.getElementById('DotDX_checkRaidPoster').value, id;
  405. if (txt.length < 1) return;
  406. if (isNaN(txt)) {
  407. var r = SRDotDX.util.getRaidFromUrl(txt);
  408. if (r === null) return;
  409. id = r.id;
  410. }
  411. else id = parseInt(txt);
  412. console.log("[DotDX] Requesting raid poster info from server...");
  413. if (!isInit) this.initialize("Requesting raid poster data");
  414. else SRDotDX.request.tries++;
  415. SRDotDX.request.req({
  416. eventName: "dotd.getposter",
  417. url: "http://mutik.erley.org/getposter.php?i=" + id,
  418. method: "GET",
  419. headers: {"Content-Type": "application/JSON"},
  420. timeout: 30000
  421. });
  422. },
  423. version: function(isInit) {
  424. console.log("[DotDX] Requesting available script version from greasyfork...");
  425. if(!isInit) this.initialize("Requesting script version");
  426. else SRDotDX.request.tries++;
  427. SRDotDX.request.req({
  428. eventName: "dotd.getversion",
  429. url: "https://greasyfork.org/en/scripts/406-mutik-s-dotd-script",
  430. method: "GET",
  431. //headers: {"Content-Type": "application/JSON"},
  432. timeout: 30000
  433. });
  434. },
  435. initialize: function (str) {
  436. SRDotDX.gui.doStatusOutput(str + "...", 3000, true);
  437. SRDotDX.request.tries = 0;
  438. SRDotDX.request.seconds = 0;
  439. SRDotDX.request.complete = false;
  440. SRDotDX.request.timer = setTimeout(SRDotDX.request.tick, 1000, str);
  441. },
  442. tick: function (str) {
  443. if (!SRDotDX.request.complete) {
  444. if (SRDotDX.request.seconds > 25) {
  445. SRDotDX.gui.doStatusOutput("Request failed.", 3000, true);
  446. return;
  447. }
  448. SRDotDX.request.seconds++;
  449. SRDotDX.gui.doStatusOutput(str + " (" + SRDotDX.request.seconds + ")...", 1500, true);
  450. SRDotDX.request.timer = setTimeout(SRDotDX.request.tick, 1000, str);
  451. }
  452. },
  453. complete: false,
  454. seconds: 0,
  455. timer: 0,
  456. tries: 0,
  457. req: function (param) {
  458. var a = document.createEvent("MessageEvent");
  459. if (a.initMessageEvent) a.initMessageEvent("dotd.req", false, false, JSON.stringify(param), document.location.protocol + "//" + document.location.hostname, 0, window, null);
  460. else a = new MessageEvent("dotd.req", {"origin": document.location.protocol + "//" + document.location.hostname, "lastEventId": 0, "source": window, "data": JSON.stringify(param)});
  461. document.dispatchEvent(a);
  462. },
  463. init: function () {
  464. document.addEventListener("dotd.joinraid", SRDotDX.request.joinRaidResponse, false);
  465. document.addEventListener("dotd.getraids", SRDotDX.request.addRaids, false);
  466. document.addEventListener("dotd.getposter", SRDotDX.request.getPoster, false);
  467. document.addEventListener("dotd.getversion", SRDotDX.request.getVersion, false);
  468. delete this.init;
  469. },
  470. joinRaid: function (r) {
  471. if (typeof r == 'object') {
  472. if (!SRDotDX.gui.joining) SRDotDX.request.initialize("Joining " + (!SRDotDX.raids[r.boss] ? r.boss.capitalize().replace(/_/g, ' ') : SRDotDX.raids[r.boss].shortname));
  473. var joinData = 'kongregate_username=' + SRDotDX.config.kongUser + '&kongregate_user_id=' + SRDotDX.config.kongId + '&kongregate_game_auth_token=' + SRDotDX.config.kongAuth;
  474. SRDotDX.request.req({
  475. eventName: "dotd.joinraid",
  476. url: SRDotDX.util.stringFormat('http://50.18.191.15/kong/raidjoin.php?' + joinData + '&kv_action_type=raidhelp&kv_raid_id={0}&kv_hash={1}&serverid={2}', r.id, r.hash, r.sid),
  477. method: "GET",
  478. timeout: 30000
  479. });
  480. }
  481. },
  482. getPoster: function (e) {
  483. var r, data = JSON.parse(e.data);
  484. if (data.status != 200) {
  485. if (SRDotDX.request.tries >= 3) {
  486. SRDotDX.request.complete = true;
  487. SRDotDX.gui.doStatusOutput("Raids server busy. Please try again in a moment.");
  488. console.log('[DotDX] Raids request failed (url: ' + data.url + ')');
  489. console.log(JSON.stringify(data));
  490. } else {
  491. console.log("[DotDX] Raids server unresponsive (status " + data.status + "). Trying again, " + SRDotDX.request.tries + " tries.");
  492. }
  493. return;
  494. }
  495. SRDotDX.request.complete = true;
  496. try {
  497. r = JSON.parse(data.responseText)
  498. }
  499. catch (ex) {
  500. console.log("[DotDX] Checking raid poster request error");
  501. console.log('[DotDX] responseText: ' + data.responseText);
  502. return;
  503. }
  504. document.getElementById('DotDX_whoPosted_Raid').innerHTML = r.r;
  505. document.getElementById('DotDX_whoPosted_Time').innerHTML = new Date(r.t * 1000).toLocaleString();
  506. document.getElementById('DotDX_whoPosted_Poster').innerHTML = r.p;
  507. },
  508. getVersion: function(e) {
  509. var r, data = JSON.parse(e.data);
  510. SRDotDX.request.complete = true;
  511. var remoteVersion = "Unknown";
  512. if (data.status !== 200) {
  513. SRDotDX.gui.doStatusOutput("Greasyfork unresponsive.");
  514. console.log('[DotDX] Version request failed (url: ' + data.url + ')');
  515. console.log(JSON.stringify(data));
  516. }
  517. else remoteVersion = /<dd.+version.+>([\d\.]+)<.+dd>/.exec(data.responseText)[1];
  518. var d = '<span class="emph bold">' + SRDotDX.version.minor + '</span><br>';
  519. d += '<span class="bold">Installed version</span>: <span class="emph">' + SRDotDX.version.major + '</span><br>';
  520. d += '<span class="bold">Available version</span>: <span class="emph">' + remoteVersion + '</span><br>';
  521. if(SRDotDX.version.major === remoteVersion) d += 'Your script version is up to date.';
  522. else d += 'You can <a href="https://greasyfork.org/scripts/406-mutik-s-dotd-script" target="_blank">click here</a> to open greasyfork page with script and update.';
  523. SRDotDX.util.extEcho(d);
  524. },
  525. addRaids: function(e) {
  526. var r, data = JSON.parse(e.data);
  527. if (data.status != 200) {
  528. if (SRDotDX.request.tries >= 3) {
  529. SRDotDX.request.complete = true;
  530. SRDotDX.gui.doStatusOutput("Raids server busy. Please try again in a moment.");
  531. console.log('[DotDX] Raids request failed (url: ' + data.url + ')');
  532. console.log(JSON.stringify(data));
  533. } else {
  534. console.log("[DotDX] Raids server unresponsive (status " + data.status + "). Trying again, " + SRDotDX.request.tries + " tries.");
  535. }
  536. return;
  537. }
  538. SRDotDX.request.complete = true;
  539. try {
  540. r = JSON.parse(data.responseText)
  541. }
  542. catch (ex) {
  543. console.log("[DotDX] Raids importing error or no raids imported");
  544. console.log('[DotDX] responseText: ' + data.responseText);
  545. return;
  546. }
  547. SRDotDX.gui.doStatusOutput("Importing " + r.raids.length + " raids...");
  548. var raid, n = 0, t = 0, i, il, j, jl;
  549. var swt = !SRDotDX.config.importFiltered, filter = SRDotDX.c('#DotDX_filters').ele().innerHTML;
  550. for(j = 0, jl = r.raids.length; j < jl; ++j) {
  551. raid = r.raids[j];
  552. if (swt || filter.indexOf('fltList_' + raid.b + '_' + (raid.d - 1)) < 0) {
  553. t++;
  554. if (typeof SRDotDX.config.raidList[raid.i] !== 'object') {
  555. n++;
  556. SRDotDX.config.addRaid(raid.h, parseInt(raid.i), raid.b, parseInt(raid.d), parseInt(raid.s), false, raid.p, raid.t, raid.r, raid.m.split("_").map(function (x) {
  557. return parseInt(x)
  558. }), parseFloat(raid.hp), raid.cs, raid.fs);
  559. }
  560. else {
  561. SRDotDX.config.raidList[raid.i].magic = raid.m.split("_").map(function(x){return parseInt(x)});
  562. SRDotDX.config.raidList[raid.i].hp = parseFloat(raid.hp);
  563. SRDotDX.config.raidList[raid.i].cs = parseInt(raid.cs);
  564. SRDotDX.config.raidList[raid.i].fs = parseInt(raid.fs);
  565. SRDotDX.config.raidList[raid.i].ni = false;
  566. }
  567. }
  568. }
  569. console.log('[DotDX] Import raids from server complete');
  570. var id = r.prune.length > 3 ? r.prune.split("_") : [];
  571. //clean chat
  572. var chat = document.getElementsByClassName('chat_message_window'), p, pe, d = 0;
  573. for(var c = 0, cl = chat.length; c < cl; ++c) {
  574. p = chat[c].getElementsByClassName('DotDX_raid'); i = 0;
  575. while(pe = p[i++]) if(r.prune.indexOf((/DotDX_raidId_(\d+)/).exec(pe.className)[1]) > -1) pe.parentNode.removeChild(pe);
  576. p = chat[c].getElementsByTagName('div'); il = p.length;
  577. while(pe = p[i++]) if(pe.empty()) pe.parentNode.removeChild(pe);
  578. }
  579. //clean db
  580. for(i = 0, il = id.length; i < il; ++i) if(SRDotDX.config.raidList[id[i]]) { delete SRDotDX.config.raidList[id[i]]; d++; }
  581. console.log('[DotDX] Removing dead raids on import complete');
  582. SRDotDX.gui.selectRaidsToJoin('import response');
  583. SRDotDX.config.lastImported = new Date().getTime();
  584. SRDotDX.util.extEcho('Imported ' + t + ' raids, ' + n + ' new, ' + d + ' pruned.');
  585. if (SRDotDX.request.joinAfterImport) {
  586. SRDotDX.gui.selectRaidsToJoin();
  587. SRDotDX.gui.joinSelectedRaids(false);
  588. }
  589. SRDotDX.gui.doStatusOutput('Imported ' + n + ' new raids, ' + d + ' pruned.', 5000, true);
  590. },
  591. joinRaidResponse: function (e) {
  592. var data = JSON.parse(e.data);
  593. var statustxt = '';
  594. SRDotDX.request.complete = true;
  595. SRDotDX.gui.joinRaidComplete++;
  596. if (data && data.status === 200 && data.responseText && data.url) {
  597. var raidid = SRDotDX.util.getQueryVariable('kv_raid_id', data.url);
  598. if (typeof SRDotDX.config.raidList[raidid] === 'object') {
  599. SRDotDX.config.raidList[raidid].visited = true;
  600. SRDotDX.gui.toggleRaid('visited', raidid, true);
  601. SRDotDX.gui.raidListItemUpdate(raidid);
  602. if (/successfully (re-)?joined/i.test(data.responseText)) {
  603. SRDotDX.gui.joinRaidSuccessful++;
  604. statustxt = (SRDotDX.raids[SRDotDX.config.raidList[raidid].boss] ? SRDotDX.raids[SRDotDX.config.raidList[raidid].boss].shortname : SRDotDX.config.raidList[raidid].boss) + " joined successfully.";
  605. }
  606. else if (/already a member/i.test(data.responseText)) {
  607. statustxt = "Join Failed. You are already a member.";
  608. }
  609. else if (/already completed/i.test(data.responseText)) {
  610. SRDotDX.gui.joinRaidDead++;
  611. statustxt = "Join failed. Raid is dead.";
  612. SRDotDX.gui.deleteRaidFromDB(raidid);
  613. }
  614. else if (/not a member of the guild/i.test(data.responseText)) {
  615. SRDotDX.gui.joinRaidDead++;
  616. statustxt = "Join failed. You are not member of that Guild.";
  617. SRDotDX.gui.deleteRaidFromDB(raidid);
  618. }
  619. else if (/(invalid|find) raid (hash|ID)/i.test(data.responseText)) {
  620. statustxt = "Join failed. Invalid hash or ID.";
  621. SRDotDX.gui.joinRaidInvalid++;
  622. SRDotDX.gui.deleteRaidFromDB(raidid);
  623. }
  624. else {
  625. statustxt = 'Join failed. Unknown join response.';
  626. }
  627. }
  628. else SRDotDX.gui.joinRaidInvalid++;
  629. }
  630. else {
  631. console.log('[DotDX] Request timed out');
  632. SRDotDX.gui.joinRaidInvalid++;
  633. statustxt = "Join failed. Timeout.";
  634. }
  635. if (SRDotDX.gui.joining) {
  636. if (SRDotDX.gui.joinRaidComplete >= SRDotDX.gui.joinRaidList.length) {
  637. statustxt = "Finished joining. " + SRDotDX.gui.joinRaidSuccessful + " new, " + SRDotDX.gui.joinRaidDead + " dead.";
  638. SRDotDX.gui.joinFinish(true);
  639. if (SRDotDX.gui.joinRaidSuccessful > 2) SRDotDX.util.extEcho(statustxt);
  640. setTimeout(SRDotDX.config.save, 3000, false)
  641. }
  642. else {
  643. statustxt = "Joined " + SRDotDX.gui.joinRaidComplete + " of " + SRDotDX.gui.joinRaidList.length + ". " + SRDotDX.gui.joinRaidSuccessful + " new, " + SRDotDX.gui.joinRaidDead + " dead.";
  644. if (SRDotDX.gui.joinRaidIndex < SRDotDX.gui.joinRaidList.length) SRDotDX.request.joinRaid(SRDotDX.gui.joinRaidList[SRDotDX.gui.joinRaidIndex++]);
  645. }
  646. }
  647. else setTimeout(SRDotDX.config.save, 3000, false);
  648. if (statustxt !== '') SRDotDX.gui.doStatusOutput(statustxt, 4000, true);
  649. }
  650. },
  651. getRaidDetailsBase: function (url) {
  652. var r = {diff: 0, hash: '', boss: '', id: 0, sid: 0}, i, cnt = 0;
  653. var reg = /[?&]([^=]+)=([^?&]+)/ig, p = url.replace(/&amp;/gi, '&').replace(/kv_&/gi, '&kv_');
  654. while ((i = reg.exec(p)) != null) {
  655. switch (i[1]) {
  656. case 'kv_raid_id':
  657. case 'raid_id': r.id = parseInt(i[2]); cnt++; break;
  658. case 'kv_difficulty':
  659. case 'difficulty': r.diff = parseInt(i[2]); cnt++; break;
  660. case 'kv_raid_boss':
  661. case 'raid_boss': r.boss = i[2]; cnt++; break;
  662. case 'kv_hash':
  663. case 'hash': r.hash = i[2]; cnt++; break;
  664. case 'kv_serverid':
  665. case 'serverid': r.sid = parseInt(i[2]); cnt++; break;
  666. }
  667. }
  668. if (cnt < 4) return false;
  669.  
  670. r.diffLongText = ['Normal', 'Hard', 'Legendary', 'Nightmare'][r.diff - 1];
  671. r.diffShortText = ['N', 'H', 'L', 'NM'][r.diff - 1];
  672. var stats = SRDotDX.raids[r.boss];
  673. if (typeof stats === 'object') {
  674. r.name = stats.name;
  675. r.shortname = stats.shortname;
  676. r.size = stats.size;
  677. r.type = stats.type;
  678. r.dur = stats.duration;
  679. r.durText = stats.dur + "hrs";
  680. r.stat = stats.stat;
  681. r.statText = SRDotDX.getStatText(stats.stat);
  682. }
  683. else {
  684. r.name = r.boss[0].toUpperCase() + r.boss.substring(1).replace(/_/g, " ");
  685. r.shortname = r.name;
  686. r.dur = 48;
  687. }
  688. return r;
  689. },
  690. getTierTxt: function (hp, ppl, ap) {
  691. var num = hp / ppl;
  692. num = ap ? num / 2 : num;
  693. if (num >= 1000000000000) return (num / 1000000000000).toPrecision(3) + 't';
  694. if (num >= 1000000000) return (num / 1000000000).toPrecision(3) + 'b';
  695. if (num >= 1000000) return (num / 1000000).toPrecision(3) + 'm';
  696. if (num >= 1000) return (num / 1000).toPrecision(3) + 'k';
  697. return num + ''
  698. },
  699. getRaidDetails: function (url, user, visited, ts, room) {
  700. user = user ? user : '';
  701. var rVis = visited ? visited : user == SRDotDX.config.kongUser && SRDotDX.config.markMyRaidsVisted;
  702. var r = SRDotDX.util.getRaidFromUrl(url);
  703. if (r == null) return null;
  704. //if (r && typeof r.diff == 'number' && typeof r.hash == 'string' && typeof r.boss == 'string' && typeof r.id == 'string') {
  705. var filter = SRDotDX.c('#DotDX_filters').ele().innerHTML;
  706. r.visited = rVis;
  707. if (!SRDotDX.config.importFiltered || filter.indexOf('fltList_' + r.boss + '_' + (r.diff - 1)) < 0) {
  708. var info = SRDotDX.config.raidList[r.id];
  709. if (typeof info !== 'object') {
  710. info = SRDotDX.config.addRaid(r.hash, r.id, r.boss, r.diff, r.sid, r.visited, user, ts, room);
  711. if (typeof info === 'object') r.isNew = true;
  712. else return null;
  713. }
  714. else r.isNew = false;
  715. r.timeStamp = info.timeStamp;
  716. r.visited = info.visited;
  717. }
  718. r.linkText = function () {
  719. var raidInfo = SRDotDX.raids[r.boss];
  720. var txt = '[&thinsp;' + ['', 'N', 'H', 'L', 'NM'][this.diff] + ' ';
  721. txt += raidInfo ? raidInfo.shortname : r.boss.capitalize().replace(/_/g, ' ');
  722. if (SRDotDX.config.linkShowFs) txt += raidInfo ? ', fs:' + SRDotDX.getTierTxt(raidInfo.health[this.diff - 1], raidInfo.size, false) : '';
  723. if (SRDotDX.config.linkShowAp) txt += raidInfo ? ', ap:' + SRDotDX.getTierTxt(raidInfo.health[this.diff - 1], raidInfo.size, true) : '';
  724. txt += (this.visited || r.visited) ? '|★' : '';
  725. txt += '&thinsp;]';
  726. return txt
  727. };
  728. return r;
  729. },
  730. getRaidLink: function (msg, user) {
  731. msg = msg.replace(/[\r\n]/g, '');
  732. var m = /^((?:(?!<a[ >]).)*)<a.*? href="((?:(?:https?:\/\/)?(?:www\.)?kongregate\.com)?\/games\/5thPlanetGames\/dawn-of-the-dragons(\?[^"]+))".*?<\/a>((?:(?!<\/?a[ >]).)*(?:<a.*? class="reply_link"[> ].*)?)$/i.exec(msg);
  733. if (m) {
  734. var raid = SRDotDX.getRaidDetails(m[3], user);
  735. if (raid) {
  736. raid.ptext = m[1] ? m[1] : "";
  737. raid.url = m[2].replace(/kv_&amp;/ig, '&amp;kv_');
  738. raid.ntext = m[4] ? m[4] : "";
  739. return raid;
  740. }
  741. }
  742. return null
  743. },
  744. getPastebinLink: function (msg, user) {
  745. msg = msg.replace(/[\r\n]/g, '');
  746. var m = /^((?:(?!<a[ >]).)*)?http:\/\/pastebin\.com\/\w{8}((?:(?!<\/?a[ >]).)*(?:<a.*? class="reply_link"[> ].*)?)$/i.exec(msg);
  747. if (m) {
  748. var pb = SRDotDX.getPasteDetails(/http:\/\/pastebin\.com\/\w{8}/i.exec(m[0]) + '', user);
  749. if (typeof pb != 'undefined') {
  750. pb.ptext = m[1] || '';
  751. pb.ntext = m[2] || '';
  752. }
  753. return pb;
  754. }
  755. else return null;
  756. },
  757. getStatText: function (stat) {
  758. stat = stat.toLowerCase();
  759. var r = '';
  760. if (stat == '?' || stat == 'Unknown') return 'Unknown';
  761. if (stat.indexOf('s') > -1) r = 'Stamina';
  762. if (stat.indexOf('h') > -1) r += (r != '' ? (stat.indexOf('e') > -1 ? ', ' : ' and ') : '') + 'Honor';
  763. if (stat.indexOf('e') > -1) r += (r != '' ? ' and ' : '') + 'Energy';
  764. return r;
  765. },
  766. getTimestamp: function () {
  767. var date = new Date();
  768. return '(' + ('0' + (new Date().getHours())).slice(-2) + ':' + ('0' + (new Date().getMinutes())).slice(-2) + ')';
  769. },
  770. refreshRaidTab: function () {
  771. var el_out = document.getElementById('raid_list');
  772. var el_in1 = document.getElementById('mainRaidsFrame');
  773. var el_in2 = document.getElementById('topRaidPane');
  774. el_out.style.height = (el_in1.offsetHeight - el_in2.offsetHeight - 8) + 'px';
  775. },
  776. isFirefox: navigator.userAgent.indexOf('Firefox') > 0,
  777. gui: {
  778. setMessagesCount: function () {
  779. var num = active_user.unreadWhispersCount() + active_user.unreadShoutsCount();
  780. var ele = document.getElementById('profile_control_unread_message_count');
  781. ele.innerHTML = num;
  782. ele.style.display = num == 0 ? 'none' : 'block';
  783. setTimeout(SRDotDX.gui.setMessagesCount, 60000);
  784. },
  785. gotoRoom: function (num) {
  786. var numInt = parseInt(num);
  787. if (isNaN(numInt) || numInt < 1 || numInt > 13) holodeck.chatWindow().activateRoomChooser();
  788. else {
  789. var roomObj = JSON.parse('{"type": "game", "xmpp_name": "138636-dawn-of-the-dragons-' + num + '", "name": "Dawn of the Dragons - Room #' + ('0' + num).slice(-2) + '", "id": "138636-dawn-of-the-dragons-' + num + '"}');
  790. holodeck.joinRoom(roomObj);
  791. }
  792. },
  793. httpCommand: function (url) {
  794. window.open(url);
  795. },
  796. applySidebarUI: function (mode) { //-1:remove, 0:redraw, 1:create, 2:recreate
  797. if(mode == -1 || mode == 2) {
  798. document.getElementById('dotdx_sidebar').remove();
  799. if (mode == -1) SRDotDX.gui.chatResize(SRDotDX.config.chatSize), document.getElementsByClassName("links_connect")[0].setAttribute('colspan', '2');
  800. }
  801. if(mode > -1) {
  802. var sbElemObj, sbElemTxt, i, il;
  803. if(mode > 0) {
  804. if (mode == 1) document.getElementsByClassName("links_connect")[0].setAttribute('colspan', '3');
  805. if (!SRDotDX.config.sbRightSide) document.getElementById('chat_container').style.marginLeft = "0px";
  806. SRDotDX.c('td').set({id: 'dotdx_sidebar', style: 'width: ' + (SRDotDX.config.sbSlim ? '40' : '70') + 'px'})
  807. .html('<div id="dotdx_sidebar_container"' + (SRDotDX.config.sbSlim ? ' class="slim"' : '') + '></div>', true)
  808. .attach('after', SRDotDX.config.sbRightSide ? 'chat_container_cell' : 'gameholder');
  809. SRDotDX.gui.chatResize(SRDotDX.config.chatSize);
  810. }
  811. if(mode == 0) {
  812. sbElemTxt = '[' + document.getElementById('options_sbConfig').value + ']';
  813. sbElemObj = JSON.parse(sbElemTxt);
  814. SRDotDX.config.sbConfig = sbElemObj;
  815. SRDotDX.config.save(false);
  816. }
  817. else sbElemObj = SRDotDX.config.sbConfig;
  818. var slim = SRDotDX.config.sbSlim ? " slim" : "";
  819. var sLen = SRDotDX.config.sbSlim ? 0 : 1;
  820. var stopper = parseInt((document.getElementById('gameholder').offsetHeight - 36) / 26);
  821. var sName = [["Ely","Elyssa"],["Kas","Kasan"]];
  822. var sidebarElemHtml = '<div id="serverButton" class="' + slim + '" onclick="SRDotDX.gui.switchServer()">' + sName[SRDotDX.config.serverMode - 1][sLen] + '</div>', sbCmd = "", sbCls = 'class="';
  823. for(i = 0, il = sbElemObj.length; i < il; ++i) {
  824. if (i == stopper) break;
  825. if (typeof sbElemObj[i] == 'undefined' || sbElemObj[i] == null) {
  826. sidebarElemHtml += '<div></div>'; continue
  827. }
  828. if(sbElemObj[i].type == 'jtxt') {
  829. sidebarElemHtml += '<input id="sbJoinStr" onkeyup="SRDotDX.gui.updateFilterTxt(this.value)" class="dotdx_chat_filter' + slim + '" type="text" value=""><div class="'+slim+'"></div>';
  830. continue
  831. }
  832. if(sbElemObj[i].type == 'label') {
  833. sidebarElemHtml += '<div class="label' + slim + '">';
  834. if (SRDotDX.config.sbSlim) {
  835. if (typeof sbElemObj[i].sname == 'undefined') sidebarElemHtml += sbElemObj[i].name.substring(0, 4);
  836. else sidebarElemHtml += sbElemObj[i].sname;
  837. }
  838. else sidebarElemHtml += sbElemObj[i].name;
  839. sidebarElemHtml += '</div>';
  840. continue;
  841. }
  842. if(typeof sbElemObj[i].cmd != 'undefined') {
  843. if (sbElemObj[i].cmd.charAt(0) == '/') sbCmd = 'SRDotDX.gui.chatCommand(\'' + sbElemObj[i].cmd + '\')';
  844. else if (sbElemObj[i].cmd.indexOf('://') > 2) sbCmd = 'SRDotDX.gui.httpCommand(\'' + sbElemObj[i].cmd + '\')';
  845. else sbCmd = sbElemObj[i].cmd.replace("'", "\'");
  846. }
  847. if(typeof sbElemObj[i].color != 'undefined') {
  848. if (sbElemObj[i].color.charAt(0).toLowerCase() == 'b' && sbElemObj[i].color.toLowerCase() != 'black') sbCls += 'b';
  849. else if (sbElemObj[i].color.charAt(0).toLowerCase() == 'g') sbCls += 'g';
  850. else if (sbElemObj[i].color.charAt(0).toLowerCase() == 'r') sbCls += 'r';
  851. else if (sbElemObj[i].color.charAt(0).toLowerCase() == 'y') sbCls += 'y';
  852. }
  853. sidebarElemHtml += '<button ' + sbCls + slim + '" ' + 'onclick="' + sbCmd + '">';
  854. if(typeof sbElemObj[i].name == 'undefined') {
  855. if (SRDotDX.config.sbSlim) sidebarElemHtml += 'Btn' + (i + 1);
  856. else sidebarElemHtml += 'Button ' + (i + 1);
  857. }
  858. else {
  859. if (SRDotDX.config.sbSlim)
  860. if (typeof sbElemObj[i].sname == 'undefined') sidebarElemHtml += sbElemObj[i].name.substring(0, 4);
  861. else sidebarElemHtml += sbElemObj[i].sname;
  862. else sidebarElemHtml += sbElemObj[i].name
  863. }
  864. sidebarElemHtml += '</button>';
  865. sbCmd = "";
  866. sbCls = 'class="';
  867. }
  868. SRDotDX.c('#dotdx_sidebar_container').html(sidebarElemHtml, true);
  869. }
  870. },
  871. toggleSlimSB: function () {
  872. if (SRDotDX.config.sbEnable) {
  873. this.applySidebarUI(2);
  874. this.chatResize();
  875. }
  876. },
  877. restoreDefaultSB: function () {
  878. document.getElementById('options_sbConfig').value = '{"type":"label","name":"Camps"},\n\
  879. {"type":"btn","name":"GoC","cmd":"/camp goc"},\n\
  880. {"type":"btn","name":"MaM","cmd":"/camp mam"},\n\
  881. {"type":"btn","name":"GD","cmd":"/camp gd"},\n\
  882. {"type":"label","name":"Tiers"},\n\
  883. {"type":"btn","name":"Bella","cmd":"/raid bella"},\n\
  884. {"type":"btn","name":"Xerk","cmd":"/raid xerkara"},\n\
  885. {"type":"btn","name":"Tisi","cmd":"/raid tisi"},\n\
  886. {"type":"label","name":"Join"},\n\
  887. {"type":"btn","name":"Farms","cmd":"SRDotDX.gui.quickImportAndJoin(\'farm:nnm\')"},\n\
  888. {"type":"label","name":"Utils"},\n\
  889. {"type":"btn","color":"g","name":"(Re)Load","sname":"Reld","cmd":"SRDotDX.reload()"},\n\
  890. {"type":"btn","color":"r","name":"Unload","sname":"Kill","cmd":"/kill"},\n\
  891. {"type":"btn","name":"Room 1","sname":"CR1","cmd":"SRDotDX.gui.gotoRoom(1)"},\n\
  892. {"type":"btn","name":"Room 2","sname":"CR2","cmd":"SRDotDX.gui.gotoRoom(2)"},\n\
  893. {"type":"btn","name":"Room 8","sname":"CR8","cmd":"SRDotDX.gui.gotoRoom(8)"},\n\
  894. {"type":"label","name":"Sheets","sname":"Help"},\n\
  895. {"type":"btn","name":"Magic","sname":"Mag","cmd":"https://docs.google.com/spreadsheets/d/1O0eVSnzlACP9XJDq0VN4kN51ESUusec3-gD4dKPHRNU"},\n\
  896. {"type":"btn","name":"Mount","sname":"Mnt","cmd":"https://docs.google.com/spreadsheet/ccc?key=0AiSpM5yAo8atdER2NEhHY3VjckRhdWctWV8yampQZUE"},\n\
  897. {"type":"btn","name":"Gear","cmd":"https://docs.google.com/spreadsheet/lv?key=0AvP2qXrWcHBxdHpXZkUzTHNGNkVWbjE5c2VEZUNNMUE"},\n\
  898. {"type":"label","name":"Raids"},\n\
  899. {"type":"jtxt"},\n\
  900. {"type":"btn","color":"g","name":"Join","cmd":"SRDotDX.gui.joinSelectedRaids(true)"},\n\
  901. {"type":"btn","color":"b","name":"Import","sname":"Imp","cmd":"SRDotDX.gui.importFromServer()"},\n\
  902. {"type":"btn","color":"y","name":"RaidBot","sname":"Bot","cmd":"SRDotDX.gui.switchBot()"}';
  903. SRDotDX.gui.applySidebarUI(0);
  904. },
  905. hideWC: function (init) {
  906. var offset;
  907. if(init) offset = SRDotDX.config.hideWChat ? -265 : 0;
  908. else {
  909. offset = SRDotDX.config.hideWChat ? 265 : -265;
  910. SRDotDX.config.hideWChat = !SRDotDX.config.hideWChat;
  911. document.getElementById('hideWCtxt').innerHTML = SRDotDX.config.hideWChat ? 'Show World Chat' : 'Hide World Chat';
  912. SRDotDX.config.extSave();
  913. }
  914. var gmWidth = document.getElementById('gameholder').offsetWidth + offset;
  915. document.getElementById('gameholder').style.width = gmWidth + "px";
  916. document.getElementById('game').style.width = gmWidth + "px";
  917. this.chatResize();
  918. },
  919. removeWC: function(rly) {
  920. if(rly) {
  921. SRDotDX.config.removeWChat = true;
  922. var li = SRDotDX.c('#wcbutton').ele();
  923. li.parentNode.removeChild(li);
  924. if(!SRDotDX.config.hideWChat) {
  925. SRDotDX.config.hideWChat = true;
  926. this.hideWC(true);
  927. }
  928. SRDotDX.config.extSave();
  929. }
  930. else {
  931. SRDotDX.config.removeWChat = false;
  932. SRDotDX.c('li').set({id: 'wcbutton', class: 'rate'}).html('<a id="hideWCtxt" class="spritegame" href="http://www.kongregate.com/games/5thPlanetGames/dawn-of-the-dragons" onclick="SRDotDX.gui.hideWC(false); return false;">' + (SRDotDX.config.hideWChat ? 'Show World Chat' : 'Hide World Chat') + '</a>', false).attach('after', 'quicklinks_play_later_block');
  933. SRDotDX.config.extSave();
  934. setTimeout(activateGame,1000);
  935. }
  936. },
  937. chatResize: function (chatSize) {
  938. var size = chatSize || SRDotDX.config.chatSize;
  939. SRDotDX.config.chatSize = size;
  940. var gmWidth = document.getElementById('gameholder').offsetWidth;
  941. var gmHeight = document.getElementById('gameholder').offsetHeight;
  942. var sbWidth = SRDotDX.config.sbEnable ? (SRDotDX.config.sbSlim ? 40 : 70) : 0;
  943. var hScroll = SRDotDX.config.hideScrollBar ? SRDotDX.gui.getScrollbarWidth() : 0;
  944. var chatWidthInc = size - 300;
  945. var chatCorr = chatWidthInc / 75 * 2;
  946. var overallWidth = (292 + gmWidth + sbWidth + chatWidthInc) + "px";
  947. document.getElementById('maingame').style.width = overallWidth;
  948. document.getElementById('maingamecontent').style.width = overallWidth;
  949. document.getElementById('flashframecontent').style.width = overallWidth;
  950. document.getElementById('chat_container').style.width = size + "px";
  951. document.getElementById('raid_list').style.width = 282 + hScroll + "px";
  952. document.getElementById('raid_list').style.overflowY = hScroll ? 'scroll' : 'auto';
  953. document.getElementById('chat_tab_pane').style.width = (size - 16) + "px";
  954. document.getElementById('DotDX_chatResizeElems').innerHTML = '#kong_game_ui textarea.chat_input { width: ' + (size - 30) + 'px !important; }\
  955. #kong_game_ui div#chat_raids_overlay { width: ' + (size - 8) + 'px }\
  956. #kong_game_ui div#chat_raids_overlay > span { width: ' + (size - 18 - chatCorr) + 'px }\
  957. #kong_game_ui div.chat_message_window { height: ' + (gmHeight - 254) + 'px !important; width: ' + (size - 18 + hScroll) + 'px; overflow-y: ' + (hScroll ? 'scroll' : 'auto') + '; }\
  958. #kong_game_ui div#chat_rooms_container div.chat_tabpane.users_in_room { width: ' + (size - 22 + hScroll) + 'px }\
  959. div#dotdx_sidebar_container { height: ' + (gmHeight - 5) + 'px; ' + (SRDotDX.config.sbRightSide ? "text-align: left; padding-left: 1px; padding-right: 6px;" : "text-align: left; margin-left: 2px; padding-left: 6px") + ' }';
  960. },
  961. helpBox: function(boxId, magId, raidId, mouseOut) {
  962. var boxDiv = document.getElementById(boxId);
  963. var magSpan = document.getElementById(magId);
  964. var i, il;
  965. if(mouseOut) {
  966. SRDotDX.gui.CurrentRaidsOutputTimer = setTimeout(function(){document.getElementById('chat_raids_overlay').className = "";}, 1500);
  967. if(magSpan) {
  968. magSpan.style.maxWidth = "0";
  969. setTimeout(function(){ document.getElementById(magId).innerHTML = "" }, 100);
  970. }
  971. }
  972. else {
  973. var info = SRDotDX.config.raidList[raidId], msg = 'Unknown', mWidth = "0", raid;
  974. if (typeof info !== 'object') msg = 'Raid not in db (removed?)';
  975. else if (typeof SRDotDX.raids[info.boss] == 'undefined') {
  976. msg = '<span style="font-size: 12px;">' + info.boss.capitalize().replace(/_/ig, ' ') + ' on ' + ['Normal', 'Hard', 'Legendary', 'Nightmare'][info.diff - 1] + '</span>';
  977. }
  978. else {
  979. var magE = info.magic.reduce(function(a,b){return a+b;});
  980. raid = SRDotDX.raids[info.boss];
  981. var diff = info.diff - 1;
  982. if (magE) {
  983. var magI = "";
  984. for (i = 0, il = raid.nd; i < il; ++i) magI += '<span class="magic" style="background-position: -' + info.magic[i] * 16 + 'px 0">&nbsp;</span>';
  985. magSpan.innerHTML = magI;
  986. mWidth = (raid.nd * 18 + 10) + "px";
  987. }
  988. msg = '<span style="font-size: 12px;">' + raid.name + ' on ' + ['Normal', 'Hard', 'Legendary', 'Nightmare'][diff] + '</span><br>';
  989. msg += (raid.type === '' ? '' : raid.type + ' | ') + SRDotDX.raidSizes[raid.size].name + ' Raid' + (diff == 3 ? ' | AP' : '');
  990. var size = raid.size < 15 ? 10 : raid.size;
  991. var fs = raid.health[diff] / (raid.size == 101 ? 100 : raid.size);
  992. if (typeof raid.lt !== 'object') {
  993. var epicRatio = SRDotDX.raidSizes[size].ratios;
  994. if (size === 15) msg += '<br>fs:&thinsp;' + SRDotDX.util.getShortNum(fs) + ' | 65d:&thinsp;' + SRDotDX.util.getShortNum(fs * epicRatio[0]) + ' | 338d:&thinsp;' + SRDotDX.util.getShortNum(fs * epicRatio[9]) + ' | 375d:&thinsp;' + SRDotDX.util.getShortNum(fs * epicRatio[10]);
  995. else msg += '<br>fs: ' + SRDotDX.util.getShortNum(fs) + ' | 1e: ' + SRDotDX.util.getShortNum(fs * epicRatio[0]) + ' | 2e: ' + SRDotDX.util.getShortNum(fs * epicRatio[2]) + ' | 2/3e: ' + SRDotDX.util.getShortNum(fs * epicRatio[3]);
  996. //msg += '<br>2e: ' + epicRatio[2] + ' | 3e: ' + epicRatio[4] + ' | fs: ' + fs;
  997. }
  998. else if (typeof raid.lt === 'object') {
  999. if(raid.lt[0] !== 'u') {
  1000. var ele = SRDotDX.lootTiers[raid.lt[diff]];
  1001. var step = SRDotDX.config.chatSize === 450 ? 6 : (SRDotDX.config.chatSize === 375 ? 5 : 4);
  1002. var steplow = step - 1;
  1003. var tiers = ele['tiers'];
  1004. var epics = ele['epics'];
  1005. var best = ele['best'];
  1006. var e = ele['e'] ? 'E' : '';
  1007. var text = '</table>';
  1008. var tier;
  1009. for(i = tiers.length-1, il = -1; i > il; --i) {
  1010. tier = (i % step == steplow ? '</td></tr><tr><td>' : '</td><td>' ) + epics[i]+ e + ':</td><td ' + (i === best ? 'class="best"' : '') + '>' + SRDotDX.util.getShortNumMil(tiers[i]);
  1011. text = tier + text;
  1012. }
  1013. msg += '<table><tr><td>FS:</td><td>' + SRDotDX.util.getShortNum(fs) + text;
  1014. }
  1015. else msg += '<br>FS: &nbsp;&nbsp;&thinsp;' + SRDotDX.util.getShortNum(fs) + ' | Tiers not yet known.';
  1016. }
  1017. else {
  1018. }
  1019. }
  1020. if(magE) magSpan.style.maxWidth = mWidth;
  1021. document.getElementById(boxId + '_text').innerHTML = msg;
  1022. if(!(boxDiv.className.indexOf('active') > 0)) boxDiv.className = "active";
  1023. clearTimeout(SRDotDX.gui.CurrentRaidsOutputTimer);
  1024. }
  1025. },
  1026. displayHint: function (hint) {
  1027. var helpEl = document.getElementById('helpBox');
  1028. if(hint) {
  1029. helpEl.children[0].innerHTML = hint;
  1030. helpEl.style.maxHeight = '50px';
  1031. helpEl.style.borderTopWidth = '1px';
  1032. }
  1033. else {
  1034. helpEl.style.maxHeight = '0';
  1035. helpEl.style.borderTopWidth = '0';
  1036. }
  1037. },
  1038. refreshRaidList: function () {
  1039. document.getElementById('raid_list').innerHTML = "";
  1040. for(var i = 0, il = SRDotDX.gui.joinRaidList.length; i < il; ++i) SRDotDX.gui.addRaid(SRDotDX.gui.joinRaidList[i]);
  1041. },
  1042. diffTxt: [['DotDX_U','U'],['DotDX_N','N'],['DotDX_H','H'],['DotDX_L','L'],['DotDX_NM','NM']],
  1043. addRaid: function (id) {
  1044. var r = typeof id === 'string' || typeof id === 'number' ? SRDotDX.config.raidList[id] : id;
  1045. var a = document.getElementById('raid_list');
  1046. if (r.boss) {
  1047. if (a !== null) {
  1048. var rd = typeof SRDotDX.raids[r.boss] != 'object' ? {shortname: r.boss.capitalize().replace(/_/ig, ' '), duration: 24} : SRDotDX.raids[r.boss];
  1049. var url = 'http://www.kongregate.com/games/5thPlanetGames/dawn-of-the-dragons?kv_action_type=raidhelp&kv_difficulty=' + r.diff + '&kv_hash=' + r.hash + '&kv_raid_boss=' + r.boss + '&kv_raid_id=' + r.id + '&kv_serverid=' + r.sid;
  1050. var hpr = (r.hp * 100).toPrecision(3), fCls = "";
  1051. var tlp = ((r.expTime - parseInt(new Date().getTime()/1000)) / (36 * rd.duration)).toPrecision(3);
  1052. var delta = hpr - tlp;
  1053. if (delta > 0) {
  1054. if (delta < 15) fCls = " failings";
  1055. else if (delta < 30) fCls = " failingm";
  1056. else fCls = " failingh";
  1057. }
  1058. var lii = SRDotDX.c('div').set({
  1059. class: 'raid_list_item ' + this.diffTxt[r.diff][0] + (r.visited ? ' DotDX_visitedRaidList' : ''),// + (r.nuked ? ' DotDX_nukedRaidList' : ''),
  1060. id: 'DotDX_' + r.id,
  1061. raidid: r.id
  1062. }).html(' \
  1063. <span class="DotDX_List_diff ' + this.diffTxt[r.diff][0] + '">' + this.diffTxt[r.diff][1] + '</span> \
  1064. <a class="DotDX_RaidLink" href="' + url + '">' + rd.shortname + '</a> \
  1065. <span class="DotDX_RaidListVisited">' + (r.visited ? '&#9733;' : '') + (r.fs === 0 ? ' !' : '') + '</span> \
  1066. <a class="dotdxRaidListDelete" href="#">DEL</a>\
  1067. <span class="DotDX_extInfo' + fCls + '">hp/time: ' + hpr + '% / ' + tlp + '%</span>\
  1068. ', true);
  1069. lii.attach('to', a);
  1070. }
  1071. }
  1072. else SRDotDX.gui.deleteRaidFromDB(id);
  1073. },
  1074. toggleRaidListDesc: function (el, mode) {
  1075. if(mode) {
  1076. clearTimeout(el.timerout);
  1077. el.timerin = setTimeout(function(){el.lastElementChild.style.display = "block";}, 500)
  1078. }
  1079. else {
  1080. clearTimeout(el.timerin);
  1081. el.timerout = setTimeout(function (){el.lastElementChild.style.display = "none";}, 50)
  1082. }
  1083. return false;
  1084. },
  1085. errorMessage: function (s, tag) {
  1086. tag = typeof tag === 'undefined' ? 'b' : tag;
  1087. SRDotDX.gui.doStatusOutput('<' + tag + '>' + s + '</' + tag + '>')
  1088. },
  1089. updateMessage: function () { SRDotDX.gui.doStatusOutput(SRDotDX.gui.standardMessage(), false, true) },
  1090. postingMessage: function (i, ct) { SRDotDX.gui.doStatusOutput('Posting message ' + i + (typeof ct == 'undefined' ? '' : ' of ' + ct + '...'), false) },
  1091. standardMessage: function () { return Object.keys(SRDotDX.config.raidList).length + ' raids in db, ' + SRDotDX.gui.joinRaidList.length + ' selected to join'; },
  1092. CurrentStatusOutputTimer: 0,
  1093. doStatusOutput: function (str, msecs, showInChat) {
  1094. showInChat = showInChat === undefined ? true : showInChat;
  1095. msecs = msecs || 4000;
  1096. var rel = document.getElementById('StatusOutput');
  1097. var cel = document.getElementById('dotdx_chat_overlay');
  1098. if(rel !== null) rel.innerHTML = str;
  1099. if(showInChat && cel !== null) cel.innerHTML = str;
  1100. if(msecs) {
  1101. if (SRDotDX.gui.CurrentStatusOutputTimer) clearTimeout(SRDotDX.gui.CurrentStatusOutputTimer);
  1102. SRDotDX.gui.CurrentStatusOutputTimer = setTimeout(function () {
  1103. var rel = document.getElementById('StatusOutput');
  1104. var cel = document.getElementById('dotdx_chat_overlay');
  1105. if(rel !== null) rel.innerHTML = SRDotDX.gui.standardMessage();
  1106. if(cel !== null) cel.innerHTML = SRDotDX.gui.standardMessage();
  1107. }, msecs);
  1108. }
  1109. },
  1110. toggleDisplay: function (elem, sender, el2) {
  1111. if (typeof elem == 'undefined') return;
  1112. var el = document.getElementById(elem);
  1113. var alls = document.getElementsByName(sender.getAttribute('name'));
  1114. if (alls.length > 0) {
  1115. for (var i = 0; i < alls.length; i++) {
  1116. if (alls[i].nodeName == 'P') alls[i].getElementsByTagName('span')[0].innerHTML = '+';
  1117. else alls[i].style.display = 'none';
  1118. }
  1119. el.style.display = 'block';
  1120. sender.getElementsByTagName('span')[0].innerHTML = '&minus;';
  1121. }
  1122. else {
  1123. if (el.style.display == 'none') {
  1124. el.style.display = 'block';
  1125. sender.getElementsByTagName('span')[0].innerHTML = '&minus;';
  1126. }
  1127. else {
  1128. el.style.display = 'none';
  1129. sender.getElementsByTagName('span')[0].innerHTML = '+';
  1130. }
  1131. }
  1132. if (typeof el2 == 'string') {
  1133. switch (el2) {
  1134. case 'raid_list': SRDotDX.refreshRaidTab(); break;
  1135. case 'share_list': document.getElementById('DotDX_raidsToSpam').style.height = ( 526 - document.getElementById('FPXShare').offsetHeight - document.getElementById('FPXImport').offsetHeight ) + "px";
  1136. }
  1137. }
  1138. },
  1139. Importing: false,
  1140. deleteRaid: function(ele) {
  1141. var id = ele.getAttribute('raidid');
  1142. SRDotDX.gui.deleteRaidFromDB(id);
  1143. if(!SRDotDX.gui.joining) SRDotDX.gui.refreshRaidList();
  1144. },
  1145. deleteRaidFromDB: function(id) {
  1146. var chat = document.getElementsByClassName('chat_message_window'), p, pe, i;
  1147. for(var c = 0, ci = chat.length; c < ci; ++c) {
  1148. p = chat[c].getElementsByClassName('DotDX_raid'); i = 0;
  1149. while(pe = p[i++]) if(pe.className.indexOf("DotDX_raidId_" + id) > -1) pe.parentNode.removeChild(pe);
  1150. }
  1151. if(SRDotDX.config.raidList[id]) delete SRDotDX.config.raidList[id];
  1152. },
  1153. FPXdeleteAllRaids: function() {
  1154. if (!SRDotDX.config.confirmDeletes || confirm('This will delete all ' + SRDotDX.config.raidList.length + ' raids stored. Continue? \n (This message can be disabled on the options tab.)')) {
  1155. for(var id in SRDotDX.config.raidList) if(SRDotDX.config.raidList[id]) delete SRDotDX.config.raidList[id];
  1156. var raidlistDIV = document.getElementById('raid_list');
  1157. while (raidlistDIV.hasChildNodes()) raidlistDIV.removeChild(raidlistDIV.lastChild);
  1158. localStorage.removeItem('raidList');
  1159. SRDotDX.gui.updateMessage();
  1160. console.log('[SRDotDX] Delete all raids finished.');
  1161. }
  1162. },
  1163. chatCommand: function (text) {
  1164. var elems = document.getElementsByClassName('chat_input');
  1165. var txt = [], i = elems.length;
  1166. while (i--) { txt[i] = elems[i].value; elems[i].value = text; }
  1167. holodeck.activeDialogue().sendInput();
  1168. i = txt.length;
  1169. while (i--) elems[i].value = txt[i];
  1170. },
  1171. FPXdoWork: function (param1, whisper) {
  1172. var elems = document.getElementsByClassName('chat_input');
  1173. if (whisper && whisper != '') param1 = '/w ' + whisper + ' ' + param1;
  1174. var txt = [], i = elems.length;
  1175. while (i--) { txt[i] = elems[i].value; elems[i].value = param1; }
  1176. holodeck.activeDialogue().sendInput();
  1177. i = txt.length;
  1178. while (i--) elems[i].value = txt[i];
  1179. },
  1180. FPXformatRaidOutput: function (url) {
  1181. var pre = ''; //user && room ? '['+room+'|'+user+'] ' : '';
  1182. if (!SRDotDX.config.formatLinkOutput) return pre + url;
  1183. var r = SRDotDX.getRaidDetailsBase(url);
  1184. return pre + r.shortname + ' ' + r.diffShortText + ' ' + url;
  1185. },
  1186. isPosting: false,
  1187. FPXTimerArray: [],
  1188. FPXStopPosting: function () {
  1189. SRDotDX.gui.endSpammingRaids();
  1190. console.log('[DotDX] Spamming raids to chat... [cancelled]');
  1191. SRDotDX.util.extEcho('Raid posting cancelled');
  1192. },
  1193. endSpammingRaids: function () {
  1194. for(var i = 0, il = SRDotDX.gui.FPXTimerArray.length; i < il; ++i) clearTimeout(SRDotDX.gui.FPXTimerArray[i]);
  1195. SRDotDX.gui.isPosting = false;
  1196. document.getElementById('PostRaidsButton').value = 'Post';
  1197. document.getElementById('dotdx_share_post_button').value = 'Post Links to Chat';
  1198. document.getElementById('dotdx_share_post_button').value = 'Friend Share links';
  1199. SRDotDX.gui.doStatusOutput('Posting raids finished');
  1200. SRDotDX.gui.FPXTimerArray = [];
  1201. SRDotDX.config.save(false);
  1202. },
  1203. prepareSpammingRaids: function () {
  1204. SRDotDX.gui.isPosting = true;
  1205. document.getElementById('PostRaidsButton').value = 'Cancel';
  1206. document.getElementById('dotdx_share_post_button').value = 'Cancel';
  1207. document.getElementById('dotdx_friend_post_button').value = 'Cancel';
  1208. SRDotDX.gui.doStatusOutput('Posting raids started', false);
  1209. },
  1210. spamRaidsToFriends: function () {
  1211. SRDotDX.gui.prepareSpammingRaids();
  1212. var userList = [[],[],[],[],[]], keys = Object.keys(SRDotDX.config.friendUsers);
  1213. for(var k = 0, kl = keys.length; k < kl; ++k) for(var i = 0; i < 5; ++i) if(SRDotDX.config.friendUsers[keys[k]][i]) userList[i].push(keys[k]);
  1214. console.log('[DotDX] Spamming raids to friends... [started]');
  1215. var linkList = document.getElementById('DotDX_raidsToSpam').value;
  1216. if(linkList.length > 100) {
  1217. document.getElementById('DotDX_raidsToSpam').value = '';
  1218. var patt = new RegExp('http...www.kongregate.com.games.5thPlanetGames.dawn.of.the.dragons.[\\w\\s\\d_=&]+[^,]', 'ig');
  1219. var link, ct = 0, sel = 4, r, rs;
  1220. i = 0;
  1221. var timer = 500, ttw = 3050;
  1222. while ((link = patt.exec(linkList)) && SRDotDX.gui.isPosting) {
  1223. link = typeof link !== "string" ? link[0] : link;
  1224. r = SRDotDX.util.getRaidFromUrl(link);
  1225. rs = SRDotDX.raids[r.boss].size;
  1226. if (r.boss === 'serpina') sel = 0;
  1227. else if (rs < 26) sel = 1;
  1228. else if (rs === 50) sel = 2;
  1229. else if (rs === 100) sel = 3;
  1230. if(userList[sel].length > 0) {
  1231. for(var u = 0, ul = userList[sel].length; u < ul; ++u) {
  1232. (function (p1, p2) {
  1233. return SRDotDX.gui.FPXTimerArray[i] = setTimeout(function () {
  1234. if (!SRDotDX.gui.isPosting) return;
  1235. SRDotDX.gui.FPXdoWork(SRDotDX.gui.FPXformatRaidOutput(p1), p2);
  1236. ++ct;
  1237. SRDotDX.gui.postingMessage(ct, i);
  1238. }, timer);
  1239. })(link, userList[sel][u]);
  1240. timer += ttw;
  1241. i++;
  1242. }
  1243. }
  1244. }
  1245. }
  1246. SRDotDX.gui.FPXTimerArray[SRDotDX.gui.FPXTimerArray.length] = setTimeout(function () {
  1247. SRDotDX.gui.endSpammingRaids();
  1248. console.log('[DotDX] Spamming raids to friends... [stopped]');
  1249. }, timer);
  1250. },
  1251. FPXspamRaids: function () {
  1252. SRDotDX.gui.prepareSpammingRaids();
  1253. console.log('[DotDX] Spamming raids to chat... [started]');
  1254. var linkList = document.getElementById('DotDX_raidsToSpam').value;
  1255. if (linkList.length > 100) {
  1256. document.getElementById('DotDX_raidsToSpam').value = '';
  1257. var patt = new RegExp('http...www.kongregate.com.games.5thPlanetGames.dawn.of.the.dragons.[\\w\\s\\d_=&]+[^,]', 'ig');
  1258. var link, ct = 0, i = 0;
  1259. var timer = 500, ttw = 3050;
  1260. var total = linkList.split(patt).length - 1;
  1261. while ((link = patt.exec(linkList)) && SRDotDX.gui.isPosting) {
  1262. (function (p1) {
  1263. return SRDotDX.gui.FPXTimerArray[i] = setTimeout(function () {
  1264. if (!SRDotDX.gui.isPosting) return;
  1265. SRDotDX.gui.FPXdoWork(SRDotDX.gui.FPXformatRaidOutput(p1), SRDotDX.config.whisperTo);
  1266. ++ct;
  1267. SRDotDX.gui.postingMessage(ct, total);
  1268. }, timer);
  1269. })(link);
  1270. timer += ttw;
  1271. i++;
  1272. }
  1273. }
  1274. SRDotDX.gui.FPXTimerArray[SRDotDX.gui.FPXTimerArray.length] = setTimeout(function() {
  1275. SRDotDX.gui.endSpammingRaids();
  1276. console.log('[DotDX] Spamming raids to chat... [stopped]');
  1277. }, timer);
  1278. },
  1279. quickImportAndJoin: function(joinStr, imp) {
  1280. SRDotDX.gui.updateFilterTxt(joinStr, false, true);
  1281. SRDotDX.request.quickBtnLock = false;
  1282. if(imp) {
  1283. SRDotDX.request.joinAfterImport = true;
  1284. SRDotDX.gui.importFromServer();
  1285. }
  1286. else SRDotDX.gui.joinSelectedRaids();
  1287. },
  1288. importFromServer: function () {
  1289. var h = Math.ceil(((new Date).getTime() - SRDotDX.config.lastImported) / 3600000);
  1290. SRDotDX.util.extEcho('Importing raids from server');
  1291. SRDotDX.request.raids(false, h);
  1292. },
  1293. sortRaids: function () {
  1294. var raidArray = [], i, sortFunc;
  1295. var selectedSort = document.getElementById('FPXRaidSortSelection').value;
  1296. var selectedDir = document.getElementById('FPXRaidSortDirection').value;
  1297. var raidlistDIV = document.getElementById('raid_list');
  1298. var raidList = raidlistDIV.childNodes;
  1299. console.log('[SRDotDX] Sorting started ' + selectedSort + ' : ' + selectedDir);
  1300. i = raidList.length;
  1301. while (i--) raidArray.push(SRDotDX.config.raidList[raidList[i].getAttribute('raidid')]);
  1302. switch (selectedSort) {
  1303. case 'Id':
  1304. if (selectedDir == 'asc') sortFunc = function (a, b) {
  1305. if (!(typeof a.id === 'undefined' || typeof b.id === 'undefined') && a.id > b.id) return -1;
  1306. return 1;
  1307. };
  1308. else sortFunc = function (a, b) {
  1309. if (!(typeof a.id === 'undefined' || typeof b.id === 'undefined') && a.id < b.id) return -1;
  1310. return 1;
  1311. };
  1312. break;
  1313. case 'Time':
  1314. if (selectedDir == 'asc') sortFunc = function (a, b) {
  1315. if (!(typeof a.timeStamp === 'undefined' || typeof b.timeStamp === 'undefined') && a.timeStamp > b.timeStamp) return -1;
  1316. return 1;
  1317. };
  1318. else sortFunc = function (a, b) {
  1319. if (!(typeof a.timeStamp === 'undefined' || typeof b.timeStamp === 'undefined') && a.timeStamp < b.timeStamp) return -1;
  1320. return 1;
  1321. };
  1322. break;
  1323. case 'Name':
  1324. if (selectedDir == 'asc') sortFunc = function (a, b) {
  1325. a = SRDotDX.raids[a.boss];
  1326. b = SRDotDX.raids[b.boss];
  1327. //console.log(a + ' : ' + b + ' : ' + (typeof a === 'undefined') + ' : ' + (typeof b === 'undefined'));
  1328. if (!(typeof a === 'undefined' || typeof b === 'undefined') && a.name > b.name) return -1;
  1329. return 1;
  1330. };
  1331. else sortFunc = function (a, b) {
  1332. a = SRDotDX.raids[a.boss];
  1333. b = SRDotDX.raids[b.boss];
  1334. if (!(typeof a === 'undefined' || typeof b === 'undefined') && a.name < b.name) return -1;
  1335. return 1;
  1336. };
  1337. break;
  1338. case 'Diff':
  1339. if (selectedDir == 'asc') sortFunc = function (a, b) {
  1340. if (a.diff > b.diff) return -1;
  1341. return 1
  1342. };
  1343. else sortFunc = function (a, b) {
  1344. if (a.diff < b.diff) return -1;
  1345. return 1
  1346. };
  1347. break;
  1348. }
  1349. try {
  1350. raidArray.sort(sortFunc)
  1351. }
  1352. catch (e) {
  1353. console.log('[SRDotDX] Sorting error: ' + e);
  1354. return
  1355. }
  1356. raidlistDIV = document.getElementById('raid_list');
  1357. if(raidlistDIV !== null) while(raidlistDIV.hasChildNodes()) raidlistDIV.removeChild(raidlistDIV.lastChild);
  1358. i = raidArray.length;
  1359. while (i--) SRDotDX.gui.addRaid(raidArray[i]);
  1360. //SRDotDX.gui.FPXFilterRaidListByName();
  1361. console.log('[SRDotDX] Sorting finished');
  1362. },
  1363. joinRaidList: [],
  1364. postRaidList: [],
  1365. updateFilterTimeout: 0,
  1366. filterSearchStringC: "",
  1367. filterSearchStringR: "",
  1368. updateFilterContext: true,
  1369. includeDiff: function(str, dv) {
  1370. var diff = isNaN(parseInt(dv)) ? ({'n': 1, 'h': 2, 'l': 3, 'nm': 4, 'nnm': 0})[dv] || 5 : parseInt(dv);
  1371. var out = "";
  1372. var string = str.toString();
  1373. switch(diff) {
  1374. case 0: out = string.replace(/,|$/g, '_1,') + string.replace(/,|$/g, '_4,'); break;
  1375. case 1: case 2: case 3: case 4: out = string.replace(/,|$/g, '_' + diff + ','); break;
  1376. default: for(var i = 1; i < 5; ++i) out += string.replace(/,|$/g, '_' + i + ','); break;
  1377. }
  1378. return out.slice(0, -1);
  1379. },
  1380. updateFilterTxt: function(txt, fromRT, quick) {
  1381. clearTimeout(this.updateFilterTimeout);
  1382. var foundRaids = [], field, rf, i, il;
  1383. if(txt !== "") {
  1384. var searchArray = txt.split(/\s?\|\s?|\sor\s|\s?,\s?/ig);
  1385. var keys = Object.keys(SRDotDX.raids);
  1386. for(i = 0, il = searchArray.length; i < il; ++i) {
  1387. field = searchArray[i].toLowerCase().split(':');
  1388. if (field[0] !== "") {
  1389. if(typeof SRDotDX.searchPatterns[field[0]] !== 'undefined') foundRaids.push(this.includeDiff(SRDotDX.searchPatterns[field[0]], field[1]));
  1390. else if(typeof SRDotDX.raids[field[0]] !== 'undefined') foundRaids.push(this.includeDiff(field[0], field[1]));
  1391. else {
  1392. for(var k = 0, kl = keys.length; k < kl; ++k) {
  1393. rf = (SRDotDX.raids[keys[k]].name + ':' + SRDotDX.raids[keys[k]].shortname + ':' + SRDotDX.raids[keys[k]].type).toLowerCase();
  1394. if (rf.indexOf(field[0]) >= 0) foundRaids.push(this.includeDiff(keys[k], field[1]));
  1395. }
  1396. }
  1397. }
  1398. }
  1399. }
  1400. var finalSearchString = foundRaids.length === 0 ? "" : "," + foundRaids.toString() + ",";
  1401. if(fromRT) {
  1402. SRDotDX.config.lastFilter[SRDotDX.config.serverMode - 1] = txt;
  1403. SRDotDX.config.filterSearchStringR = finalSearchString;
  1404. }
  1405. else if(quick) SRDotDX.request.filterSearchStringT = finalSearchString;
  1406. else {
  1407. var filterInputs = document.getElementsByClassName('dotdx_chat_filter');
  1408. for (i = 0, il = filterInputs.length; i < il; ++i) if(filterInputs[i].value !== txt) filterInputs[i].value = txt;
  1409. SRDotDX.config.chatFilterString = txt;
  1410. SRDotDX.config.filterSearchStringC = finalSearchString;
  1411. }
  1412. if(quick) {
  1413. SRDotDX.gui.selectRaidsToJoin('quick');
  1414. SRDotDX.config.save(false)
  1415. }
  1416. else this.updateFilterTimeout = setTimeout(function(){SRDotDX.gui.selectRaidsToJoin();SRDotDX.config.save(false)}, 300);
  1417. },
  1418. selectRaidsToJoin: function(from) {
  1419. if(SRDotDX.request.quickBtnLock) {
  1420. if(!SRDotDX.gui.joining) SRDotDX.gui.joinRaidList.length = 0;
  1421. SRDotDX.gui.updateFilterContext = document.getElementById('chat_tab').firstChild.className === 'active';
  1422. var searchString = from && from === 'quick' ? SRDotDX.request.filterSearchStringT : (SRDotDX.gui.updateFilterContext && SRDotDX.config.chatFilterString !== "" ? SRDotDX.config.filterSearchStringC : SRDotDX.config.filterSearchStringR);
  1423. var r, filter = SRDotDX.c('#DotDX_filters').ele().innerHTML, server = SRDotDX.config.serverMode, keys = Object.keys(SRDotDX.config.raidList);
  1424. for(var k = 0, kl = keys.length; k < kl; ++k) {
  1425. r = SRDotDX.config.raidList[keys[k]];
  1426. if (SRDotDX.config.fltShowAll || (r.sid === server &&
  1427. ((!SRDotDX.config.fltExclFull || r.fs > 0) && (SRDotDX.config.fltIncVis || !r.visited)) &&
  1428. filter.indexOf('fltList_' + r.boss + '_' + (r.diff - 1)) < 0 &&
  1429. (searchString == "" || searchString.indexOf("," + r.boss + "_" + r.diff + ",") >= 0) ))
  1430. SRDotDX.gui.joinRaidList.push(r);
  1431. }
  1432. if (!SRDotDX.gui.joining) {
  1433. SRDotDX.gui.updateMessage();
  1434. SRDotDX.gui.refreshRaidList();
  1435. }
  1436. }
  1437. },
  1438. pushRaidToJoinQueue: function(id) {
  1439. var searchString = SRDotDX.gui.updateFilterContext && SRDotDX.config.chatFilterString !== "" ? SRDotDX.config.filterSearchStringC : SRDotDX.config.filterSearchStringR;
  1440. var r, filter = SRDotDX.c('#DotDX_filters').ele().innerHTML;
  1441. r = SRDotDX.config.raidList[id];
  1442. if(typeof r === 'object') {
  1443. if (SRDotDX.config.fltShowAll || (r.sid === SRDotDX.config.serverMode &&
  1444. ((!SRDotDX.config.fltExclFull || r.fs > 0) && (SRDotDX.config.fltIncVis || !r.visited)) &&
  1445. filter.indexOf('fltList_' + r.boss + '_' + (r.diff - 1)) < 0 &&
  1446. (searchString == "" || searchString.indexOf("," + r.boss + "_" + r.diff + ",") >= 0) ))
  1447. SRDotDX.gui.joinRaidList.push(r);
  1448. }
  1449. },
  1450. joining: false,
  1451. joinRaidIndex: 0,
  1452. joinRaidComplete: 0,
  1453. joinRaidSuccessful: 0,
  1454. joinRaidDead: 0,
  1455. joinRaidInvalid: 0,
  1456. joinSelectedRaids: function(fromChat) {
  1457. if (!this.joining) {
  1458. this.joining = true;
  1459. this.joinRaidIndex = 0;
  1460. this.joinRaidComplete = 0;
  1461. this.joinRaidSuccessful = 0;
  1462. this.joinRaidDead = 0;
  1463. this.joinRaidInvalid = 0;
  1464. if (SRDotDX.gui.joinRaidList.length == 0) {
  1465. this.joinFinish(true);
  1466. return
  1467. }
  1468. SRDotDX.c("#AutoJoinVisibleButton").ele().value = 'Cancel';
  1469. SRDotDX.c("#AutoImpJoinVisibleButton").ele().value = 'Cancel';
  1470. console.log('[DotDX] Joining ' + SRDotDX.gui.joinRaidList.length + ' raids');
  1471. while(SRDotDX.gui.joinRaidIndex < Math.min(20, SRDotDX.gui.joinRaidList.length)) SRDotDX.request.joinRaid(SRDotDX.gui.joinRaidList[SRDotDX.gui.joinRaidIndex++]);
  1472. }
  1473. else if(!fromChat) this.joinFinish();
  1474. },
  1475. joinFinish: function(recalc) {
  1476. this.joining = false;
  1477. SRDotDX.request.quickBtnLock = true;
  1478. SRDotDX.c("#AutoJoinVisibleButton").ele().value = 'Join';
  1479. SRDotDX.c("#AutoImpJoinVisibleButton").ele().value = 'Import & Join';
  1480. if (recalc) this.selectRaidsToJoin('joining finish');
  1481. },
  1482. refreshFriends: function() {
  1483. var content = "", ff, i, il, f = false, friend;
  1484. var parentDiv = SRDotDX.c('#FPXfsOptions');
  1485. var friends = Object.keys(SRDotDX.config.friendUsers);
  1486. parentDiv.html('<span class="generic">User</span><span class="share">Srp</span><span class="share">Sml</span><span class="share">Med</span><span class="share">Lrg</span><span class="share" style="margin-right: 27px">Oth</span><hr style="width: 270px; margin: 3px auto 4px; border: 0; height: 1px; background-color: #999;">', true);
  1487. for(i = 0, il = friends.length; i < il; ++i) {
  1488. content += (f ? '<br>' : '') + '<span class="generic">' + friends[i] + '</span>' +
  1489. '<input type="checkbox" id="fs:' + friends[i] + ':0' + '"/><label for="fs:' + friends[i] + ':0' + '"></label>' +
  1490. '<input type="checkbox" id="fs:' + friends[i] + ':1' + '"/><label for="fs:' + friends[i] + ':1' + '"></label>' +
  1491. '<input type="checkbox" id="fs:' + friends[i] + ':2' + '"/><label for="fs:' + friends[i] + ':2' + '"></label>' +
  1492. '<input type="checkbox" id="fs:' + friends[i] + ':3' + '"/><label for="fs:' + friends[i] + ':3' + '"></label>' +
  1493. '<input type="checkbox" id="fs:' + friends[i] + ':4' + '"/><label for="fs:' + friends[i] + ':4' + '"></label>';
  1494. f = true;
  1495. }
  1496. parentDiv.html('<div style="overflow-y: scroll; width: 277px; height: 414px">' + content + '</div>', false);
  1497. for(i = 0, il = friends.length; i < il; ++i) {
  1498. ff = SRDotDX.config.friendUsers[friends[i]];
  1499. SRDotDX.c('#fs:' + friends[i] + ':' + 0).on('click',SRDotDX.gui.fsEleClick).ele().checked = ff[0];
  1500. SRDotDX.c('#fs:' + friends[i] + ':' + 1).on('click',SRDotDX.gui.fsEleClick).ele().checked = ff[1];
  1501. SRDotDX.c('#fs:' + friends[i] + ':' + 2).on('click',SRDotDX.gui.fsEleClick).ele().checked = ff[2];
  1502. SRDotDX.c('#fs:' + friends[i] + ':' + 3).on('click',SRDotDX.gui.fsEleClick).ele().checked = ff[3];
  1503. SRDotDX.c('#fs:' + friends[i] + ':' + 4).on('click',SRDotDX.gui.fsEleClick).ele().checked = ff[4];
  1504. /*for (i = 0; i < 5; i++) SRDotDX.c('#fs:' + friends[i] + ':' + i).on('click', function (e) {
  1505. SRDotDX.gui.fsEleClick(e)
  1506. }).ele().checked = ff[i];*/
  1507. }
  1508. },
  1509. DeleteRaids: function() {
  1510. if(!this.joining) {
  1511. console.log('[DotDX] Erasing visible raids ...');
  1512. var rn = SRDotDX.gui.joinRaidList.length;
  1513. if(rn > 0 && (!SRDotDX.config.confirmDeletes || confirm('This will delete ' + rn + ' raids. Continue? \n (This message can be disabled on the options tab.)'))) {
  1514. for(var i = 0; i < rn; ++i) SRDotDX.gui.deleteRaidFromDB(SRDotDX.gui.joinRaidList[i].id);
  1515. SRDotDX.gui.doStatusOutput(i + ' raids deleted');
  1516. SRDotDX.gui.selectRaidsToJoin();
  1517. console.log('[DotDX] Erasing complete');
  1518. }
  1519. }
  1520. },
  1521. GetDumpText: function() {
  1522. var dumptext = "";
  1523. var pre = "http://www.kongregate.com/games/5thPlanetGames/dawn-of-the-dragons?kv_action_type=raidhelp";
  1524. var raid;
  1525. for(var i = 0, il = SRDotDX.gui.joinRaidList.length; i < il; ++i) {
  1526. raid = SRDotDX.gui.joinRaidList[i];
  1527. dumptext += pre + '&kv_raid_id=' + raid.id + '&kv_difficulty=' + raid.diff + '&kv_raid_boss=' + raid.boss + '&kv_hash=' + raid.hash + '&kv_serverid=' + raid.sid + ', ';
  1528. }
  1529. return dumptext;
  1530. },
  1531. RaidAction: function(f) {
  1532. switch(f) {
  1533. case 'share':
  1534. SRDotDX.gui.DumpRaidsToShare(true);
  1535. break;
  1536. case 'post':
  1537. if (SRDotDX.gui.isPosting) SRDotDX.gui.FPXStopPosting();
  1538. else { SRDotDX.gui.DumpRaidsToShare(); SRDotDX.gui.FPXspamRaids(); }
  1539. break;
  1540. case 'post_share':
  1541. if (SRDotDX.gui.isPosting) SRDotDX.gui.FPXStopPosting();
  1542. else SRDotDX.gui.FPXspamRaids();
  1543. break;
  1544. case 'post_friend':
  1545. if (SRDotDX.gui.isPosting) SRDotDX.gui.FPXStopPosting();
  1546. else SRDotDX.gui.spamRaidsToFriends();
  1547. break;
  1548. case 'delete':
  1549. SRDotDX.gui.DeleteRaids();
  1550. break;
  1551. }
  1552. },
  1553. DumpRaidsToShare: function(b) {
  1554. document.getElementById('DotDX_raidsToSpam').value = SRDotDX.gui.GetDumpText();
  1555. SRDotDX.gui.doStatusOutput('Copied ' + SRDotDX.gui.joinRaidList.length + ' raid links to share tab.');
  1556. console.log('[DotDX] Dumped ' + SRDotDX.gui.joinRaidList.length + ' to share');
  1557. if(b) {
  1558. var e = document.getElementById('lots_tab_pane').getElementsByTagName('li');
  1559. var i = e.length;
  1560. while (i--) if (e[i].getAttribute('class').indexOf('active') > -1) e[i].className = e[i].className.replace(/ active$/g, '');
  1561. (document.getElementById('FPXShareTab').parentNode).className += ' active';
  1562. }
  1563. },
  1564. BeginDeletingExpiredUnvisitedRaids: function() {
  1565. SRDotDX.gui.cleanRaidsDB();
  1566. setInterval(SRDotDX.gui.cleanRaidsDB, 600000)
  1567. },
  1568. cleanRaidsDB: function() {
  1569. var now = parseInt(new Date().getTime()/1000);
  1570. var r, cnt = 0, keys = Object.keys(SRDotDX.config.raidList);
  1571. for(var k = 0, kl = keys.length; k < kl; ++k) {
  1572. r = SRDotDX.config.raidList[keys[k]];
  1573. if(now >= r.expTime || (r.ni && (now-r.timeStamp)/3600 > 3)) {
  1574. SRDotDX.gui.deleteRaidFromDB(keys[k]);
  1575. cnt++;
  1576. }
  1577. }
  1578.  
  1579. var chat = document.getElementsByClassName('chat_message_window'), p, pe, i;
  1580. for(var c = 0, cl = chat.length; c < cl; ++c) {
  1581. p = chat[c].getElementsByTagName('div'); i = 0;
  1582. while(pe = p[i++]) if(pe.empty()) pe.parentNode.removeChild(pe);
  1583. }
  1584.  
  1585. if(cnt > 0) {
  1586. SRDotDX.gui.doStatusOutput(cnt + ' expired raids removed from db.');
  1587. console.log('[DotDX] Number of expired raids removed: ' + cnt);
  1588. SRDotDX.gui.selectRaidsToJoin('prune');
  1589. }
  1590. },
  1591. switchBot: function() {
  1592. //console.log('[SRDotDX] Bot button clicked');
  1593. var chkBot = document.getElementById('SRDotDX_options_hideBotLinks');
  1594. chkBot.checked = !SRDotDX.config.hideBotLinks;
  1595. SRDotDX.config.hideBotLinks = chkBot.checked;
  1596. SRDotDX.c('#SRDotDX_botClass').html('.bot {display: ' + (chkBot.checked ? 'none !important' : 'block') + '}', true);
  1597. SRDotDX.gui.scrollChat();
  1598. },
  1599. scrollChat: function() {
  1600. var els = document.getElementsByClassName('chat_message_window');
  1601. var i = SRDotDX.util.getChatNumber();
  1602. if(els && i) els[i].scrollTop = els[i].scrollHeight;
  1603. },
  1604. getScrollbarWidth: function() {
  1605. var scrollDiv = SRDotDX.c('div').set({id: "DotDX_scrollMeasure", style: "width:100px;height:100px;overflow:scroll;position:absolute;top:-9999px;"}).attach('to', document.body).ele();
  1606. var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
  1607. document.body.removeChild(document.getElementById('DotDX_scrollMeasure'));
  1608. return scrollbarWidth;
  1609. },
  1610. applyFontSize: function(num) {
  1611. var n = typeof num === 'number' ? num : SRDotDX.config.fontNum, s1, s2, mod = '';
  1612. //console.log("[DotDX] apply font size with id: " + n);
  1613. SRDotDX.config.fontNum = n;
  1614. switch(n) {
  1615. case 1: s1 = 12; s2 = 10; mod = '; vertical-align: top;'; break;
  1616. case 2: s1 = 10; s2 = 8; break;
  1617. default: s1 = 11; s2 = 9; break;
  1618. }
  1619. SRDotDX.c('#DotDX_fontClass').html('\
  1620. #kong_game_ui div.chat_message_window p span.message, #kong_game_ui div.chat_message_window p span.separator, #kong_game_ui div.chat_message_window p span.username {font-size: ' + s1 + 'px}\
  1621. #kong_game_ui div.chat_message_window p span.room, #kong_game_ui div.chat_message_window p span.timestamp {font-size: ' + s2 + 'px' + mod + '}\
  1622. ', true);
  1623. },
  1624. applyTabs: function() {
  1625. document.getElementById('lots_tab').firstChild.innerHTML = SRDotDX.config.dotdxTabName;
  1626. var elems = ["#DotDX_Dummy"];
  1627. if(SRDotDX.config.hideGameTab) elems.push("#kong_game_ui li#game_tab");
  1628. if(SRDotDX.config.hideAccTab) elems.push("#kong_game_ui li#accomplishments_tab");
  1629. SRDotDX.c('#DotDX_tabs').html(elems.join(", ") + ' { display: none !important }', true);
  1630. },
  1631. applyTheme: function(num) {
  1632. var n = typeof num == 'number' ? num : SRDotDX.config.themeNum;
  1633. //console.log("[DotDX] apply theme with id: " + n);
  1634. var c, check, radio;
  1635. SRDotDX.config.themeNum = n;
  1636. switch(n) {
  1637. case 1:
  1638. check = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAAJxSURBVEhL7VRLaxNRGL1QEIVs9AckDamZZPLOvDMzicZEjBltY5qnisFFKbgRVLoQEf0JVkShTUVQCl2oG9GNS0FcuXDpD3DrxneP3x0mfdimTXHjwoHDMN/cc+a73z1nmCAImVgs9joej39NJBLYAau07kM0Gu0EAoH9bHBR8W02m4WqqtB1fSg0TYMkSUgmkx+JI3l0xujLvzg5l8vBsizYtr0FvG6apiuSSqV4J8c8OmO8Pf4Fviifz6NQKGwLLmQYBtLpNEig5NHXBfiC7YgDcPH/ArsI/NUpbPTBMAx8wAWIsy5AxW8DJ/IFw8DfcyfKsvyTOi56dMYcx1nhWyCL/un9LeAC5XL5Xa1WEz06Y61Wa5zwst1uf+l0OtgBq7TmfbPZrDYajTGPzvacRup0jpAURdHnChDxzahpNNMZXCsWMJ+NfDoz7r/l8/n2cYEfo6RRz0i4YlpYadTxYrKClYOHPueCwXMj+SCXlXBZ1vG828SSU8Mj8sNsaAKq3x/c5ES7cASWTaahOydywbwk46qi41Wvi351CovUxUw48l0WonOhUGhsTcCkF8clBTOVMkqyCps/0/0GiTw728YikR9YeVwSIjAPR6/Tb+2AO0QuwAdUVXXcrVaozRbun3ZwPiPjdqmE5cY0+tT2gmFiNhKBFouDTmCzlblAMZPFPA2zf3IST2p1PO02sDxdd8lLioZeWIBFpzA0TIaqoRwWcS+Zcvf68BQRnSk8VhX0JsKwaBa7plHXdBwVRNxJpdE/4WBBN3CR9mzxmdCQR0qjQaSKGMNNql+g/ZqK6iZxb2nkJAqOIStrtX81jYz9Bt6mjYTW51PyAAAAAElFTkSuQmCC';
  1639. radio = 'iVBORw0KGgoAAAANSUhEUgAAAA0AAAAaCAYAAABsONZfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAAI+SURBVDhPxZJNiBJhGMeHTgXdOrR0CUFdCTR1VscZW3W+Vs0P/JhZv2fVERSLukRBCEUHCRb6gKgg6tQlunrpVHSOztG9aLtsHQxcyv8+E22HcldvO/DjfWGe//M87/P8GfqO6Lp+PJ/P++m82Wg03vV6vXG/3//ZarW2isXiiP5dyGazvkwmc1LTtGPMH0GKgt92u90dEuBfOp3Oj0Kh8DKVSp2n8zRDgrPlcvkNZf1lmib2w/pPlUZUUWHocq1er08Mw8A8KpXKWJKkoSV6TZWwKCR6z6TT6S1qEYuSSCTGTDwe/04PxKKoqrrDRCKRD4qiYFFCodAnRhCEZyScRqNRzMOK83g8I0YUxUowGNwmMebhdru/yrI8YOhhZ3ief+z3+yeBQAD74fV6J9TaUxpckcnlcidoGDGWZZ9Tpm8+n29KYA8Knjqdzi/UzRMSVCmeZajXozT/UzSZVcp0dXl5+ZXD4fhst9u3bTbbR5fL9YJ2c92qYAnIdkuHaNh2s4lmrYYWYW4YMNvtgw1bL5Vgrq3hYiSKy6KIS5IIs6TBaDRmG7ak69igjQ84DnfOreIeLXOT53FFFFBb12cbNpNMwqQF3o3F8FBV/zLkWBhaEYVZho1LMprBEO7T+Yha3GOTW0FrXQMln2HYmIhqgMNtas2qYAkeyDJucT5UCzkr+H/DEpAFHgbL4kZIwJDEgxU/upk4EpTgAMPyiNCZVFQUs1lo6QwUSUI4HJ5vWEoCjqbIBbnf98MyrL60C6YGOtWmdTvcAAAAAElFTkSuQmCC';
  1640. c = ['#333', '#ddd', '#404040', '#fff', '#792c2c', '#333', '#101010', '0 0 5px #202020', '#333', '0 0 10px #000',
  1641. '#ccc', '#eee', '0 0 4px #555', '#000', '#444', '0 0 5px #888', '#fff', '#792c2c', '0 0 12px #fff', '#fff',
  1642. '#000', 'top,#aa4141,#5c2828', '0 0 5px #aaa;', '#555', '#000', '0 -2px 6px -3px #000', '#fff', '0 0 4px #000;', '#ccc', '#ddd',
  1643. 'none', '#000', '0 0 5px 1px #222', '#444', '#fff', '#000', '#333', '0 0 8px #000', '#ccc', '#222',
  1644. '#111', '#fff', '0 0 4px #111', '#333', '#ddd', '#111', '#444', '#3a3a3a', '#111', 'none',
  1645. '#111', 'none', '#111', 'none', '#111', 'none', '#404040', '#60cc60', '#60cc60', '0 0 5px #00aa1a',
  1646. '#d6c96a', '#d6c96a', '0 0 5px #7e7400', '#e47070', '#e47070', '0 0 5px #aa0000', '#c28ee6', '#c28ee6', '0 0 5px #9000ff', '#000',
  1647. 'top,#404040,#404040', '#000', 'top,#2a2a2a,#492c2c', '#78bcfa', '0 0 4px #000', '#6dc97c', '#ec6666', '#f8b60d', '0 0 5px #000', '#ccc',
  1648. '#fff', '0 0 6px #999', '#aaa', '#bbb', '#dfa160', '#ffb261', '0 0 4px #9b5812', '#000', '#404040', '0 0 6px #111',
  1649. '#eee', '#000', '0 0 3px #101010', '0 0 5px #000', 'top,#303030,#444', '#1a1a1a', '#000', '0 0 8px #fff', '#ddd', '#101010',
  1650. '0 0 3px #000', '0 0 5px #202020', 'top,#3a3a3a,#555', '#eee', '#000', '0 0 5px #000', '0 0 10px #111', 'top,#303030,#404040', '', '',
  1651. '', 'top,#303030,#406785', '', '', '', 'top,#303030,#306638', '', '', '', 'top,#303030,#693434',
  1652. '', '', '', 'top,#303030,#887E35', '#eaeaea', '0 0 5px #000', '#e0e0e0', '#101010', '0 0 5px #000', '0 0 5px #202020',
  1653. 'top,#303030,#444', '', '', 'top,#2a2a2a,#222', '#eee', '#111', '0 0 5px #000', '0 0 4px #303030', 'top,#333,#555', '0 0 6px #101010',
  1654. 'top,#2a2a2a,#404040', '#eee', '#1a1a1a', '0 0 5px #000', '0 0 5px #222', 'top,#333,#4a4a4a', '0 0 6px #111', '', 'top, #2a2a2a, #333', '0 0 6px #111',
  1655. '', 'top,#2a2a2a,#426B44', '0 0 6px #111', '', 'top,#2a2a2a,#40668d', '0 0 6px #111', '', 'top,#2a2a2a,#612525', '#e0e0e0', '#101010',
  1656. '0 0 5px #000', '0 0 8px #101010', 'top,#303030,#723434', 'top,#202020,#4d2424', '#eee', '0 0 4px #000', '#e0e0e0', '#888', 'top,#444,#555', '#eee',
  1657. '#000', '0 0 5px #000', '0 0 6px #111', 'left,#303030,#303030', '', '#aaa', '#000', '0 0 5px #000', 'top,#444,#444', '#606060',
  1658. '#101010', '#e5e5e5', '#f5f5f5', '0 0 6px #c0c0c0', '#eee', '#d83737', '0 0 3px #000', 'top,#404040,#556d52', 'top,#404040,#746c56', 'top,#404040,#664040',
  1659. 'top,#404040,#604c70', '#00bb00', '#dbb32e', '#d13c3c', '#d16ad1', '#eee', '0 0 6px #000', '#101010', '0 0 5px #000', 'top,#2a2a2a,#3a3a3a',
  1660. '#777', '#e0e0e0', '0 0 5px #000', '#f0f0f0', '0 0 8px #000', '#e0e0e0', '0 0 5px #000', '#000', '#3a3a3a', '#303030',
  1661. '#000', '#202020', '', '#552727', '#686868', '#303030', '#c0c0c0', '', '#111', '#222',
  1662. '#e0e0e0', '#fff', '0 0 6px #999', '#ffda8e', '#ff8080', '#ff4040', '#ccc', '#2a2a2a'];
  1663. break;
  1664. default:
  1665. check = 'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAAC4SURBVDhPnZNRCsQgDAW9pPfxuCKICCIiyC62RPIksnEDU2zMlH7kGefc5xYzax5uas5ba19xjKEGxN67GhBba2pArLWqAbGUogbEnLMaEFNKakCMMaoBMYSgBkTvvRoQb3nEv0v64i/Wr94UiFIKToAopYDDZ0CUUkDMez4DIt/8PQkE7y2Rbz6905nfU3+JfPN3eDJoZon79hO8z++XKCVg7xEgSik4AaKUghMg3vKI83GLMcZ8AZMOnRQ6c3RxAAAAAElFTkSuQmCC';
  1666. radio = 'iVBORw0KGgoAAAANSUhEUgAAAA0AAAAaCAYAAABsONZfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAAFpSURBVDhP1VJNi4IAEPV3durU1V/QJTAIT3WQopvRD4ggCTKrQ8d+gwkRlB+RKBHhW96sxUrrurdlBx7DvHnjqPOUr3E+nzGbzdDr9dBsNiWzJp9LirFYLNDpdLDdbnE6ncBgZk2e/Vz6GavVCsPhEEmSIMuyN5BnnzoZCIIA7XYbURTh8XiUgn3qqFcsy8Jms8H9fq8EddQr3W4Xh8MBt9utEtRRr2iahjAM5b2rQB31smm/3yOO40pQJ5t4h+VyicvlUgnqqJeDcqXnebK+DOxT9zo0/3+/38fxeITv+28gz/7rTs+Yz+fQdV1ewXVdcQMza/Ls59Ji8ImTyURsQ+8xsyafS97jnxh2vV5jPB5LrjQs/dVqtVCr1VCv1yWzJl9qWMdx0Gg0oKrqC6xt2y43rGmahYEnRqNRuWG5/rsh8qWGZcMwjMLAYDAQ/kfD8oN3ux2m06lk1r8y7PV6RZqmkv/SsIryAXc40Mw81bSxAAAAAElFTkSuQmCC';
  1667. c = ['#404040', '#303030', '#e0e0e0', '#000', '#f0f0f0', '#ccc', '#6a6a6a', '0 0 4px #707070', '#ddd', '0 0 5px #333',
  1668. '#666', '#222', '0 0 3px #ccc', '#aaa', '#e6e6e6', '0 0 5px #888', '#000', '#f5f5f5', '0 0 5px #999', '#000',
  1669. '#888', 'top,#fff,#ddd', '0 0 5px #555;', '#f6f6f6', '#888', '0 -2px 6px -4px #444', '#222', '', '#777', '#888',
  1670. 'underline', '#888', '0 0 6px #999', '#fff', '#000', '#777', '#fff', '0 0 8px #999', '#4b4b4b', '#f0f0f0',
  1671. '#bbb', '#333', '0 0 4px #ddd', '#fff', '#222', '#d0d0d0', '#fff', '#f7f7f7', '#8ab389', 'top,#cbe7c4,#f3faf2',
  1672. '#adad68', 'top,#f7f0c8,#fcfbf8', '#b18780', 'top,#f3d7d1,#FCF7F7', '#a99abb', 'top,#ddd4e2,#f4f0f7', '#fff', '', '', '0 0 5px #aaa',
  1673. '', '', '0 0 5px #aaa', '', '', '0 0 5px #aaa', '', '', '0 0 5px #aaa', '#c0c0c0',
  1674. 'top,#f0f0f0,#fff', '#a1b4be', 'top,#dce8f1,#eff4f7', '#276594', 'none', '#267422', '#973131', '#085088', 'none', '#444',
  1675. '#000', '0 0 6px #888', '#666', '#666', '#946a3d', '#946a3d', '0 0 4px #f5Cc68Aa', '#777', '#eee', '0 0 7px #777',
  1676. '#000', '#606060', '0 0 3px #707070', '0 0 4px #ccc', 'top,#fff,#ddd', '#808080', '#707070', '0 0 4px #909090', '#111', '#707070',
  1677. '0 0 5px #aaa', '0 0 5px #808080', 'top,#f5f5f5,#dadada', '#fff', '#444', '0 0 10px #eee', '0 0 7px #222', 'top,#999,#555', '#000', '0 0 10px #fff',
  1678. '0 0 7px #1c3a61', 'top,#dcf0fd,#6794b2', '#000', '0 0 10px #fff', '0 0 7px #3d6425', 'top,#effde5,#618d4f', '#000', '0 0 10px #fff', '0 0 7px #412222', 'top,#ffefef,#aa5858',
  1679. '#000', '0 0 10px #fff', '0 0 7px #807823', 'top,#fffbe0,#c9b41d', '#101010', '0 0 8px #fff', '#333', '#707070', '0 0 6px #999', '0 0 5px #808080',
  1680. 'top,#f5f5f5,#dadada', '', '', 'top,#f5f5f5,#fff', '#222', '#999', '0 0 4px #ccc', '0 0 4px #ccc', 'top,#ccc,#eee', '0 0 4px #bbb',
  1681. 'top,#ccc,#ddd', '#444', '#aaa', '', '0 0 3px #ddd', 'top, #eee, #fff', '0 0 5px #bbb', '0 0 3px #bbb', 'top,#fff,#ccc', '0 0 5px #a7ca9c',
  1682. '0 0 3px #bbb', 'top, #fff, #b9daaf', '0 0 5px #a9d3ff', '0 0 3px #bbb', 'top, #fff, #a4c8ee', '0 0 5px #ffbaba', '0 0 3px #bbb', 'top,#fff,#f0a4a4', '#222', '#aaa',
  1683. '', '0 0 4px -1px #aaa', 'top,#fff,#d1dfee', 'top, #dfe8f1,#fff', '#333', '', '#bbb', '#ccc', 'top,#eee,#fff', '#444',
  1684. '#aaa', '1px 1px 2px #ddd', '0 0 4px #ccc', 'left,#fff,#eee', '0 0 3px #ddd', '#aaa', '#aaa', '0 0 3px #ccc', 'top,#f5f5f5,#f6f6f6', '#fff',
  1685. '#e0e0e0', '#111', '#111', '0 0 8px #777', '#000', '#bd0000', '0 0 2px #ff8e8e', 'top,#d8ecd3,#f5f5f5', 'top,#faf4d2,#f5f5f5', 'top,#fae4df,#f5f5f5',
  1686. 'top,#e9dcf3,#f5f5f5', '#00bb00', '#dbb32e', '#d13c3c', '#d16ad1', '#000', '0 0 6px #808080', '#808080', '0 0 5px #aaa', 'top,#d0d0d0,#f0f0f0',
  1687. '#ccc', '#222', '', '', '0 0 4px #ccc', '', '', '#bbb', '#fff', '',
  1688. '#bbb', '#efefef', '#fafafa', '#eff4f9', '#5f9ea0', '#eff4f9', '#606060', 'none', '#202020', '#ddd',
  1689. '#e0e0e0', '#fff', '0 0 6px #999', '#b97c00', '#c82929', '#b10000', '', ''];
  1690. break;
  1691. }
  1692.  
  1693. SRDotDX.c('#DotDX_themeClass').html('\
  1694. #maingame, #quicklinks li, div.game_page_wrap, div#kong_game_ui, #kong_game_ui .tabpane {background-color:' + c[0] + ' !important;}\
  1695. #kong_game_ui ul.main_tabs li.tab a, div#serverButton {color:' + c[1] + '; background-color:' + c[2] + '; border-color:' + c[95] + ';}\
  1696. #kong_game_ui ul.main_tabs li.tab a.active, div#serverButton:hover {color:' + c[3] + '; background-color:' + c[4] + '; border-color:' + c[96] + '; text-shadow:' + c[97] + ';}\
  1697. #kong_game_ui div#chat_tab_pane, div#dotdx_sidebar_container, #kong_game_ui div#lots_tab_pane, #kong_game_ui ul.main_tabs {background-color:' + c[5] + ' !important;}\
  1698. #kong_game_ui div#chat_window, #kong_game_ui div#lots_tab_pane div#dotdx_shadow_wrapper {border-color:' + c[6] + '; box-shadow:' + c[7] + ';}\
  1699. #kong_game_ui div#chat_window_header, #kong_game_ui div#lots_tab_pane div#dotdx_shadow_wrapper {background-color:' + c[8] + ';}\
  1700. #kong_game_ui div#chat_window_header {box-shadow:' + c[9] + ';}\
  1701. #kong_game_ui div#chat_window_header div.dotdx_chat_overlay {border-color:' + c[175] + ';}\
  1702. #kong_game_ui div#chat_window_header div.room_name_container, #kong_game_ui div#dotdx_status_div, #kong_game_ui .panel_handle a, #kong_game_ui #accomplishments_pane_title {color:' + c[10] + ';}\
  1703. #kong_game_ui div#chat_window_header div.room_name_container .room_name, #kong_game_ui div#chat_window_header div.dotdx_chat_overlay > span, #kong_game_ui div#dotdx_status_div span, #kong_game_ui div#chat_room_tabs div a, #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head {color:' + c[11] + '; text-shadow:' + c[12] + ';}\
  1704. #kong_game_ui div#chat_window_header div.room_name_container, #kong_game_ui div#chat_room_tabs div a, #kong_game_ui div#dotdx_status_div, #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head {border-color:' + c[13] + '; background-color:' + c[14] + ';}\
  1705. #kong_game_ui div#chat_room_tabs div a:hover, #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head:hover {text-shadow:' + c[15] + '}\
  1706. #kong_game_ui div#chat_room_tabs div.active a, #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_head {color:' + c[16] + '; background-color:' + c[17] + '; text-shadow:' + c[18] + ';}\
  1707. #kong_game_ui div.chat_actions_container span.btn {color:' + c[19] + ' !important; border-color:' + c[20] + '; background:-webkit-linear-gradient(' + c[21] + '); background:-moz-linear-gradient(' + c[21] + ');}\
  1708. #kong_game_ui div.chat_actions_container span.kong_ico.btn_target:active {text-shadow:' + c[22] + ';}\
  1709. #kong_game_ui div#chat_rooms_container div.chat_tabpane.users_in_room, #kong_game_ui div#lots_tab_pane ul li.tab div.tab_pane { background-color:' + c[23] + '; border-color:' + c[24] + ';}\
  1710. #kong_game_ui div#chat_rooms_container div.chat_tabpane.users_in_room { box-shadow: inset ' + c[25] + ';}\
  1711. #kong_game_ui .user_row .username, #kong_game_ui div#lots_tab_pane ul { color:' + c[26] + '; text-shadow:' + c[27] + ';}\
  1712. #kong_game_ui .user_row.away .username {color:' + c[28] + ';}\
  1713. #kong_game_ui .user_row .guild-name {color:' + c[29] + ';}\
  1714. #kong_game_ui .user_row .username {text-decoration:' + c[30] + ';}\
  1715. #kong_game_ui div.chat_controls {border-color:' + c[31] + '; box-shadow:' + c[32] + ';}\
  1716. #kong_game_ui div.chat_controls, #kong_game_ui textarea.chat_input {background-color:' + c[33] + ';}\
  1717. #kong_game_ui textarea.chat_input {color:' + c[34] + ';}\
  1718. #kong_game_ui div.chat_actions_container ul.chat_actions_list {border-color:' + c[35] + '; background-color:' + c[36] + '; box-shadow:' + c[37] + ';}\
  1719. #kong_game_ui div.chat_actions_container ul.chat_actions_list li {border-color:' + c[36] + '; color:' + c[38] + ';}\
  1720. #kong_game_ui div.chat_actions_container ul.chat_actions_list li:hover {background-color:' + c[39] + '; border-color:' + c[40] + '; color:' + c[41] + '; box-shadow:' + c[42] + ';}\
  1721. #kong_game_ui div.chat_message_window {background-color:' + c[43] + '; color:' + c[44] + ';}\
  1722. #kong_game_ui div.chat_message_window p {border-bottom-color:' + c[45] + '; border-top-color:' + c[46] + ';}\
  1723. #kong_game_ui div.chat_message_window p.even {background-color:' + c[47] + ';}\
  1724. #kong_game_ui div.chat_message_window p.DotDX_raid, #kong_game_ui div.chat_message_window p.whisper, #kong_game_ui div.chat_message_window p.script {border-top-color:' + c[56] + ';}\
  1725. #kong_game_ui div.chat_message_window p.DotDX_diff_1 {border-bottom-color:' + c[48] + '; background: -webkit-linear-gradient(' + c[49] + '); background: -moz-linear-gradient(' + c[49] + ');} \
  1726. #kong_game_ui div.chat_message_window p.DotDX_diff_2 {border-bottom-color:' + c[50] + '; background: -webkit-linear-gradient(' + c[51] + '); background: -moz-linear-gradient(' + c[51] + ');} \
  1727. #kong_game_ui div.chat_message_window p.DotDX_diff_3 {border-bottom-color:' + c[52] + '; background: -webkit-linear-gradient(' + c[53] + '); background: -moz-linear-gradient(' + c[53] + ');} \
  1728. #kong_game_ui div.chat_message_window p.DotDX_diff_4 {border-bottom-color:' + c[54] + '; background: -webkit-linear-gradient(' + c[55] + '); background: -moz-linear-gradient(' + c[55] + ');} \
  1729. #kong_game_ui div.chat_message_window p span.message a {color:' + c[79] + '}\
  1730. #kong_game_ui div.chat_message_window p span.message a:hover {color:' + c[80] + '; text-shadow:' + c[81] + ';}\
  1731. #kong_game_ui div.chat_message_window p.DotDX_diff_1 span.message a {color:' + c[57] + '; text-shadow:' + c[74] + ';}\
  1732. #kong_game_ui div.chat_message_window p.DotDX_diff_1 span.message a:hover {color:' + c[58] + '; text-shadow:' + c[59] + ';}\
  1733. #kong_game_ui div.chat_message_window p.DotDX_diff_2 span.message a {color:' + c[60] + '; text-shadow:' + c[74] + ';}\
  1734. #kong_game_ui div.chat_message_window p.DotDX_diff_2 span.message a:hover {color:' + c[61] + '; text-shadow:' + c[62] + ';}\
  1735. #kong_game_ui div.chat_message_window p.DotDX_diff_3 span.message a {color:' + c[63] + '; text-shadow:' + c[74] + ';}\
  1736. #kong_game_ui div.chat_message_window p.DotDX_diff_3 span.message a:hover {color:' + c[64] + '; text-shadow:' + c[65] + ';}\
  1737. #kong_game_ui div.chat_message_window p.DotDX_diff_4 span.message a {color:' + c[66] + '; text-shadow:' + c[74] + ';}\
  1738. #kong_game_ui div.chat_message_window p.DotDX_diff_4 span.message a:hover {color:' + c[67] + '; text-shadow:' + c[68] + ';}\
  1739. #kong_game_ui div.chat_message_window p.script {border-bottom-color:' + c[69] + '; background: -webkit-linear-gradient(' + c[70] + '); background: -moz-linear-gradient(' + c[70] + ');}\
  1740. #kong_game_ui div.chat_message_window p.whisper {border-bottom-color:' + c[71] + '; background: -webkit-linear-gradient(' + c[72] + '); background: -moz-linear-gradient(' + c[72] + '); }\
  1741. #kong_game_ui div.chat_message_window p span.username, #kong_game_ui div.chat_message_window p.script span.emph {color:' + c[73] + '; text-shadow:' + c[74] + ';}\
  1742. #kong_game_ui div.chat_message_window p span.username.ign {color:' + c[75] + ';}\
  1743. #kong_game_ui div.chat_message_window p.sent_whisper span.username, #kong_game_ui div.chat_message_window p span.username.is_self, #kong_game_ui div.chat_message_window p.script span.emph {color:' + c[76] + ';}\
  1744. #kong_game_ui div.chat_message_window p.emote {color:' + c[77] + '; text-shadow:' + c[78] + ';}\
  1745. #kong_game_ui div.chat_message_window p span.room {color:' + c[82] + ';}\
  1746. #kong_game_ui div.chat_message_window p span.timestamp, #kong_game_ui div.chat_message_window p span.ingamename {color:' + c[83] + ';}\
  1747. #kong_game_ui div.chat_message_window p span.message a.reply_link {color:' + c[79] + '}\
  1748. #kong_game_ui div.chat_message_window p span.message a.reply_link:hover {color:' + c[80] + '; text-shadow:' + c[81] + ';}\
  1749. #kong_game_ui div.chat_message_window p span.message a.chat_link {color:' + c[84] + ';}\
  1750. #kong_game_ui div.chat_message_window p span.message a.chat_link:hover {color:' + c[85] + '; text-shadow:' + c[86] + ';}\
  1751. #kong_game_ui div.chat_message_window p > span.slider {border-color:' + c[87] + '; background:' + c[88] + '; box-shadow:' + c[89] + ';}\
  1752. #kong_game_ui div#chat_raids_overlay {color:' + c[90] + '; border-color:' + c[91] + '; box-shadow:' + c[92] + '; text-shadow:' + c[93] + '; background: -webkit-linear-gradient(' + c[94] + '); background: -moz-linear-gradient(' + c[94] + ');}\
  1753. div#dotdx_sidebar_container > button {color:' + c[98] + '; border-color:' + c[99] + '; text-shadow:' + c[100] + '; box-shadow:' + c[101] + '; background: -webkit-linear-gradient(' + c[102] + '); background: -moz-linear-gradient(' + c[102] + ');}\
  1754. div#dotdx_sidebar_container > button:hover {color:' + c[103] + '; border-color:' + c[104] + '; text-shadow:' + c[105] + '; box-shadow:' + c[106] + '; background: -webkit-linear-gradient(' + c[107] + '); background: -moz-linear-gradient(' + c[107] + ');}\
  1755. div#dotdx_sidebar_container > button.b:hover {color:' + c[108] + '; text-shadow:' + c[109] + '; box-shadow:' + c[110] + '; background: -webkit-linear-gradient(' + c[111] + '); background: -moz-linear-gradient(' + c[111] + ');}\
  1756. div#dotdx_sidebar_container > button.g:hover {color:' + c[112] + '; text-shadow:' + c[113] + '; box-shadow:' + c[114] + '; background: -webkit-linear-gradient(' + c[115] + '); background: -moz-linear-gradient(' + c[115] + ');}\
  1757. div#dotdx_sidebar_container > button.r:hover {color:' + c[116] + '; text-shadow:' + c[117] + '; box-shadow:' + c[118] + '; background: -webkit-linear-gradient(' + c[119] + '); background: -moz-linear-gradient(' + c[119] + ');}\
  1758. div#dotdx_sidebar_container > button.y:hover {color:' + c[120] + '; text-shadow:' + c[121] + '; box-shadow:' + c[122] + '; background: -webkit-linear-gradient(' + c[123] + '); background: -moz-linear-gradient(' + c[123] + ');}\
  1759. div#dotdx_sidebar_container > div.label {color:' + c[124] + '; text-shadow:' + c[125] + ';}\
  1760. div#dotdx_sidebar_container > input[type=\"text\"] {color:' + c[126] + '; border-color:' + c[127] + '; text-shadow:' + c[128] + '; box-shadow:' + c[129] + '; background: -webkit-linear-gradient(' + c[130] + '); background: -moz-linear-gradient(' + c[130] + ');}\
  1761. div#dotdx_sidebar_container > input[type=\"text\"]:hover, div#dotdx_sidebar_container > input[type=\"text\"]:focus {color:' + c[131] + '; border-color:' + c[132] + '; background: -webkit-linear-gradient(' + c[133] + '); background: -moz-linear-gradient(' + c[133] + ');}\
  1762. #kong_game_ui div.tab_pane p.collapsingCategory {color:' + c[134] + '; border-color:' + c[135] + '; text-shadow:' + c[136] + '; box-shadow:' + c[137] + '; background: -webkit-linear-gradient(' + c[138] + '); background: -moz-linear-gradient(' + c[138] + ');}\
  1763. #kong_game_ui div.tab_pane p.collapsingCategory:hover {box-shadow:' + c[139] + '; background: -webkit-linear-gradient(' + c[140] + '); background: -moz-linear-gradient(' + c[140] + ');}\
  1764. #kong_game_ui div.tab_pane input[type=\"button\"] {color:' + c[141] + '; border-color:' + c[142] + '; text-shadow:' + c[143] + '; box-shadow:' + c[144] + '; background: -webkit-linear-gradient(' + c[145] + '); background: -moz-linear-gradient(' + c[145] + ');} \
  1765. #kong_game_ui div.tab_pane input[type=\"button\"].generic:hover {box-shadow:' + c[146] + '; text-shadow:' + c[147] + '; background: -webkit-linear-gradient(' + c[148] + '); background: -moz-linear-gradient(' + c[148] + ');}\
  1766. #kong_game_ui div.tab_pane input[type=\"button\"].green:hover, #kong_game_ui div.tab_pane input.landpmbuttonhigh {box-shadow:' + c[149] + '; text-shadow:' + c[150] + '; background: -webkit-linear-gradient(' + c[151] + '); background: -moz-linear-gradient(' + c[151] + ');}\
  1767. #kong_game_ui div.tab_pane input[type=\"button\"].blue:hover {box-shadow:' + c[152] + '; text-shadow:' + c[153] + '; background: -webkit-linear-gradient(' + c[154] + '); background: -moz-linear-gradient(' + c[154] + ');}\
  1768. #kong_game_ui div.tab_pane input[type=\"button\"].red:hover, #kong_game_ui div.tab_pane input[type=\"button\"][value=\"Cancel\"]:hover {box-shadow:' + c[155] + '; text-shadow:' + c[156] + '; background: -webkit-linear-gradient(' + c[157] + '); background: -moz-linear-gradient(' + c[157] + ');}\
  1769. #kong_game_ui input#raidsBossFilter {color:' + c[158] + '; border-color:' + c[159] + '; text-shadow:' + c[160] + '; box-shadow:' + c[161] + '; background: -webkit-linear-gradient(' + c[162] + '); background: -moz-linear-gradient(' + c[162] + ');}\
  1770. #kong_game_ui input#raidsBossFilter:hover, input#raidsBossFilter:focus {background: -webkit-linear-gradient(' + c[163] + '); background: -moz-linear-gradient(' + c[163] + ');}\
  1771. ul#SRDotDX_tabpane_tabs input[type="text"].generic {color:' + c[164] + '; text-shadow:' + c[165] + '; border-bottom-color:' + c[166] + ';}\
  1772. ul#SRDotDX_tabpane_tabs input[type="text"].generic:focus {border-color:' + c[167] + '; background: -webkit-linear-gradient(' + c[168] + '); background: -moz-linear-gradient(' + c[168] + ');}\
  1773. textarea#DotDX_raidsToSpam, textarea#options_sbConfig {color:' + c[169] + '; border-color:' + c[170] + '; text-shadow:' + c[171] + '; box-shadow:' + c[172] + '; background: -webkit-linear-gradient(' + c[173] + '); background: -moz-linear-gradient(' + c[173] + ');}\
  1774. #kong_game_ui span.notice {text-shadow:' + c[174] + ';}\
  1775. #kong_game_ui ul#SRDotDX_tabpane_tabs input[type="checkbox"] + label:before {background: url(data:image/png;base64,' + check + ') 0 0 no-repeat}\
  1776. #kong_game_ui ul#SRDotDX_tabpane_tabs input[type="checkbox"]:checked + label:before {background: url(data:image/png;base64,' + check + ') 0 -14px no-repeat}\
  1777. #kong_game_ui ul#SRDotDX_tabpane_tabs input[type="radio"] + label:before {background: url(data:image/png;base64,' + radio + ') 0 0 no-repeat}\
  1778. #kong_game_ui ul#SRDotDX_tabpane_tabs input[type="radio"]:checked + label:before {background: url(data:image/png;base64,' + radio + ') 0 -13px no-repeat}\
  1779. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list {border-top-color:' + c[176] + '; box-shadow:' + c[177] + '; background: -webkit-linear-gradient(' + c[178] + '); background: -moz-linear-gradient(' + c[178] + ');}\
  1780. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list .raid_list_item {border-top-color:' + c[179] + '; border-bottom-color:' + c[180] + ';}\
  1781. a.DotDX_RaidLink {color:' + c[181] + ';}\
  1782. a.DotDX_RaidLink:hover {color:' + c[182] + '; text-shadow:' + c[183] + ';}\
  1783. a.dotdxRaidListDelete {color:' + c[184] + ';}\
  1784. a.dotdxRaidListDelete:hover {color:' + c[185] + '; text-shadow:' + c[186] + ';}\
  1785. #raid_list .raid_list_item.DotDX_N:hover {background: -webkit-linear-gradient(' + c[187] + '); background: -moz-linear-gradient(' + c[187] + ');}\
  1786. #raid_list .raid_list_item.DotDX_H:hover {background: -webkit-linear-gradient(' + c[188] + '); background: -moz-linear-gradient(' + c[188] + ');}\
  1787. #raid_list .raid_list_item.DotDX_L:hover {background: -webkit-linear-gradient(' + c[189] + '); background: -moz-linear-gradient(' + c[189] + ');}\
  1788. #raid_list .raid_list_item.DotDX_NM:hover {background: -webkit-linear-gradient(' + c[190] + '); background: -moz-linear-gradient(' + c[190] + ');}\
  1789. span.DotDX_List_diff.DotDX_N {color:' + c[191] + ';}\
  1790. span.DotDX_List_diff.DotDX_H {color:' + c[192] + ';}\
  1791. span.DotDX_List_diff.DotDX_L {color:' + c[193] + ';}\
  1792. span.DotDX_List_diff.DotDX_NM {color:' + c[194] + ';}\
  1793. #kong_game_ui div#helpBox { color:' + c[195] + '; box-shadow:' + c[196] + '; border-top-color:' + c[197] + '; text-shadow:' + c[198] + '; background: -webkit-linear-gradient(' + c[199] + '); background: -moz-linear-gradient(' + c[199] + ');}\
  1794. #kong_game_ui div.chat_message_window p.script hr {background:' + c[200] + ';}\
  1795. #kong_game_ui div.chat_message_window p.script span .title {color:' + c[201] + '; text-shadow:' + c[202] + ';}\
  1796. #kong_game_ui div.chat_message_window p.script span .title:hover {color:' + c[203] + '; text-shadow:' + c[204] + ';}\
  1797. table.raids, table.camps {color:' + c[205] + '; text-shadow:' + c[206] + ';} \
  1798. table.raids td, table.camps td {border-color:' + c[207] + '; background:' + c[208] + ';}\
  1799. table.raids td.ep, table.camps td.ep {background:' + c[209] + ';} \
  1800. table.raids th, table.camps th {border-color:' + c[210] + '; background-color:' + c[211] + ';} \
  1801. table.raids tr.head, table.camps tr.head {background:' + c[212] + ';} \
  1802. table.raids tr.best td {background:' + c[213] + ';} \
  1803. table.raids colgroup col.selected {border-color:' + c[214] + ';}\
  1804. table.camps td.mark {background:' + c[215] + ';} \
  1805. div.raid_list_item > span.DotDX_extInfo {color:' + c[216] + '; text-shadow:' + c[217] + ';}\
  1806. #maingame, div.game_page_wrap {border-color:' + c[218] + ';}\
  1807. body {background-color:' + c[219] + ' !important}\
  1808. #quicklinks li a, #quicklinks li.rate {color:' + c[220] + '}\
  1809. #quicklinks li a:hover {color:' + c[221] + '; text-shadow:' + c[222] + ';}\
  1810. div.raid_list_item > span.DotDX_extInfo.failings {color:' + c[223] + ';}\
  1811. div.raid_list_item > span.DotDX_extInfo.failingm {color:' + c[224] + ';}\
  1812. div.raid_list_item > span.DotDX_extInfo.failingh {color:' + c[225] + ';}\
  1813. div.cntrNotify {color:' + c[226] + '; background-color:' + c[227] + '; border-bottom-color:' + c[45] + ';}\
  1814. ', true);
  1815. },
  1816. createFilterTab: function () {
  1817. var sm = SRDotDX.config.serverMode - 1;
  1818. var rdObj = Object.keys(SRDotDX.raids);
  1819. var i, il, raid, parentTableId = '', parentTable = '', cb;
  1820. var sectionID = ['Guild','Special','Small','Medium','Large','Epic','Colossal','Gigantic'];
  1821. for(i = 0; i < 8; ++i) document.getElementById('FPXRaidFilterWhat' + sectionID[i]).innerHTML = '';
  1822. for(i = 0, il = rdObj.length; i < il; ++i) {
  1823. raid = SRDotDX.raids[rdObj[i]];
  1824. parentTableId = 'FPX_options_cbs_' + raid.id;
  1825. parentTable = SRDotDX.c('tr').set({id: parentTableId}).html(' \
  1826. <td>' + raid.name + '</td> \
  1827. <td><input type="checkbox" id="cb_filter_' + raid.id + '_0' + '"/><label for="cb_filter_' + raid.id + '_0' + '"></label></td> \
  1828. <td><input type="checkbox" id="cb_filter_' + raid.id + '_1' + '"/><label for="cb_filter_' + raid.id + '_1' + '"></label></td> \
  1829. <td><input type="checkbox" id="cb_filter_' + raid.id + '_2' + '"/><label for="cb_filter_' + raid.id + '_2' + '"></label></td> \
  1830. <td><input type="checkbox" id="cb_filter_' + raid.id + '_3' + '"/><label for="cb_filter_' + raid.id + '_3' + '"></label></td> \
  1831. <td><input type="checkbox" id="cb_filter_' + raid.id + '_all' + '"/><label for="cb_filter_' + raid.id + '_all' + '"></label></td>', false);
  1832.  
  1833. if (raid.stat === 'H') parentTable.attach('to', 'FPXRaidFilterWhatGuild');
  1834. else if (raid.stat === 'ESH') parentTable.attach('to', 'FPXRaidFilterWhatSpecial');
  1835. else if (raid.size < 50) parentTable.attach('to', 'FPXRaidFilterWhatSmall');
  1836. else if (raid.size === 50) parentTable.attach('to', 'FPXRaidFilterWhatMedium');
  1837. else if (raid.size === 100) parentTable.attach('to', 'FPXRaidFilterWhatLarge');
  1838. else if (raid.size === 250) parentTable.attach('to', 'FPXRaidFilterWhatEpic');
  1839. else if (raid.size === 500) parentTable.attach('to', 'FPXRaidFilterWhatColossal');
  1840. else if (raid.size === 800) parentTable.attach('to', 'FPXRaidFilterWhatGigantic');
  1841.  
  1842. for(var j = 0; j < 4; ++j) {
  1843. cb = document.getElementById('cb_filter_' + raid.id + '_' + j);
  1844. cb.checked = !SRDotDX.config.filters[sm][raid.id][j];
  1845. cb.addEventListener("click", function(){
  1846. var s = SRDotDX.config.serverMode - 1;
  1847. var raidId = this.id.substr(10).slice(0,-2);
  1848. var diffIndex = parseInt(this.id.slice(-1));
  1849. SRDotDX.config.filters[s][raidId][diffIndex] = !this.checked;
  1850. var ele = document.getElementById('DotDX_filters');
  1851. var eletxt = ele.innerHTML;
  1852. var reg = new RegExp('.DotDX_fltChat_' + raidId + '_' + diffIndex + ', ', 'g');
  1853. if(SRDotDX.config.filterChatLinks) {
  1854. if (!this.checked && !reg.test(eletxt)) eletxt = '.DotDX_fltChat_' + raidId + '_' + diffIndex + ', ' + eletxt;
  1855. else if (this.checked) eletxt = eletxt.replace(reg, '');
  1856. }
  1857. reg = new RegExp('.DotDX_fltList_' + raidId + '_' + diffIndex + ', ', 'g');
  1858. if(SRDotDX.config.filterRaidList) {
  1859. if (!this.checked && !reg.test(eletxt)) eletxt = '.DotDX_fltList_' + raidId + '_' + diffIndex + ', ' + eletxt;
  1860. else if (this.checked) eletxt = eletxt.replace(reg, '');
  1861. }
  1862. ele.innerHTML = eletxt;
  1863.  
  1864. var f = SRDotDX.config.filters[s][raidId];
  1865. document.getElementById('cb_filter_' + raidId + '_all').checked = !f[0] && !f[1] && !f[2] && !f[3];
  1866. SRDotDX.config.save(false);
  1867. });
  1868. }
  1869. cb = document.getElementById('cb_filter_' + raid.id + '_all');
  1870. cb.checked = !(SRDotDX.config.filters[sm][raid.id][0] && SRDotDX.config.filters[sm][raid.id][1] && SRDotDX.config.filters[sm][raid.id][2] && SRDotDX.config.filters[sm][raid.id][3]);
  1871. cb.addEventListener('click', function(){
  1872. var s = SRDotDX.config.serverMode - 1;
  1873. var raidId = this.id.substr(10).slice(0,-4), reg;
  1874. var elem = document.getElementById('DotDX_filters');
  1875. var ele = elem.innerHTML;
  1876. var chk = this.checked;
  1877. for(j = 0; j < 4; ++j) {
  1878. document.getElementById('cb_filter_' + raidId + '_' + j).checked = chk;
  1879. SRDotDX.config.filters[s][raidId][j] = !chk;
  1880. reg = new RegExp('.DotDX_fltChat_' + raidId + '_' + j + ', ', 'g');
  1881. if (SRDotDX.config.filterChatLinks) {
  1882. if (!chk && !reg.test(ele)) ele = '.DotDX_fltChat_' + raidId + '_' + j + ', ' + ele;
  1883. else if (chk) ele = ele.replace(reg, '');
  1884. }
  1885. reg = new RegExp('.DotDX_fltList_' + raidId + '_' + j + ', ', 'g');
  1886. if (SRDotDX.config.filterRaidList) {
  1887. if (!chk && !reg.test(ele)) ele = '.DotDX_fltList_' + raidId + '_' + j + ', ' + ele;
  1888. else if (chk) ele = ele.replace(reg, '');
  1889. }
  1890. }
  1891. elem.innerHTML = ele;
  1892. SRDotDX.config.save(false);
  1893. });
  1894. }
  1895. },
  1896. toggleFiltering: function () {
  1897. var sm = SRDotDX.config.serverMode - 1;
  1898. var rdObj = Object.keys(SRDotDX.raids);
  1899. var fltObj = Object.keys(SRDotDX.config.filters[sm]);
  1900. var query = '.DotDX_filter_dummy_0 ', i, il, frcId;
  1901. if(!SRDotDX.util.isArrEq(rdObj, fltObj)) {
  1902. for(i = 0, il = rdObj.length; i < il; ++i) if (typeof SRDotDX.config.filters[sm][rdObj[i]] === 'undefined') SRDotDX.config.filters[sm][rdObj[i]] = [false, false, false, false];
  1903. for(i = 0, il = fltObj.length; i < il; ++i) if(rdObj.indexOf(fltObj[i]) < 0) delete SRDotDX.config.filters[sm][fltObj[i]];
  1904. console.log('[DotDX] Filters array has been altered!');
  1905. }
  1906. if(SRDotDX.config.filterChatLinks) {
  1907. frcId = '.DotDX_fltChat_'
  1908. for(i = 0, il = rdObj.length; i < il; ++i) {
  1909. if (SRDotDX.config.filters[sm][rdObj[i]][0]) query = frcId + rdObj[i] + '_0, ' + query;
  1910. if (SRDotDX.config.filters[sm][rdObj[i]][1]) query = frcId + rdObj[i] + '_1, ' + query;
  1911. if (SRDotDX.config.filters[sm][rdObj[i]][2]) query = frcId + rdObj[i] + '_2, ' + query;
  1912. if (SRDotDX.config.filters[sm][rdObj[i]][3]) query = frcId + rdObj[i] + '_3, ' + query;
  1913. }
  1914. }
  1915. if(SRDotDX.config.filterRaidList) {
  1916. frcId = '.DotDX_fltList_';
  1917. for(i = 0, il = rdObj.length; i < il; ++i) {
  1918. if (SRDotDX.config.filters[sm][rdObj[i]][0]) query = frcId + rdObj[i] + '_0, ' + query;
  1919. if (SRDotDX.config.filters[sm][rdObj[i]][1]) query = frcId + rdObj[i] + '_1, ' + query;
  1920. if (SRDotDX.config.filters[sm][rdObj[i]][2]) query = frcId + rdObj[i] + '_2, ' + query;
  1921. if (SRDotDX.config.filters[sm][rdObj[i]][3]) query = frcId + rdObj[i] + '_3, ' + query;
  1922. }
  1923. }
  1924. SRDotDX.c('#DotDX_filters').html(query + '{display: none !important}', true);
  1925. },
  1926. switchServer: function () {
  1927. var sm = SRDotDX.config.serverMode;
  1928. SRDotDX.config.serverMode = sm === 1 ? 2 : 1;
  1929. this.toggleFiltering();
  1930. this.createFilterTab();
  1931. this.applySidebarUI(0);
  1932. SRDotDX.c('#raidsBossFilter').ele().value = SRDotDX.config.lastFilter[SRDotDX.config.serverMode - 1];
  1933. this.updateFilterTxt(SRDotDX.config.lastFilter[SRDotDX.config.serverMode - 1], true);
  1934. //var grObj = {room: holodeck._chat_window._rooms_by_type["guild"]._room};
  1935. //holodeck._chat_window.leftRoom(grObj);
  1936. //holodeck._chat_window.bootstrapChat();
  1937. SRDotDX.c('#DotDX_serverModeRaids').html('#kong_game_ui p.DotDX_sid_' + (SRDotDX.config.serverMode == 2 ? '1' : '2') + ' {display: none !important}', true);
  1938. this.scrollChat();
  1939. SRDotDX.config.save(false);
  1940. },
  1941. applyKongBar: function() {
  1942. var styleElem = SRDotDX.c('#DotDX_kongBar');
  1943. if(SRDotDX.config.slimKongBar) styleElem.html('#header_logo, #new_nav_wrapper .main_navigation {display:none !important} #header {height:27px !important}',true);
  1944. else styleElem.html('',true);
  1945. },
  1946. load: function() {
  1947. if (typeof holodeck._tabs.addTab === 'function' && document.getElementById('chat_rooms_container') !== null) {
  1948. SRDotDX.c('li').set({class: 'control'}).html('<a href="#">'+(SRDotDX.config.slimKongBar?'Show':'Hide')+'</a>',true).on('click',function(e){e.preventDefault(); e.stopPropagation(); SRDotDX.config.slimKongBar=!SRDotDX.config.slimKongBar; e.target.innerHTML = (SRDotDX.config.slimKongBar?'Show':'Hide'); SRDotDX.gui.applyKongBar(); SRDotDX.config.save(false); return false}).attach('before',document.getElementById('nav_welcome_box').children[5]);
  1949. SRDotDX.c('style').set({type: "text/css", id: 'DotDX_kongBar'}).attach('to', document.head);
  1950. SRDotDX.c('style').set({type: "text/css", id: 'SRDotDX_botClass'}).text('.bot{display:' + (SRDotDX.config.hideBotLinks ? 'none !important' : 'block') + '}').attach('to', document.head);
  1951. SRDotDX.c('style').set({type: "text/css", id: 'SRDotDX_raidClass'}).text('.DotDX_raid {display:' + (SRDotDX.config.hideRaidLinks ? 'none !important' : 'block') + '}').attach('to', document.head);
  1952. SRDotDX.c('style').set({type: "text/css", id: 'SRDotDX_visitedRaidClass'}).text('.DotDX_visitedRaid{display: ' + (SRDotDX.config.hideVisitedRaids ? 'none !important' : 'block') + '}').attach('to', document.head);
  1953. SRDotDX.c('style').set({type: "text/css", id: 'DotDX_forum'}).text('div.game_page_wrap {padding-top: 16px; margin-top: 14px !important; background: #333 !important; display: ' + (SRDotDX.config.hideKongForum ? 'none' : 'block') + '}').attach('to', document.head);
  1954. SRDotDX.c('style').set({type: "text/css", id: 'DotDX_details'}).text('div.game_details_outer {margin-top: 14px !important; width: 900px !important; border: solid 20px #333 !important; display: ' + (SRDotDX.config.hideGameDetails ? 'none' : 'block') + '}').attach('to', document.head);
  1955. SRDotDX.c('style').set({type: "text/css", id: 'DotDX_filters'}).text('.DotDX_filter_dummy_0 {display: none !important}').attach('to', document.head);
  1956. SRDotDX.c('style').set({type: "text/css", id: 'DotDX_serverModeRaids'}).text('#kong_game_ui p.DotDX_sid_' + (SRDotDX.config.serverMode == 2 ? '1' : '2') + ' {display: none !important}').attach('to', document.head);
  1957. SRDotDX.c('style').set({type: "text/css", id: 'DotDX_chatResizeElems'}).text('#kong_game_ui textarea.chat_input { width: 270px !important; }\
  1958. #kong_game_ui div#chat_raids_overlay { width: 292px }\
  1959. #kong_game_ui div#chat_raids_overlay > span { width: 282px }\
  1960. div#dotdx_sidebar_container { ' + (SRDotDX.config.sbRightSide ? "text-align: left; padding-left: 1px" : "text-align: left; margin-left: 2px; padding-left: 6px") + ' }').attach('to', document.head);
  1961. SRDotDX.gui.applyKongBar();
  1962. SRDotDX.gui.toggleFiltering();
  1963.  
  1964. var elemPositionFix = "";
  1965. if (SRDotDX.isFirefox) {
  1966. elemPositionFix = " \
  1967. #kong_game_ui div#chat_room_tabs div a {padding: 3px 9px 4px 7px}\
  1968. #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head {padding: 2px 7px 3px}\
  1969. #kong_game_ui span.generic {margin: 2px 6px 0}\
  1970. #kong_game_ui div#dotdx_status_div {padding: 5px 6px}\
  1971. #kong_game_ui div#chat_window_header div.dotdx_chat_overlay {margin-top: 4px; padding-top: 3px;}\
  1972. #kong_game_ui div#chat_raids_overlay {padding: 4px 0}\
  1973. #kong_game_ui div.chat_message_window p span.timestamp, #kong_game_ui div.chat_message_window p span.room {vertical-align: baseline}\
  1974. #kong_game_ui div.chat_message_window p {padding: 2px 5px 3px}\
  1975. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list .raid_list_item {padding: 2px;}\
  1976. .raid_list_item a.dotdxRaidListDelete {margin-top: 1px;}\
  1977. #kong_game_ui div.chat_message_window p span.ingamename {vertical-align: baseline;} \
  1978. ";
  1979. }
  1980. else {
  1981. elemPositionFix = " \
  1982. #kong_game_ui div#chat_room_tabs div a {padding: 4px 9px 3px 7px}\
  1983. #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head {padding: 3px 7px 2px}\
  1984. #kong_game_ui span.generic {margin: 3px 6px 0}\
  1985. #kong_game_ui div#dotdx_status_div {padding: 6px 6px 4px}\
  1986. #kong_game_ui div#chat_window_header div.dotdx_chat_overlay {margin-top: 3px; padding-top: 4px;}\
  1987. #kong_game_ui div#chat_raids_overlay {padding: 5px 0 3px}\
  1988. #kong_game_ui div.chat_message_window p span.timestamp, #kong_game_ui div.chat_message_window p span.room {vertical-align: text-top}\
  1989. #kong_game_ui div.chat_message_window p {padding: 3px 5px}\
  1990. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list .raid_list_item {padding: 3px 2px 1px;}\
  1991. #kong_game_ui div.chat_message_window p span.ingamename {vertical-align: top;} \
  1992. a.DotDX_RaidLink {vertical-align: middle}\
  1993. ";
  1994. }
  1995. SRDotDX.c('style').set({type: "text/css"}).text(" \
  1996. " + (SRDotDX.config.hideGameTitle ? "ul#gamepage_categories_list, .horizontal_ad, span#kong_game_bf_300x250_2_holder, div#gamespotlight, div#dealspot_banner_holder, div#kong_bumper_preroll_600x400-ad-slot, div#gamepage_header {display:none;} \
  1997. div.gamepage_header_outer, div.gamepage_header_inner, div.gamepage_header_outer h1 {height: 0 !important; padding: 0 !important; margin: 0 !important} \
  1998. #primarylayout .maincontent {padding: 6px 0 !important} \
  1999. " : "") + "div.raid_list_item.hidden, .DotDX_hidden, div.game_page_admindev_controls, div#subwrap, li#quicklinks_facebook, #shim {display:none !important} \
  2000. #primarywrap {background-image: none !important; background-color: transparent !important;} \
  2001. /* body {background-color: #" + SRDotDX.config.bckColor + " !important} */ \
  2002. #maingame { border: 1px solid transparent }\
  2003. #maingame .user_connection {margin-right: 10px;}\
  2004. div#game { overflow:hidden }\
  2005. div.upper_gamepage { background: transparent !important }\
  2006. .user_connection #chat_connected_indicator {margin-right: 10px}\
  2007. #FPXtt { position:absolute; display:block; } \
  2008. #FPXtttop { display:block; height:5px; margin-left:5px; } \
  2009. #FPXttcont { display:block; padding:2px 12px 3px 7px; margin-left:5px; background:#666; color:#fff; } \
  2010. #FPXttbot {display:block;height:5px;margin-left:5px;} \
  2011. .welcome-user>li {background-color: #710000}\
  2012. .welcome-user>li:hover {background-color: #423f3e}\
  2013. #kong_game_ui ul.main_tabs {height:30px; padding-left:7px}\
  2014. #kong_game_ui ul.main_tabs li.tab:first-child { margin-left: 1px; }\
  2015. #kong_game_ui ul.main_tabs li.tab a { padding: 6px 6px 4px; margin-top: 6px; border: 1px solid #000; margin-right: 3px; transition: all .3s;}\
  2016. #kong_game_ui ul.main_tabs li.tab a.active {margin-top: 5px; padding: 7px 6px 5px; border-radius: 5px 0 5px 0;}\
  2017. /*#kong_game_ui div#chat_tab_pane {height: 645px !important}*/ \
  2018. #kong_game_ui div#lots_tab_pane {padding: 8px; text-align: left; background-color: #777; height: 644px}\
  2019. #kong_game_ui div#lots_tab_pane div#dotdx_shadow_wrapper { width: 282px; border: 1px solid #222; box-shadow: 0 0 12px #111; height: 643px; overflow: hidden; background-color: #ddd;}\
  2020. #kong_game_ui div#chat_window { background-color: #fff; border: 1px solid #333; overflow: hidden; box-shadow: 0 0 8px 1px #333; }\
  2021. #kong_game_ui div#chat_window_header { height: 69px; box-shadow: 0 0 5px #333; position: relative; background-color: #ddd; }\
  2022. #kong_game_ui div#chat_window_header div.room_name_container { border-bottom: 1px solid #aaa; padding: 5px 7px 3px; margin: 0 !important; background-color: #e6e6e6; font-family: \"Trebuchet MS\", Helvetica, sans-serif }\
  2023. #kong_game_ui div#chat_window_header div.room_name_container .room_name { font-family: \"Trebuchet MS\", Helvetica, sans-serif; color: #333; text-shadow: 0 0 3px #ccc; }\
  2024. #kong_game_ui div.chat_actions_container span.kong_ico { font-size: 12px !important; }\
  2025. #kong_game_ui div.chat_actions_container ul.chat_actions_list { right: -1px; padding: 4px 0; border-radius: 5px 0 0 5px; top: 22px; border-color: #777; box-shadow: 0 0 8px #999; min-width: 122px; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; }\
  2026. #kong_game_ui div.chat_actions_container ul.chat_actions_list li { line-height: 20px; padding: 0 10px; border-width: 1px 0; border-color: #fff; border-style: solid; transition: box-shadow .5s;}\
  2027. #kong_game_ui .chat_actions_container .chat_actions_list li:hover { background-color: #f0f0f0; border-color: #bbb; color: #333; box-shadow: 0 0 4px #ddd; position: relative; }\
  2028. #kong_game_ui div.chat_actions_container span.btn_tools { height: 16px; line-height: initial !important; width: 20px; margin: 2px 3px; } \
  2029. #kong_game_ui div#chat_window_header div.dotdx_chat_overlay { border-top: 1px solid #bbb; overflow: hidden; white-space: nowrap; } \
  2030. #kong_game_ui div.chat_actions_container select { width: 92px; margin-top: 2px; font-family: \"Trebuchet MS\",Helvetica,sans-serif; font-style: italic; outline: none; background-color: #ddd; margin-right: 2px; } \
  2031. #kong_game_ui div#chat_room_tabs div a { margin: 0; background: none; text-decoration: none; font-family: \"Trebuchet MS\",Helvetica,sans-serif; font-size: 11px; font-style: italic; transition: text-shadow .2s; border-right: 1px dotted #aaa; } \
  2032. #kong_game_ui div#chat_rooms_container div.chat_tabpane.users_in_room { height: 89px; border: 1px solid #999; border-width: 1px 0; border-bottom-color: #888; box-shadow: inset 0 -2px 6px -4px #444; } \
  2033. #kong_game_ui div#chat_raids_overlay { display:none; position: absolute; overflow: hidden; bottom: 488px; left: 3px; background-color: #e0e0e0; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; border-width: 1px; border-style: solid; border-radius: 2px;}\
  2034. #kong_game_ui div#chat_raids_overlay.active { display: block } \
  2035. #kong_game_ui div#chat_raids_overlay > span { display: block; margin: 0 auto }\
  2036. #kong_game_ui div.chat_controls {border-top: 1px solid #000; position: relative; }\
  2037. #kong_game_ui div#lots_tab_pane ul { margin: 0px; padding: 0px; list-style-type: none; position: relative;} \
  2038. #kong_game_ui div#lots_tab_pane ul li.tab { float: left; height: 100%; } \
  2039. #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head { font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; font-style: italic; cursor: pointer; border-right: 1px dotted #aaa; transition: text-shadow .2s} \
  2040. #kong_game_ui div#lots_tab_pane ul li.tab div.tab_pane { display: none; border-top: 1px solid #888; width: 282px; height: 600px; padding-top: 2px;} \
  2041. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_head { cursor: default; }\
  2042. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane { position: absolute; display: block; left: 0px; }\
  2043. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list, \
  2044. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #paste_list {overflow-y: auto; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; height: 449px; border-top: 1px solid #aaa; box-shadow: 0 0 3px #ccc; background: -webkit-linear-gradient(left, #fff, #eee); background: -moz-linear-gradient(left, #fff, #eee);} \
  2045. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list .raid_list_item {cursor: pointer; position: relative; border-width: 1px 0; border-style: solid; border-top-color: transparent; border-bottom-color: #ddd;} \
  2046. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list .raid_list_item.hidden {display:none;} \
  2047. a.FPXImportLink, a.FPXDeleteLink { font: normal 10px Arial; border: 1px solid #c0c0c0; color:black; text-decoration:none; cursor:pointer; font-variant: small-caps; display: block; width: 40px; text-align: center; margin-right: 2px; background-color: #fff} \
  2048. a.dotdxRaidListDelete { font: 10px \"Trebuchet MS\"; text-decoration: none; cursor: pointer; margin-right: 2px; float:right; display: inline} \
  2049. a.DotDX_RaidLink {text-decoration:none;} \
  2050. div.DotDX_ListPanel {border-top: 1px dashed #999; margin-top: 2px; padding-top: 2px; }\
  2051. div.DotDX_ListPanel > span.raidListContent {font-style: italic} \
  2052. #kong_game_ui p.user_count.full { color: crimson; } \
  2053. #kong_game_ui div#lots_tab_pane a.pastebinlink {font: normal 11px Verdana; color:#333; text-decoration:none; cursor:pointer;} \
  2054. #kong_game_ui div#lots_tab_pane a.pastebinlink:hover { text-decoration: underline; color: black } \
  2055. #kong_game_ui div#lots_tab_pane span.pasteright, #kong_game_ui div#lots_tab_pane span.pasteleft {font: normal 11px Verdana; color: #333} \
  2056. #kong_game_ui div#lots_tab_pane span.pasteright {float:right; padding-right: 6px} \
  2057. #kong_game_ui div#lots_tab_pane span.pasteleft {float:left} \
  2058. #kong_game_ui div.chat_message_window { position: relative; margin: 0; } \
  2059. #kong_game_ui div.chat_message_window p {border-width: 1px 0; border-style: solid; margin: 0;} \
  2060. #kong_game_ui div.chat_message_window p.DotDX_raid, #kong_game_ui div.chat_message_window p.whisper, #kong_game_ui div.chat_message_window p.script { border-top-color: #e5e5e5; }\
  2061. #raid_list .raid_list_item.DotDX_N:hover {border-bottom-color: rgb(138, 179, 137); background: -webkit-linear-gradient(top,#CBE7C4,#F3FAF2); background: -moz-linear-gradient(top,#CBE7C4,#F3FAF2);} \
  2062. #raid_list .raid_list_item.DotDX_H:hover {border-bottom-color: rgb(173, 173, 104); background: -webkit-linear-gradient(top,#F7F0C8,#FCFBF8); background: -moz-linear-gradient(top,#F7F0C8,#FCFBF8);} \
  2063. #raid_list .raid_list_item.DotDX_L:hover {border-bottom-color: rgb(177, 135, 128); background: -webkit-linear-gradient(top,#F3D7D1,#FCF7F7); background: -moz-linear-gradient(top,#F3D7D1,#FCF7F7);} \
  2064. #raid_list .raid_list_item.DotDX_NM:hover {border-bottom-color: rgb(169, 154, 187); background: -webkit-linear-gradient(top,#DDD4E2,#F4F0F7); background: -moz-linear-gradient(top,#DDD4E2,#F4F0F7);} \
  2065. #kong_game_ui div.chat_message_window div.cntrNotify {border-width: 0px 0px 1px; border-style: solid;}\
  2066. #kong_game_ui div.chat_message_window p.whisper {margin:0; border-bottom-color: #A1B4BE; background: -webkit-linear-gradient(top,#DCE8F1,#EFF4F7); background: -moz-linear-gradient(top,#DCE8F1,#EFF4F7); } \
  2067. #kong_game_ui div.chat_message_window p.script {border-bottom-color: rgb(165, 165, 165); background: -webkit-linear-gradient(left,#f3f3f3,#fff); background: -moz-linear-gradient(left,#f3f3f3,#fff);} \
  2068. #kong_game_ui div.chat_message_window p.script hr { height: 1px; border: 0; background: #ccc; margin: 4px 0 3px; }\
  2069. #kong_game_ui div.chat_message_window p.script span { font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px} \
  2070. #kong_game_ui div.chat_message_window p.script span .title { text-decoration: none; font-size: 12px; font-weight: bold; color: #222 } \
  2071. #kong_game_ui div.chat_message_window p.script span.bold {font-weight: bold}\
  2072. #kong_game_ui div.chat_message_window p span.separator { margin-right: 0px; display:inline; float: none} \
  2073. #kong_game_ui div.chat_message_window p span.username { color: rgb(39, 101, 148); text-decoration: none; cursor: pointer; display:inline; float: none } \
  2074. #kong_game_ui div.chat_message_window p span.username.ign { color: rgb(38, 116, 34); }\
  2075. #kong_game_ui div.chat_message_window p span.username.is_self { color: rgb(151, 49, 49); }\
  2076. #kong_game_ui div.chat_message_window p span.username:hover { text-decoration: underline } \
  2077. #kong_game_ui div.chat_message_window p span.timestamp {font-style: italic; font-size: 9px; color: #666;} \
  2078. #kong_game_ui div.chat_message_window p span.ingamename {font-style: italic; font-size: 11px; color: #666;} \
  2079. #kong_game_ui div.chat_message_window p span.message {line-height: 16px; word-wrap: break-word; display:inline; float: none} \
  2080. #kong_game_ui div.chat_message_window p span.message a { text-decoration: none; color: #444; font-style: normal } \
  2081. #kong_game_ui div.chat_message_window p span.message a:hover { color: #000; text-shadow: 0 0 6px #888; } \
  2082. #kong_game_ui div.chat_message_window p span.message a.chat_link:hover { text-shadow: 0 0 4px #F5C68A; text-decoration: none; } \
  2083. #kong_game_ui div.chat_message_window p span.message a.chat_link { color: #946A3D; } \
  2084. #kong_game_ui div.chat_message_window p span.message a.reply_link {font-style: italic} \
  2085. #kong_game_ui div.chat_message_window p > span.slider {position: absolute; display: inline-block; border: 1px solid #777; border-left: 0; height: 24px; left: -2px; margin-top: -5px; border-radius: 0 5px 5px 0; background: #eee; box-shadow: 0 0 7px #777; transition: max-width .3s; overflow: hidden; white-space: nowrap;}\
  2086. #kong_game_ui div.chat_message_window p > span.slider > span.magic, div.raid_list_item span.DotDX_extMagics > span { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABVAAAAAQCAYAAADwHlSDAADiTElEQVR42sz9d7Rl2VneC//mXHnnfXJOlXPq6hzVUWoJlFAkCwe4gMEyF5uLwdxrwOZiLsbCgovBGJQQEkrdCi11DlVdXdWV46lTdXLeOay85v1jlxpk2ff7xscffGuMM84eZ6y51zxrzfXOdz7v8zxTAA/y9zue7/zS0KUNQpCoENsokqiEIGySKA8pFAX7IEEckCiPIK6S0CBJAgCEgLQUSCWI0BlRMSGKDZHQUgIDjSdQNIRiVSiWlcBVgndnQSEAgdOTomDA6kodhQJAl5JCX4pPXmt+T6d/YW8P63MlPtPonCcQSEsCCUksMFOd701cQRQKhFDYI5I4EAgfEjchjiKSuNNeCoEmNMaKKXYeLbJlWCOqtzGDhKVmwuyCz6UFn7YXolAIBEqpt/ojhESSoKSJ0kwEApQOBJAolIg756kYlai3/j9U8v/VQ8p1dTO1fQdnjr/2PX9/4f/6NUgSkkShlCJRMSjV6Y/U0DQNqUmkZqBpGkLXQDNA00Hq3PtPfhYpJUp8934r9vxQigee2M4dR8ZQTounvnORVz+9Tmtd0F6Bdil663xHSaSUiFCAAAV8NJvm8T2T7N+1BasZ8MLJ83x6YZHNOGEl0SiJgFh0+p8JwBE6eWWSFQkZTZJTOo4UZGKBrUlMETLupNB1nQPbJN+cqXG6pKglAafSNgDhrfsogL6hD7Pv0CPs33s79cji5KvPc+XKXxJ7m8ThKkm4jgCk1Bi87z70fA49lcEeGiao1VBRAFFC1G4RbGwQVEpEjTpx24PQI0kUUmqoOMH2NjGlwhICR1PkTZjohR1bJLe9a4BdD/0EZuZHuX7+Da5deIMu4wXWzlzk8tmY2Q1Fo5Qhp2mkpY4jIaMLLAFhFGOiaLYD3DAiSBJqUUJLKWIhcJWiJmC+2IuUkhgQ6MRxTBQFSN1CCgOVQKxiIreKEBq6qSGEABK8VoORB34MI5VDtxwMw8Rz20TtBmGrStSqEfkuSeARhz4q9ImjABVFJFGIUgm5ZJnxArzvSDeOo1isQv/gEMN5D61Vph1A2RXcWKqjScEdu3oQvsenjldYqCgubqr/j2O/09+//f13jx3jhxEIojhCkRCEHraVIo5jNqrLpKwM26f2sWXrBIvzywRhwOraMhvVZYLA5X17R/GQ9JsSpSBKFG6c4CcJUZKQKEhU5936np4qUEJR7TvCAw88zsGDe8gXuimVKywtrxEEPomKUQjqtQZ9vf109xRJp22iIObyxcucPv0a809/EkdCSkJWE6SEIKVBTkKXKTAVZHRFVhcYicAWgrQmMYRCJfCNhkOr4CALO2mxhaXMKu2My+hdNo63ndJsi3z7Jr3bXC5tJKTMo2yevcjG5hk2yi7DUqcZJnQ5GkNZi5wpydkaaUugSwiUwIvAjRLcKCGMFWGUEEQKP0yQ+36NUa+LxApZ0Cq8euK/4K7NdgKB1FC6jmbkMcxeNOmgZAhaE7e8AF4TFYcgJGY2C3aWwaOHCN0A07aJwoDq7BLthZsIkSCEQApB0G59T9w0gL2W5JyviN+aTWCnKWnGioX4v3t2f+f4kU8+y+L8FbpTg8TnV0gpiTHSzZlrJ4hcgyuv/hFx2EAzswzvfJztR9/P2uwprh77c4LWOm//s//MeqlGbeYG1YVFguUVgvU1wnKFxHM7MdXQicLo+66taRrvO/RrDJslstJjKSjQiFMU9DbtxMRP9O8ONQSgCUWkBAJwZEhaD8jcFWBFZeLIRwkdXUqiVgm3UWagO4uuSzY2SsRK0N/XzUL6bm72fxBTKsYzbX7vJw8hpMSyLJRSBEFAPp/Hsixq1Sq5dArDtGl7AVJKbDvF2voSKSeNaZj4oUtXOsXbxgaxTZOP7tvJ0stnOTLUg6VprK1tUm0q8u++i9euXWFTNzn52nnuuHMXnz8/w3uffDdRFBE2mtxYXuL1N0/hej6FQp7Do2NYSpGWGijFbL3KcrOJFLClu5ex/n7+l1+/m5Pn1/nzT50jSnx+9efuoVn3uXazzcxsjdXNNvVGSLPl4noBvu/j+j5hGKBUjGy1iFSCJjU0XUMISRzHxFGEihOE1ElUdOspgFCgxN/GpUCzOrkDEgFEKoFb+cFbidGt5xehkCgSBUrFgGSX1kAkCY5UDAubH5Dv4YEtP8Cfj59F/+bT7Njxg2Q2y1xonaAWVOhO8pzr30q6coFl/Qpzo8NospORBD1bSEo30XPDJNVFBAKhCYTsvDf6rT7HUqJpkqwmeHgl4EKzQbdusCOVYs5zSWk6X9zcoMcweF9PLy9UqyQothZzmP1ZklIL0Qw40WrSPPzPGBnfzTNP/y5jY4+xvPoyQRDSblfIZodACLZtewTP83Hdm2xuXqO/bz9btu3i61/+l+wppHmvaWKkbO4Z76KZtgl7ipQ0WKn6mFIxbCnGYsULF1eZjhK2tFze8FxStsWJwh70riFay9d44Nd/nfN/+hm8zUWKo1sI6ptszF4gPzTM0JZxZo4dw8pmaKyvEXht0ukMI60GjgRNSMwkxpGQA/olnIhS5DTFUgye0nCEQkjokyFZFRIiedX1KJo6cRSTJuE9cUygS04ZkhtJQqRLDMegFSXoKRMvjPHDhCQRmIYBVQsttink+ulJ7WGqd5hGV5PR7du5cPEErWsRTW8eIyMp1zc48uEnabsJQb2F32py+exx+vv6mJiYYHx8jC1T45Qrdc5fuMTC8jJhGHLwwH7mr5whiOHspWuEQUAcRQgpmSyOcmR8N8dvXKIVhijVGSNCCOI4JI58otgjijxUEqOEQEqBLiW6ZiClRAodXTfJZroxdJO+7ikKuUHqlde4vrSGZeik9QgVecxsNEDpCKFIVITY+Sl694wxOOrQbIfs3mPRX7T4yitrNN/8j/jTMVgu2vAOimOPkuQE7doq7nyAUq9w/12HQCmK+RSmoRFHMV/53N/QOzTC25+8H9PU0WTnNXQsDc+P0aSgWm8TNpfJ+XV6ijr1WoWNUpVqPSFJoBYNo+sarzz3F7RbGwhNQzNN4iC+9V5rSEPnl7vSNALBoGayNy+YW/f5k3pCTzHFT/VIuoY1FhZ0Xll3ea0doesmd+Uy7DEEf7lRpfjuJ6FrkGR4gmFLcWjfPqqxZIuu05VL4eiSQpSw0Aw57eqcasQMjphUY0W7HPHhXz/A77jDVCKBrtmMHd7CzocPYYqE6197FqPsUdy6i3qjiRsGtGoN3nPnAUZSHpdG+xnabL4Vy74bJxACpRKiKCKJO/NuFAY4tk2CQNd1hJSgFFd/+zvoMmFsOEO+WxBqJlZXka13HyQ31EsSx9gpg+a1k7TWVzASj289e4FHj2RIooiPB/cgfY1QeFi2ScbSsHUNVwhiFNuHTWZWfbYUJY1AYElYqyU4MuH+ccFfvvAElZV1YpmhsTLL8Na7iewUGdunkC/Qrtd5+G2jjDgGOS2mUvG4Mu2yGQWUVpb4j/9+kkwux+f+7Fe4emWa+eUSm9U6bS/A92OSCDw/IIgCwlARBTFhrNClhhdEbFZa/EMe96YdbCHIAj1CMKVptJViJY5pCNhUdO6l1ChIgwHDRGkWTd1iSZno/+iP2DndTX69zY2qwiNBxhl6tnnUUlXmsial09foFd0MDn+Vy8njNE5F1Ho3uWfwJs9/8ff+Xv3/wSf/CbrXon98gG27Jznx+jUadRfDcFAk5P0GK4kEFErF3H7HTk4dP4cbehi6ybnrJwjjzvwshY5umiRxgmmnyHQPEwct0sUC2WKRdrVEfXODKAoY3X0QITXGjh5AahqmZSGkwHddQtfFb7toQuCGPlEMQgpSuSyGaUKSIHQDzTJ55pN/zRYR0a1LuqQg4zjocUiMJGVnKKQzlMwcK6V5DD8gRqeRCEQU4UqDkzdeQJNgGzo9xTQj/QX2bR9m37YhdkwOkE6lWNuscezMDK+fu8H0/CalapO25xOEMZd+7R5sFWHpOtLqwA0nmz382dNncE2bh/cN8JN3ZpC6DjoIXYJlQRASNl0O/+4sUegTBAG+5yGEQNN1hBBv4RSDQ6OMT0xRr9cwzc56u7y5gZNO89HaCQoTW7gYO8xWm6TMFB8NFNnZOaxE4dgZmpqH9uiDRE+8i9BrEbaqFPw665fPcucvPAKRQoU6QejgtiV+ucL1hVXm1krMLlXZLHtI5SF0DV3qSM0msXrxYouv7XwnvsjQznTRlZcMajXM6/OkXvpj7j1QIFvs4XpZcK3rNqK1ORprsyyOPIbfsw3RbBL/53eglADZiWuGYSClAN3ANG1C30WJDsYRhiEgiPyAMAqQSPzqJlP9k1i6SUp3yKcyXFi6gCl1bp+8A8uyubk+z43NGRzDYKhrjMsLl+jK9LLaWOZfDEzSUBZlkaIuJS3Dwih2Ifv62XZgGx95x2F+6y/+hrLfZH2tQXNtHddM0dJtlNdiICxjpbNkUlnMWOFFHgUfvCCgaKZp5R2IQhoqJIhDAs/FbzWIVYJEsHjmdAf/AbaMjbF7bJD79k7yLz75WTQh3lp7mHonB/fCAImgMzIkmfE7OpmuMkm0FKiYxJQIFRM6U6goR9/+bVjDgyxcOU3YbpGpV8iM7ME7d4zf/PUtFLIxcwsxpbLLZsnFDzQ03SQKI9JpGylNNE2ilKKnS+KYkmJWJ5fR+MEP/Ku/V/zRAZRSL/z/0lgI8SC3gKSsPcXk7h+ktbqGH6xRb88jhYZtFgnCJlLp7Hvg43hzC5QqV9msnaPpT5MQoEnJnUrw4f4BgkqFNc/nJAodGENnWSQYKubf9A1gViq8HEZ8WcQcVwkKnaIJkWMwJCKuC4u8KXEDdQvWFejJ9y9/wzDqDHRUZ2HXZ3DXk1nmZmNqJUV7w0WTApFO8FyF1OCj/3ycN8+2WLnepjbrkqxpEHcWtkoJHrx7iJ//QDfHv7XIFkwurjU4MuVw1XXZt9XiYI/O8cWEmbUmiTDwPO+t/li5PnY/+hFyY3tQZgpDWtiOoM/R0XWd5bqgXC7TrC7SXp+htTKHX1qkPH/hf/p8NF1j4tARHvrQR/nZD3+I5//mi98HoLZqFQLPxWu18f0AFUfESQwKNE1HM3QM08R0Uti2hemksOwUUteRptVJgKVEWRpONmbHw2n+6Y88xGd+8xr/6UeeoquQ48d/9jD/6o8m+MJzJznx+wKjppHcWh+aAUglsSxBQWnck0/xkXc+zm+du8jzf/EVenJZ/ulDd/J/T43z/Guv8/uBRzvRieWt+0aChcSRirQmyKmELAkpoMu06TECRiyHsYE0mRwsrTaptSVwK5FVJkmSIDWJLrvoGXyAD/7QRzj2yu/we7/9w3QXijz5rp9lx84/5Nsvv0hj7hMkqva3E24+h1HsxegdpXDoCEGlht/YJNxYQq2toGXT6KGPEALTyZC02kRum8hvd66LQgK66Pw4uiBnK/J5RTYXEyf7eOVbT9F2Ax5+97sozy7grc1gXGkRh5DVNIYcm7ymkdN18qZkqN/ACwIKRUm7GVBad/HDgPklj2aYgFJsAkvArFKYpoNEYqUKaEYKooQwibH1PJaRpVxbJDTzKBEiNYGKI6Kgjm7aSM1EM2x0O81gf5G19TLNKEB6JkLqCCFBSIQQJN8bPEAJRnLwYw/28erVKgfGdd7/2BiFngFSwQYpDRrlhLnpNfYOOuQGcszMNllqevzIA9388bc3YfN/Hp+klN/3+bsg6neLF+X6Oo6VwTEddM3G1C1sK0XTrZOysrS9OmHk0z/cw9jUIHMzS0RRhOu3qMURXZZB0DtCT6uCoyJacUI9DGkGEW4sCG+BqPF3QVQlbwEonaklDF1WlpcZHh4gCCMajTaNao10Pk+rVQWlSJKISqlMT3eeyA/Y2CixtrZMrV5Gis5khOoUgWIUiRKkTUGQgKSTvCkgTMDUO0BMknTuRV7qFIVJI7tJfmqCbvaykdsgpYVMbs0zo2n0ii4iO+RQ925qcwtEvSu4jSIGQ8y0biKFwiUhZSUUUhrFtE7OFuiaIFDgRQI3SvDjmDgShFFCzY1oCvhXO97ByUsnODx2B1+4eZqzxiBmRmNwYIS5BEwnxT7rEFFoUEkqFIoZmpmElbkXKV97HdwOgKrnuui/7TZ6uzKkam2CVptK5DP48BFK6zupL64QVCvE7Qah56FihWE7hF6bnaZklyU453fA04OWZIuu+Ojju6Fc4jdeWeV81AFRtVv3GCABoks3sUeHiULBjkfvpe3C5qVz7Dv6Q6yUbrC8cAQRwaEn/hGt6hrHvvKbJHGAnh5CGlkWZxdJiwQ7CYn8gMj3iXwfkpgddx9k/2P3kO3J819//reJo/j7xrgtPUwVoDkWW/skq6s1qoGNG+lvnXN0yqfallxf07GljxtbuEqj32yhuyV0Q0NoktitUauWsEyd0cFuwsBnZXUTqWmMj4+yur5JLGvosUvaMlj3LCQC0zDRhMQPfAqFAqlUCs8P2Tk+TogkihO8oEI2W6Ra2yCTzpKy0vihi6Hr5C2LYirFR47sJnNjlh07x3itKLivkKNUFDyQH+SblTKnLyxw5/ZRzim4cuoaT+waxW23sXUNYRhMFovYhw5z4sJ56u02r1yfoc+22d/dRZ9lMV+tENwqFC6WS/Q5KfxQ8ft/cJJao0XvQA/L1ZiChJSjk886tFoRcSxJFB3gP4huxRCBUhIU6MgOMBrFaEYneYuVQFka3cOjlGY3CILSW/FHEx1ERgiIhOgAlUCCQhcSS+rEKOIkRiCR4la7W6B/RPLd2Ys4SSCJqScKm4jAjrB6t7J88WneNfYIX3PKnONNpnpH+Vn7Q4TVNeadGjOrddpxQiAESkFg2GR1geybQlTn0Syd8BbYK2XnnBhBojogcJQoTCkQSpEVkhP1GppSVOOIQVPQo2mYClpRhA0MpBwudVtU2w1KrQqDsY6uFKdOfIKrlw/ywR/+j7z03GcpFrdw48brOE4fPX13kM32kUr3kc1lefPUaQr5SR557Mf5v//wo4DkXiG4c7BA19ZhjIk+TpcV14OEfDpDeksGP/C52CrzylqJ3btG+MWRIs8/c5p9SUA+l+KF2jrDe+/GLnRx6bOfI7/rCM0XF/DDiL5D9xC6TZTbonfrDhbePItSoNs2SRJ38iOl0BGYJMgkYSHKEYoeUBYukvnEwtAshFQ0tIB2vMZsUGU0CdhrJbQ9D+UL7rENHvPaXFYRVjPh7VIylDP5U9tmw1FEQYIXeYRKkRgCFQoSqdG/507ydgoz00/RG6MVvYjl2Vx99QwTU3uYG9+C3Oyi74hBamaJq996jcO//D6uf/4Uum6Sy3cxMjbBzp27GBnq46tf+BRDIyPcc9e9vPTaCRbm5jh//gKVK6+THt2DncqQL1jUqxX8wKcRRmgpiy3dQ7hei0SBJkxSpkUUBSShj24J1mob3Cwt4scBJBI0nZyVoa0gk86TywySSWdx7CJ3HRygWimzc3uRlU145nwZTWSo+0UyTpYgbBPFHqiYrl2TxOmEVD/81IP9lGoe3d0Oeq6X1Pt/l289f4aL33mFsNSkvHYa059i/I7taPdKrjy9SJIkCNkhCWiaQOoWW/fso7JZwrYNHNuARNHB+xSGruGHEe36Bq9/5Y/p6t7N5OQ4SwuXQHUKd2GcpeJtMLFlO1t2P8DV898gUQma7QBBB2TWdKSu08pk2J+NoaLQRizutBxOzFS4GQgKeyb49MkL3Nk/SGrTJy90Et1CKRjbnmZrvUKpMIGTSzE5WKDt+6yUGjxxeAdpoUjZGrFStCoxddsiK+AuU1Frx9QWI2o3XT4/2+DHd7r8ZStP14P72HvfYdrTy5z5wjdpN6vsHh9h+9g4m+UaW7cPMik1zqxVeaYVsbXQhdqo38pkEjQ6wLYmEzJpQRAk1JuiQxgIfLK+x6btYGBTujqNMzaKFCHXakvUDcVt3Q5DPXm6j96BFm+iKg0yIxPECvxWm43LV9hyYAvz8yU4YtKoRcQqJJMq4goNFcaEmoElWgymbISWMKTajG91GMwJolqTdNYhinWurQR8fVpHc3qxMpLAi3ByI2jKZ/PGLOmRDO+4vUK/ucKlakJVbqM4YBI1Q4rdCTemG1iZHIZlsb6yzNi2wxSLBWrPnkAJB6PRokWLetBElxpCtyEJUVKQJDFhnBCrmH/oQ3o+DrBP1/kZBN2Ri5SCM7rOX0URkVJESCIhWZch6zLC0RVFS5I2dO667JAsTnMtF1HviYlklaFiD2uzf0yIzmTBorXv49SWl6ktH8FNWrRSabYXFfmNl//e/U+nDVzpoy+9zPFKkx27Jllfq9FquEijRda9RGLcTqXqAQaeFzMsl1lO54hCCytTRAtvETwUGJaDYabI9G3FKQwwee8DOE7MxvRFpLOK0E2yff2YqRyrl05xdOBRqqXyrXlYYGYymLk8ThQShSEqVMxuuBTjOoEfoEuNAA1bgq4btIVOoglShqQVuOixgeG1CfUUehKxmcS02zVyUUikfLTYJxtH1JSFQYJSCQJBytIxDA3b0smmTDIpm2rFZX2jiWHqKEDXNAxdkrYM2p5PkiQEQYyetkjlU5iWRLVcckOH2DkXcPryNEdvG0Mf6BDLRDqFSlmIdpvEjzCSW2QDoaFrOpGUnSJK0qEhCJWgkgTLNEiUotVoUPI3qJTWCFyf0cmtLA/s4D+cnKflBwRBgGVZ7LznXj5kFKDtQTqNLgLcHQdpODaRJrD7h1gslfDzYyBiFJIEncTIgR4j0xpuUuPEpTWiMEaYAlMYmHYWIzuElekiyW2jsriE3igT9znoU2m6ohbMb7C//hznq9eoV0YQQYn6XIny7Itk3/kzxCPDJOldeCKHpSCOEnTLRNcNdCeFYeoI08BOpxGGztaBfsbGBimVK2xuVGjU6jQbDfyWi9dokcQxN1Zm2NK3FRkJSrV1MnoBXekU7WEsw2LDbpNmnaKZY7PR4NDoYTbq62zt2UWTmJK0qCtFO45ooWjWqsgo5F1PHub5Y+dZrpXpHc1x5sxFarKLtO9BZbmzBrd0rFSajDApBgn5pka+q4ifCulO59HSDkG7TrnZ4noxptZqolSC73kkUYgmBZquEUURQRxSa/uUGk1sQ+8QAUSnUKbfWn9rcSdnVnQIgzLxkUYKIhMRNIj1bnQvpPexD5AbGmLm1WmsLeO4YcLgQ+9g7sVnyR46wq4n7qb67BhJcoIgCNBEgBCKQjFHrR6jazoynca2JW03RggwdI20aWAQQxBSK3l/7/ij/72/QUDG3sJ4z5Mc+OCPMvuFcyT+ImveWZruEioQjPfsZ2jLvdz2Iw9z4auXaT2/2cnC0ZBo3IXi16TGbRNThN55zqRtNsKQWd3EihLea+i8a2KQbQ89gviz/8patYZMFOYtrlC24PAH11s8PlVEc1IMjtr0NuqgIC0lc7YDfG+l70ITDugd1mOqT2fgaIaf+OkB/ttXG6zdaFO5qFCxRhIG9O+w2H53hg88PEgxV+FLyy3qCpQmkGEHff/geyY5nG4SLa7zQz9zGDlwL0eWP89ffNnnfT+qkRMOz3zxOhM5yfWJXv7bS+tINIRQDO6+nyMf+xXU4CDLy5uc/fpzJIZF10Ave8eGmexz0CzwpU0jTOPJHlQ+RkeH/wGAKqVk+733cd9Hf5gHjt7OkFBMFvL8q29+6/vOXZyfo91sEfg+LT/AD0K8MCSRGrlMFiE1/LDDGhws5ugp5HGyWexMBstKYVgaCNBzCeP3w0d/8nZ+88eOMX1tCYAVd5Pf/t+e4VfNJ9h5dy/Xhkp4ywqJ2QGu4wBQFJTkfin42Nvu5yPfeoFr8wud/nk+v/pXT2F/6Ae4b6CX0YVVNnT9LQauEAEpGWMrcBSkSVHQQiYdm3HHwYkMegcjJg9KLr3ucmYzohpFt+APiZIWigRN5kgV7+OdT/4kn/vcjzA7cxWA5dUV/uRP/jf+0U9rjI08yJW1QZJoqcMFEhpGoQdnci+Zya0oJ4ORSpOWw7Sqo9QunMQxLQwrhb+6QntlibBVR0UBKklugTCCRClCpTCUwo0FbiJoJilOXdlB9c2vs2PPfh5/9w9Q3fwKjbKLYacYHmvT8sGdNegxDbZ3p+jtS9PbY9K3P4ezRcfqiVAiob0S0b5e4upXlli51iRsxVwIEyIEqATdMMlk+0nlBsl1TVDMDdGVdugv9mBoJtemLzE3P8NS+Sa+apMELoHfRjMynSApBeMjPfzYI0f40ktnON2uE/J3WNJ/BzQVgr/zV8VDe3q4vlJmuNumPw1TPRbWNoOrFxUbSz6uq5i6YztTXQaqUaXbingxCDg33+QHDhV5aa4MwIHdW4kCn2qjzepmlSRJeOjuPbx+egY/CDvsw78DqH4XRE3iCM9vIgTYQpByMtiWg2VZ9Hb309fXT3dPntJmGdtyGJ0aIp1NoUmdmwsJXZaJnXgk2/awc2WaWhSz7utsyIBaEOJGECYJkdJIlCJW3GKjdmJPLGFlZYn1jXE0XSNJYG72Jlba5sjhfdTrLW7MXCWX7ibwhvHabdbX1lhamiMhIVSgi853ISBWoMm/rfwJo1MqcCPQUdgIwlv/uwQ+pTk8qJnsDi2UXEXcNkGP3MaqmKd/TKcsFT1OhsQfI2iGlJ0mPd5RdjPBtH2DG+5NEBrNCBZaEbUwohYm3DeZIedoxHSA3ChWCBUTx+D7CXO3+n7mymv80tM/y7/++U+wa/cePlTcQ7zxBJP32xx39zA2HfJwcYrvrJ1luKuLYT3LK615vpNUaa3ewHMbICTF7TtwWk2a8/MEdIo6ffkCG8cvoeVs9jxxGzfPLbN+/HiHfSoEZjZH6LWRAt45IXjqnMIQgl/cZ7J/az9/uuGxrb/AH33E4N99cRkRJzw6IHh1U3EjguNewurxF9ky8h4WVxdYnCnj9w8S54eJ2pLGap3H//G/R8Nh5uzTBH6ddO8+NN0miXxa5Ws4a8vU0JBBQJaYzTBERRH3ffjt+E2Xp/7DnyOEoDDQQ2lx7XtY1cNd3QybVWqhjd5qUQlT9BcUWtOn1TA7lXHg4pLJRG/Ie460WS/HnJ1PaMY2QWKyvryCmbQwLQvHMujtyqEin7XVVRpuRH9/P33dOW7OznWUAkvHKNjDBKOPYRvgmAamaRAlMT09PWTzOZSSTPSlEbpFd3cXp85fpLt7kDB0byX7aZAJQtPpKuRJaxph00dfLvF8AmE+4IWLa3xFGSy3y7zcU+aJAwdpBQFBrGPHEUdGh/lGqc6uXpdICDK6Tq6QkFIZzF27ODUzQyWMWWk3KbWaDNk2epzQuqWwWGk2CJsN1tY82oGL6UA2O8S320XuzUScuD7D3qEstXpAuR4Thsktdl1HmSGl1ingGTaB72M6Dul0mjAMiKIIJ7OVntEQ3/LJuBkaSw0QCqnpSClI4vgt5YvGd99XgSF1DE3DVAIP2H1wFCdvMH9tleqqjxLgxiGCTlEGBLHqKGAiEZBWkpl4k4vRNVITIzy/+CpVtc6l0jUaPS5DXf28feLtrNx8jtlE4BsdRojRNY63fIWkfyfKDTrFLgGmEPSOTJBqlTCaZUKgFJsow+owyNot7s5kyWiSadflgXyBlSDgjmwOz9RJp1Psy2dI757iufMXqTZ9LNNhpt3i/ekcr7mCevUCUdCit3+UjY1pdux8hEJ+N+V6hJMZp+2VSTkCOzVBgs7a2lXiuImmmWwrZLGmennFybBaEkjTJmPpTGzdh0LjxpUTJO2QtufzWmyxvuiy87ZtPNkLf/PNG6SzXbQXrzL++HtZf/lpmvNzjB69j9VzJ7GK9zJ09H423nyNmRdeoXfbbtzVRY68+wc5/+WvkE45yFoZTXQS6UjojFkxq1oPsTZBQXajS52aP085nCFRdfK5DFOZfdQ2zxP4q2R0HRWFvDdw6Tma4tlzLSoJ/KYb8dWCxj+1E35bi0kXBX0/PUgriaicaFF/tk0QhvQOb6FrsItgVsNMPcvy8gpGs0ZxsI8tg5KBwh7OvaKz8ewFNGkxOrybyl+cx9INwihkaHwLW7btZnR0lJwdMT93g3w2RW9PD4VcjmXdoL87w6wb0lvopVukyBfygKRarQGC6cV5hnp6OXtxhiRRJCohjgNU5BHFAUkSMtY7yP6RnSyVFujL9/PQPffz+pk3uL65gakXcKxuBrt3sW1iguvX/xJVWyTdTDCzvfT3Zhjvn+DkdItididzS2/Sdn3iJKG0XmFk1yCjOxLcoMn+oRxpGTGn2/zxM9O4UUT+nsdp3FiC1hpy6UvU/iqib2SK0W1HuPzyf2bP/e9CIQkTgW1I9h/ey6vPnyDjOBi66rz3KMIo7hTN2pusXvwWuZ5BxkeH0TQIQhOV+PhBHTdSNBOLqzOXGZ/czdr6NLXKLLpldxjpcdKJA4bB+fWEXmkzavlkx9LIVMJDzQzrm4KXzm7y9FrMdc/jUStD2vXwhEapFXHsRpXxbJqop4iwTYpOkTsmBlhxPbpSgowBbpigEKzaULUEw7ZgsZSwdCNg+myD6pVzBJFOZqKHf7lrmG/0DDH9V9/EW9pA1yRCJQQZm6md26m++Bru7FXqdz3AxsI6B+44jDJihIxYXZxhbCRPb9HCdgxcv0539yCnT1Zo+ctossL0mTKtRsxIoYdsqkCtXKYnm2GkqLPuSwb7Qkb7LIpbCly5eI6NN2/ytvfuxuntpjk/y9rZM6S0kJNnS6SzJt56kzAySad1pjLLrLRC1nUbV/nsyMFQl6IdRvRksoTSZ99Ylr7xA8xcuM7FxYClZgjENCtt0tR56O4CXlPjmVeWGerP8Ms/ajMQTXPii3/NB37jD7hy7iwvHxtkpNck9jy29qc4M7/GhfMvoQsHLVmktnmTSrmEEilyxR5MO0OiNBqNJr4fEAYQ32IR6BKULv/BAdQUihGp8WCi2EwiHKVIJ4ojYYhvGPxpGNJEkYhbikwUvkpoxDGmIRlc8DjR5+AO2zwQx0izn3rWZatdoFTdAAKSzDjX91u0L0lk7SKZwb1kNqYJ8zv+3v3PZw2qzRJng4DJYonVuTwjowOIAZ3Xzz3FhQ2f8e7rdBe2EUYK4ibtokS2XfJ2L3HoYjlZRKaA36pgmDbFoZ1IM00qm2VsvIeB0W6eu34VO19k9PBRls++weK541TXV9mzdx+b6+sd5S2KetvD9z08z8OzU7TcAC9qk95zgMsnziGjGqaus39rN1IlpHWNdadA3tbJDk4y2l4lWb1JkkS0lUJXCZlWFddroJkObSEhjlGaZMPqRpOS3ozF3okBKkFIJtUhOhm6xpnzM1SqTe66a29H5aIbZFM2IzmHrKVzfbVCs+XiFDO4m3XoyaMNTFFvWOQzDnv27WHPqA0pHZFxwHYQtoVItZGNJioKSZIEO1cgbLfw3Da66KhR7UwWv1EjSRSB77G+tsrC/A003eioXSVohsWfvHGWRCk0TcMwDOI4pqTpnBvq4URtg4/tvYu8EPhOFt0wMEyDVr1CNpfBCUyUiokSiIVFpLLEWkItrHLi0jwSA/QA3bAxdZN0bgizdwciM0Jr7CBq4bO0u3rI7hllf9ym99gn8eevs1DfQKiAKGjTiEO8wCfTl+Oe23YSdqV5vW2w0AgxqjXWDA3NMNBTNmbKxslnSedy9HYVuWffdh575EGWXY9rswvMzy9y49pNyuUKjWoFzTSoLi3Snc4RRT5Vz8XQNN524B1MHnmAkYntpFI2u6evsX7qFAsbs9SjGk+fe5pDW45wc3OOSnGQpoppkdDSNAJTZ9ueMd7/zrs4d+0GRj6HbC6TLfTSr9rEbQ1zoIBbrpJEMWbXNhwrRV9oM9j2mOwZp3tqgpZfp9qo0pXq5uTmMv3pLvCbLGR0soZFs1am1qqRskwUHeWBTGe4Wq1Sn7PZd+QQ0+cuoGsacdJRa8eqw7xXgIpjNKkhTAchIUkkkZZDDxT9D78XMTxOkjaxt+ygujiPryTpJGRg134Gtm3h6lOvkurpo9VqQqJRKDp4oSCONdTiAvm1VcpbdmJmi/i+RImYMAgI3QjdkOgpDW7l8P+gAKoUDl2ZPej5Ane8azurs0/x0p/8n/hB9S2QYHXlZZZr3+DtP91PbusA+uUB2Ows7hypeFJo6GkL69H7+eNGmd+5PEMt8t+SeT8jBF+Q8Ke2wdG+PgbbbXQ/AAUpqZhJDCLg6ZsloAIquaV8EziaQLO/X/54bLXBO6ayaPU66WGT/kHFk7sGOfHlgBe/vEbQDPmuOYC62qQ5FyIfO8De4TanR4usXly5Ja/UuPtwD4e6AvqyEUP3Zpm4+07uPfJ/ceL1D/PUz/wXfvYjt/HJL8J7nuwlrEPqlSr3b8/w6o0WdvdWbvuJ3+ChD9zOO4dMroaCX5m+xPkXnqPMIZpdebycjpPE5PWQRhLS9luEgU8S+N8nVR49cJCHPvaP2b93L435Ob70mc8w0NeHKS1eeO6Z77sPaxtlmq02tbZHteVSzGUoFLqQUme95dOMAtKZFF1dKZbaDcqtFbqcMj1d3WSKRbD0jgQ86jB72rMm16dXvu86f/XJc/zqR7bx/MAmzZ4Unt9h/6bbZocRTIwwJDNScX1+6fvaf/K1U3z48H4GVkoMCB1fREgpabgRFh0ZvyPBFgnDhslt3SmKaYPUcExuq0VU9qhX6ACX381iEOhaikQkKBF3JJjcYG7m2vdd/zvP/BceefdHmbk4ggqX0FSMlBrCzpAaHSE7Nko7CLhrfIDnp2fwK1UEEKYyhKsrxGF4i3XQmSSEUN8LLN4CFDUUcWxwfSHDjTPXefuTLXZtN9hYE6yc/gqzr19i/kqT1XVFqSmY0iX9hslwT5bd7xgneySLviWNSs6i3Aoi9DC3bKdw5y6Koymu/+EVqise2lqM5ycdUFEpnFyRXbsf57b9R9m5c4C5lQZtL8AwNNLDkxxo1Tn95uu8eflVPK1BrCD2aiRRQOS53JxZ4MRwF4urGwTNZkein8So70pShUCTkkRqKJF03isU63UXzTB4/y7F5PgkJ2ZafOlPX8VXCW4rJp1LMfuZS2wfs/jx941xaGqAHRsBQRiQM42/HcflBhsbmxzePcWjd+xio9IgiGLy2TTlWvN7AFQhxC02qKK7MHiLwalwrDS2lUIIOvKcsWHyxSz9Qz0UunO8+fo5zp+5yM35aTRNR0qNvC7ZZiS8bthYmsEOxySlSQwBphQ0woh2FOMniihRRElCfEvWnyiF1AyqtTUWZuexTIuBgQGmprZw4tSLbN8xRbVWoVEus3v7AZI4pt5ocPPGDI1GBWlbqFuMU01AqDrxKmVCKxIYQiEiSFmCME5I64JYKpoxGHRYNW0HnrNz3HC6uTfJs6Vyg56jO5BOkZZWJrJXSU+NEFY0wpmAvfHbaNsul1PXueoufI+cvORF1EKNsu+z1k64bTSFZWjkHZ2t3SZDNqw2Qm5WI0xDx9Rjdu3cxS8E/ys/OPoQ/+7lM9yxfw/OqEMiFbdXLnL/2HuQpYD7u3u5bWoP81c26WqDv1YiiTtsQL3YgxGHiFKVsYEBlpaWaDaarC4tkM3m0IKApWdPsvO9D+CtrbFZ2YA4QtoWALN+QqOh8QMZyY4ujdE7J/h3LzXZvq3A+XLACws+v/SjWxkNbvDZp2IGTMEL7QQFmLv3sfnqadREgbbWxmi2Udl+1tfnefBd78ZJ67zx8jn8oMjmwjICaGxcwG/ME7klqstFpKYRaDp6EqPFESqKuXHyInPnr701XruG+ygtrqFJyVTfAD25HIEmmHF76NWrZDWXUjugYTmsu4Ig2KAW+sSxTw86Z+ZyXFzsYqInIlIxfWYNXYRktz9Ab/NNQrdJ4HmsrlZA6BQKefZPduF7Lebn5/F9H4wMSeRjaYpcKmbACcjlckghMW2LkaktWOlB9k30Md7bz7GL17g0PUf/4BgqTqhUXRwrQ8qxCJOIKIEwCDm0fZIiMc1KA2kIFvQUIm+z5EeslGOevrzAL99/D12ZFEYcMyYlyVAvcrOCaZp4nkej7VFxY/p7WyRJmsPNAqdXKiwnMV4YcTMMOsxRTUNqOkOGwRZdZ/pmHV9qdNsWrZV1iqU0T9e2k/Tdw3L5FCAxdQNd09GkgSZjNKkjZXJrIaxhptMdkCVRGJqBbQ2y+84PE9W+Scq2KRnDzLTewGvOdeYYKUmIEJqkGXUsjDQh0W5FxTBOCJKI7n6Hge0ZqmtlJvfkmXYbVKtNNDpsfik64CmIjoqBhBeC47yreg/33/Mwp65v0FMYIxEBm36TF1ZfxZEGrWabmqwTI9ANm8RvkiQxhm4hoqDDTBCgAcWeQVKZPMbcK7SSFC0vIRIGMlPAT9lcabdphBEP5vMUdQMEDFom5vZxRp64m0QIjl24zrV6g9v2bkfXTZ595Rh79uzE1HS0i+tYjkMURgS+T6WqeOSxD3Dx0ir3PXg7oyN56nUfy3Q5eGg3V66c4pUXv4Cmp1FRxIMPbuWTF9fo2jGCrNfp27KD2LKZOfsKWuQSaTrKsth/9E5qVy+z6fq8HkpOXt/g0Z4s7myFzeXrdB/Yw/0f/xm+/iu/RbrnEEMH97N88gQP/MLHuG56XH7m23Q7WYa27qF0eYZM3wDe5ga9Wqcw5WiCnEzoMnx2R5d4yi0S6opItalHc9TDRXKpFPsm7mZx7Q10XeD7CkcIxlGMF+AzJxtUJTxc1HipHVFeDxhJGcg+Sd+PDjPyvkmuvbaE/T4b76ZP+0qIEjHegiSujJIUd9OXbfD4u+/nOy+/TBiWCeQp9m0fYeHGPhpuhdiLMFMR6RELN/SJzZBcLs+Jv/xdvnbyHIOmR1Tr52uf+SMGdt7F0Pg2Bvu6ePCdJgulEM2IGbBiFnUHKyORXsh6dZNHDt7NmZuXsEWbhhfTdBWFTJaVaqfos1kqs7V/C6NKsNGs84WnvsiqX6G3ZwrT1DENk9HeO2k0r3HhypscGeilkRRx9GEce4MNv0is1tCDOpYJA4U8Vxdd8nfY3D4iua2nwHu3a6QMwWKgE9xs80sf3Im/XuVbX5zhTDNhz4fv5vKfN3lkwCd782W+VWuwcvkNNmev8O6f/jVymTQOLl3dBdantuCg0+d0WJxBHNNIYHn1AktXjtG7437GuiZZff05pJ+AcPD8KrqVZaPp0jveS61SYnHtJgOTh3GDChgSadvEXoA0DKRu0vIEpzY0dm7PQS2gEiQcODzFq88t0S/TvHN4D28bG6U0O0PBMmjqGqZUSJknpEltMyS3bZR8fghVzDAxmGMjgNmZK6ysVzh8552InCAbweWViNVNKDUjvHgJaVQ5mJec6R/gR5yYt33x0/znJY2UDmEMxeEhDh88wtc/9ScU+qc4dfUqztZ9HDi6H9VnsHziFKW5C3z9W8fxg5g9O4fYsq2fe+7v4s2zM7xxzsUgx+TUODsP78FJZai31shlB+kKFFJAOi0Zdww2l6oE/T1IsZVw7iIjE90kgUFU28Dd3CDtl9Ftixs361yvGRy/3mL/REx/MM35Z6/g2Ba3P3Ivt41ZXCxDpZWg6dAdlmmYFnHLI2yXkLbBZrNGykiYKsKGMOjmCu+47QCf//Qf8Rv//He4/vQrqHiY9N77uXPsNhIty42zX2H9Ox7Rfe/C1nWqXkRvt8O3n/4r9m+/A6UU6a4uvMBHigivUeeRo0fx2kO8emGGheVNvKiBkGDoEhXFiFD7BwdQBTAhNUQYkAZ8BNNS8iXDZrcmmEhgBIUnJWeACh27r0qcoAUhSz056kaNBzTJEk10aTESjPLK9Rrm6kWSJEXfYZ2mLFBN+wznNXpqkGoL3ozSf+/+79g3yMb6M/T0pqiXb2J36WysSla8GazY5QN3mZw6tYrWl2M8N4VIloljl82Sz96dBmHgolSClc6Tzg8gRUK2p59tB/fTOzFCe3WGrz7/EvmuIpl8FsuxKc9dw2s2GN59AB8Ib+kZNcMi0+XgxAlRHHFprYLrKiwnxaU3L9KONRzTIqhUMNJTmFpCZOdoZ4pcHd3D4PAE41e+QWZ4nB7fo66g3WriLd1EaDpu3ujY/xk2luHQzvSgaRLH0DA0HcOUpNMOlmFRawTcWKli6jqLqxWEpmPZJkrotMMIKQSOZbOxVkc1A3rHetCQ3KyZVOpVRCrD/p19bCof04uJk5ATJ25w7sJVfvajT5APg46V361RZBf7aDXrSBToOmamgFevopQilesiFhpInURoHbs01Vn/6YaBbVs0m60OjhDHnF5Z4enVU0xNTGAc2I10fSp9GnHoo+smumF2CtBC8OaFBW5cusLDjz+BstP46TyO3s3IxDSbwRW0WJHq7sVy+rGzgwTLM8jRe4lbAWEUEe3eyu21G9zdXuNKpkC4dZS5k2VEaohyAHfs30UtvsLth9/LyMYsRs8UKSviakOjGVQp2Q5GysJyHHK9XfT0dHN01xTvfPh+coOjnJ1dYGmzwtJ6hfnlDepegDRNrFyeKIk71kiaQd4uYmiSLb07Ofr+H8ccH2ILJpouCfty9G3fxcR3XuXPn/8jdg/tZrWygqUZVJKINuArhZYofux9RyjoEWe+8WXCHdt5rqQIU0WOvXqGoX/8TyisNdHPvca0ARU/wUml6bUy5GLFXduOEnTn+dKFb/LTb/8YYaNJl5XjZmWNXf0TeOfeIKy6tLt1enr6mNc0appOkMTsu/NOAiLc5TXK1Sof+9hPcmZ8jHMvvIQUkma7TSMIiOMYXcqOlVoUgZQkUkfKCE0KyOTRJsfwW2XM9E50fQnT7Eb6HvVLpzHzeaoZA7dVQ8URvdszJLHEsXW6uwz8QOC99jL+yipxuoBrp2k3E5yUzkB3lv5ui5QNqYxNKh3/wwOoukh1ZGXOJpe/+ed86w9/5b8z+ut82pi/zq9+6D184H9/kR233U557hieN0+WBKkEJzSdi2fO8ivnL/4tQ029RRVjZmOD9/zeJzj+6P30tdvcvrTKSRVS6Erx6Zt1HpvMsVMLSUuDFd3m9VbC8mqdhu+hmj46AiUkHzo6xufemCNKFFWVIAwdqSDaUPzJn5b4g3/7veCZuqXVXJ6t8/73fpvf/9RO7jxaYPpcBa/UwNElv/vxLaxdWWL4gS3oqYDAqxFFCdPL27FlTNl1mJlZZPsvP0xleZaR3TZDzyxx8g/Ps/32x7jp+nwgrxMowY1Sk8U3n0eVl2FwK4W0SW8uzWqpycZmmXapTOR7iDhC/l0fP9vh3p/6p9z15BOkooRXn3kGpQR+pcptt9/GN55+Cs/1vgdsVUqxXK5TbbqgYnoLBdoYnFt3WfBinHwRoSK81Qat6gJdKYuxYprx0Mf1lyg2GxjFThDVLcHwkRARBHSEw9/rzVpptFH1AvUNjVB9d+oWdOkd0MdRkts0AzdWJDL575tTb7Vppw0qQgdiZCIhAbNTZ8IQgqLoeMEd6CmSzWgM7DDJ35YlyVeoH4vRdZ1aDCiBRBELMPVukiQh1hzs3BHi+H/sSdSs1bDMJiIoIZMOmxAEeiaPns1j6JLKxes813LJZNN46Qw9XXnEvkMsRjH+2ioqjrDSDm7g32rfkW0mChIBiRI0AuganCRSITt6ljBWNrn87XkyA5e58do5lq97bFYU63WouHCXozFqGwwOZMjeMYS2cyuJugJqDOwcSmkI8wBCfwDn7cfZbUP9a1fJv+myfDnBtBxM2yFdHOPOux/gnW8b5ur1EoZW4+bMDTbXV1hevolSgnvufTuGnuH0hZPEYUy9vknstjty1jjkhTfOUVrdIPJaJIFLEkeQJJ1Jwrbp7hnB99qUVtcIWjWSJCFDi2yxm1S+wLmVBl94dZPZ+YBf+hfjzF+q856f2MPXv3yFZ75V4Q8+NcvPf3ScbWNFMgMGX3p67ntSQV3XOXnhOm9euoFt2+yaHOKOfVPYjo3neVyd22B1s/YWeJokCeuVJbKpPL3FIYSUuF7n+a9uzpNKW1y6doHbj96BYRqMjo2wtlpiZXOuM3ZzfWhaDxlNsrW6zEzfOB/w17BEZzyamkYlCKmHEa0wwo8VQSII3wJSFWHQBmmyvDJHKpMmX8jjpC1GR7bxyrFXQAnGxndgGDpxFFKplFjfWCYxJUlz42/HDuAnkNIFrQAcDfxQoRuC9i0trm2Aqzpyu6iDm3N3dwbRL9EGYa5fo1ZIs9Vc5tKLJ3n9+Fki5XPw8AHe+YEfRVUK3OzZZKZaZqEW0TLHgJMdNquukQRJBxRKBFdKPteqEbu3jfHRIUVvTmPAEbQjge0mWKaG7sdcXAx4+86P8qunvsYbJ16hP7WLfffmKbZ3E040+PbifyE638PfXP00uwYP8sv/5DcQLxhU2+tEgYeQGoXJLewe7OcXP/6/Evgeb556gxOvv84bFy/RbDawHJt43aN5Y5nMUB+NGwWCeh3N6fhWdQvBXQd1HnB0vOwAv/TtKvnBfvYd2cNA3eWbrcv84fMlfv3tA1xvLHFdQYWO51tf3IPcNUliBpSTGlv79zO/Ps+7nryHpB3z4tOvoTkpenN9+H0LTL/810TtTVTSsR7wVtfoztjU4o4cKK0L3Dh6i6EupSTvpMhYNpN9/RyYmEIiKLUajG2fIJqL6bYEzVgnXzR571GXf/65Ml5YR6hOwcCPJf05nwMjLdp+Fzc3LQwh6DFcbvS/j838ncgkoFA9yVAyg5PUCQOPufl52q5HojTyxR6klFRqirzpY4g6zZVZhoZHuO+RRxnbMsX60iJPffV5upM6Y/kctiUYGu0jdBN8v061DPl0Ft0xKBgmkYppNitomsHdPQOIpWVG0g6zpkEun2fp6ix2yibdjlBD3aw0WxwVgrqU9ESwd8sYXYUuqtUqL54/hmOnWdho8+iRYb5zOebxYpHX4pirSZMojJCaQEYd+bkAUr5HIS0ppHXmVjZRapOZTy9z590JY7c/SDeHWHjjAo5dx/ISgkARBjG6VFi5AdrtTRxRRSUKw7aIw4gkkeR6xxic6qG1MIhlmWRHt4LRy/VTn0bQJo4CdF2SxBGWJtm/LU0QKq7OugRx8pa9zPbeFI8Npnh9tYIZLbFISFlZ6EK+5ZUKCk10/G1TaAxrPbS8Bl947rOMDN+LrRu0mguYmoapFzoLfSXZqm9lKS6RyXXhrVVxgwDDtFAqwtQ1pOzMb5lMjmz3OJvZrUgUzc0ZQhLwqzhRnkfyeZY9j6ueS79h4ieKqiawpkYY0XW8toslYbArx/npeWqNFmMjY7hhzBtRRDo9wuSWd1OtNbjtjndh2JdJZ7JMTXXz8IM5piYlL70ief75BioJOPnGMxiaRMiOD/uz81Wm6y7j5Q2GqxXqvku7q5tMPkcmO8ry0nUuXLrM2oXLvN3UKThpTusm06U6FVPSM3YIc22RG9/4MiN3383wXXdSnVnHcDRaaytcfvUUux99hPPPPIueKrC0MEdl6Qapri5MXWdSg9UEDGGh8u/F7DqI7/nsLB/jTGsNTQNTM9iRncLXGtQbVfzQZaG2wa5bHtXtBIxyxHwrJqUJ3nQTfgDB9rxOJaVw/tUIlbLGhV84TbAQYvUZjP7iINd/aRElDWrrq0zZW9g3eIA35i/zxae/QeJW+cRLJ7ln6z7EYD9P7v4/uLk0S3ZfnmmjQdKto28ss1FbJpi9zF8fe5O3b02xtNbi5LFX6N5+iAvTn0boNi/M32D/ve8mkSm2uS+zEj2AMDzSVhblr4BUVKqr7OpOM1WcolRucK5WZjjfRX+qm4HeAQ5vPcDWqUF+7Y9/m/VWg6nMIGt+lZSTJpfpZ3L8AP1DXaxswKGpMXrNmC+9fp6RKZvthSo3GlcoVZew3QpxImlTQNdsaq9f5ZLVT29uN9P9FnGS8OVj63zyk98h3Wrj7n+A9OwcnP09nB/7HMnUGN7lz9CzfoXbp8apdw9Rdev0L51n37YDnDr9BWShj0cPf4DIC9mzJU8cxvhNl5euPE+8WeLdt3+QKDGohRGvXj+HYZgYdgqZ20Gmb5yx/gbTV14lO7CHUDMgdCkObKXWWEBPpwm1NlI3kIZBd2CjJyFj+4aJZudZXWozdI/N4bTJMddgfyZPbxiSGbIZTfKsqYRsItiQKTxDRymLjD1EzdMoJAEyMZmvelw8dQVfjhFvekzlNeYqEZeqKZZLIa3NKnpQxjADHvvH9/Nq2eeXfv3b/PzWNI/39PH1tYTdO3ZQzNi8+NWn2H30LoSZo3t0mNrSMt1TRY69/hJvfOl5Hjmo8cTbJ+hppVlaXGP+xirFgYDFpTqtKMORPTsYGx0lawoct858K4W0HC6dP822XbtYqFS4IX3EUsDSjQ3K6SuoUol0IeLCs9fpO2PSlY3wogi/qVNtVVgJcnx9LuHYmolze4CTsmkEiqZSfPV6i6ofMVnMs1+t025LRpx+2ustZpouy42EVhxyZb2JlxgY7Q10rc2bz3+K2blZfnrSZbNX50tPvUr7r4/xnve9A29mjtkbM+i1mNa11/DG97C22kCPSwwdsWiW3yST7uJvvnWcUMVIpdgxMUUmatOuV8jYNl09PZitFGsba4Re9NaeE//QhwZoKNJC0KMgg2JTkyz39vCNMIIwBM/j4UTRpxJaCAIh0UQHSHXbOsVMA2SKXqMHI+NQ7aszvjxMzV9gte0zVH+Knf0F3PumqF0NmdltMAFg/sjfu/9ffvpr/MDB29gxco0//bMSl6oX2T7oc2n5Om8zfI7sGkMuzfLF2Tn8XAUzFty5XTBqeST6AElyEd93kZpJujDKwLYtFPsK/MSHHuPSQonZbIH47AIDY930DvRx/eRxNMsklS8ytHMv27qLeMV8x+4GRa3ZwnU9pqtNVjYbpPMOM9M3MW2dpFUnzveQtJuUS00O7BolcvIoM41uZWilurg+dTtD068gUlnqzRqR59IqdKM3K8RSkCCJcj209TTNwghSSgxN0gwT0mmTguPQVUixslyiK2VhpgxWFtewi11IzcAwdLKGTrPVJu2Y1FoRmhbTrLQ4tdFicXaVTKqbickxrsy8wRefukhXwSZpePT1F2g3Iq7ObHJbUREtr6OUImo30VSEYVjYpsRru4Sei2ZYRHFCECcEqrMfAkpD6BaGYWGmc0RRhJSpt9ZkQgimF2dptV2C+Zv85nNf5P3v+kGUCjGUReh7CCk7dmVJxOTYJN964Sq1b5zlbe/cQmJ3EacMWnoXZn6ManMJO9tP99BOostvUq5VESc/hZ7qx4yq3OPXmcIgXVPcbqfoGtmJdvh+FhcWOX/8U4z0uVyZ62LH1izh7AxeOUdbdNF37TQDlTOcLWTRNA07nWZkoIcPPnEvd9x+F9MbNV4+cYbNcoWNcpnVxRVa9SZhFNFsu/jNNlEIjmHiBS5z5Vke3/MkR/sPMjk5xphjkTU0EIKutmS+KAkwuGPH/Sw3l7hZmWNuY44gjohUQgBs3zHOfjGDmcng78px6uRxxqpNlJ8wVHUZkV/nWq3G7VtybKZtNms+VjqDsVphS3qQdCaDmU9hIfiXf/7r9OX6KJfWKDoZ7h3fz7jThdGGhWaDuhaSTqXwgoADd9xGri/P1bPnKFg6ceDyhU//JVv27GLvgQOsXLsGSUIQx7Q975Y1lSC+ZZ+jNJPEtFAY6KM7aK0sUlrdwJzfQCsM4y2cRzkOdtcAXn2VjetXMFNZonaFydEiblsnSWI8NyD0FZVMhvTUFJmd+8ils3QXTeyUxuighikFlu7SarlYTvMfHkCNVJ1q6yqTmXdy/tnv/L+e26zVWV84TlfffeTSE2xunqCawPNC8a/dBr9/Zfr/vX3b5bmkzQ/3Fzmwuo4TSfw4YV+vycHApdQOUcplZ95HdWV5d6/Jac/ka6WEM6tNnhzP8NHWChzo47Nn11lUoPyQxpqgOmHzF1+c/59fXEG9FvDGhQpTkznygxZLV1127+ri8iuzvP9XfojFzcv0jA6jJSatZpNTb1xGM3Wuzhr0D3ajaWmeerWHd98Lp09fY8ewiVI+a9eu8msfv0HeaHD92edo3LyMsrMot87Z+SrFtEV3NkUhbVIRAZqWQqYFSnXYK4WhUR74uY+z9/B+autrnD1zgfrGCisXz/PAnXdgZgq8/O1vfc+E/d3PdddDl4qUk+daI6GZTlEY7eXQ+AS647CxNM9PfvQjVOptTr5+kpe/+Q02dTjY6yDqjVusPoWVjomThInbUtgpHbf1vazfR5/YzbXKdQLPRMgE4dxiIFd1kiQhl0jiKOLudIqMmaLptb+n/RMHd1K5sUKggaN0DNnZ9sj/LhSrIIPOQ8U8u/amMII6uXsOIO4+SLLyDTSxQtts04wDAhQ+ikCAFDaIBKXyBEFIru9+nFSKdvt7gdQ77nkH12bqJMpFCgdxiwErbZvmwizu0jxOqBFfuEh7ahRqJeT4TrTpS3QPD9M4rpCmiaEJakHQ2RQmibAlHX89JZAJdA/2cWymwnBOknEDFgKobW7SN9Tg6uWYelnRCKAZQiQUPUiG+zT67+lCmxwG+xACu8Nyil9EaO8CZZFEVyA1hnb3w2QbIZm5KxQJ0QwT3UhRyG5l95Y+FherbB21cV2TamWNaq1Ku10HlfC1r/4X3vuOj1Jdn6DtrSF0jchroJKI2HdZb9aIo4Ak8IlDD+IIIcGy0/zMP/unOFaK02eusLpwg+MvPkcSVTmwq5fd/TFGX5Ev/uUVGu2YkV6N3oyg72gfoR/w9rf3ce6VOrPlkE98eo7/9NtHKF5boStrAm1M08SSkmIuy3qp3PFbTRJ2jPWT78nzV08fZ++2MdKpFAd3ddPyImYXV4jjmN7sKOlUjigKWVy5RtrJ0nIb6JrBiTdfpq9nkFdffZlabR+hF2NqFgPd42xWltE0gzCO8RJwoipPr1QZsyV3Z1NIoWHpGhlNUtYkVanRjGPcKMKLOt6DYZJgRTVSw/uol0tcn77A5TOv0pPvpVFew48CVBJzbvoyN6/24QVtnFw/fthGS9uwvoSbKGzZkeVLBX0ZiR8o3ETRb0jSGjQihQNEiaAWKRwNohCSJKHCnXSrHN12nu6hNOlRHYZCgvhN0k4aR+8jpeWoZ1u0UgaGLUkJHUdGWHr9rQ1DLMvCdz0M9V0TdZ1soZvQb/OOfQNkdUG75dMbw6avqHoJTV/j48/+ElrRwq2tYrcFawvdvG1ogq994S/wKzGHxod5I3yZcrNOYrdZP5LFnhkmvzZEXTeRpkmmr5vxgUEMXcdrd+wR+vt6ca6btHyfpJVgplKsn76KvXMHRi6HSjqedIcdAzeGb5yEH/zIGF+ZdqgZIDGYXm+ysNGiicFKpHGp4vAv3p/jqWebHN/oJHG5vXsw0jqRbDC67V6Wbza4/+23ERPy4qvX0HqKOFKRmkyRGhjnynNV0CRGagDNzFJaWCRIOWw/MMq1K5skYci2vh5GBofYb3eRchx2/IsPMH/sHI3nz6NJSSAhO9xHJQ64M10jiGMqocmukTa//XRIIyijS41QBUxOdlFaq3N2PuDcQpudRQtdJORkE02EhNImdCaRQuDmdtJuXiZ1/VNIr03GdBgodCOkpFZr0PB8BnoKIDzC5dco3zjPx/7ZL/Cdr36Zr37mU1TLFaSU7Bx9gPJGi9HxnTibDZpRhcunFnGMFKPDedykl5wDmgV2XCBr2+Q3Npma6OVsWmdu9ga6qfBbdQIlKSL4q5cu0BPHzPg+oSZ5/vgZPvyO+7jmNbl87RxB6FOtNRjr7WJtzqNer3Mwn+dIdxf/Po6YV21UooiSmDTwKz3d/O7KCg9drBJEGVJ2SBy10fUMzXKTSy+/gn/0MGr/Udxyk5yusOuC4PlnKWzbgfHwAGrep/rXf47veiS+wEo7KDXIttveg6HV8FvrVDbqjO6dIt8/Rnf/bdQ2XkQ3dfRbcrWfet8gT75jkjCRvP7qAuenG3zn2CabzYB0ykSLYedEF0uLN5FagsLEVzExCg3YknSzIDYwEIyqLqZyRzg+uYbmaSyVX0ZKn3zGplbzUKFPIiE7PoxoeGRaJhnLoHtggL49Rzl06CDrjZCZ69dYmLtOHMWoTJrh3n6aps3izWnaQUIoEzQi/EqTawH06xpdut6xoRnpo/eug7w5PcvJi9dIWTqP33OYqZEBuvI5ugt5pFC88MZF+rqyrPhZGrWXOXduicO3fYyJqd3k890kSjLQC/1dUMzrHDoywPFXrzA0dBTHiqmWzxGFEV+9ucF6oui+foMf2tJPWFnl969Now120QpjGkHHI67Xc7lr3y6OHb/CjZaHyOU4XqrQPZKlZ9vbWXzjJa59/vMcfM8HuR5doTp/Ba3Qy83vfJOB3Vvp23sHURQQaiZhFONWq4wfOkpq8QqOEBy599+ydfgB9j/Zx5f+4yavr25S0C9T9kK6c1sQehlHJSzXX6NSrXBYhuxyTK62dTSZ0JIJ//6uLGZe4/WZNrfvy5F/s8Z/eH8vJZEw88crNE62EEqS2mKz5V+PkNuTZt9DR5j54ptUVpdwCwbnLpxgZeYmy7e8+dPJJR7cs43K6DH2PXgvl+JFiplJsukM4Zs2Z65eolcusmVqirYWMtcqk3IsfvFf/h9U2gm+2+T69DRGYZz56bOUz8zRu6eblnJQYUBzfRkVbDC3cJYn73oXldI6e/bXCV+FJ5/8IIaR5vhL3yZOtfnjr36axWaJKIy5Vl9i//B2klSBLqNJcO4/8sb5T2IN9pHVFV87c42tWw4wkJzhrqFuPv/V8+ztMWnGgsX1Frt3OiixjeHDt1PIRvznP3yJ+GMP8dUrJ/j3H7iNF8aylFr9PPrBAp53NxdqRzk6UeCdHztC/RPfZKSVYpBFjv7CLxDlJWfffI6//sq/IWsbaN15dhzt49WTFcRIjlajzGtnv04y0s/YnikW2mVGUz0MtGBubQ1NM5CGTbHfwTM2MAs9DB18koUr5+ga24qTbqLZBs1gDTObQQjZ2VTKsOj2HLIaOOPD/JvvnOfEqsu28lV+daCfqw2bm2h0xT533V5gNjKhBVoU42RyNPw286UlRG0XqZ4Cvhvx6lf+jMnbjvLyN/6Swf33MfuJv+Edj99LpXsLhfR2tKZGkLRYWV0iabV4tRRz7r++QKmd8Bvnq+zq8unv6WVleZ5yGPDYOx6noWfZLLewizbNXJO/fvkrpK0s1bUqhn0nL736OqZwadSbBBgsVhfIFtO0SjXW1lcYHR5iW9pg7vINjn37FaxiFz1bJ1ibm+Nrq1WGrRqxkefETZcd+hWODPQRGCn69+xg8uAkaulNVLJOQ5ikrtf5wFaP9kaFZddivpbDyWVRzTbuhYtY26dwVcJgfYajd47w+rWIl164xLZDUxTTJustn35LAy3CDFw2qhVSxjTPHT+HUgnHX/wq83HMuQtXaTUbZLOKDPO0b2Qw7zzEau84jleiK1zn6voZnv7OaX7xw+/Gb1a5//D9lLyI69cvUlpepZl4BG2PXCpFox3haho9XX0dVqHvEsfhPziA6gCrccKormNEnf7MI6i4LgaCEqAsi68GAe+KDRoSSqIDokqh0SsVgTPJZmGeicw4teg8V77xOQaGe8m+/QPYUYC39hwPCUVjXuIPHmBuXXJ67gXCrY//vfs/N7/CM7bNdDnPktOgWa5zRdzknlSKaFRyZrrEYiaHvehx8eIq5A327hti35HdLHlbMJzjJFFEFLq4lZusX6uz9dDH+PS3jlG6fAK55xGKRQOvsoEc7qO6vsYjH/s5io7O1SuXqUYdJqQmBVGc0FXI00ylqSeSVCHP5uoSXmUaZ3gbjmGRlKrY2W5Uqkj/QD+ak0HL9SNy/SRmmiCGvJMlXJ6hvDJHa3wvp1ZvctfgBLR9dMMitLKshwn+xjSWrhGGIa1Wi9HeHKMOVKoeK6UGLb/N1iGbazMeU8UiB4bypJOAlc1KZ/0fRyxvtGi3AtJ7d9C4sEhjtcz2+/agF2yuHT9PbamJFoTIKGGxvUkulcNuNAjjkKjp31L2CUKnAF5EGLqdzaal1tnoUgik6dD2YrIf/RXyPcNsvPoNorPfJoiSt7bDcBybdttFSkmSKHp6u9nYKPPNZ59nfXOTf/wTP4zyPJx0mnQmR2l9hTCKaNR07rjtEMcvLrK0ssbq5hVCEpZK51HpfRS7d+A3LjOgNOrZPtabinZ1Ha2+iQ2ElmR+U9G7tkHdqXLy2FmGMw5RVOaxx+5ASzwef3grB7ansQ4+whuff56JTcnn3zjOqLGAUB0v220T/bz3oa0kRsgf/81TLK+VaLY9wjDBDXx8zyeKE3wlaLsBYbtNHAZ05UZJaRb96SG6VB/DmXF6dZOiqaNrnY2JrbRJogl6Dh/l6so8ZxePsdYs0YoUrhPhJYpEKMYcn/T6Iu1zAn89JC801mswgaSQ1Ll+fpZ+32V2bpnRQZ1pIG1ZoDziZkDeSpPOjWAIg8nCEGuVdQyp8c8+/POsvX6GjJ1mQClqgcdKZQNruIvujM3PfrjJ8MpZinf6pLoSqEDT06kUlrm4voffPNWk7XrYCQxncgx0WzR9hR8pKoBUASrpMPOD1UswPEo2XyDWs1BbQEQ+suUjbQfTsrDTGRI7T32tRORWmLviUcilIBDoSZqhJGFHIcfm0CAi0ZC6geu1SZp1bs6VSZs+yIT+wdQ/PICaJDFR0mTi9u1sLr6IbproRheRWyVWYcfe1yliGhl8t0o6paM5OTJ6EUvP0wqWWEAxO9RLZqgfY3qaoq5RC2MCpVBCo9uQZHSdstfxpXBsk/EEhlE0Kx4PpDTKrRBbJDiGIPY8JgKDZUdwOGzwWL9Be6pAIfJZECmev9xAIcgIgUgkcSskacZEmuhIlnMmtYYHgUAJQTprkE5rVBoB5bbHuMogHB3dVuwcN7g+XabeWubYiQIfnBrFsHahmSmunlsm9BTfOe2ya1Rn0+vnha99ljtGcmRSgolujYvVKs5QhpkLZxA334DyUsfY3m0j1+bYSOX5VhxxcKyHbDrLyOggQRAQKUiSCeKN8zzwc7/E2I7tXL50ldLNm6yceYPG5hpeo0Gj1Sb0Y4698uL/8PkVHRM3Fpxab5Du6+KO+2/n/KVrkMmydOMmKgi4ePo0b3v8SVzPp7Q0y/GXX6HsZTjSl0YYHZaTJyJKi5KXV8/zb//wHfzaz32dVqPj1Xb0tgk+/Fu9/Nkrl9BTFnq/ie52dnK1UCAlOoqVUFF9/Syf+OF387985mu03SYCyZEdU/y78TFef/oFuiwdHUk76QCvZXwUEGkJntBIpyW626D4vjTivqOQ24p2428IRZv1VoyrImKpEcQJPkBiIm9xeRJ3lWOvbvIzP/Of+OQf/QJes4kSsPvgIfbe/tt8/m9O4hh9IAziW8lG6dgLmD39SCePcmOCZgNOSPz1OZp7dpEeHMJfWyWuV+kupFhZLuMrCAMf4gRld7xzoiRBSkGp3MTJd3ZmXd8UND0wNhTzawl61yRLN6bxYkUkOozDgYJG73YHe38Gld4HIoegCVxG6NuAsyCeRGhthPYw5LehdR8jVTQoGgFOvg9JipHucZrNJhvlFboLI7TaPtVahTAIyeeHyOZSVCrrLK4vMjY5xWx5hs0NiHyPJIoQUutA2SohUXFHjmql0aXg8JF9BK7PZ//b5wjDiDAI6B8eY/F6g4GJQXbcP8HX//okFTekmNIQQYIVwtR+E0KNrjGTrrzOR35unN/5rRucO1thi9Yik9GQUrJvZJg7bYddhTy/pabZrNcxDJ1qy6fmV9A0jen5NXRdZ7PWpr+/F9u2iaIIU7eI44jl9ZtoUqNcW+9sooai7TVxgzZ93YN86ztPsWNqL1KYFLLdxEmMqVu04oRKENKjmQxXmvz6ygofv/N2nsxqFEzJuqmz6gWs+yElP6QuJU0Z0o5iRCxJaQGe5yEtkzCMsFJpFi69TFs6nY2hdI2gtkl75k3yhx+lWlvH6etl8eIJbt/Sz83T5zAktGO4vUtDKfATwTZb8I6U5CvNGAnstSUXgwRHE9QjRRiBpQtummlKZpaqUaSdylOwQnKqRKPpItI+rhdw7nKVfd4BliuKzUbCWuLR1D1Cq1MxthybdrOFlHSk3oCu62ysrqBZk3xlxaHfdOnVYEfRZqMVUW7rtD3FhHJYWVzCUDVMMkyNddFcb1DwFC+dOcmkH+MHi7xj94P0DU6wo6LzBSMgG3chzTRa3CLdlePCpYuMZ/K8duokdU0jH4QUsjma7hpC00nCiKTWREQKs9CFNAy0VIoRQ+OuTMId+w2mNw3yW3bxq++/gzcvztBol8n3F3nXviPkvXXmX3uNnUd7ON70iDQdiUJL6TSXbqLsHuoK7r5tAivV4uTVFlri064t0fRuksysszB9ASl1jMwA6d6DJJFHbfbrtMtVfvADR5hy8mRaJumeLCMfehtf+t8+wWp5g+FqnZvHzrMwd4PCjjESS6e0cBOp6wxb21j1DIasFs9e0mlEbXJWgtlXYMddW5DtNsWi5M1TqyQJrLoN9uabBIlOPZTkjBgTH9uUNEONJDdB68i/Jp2UMBpn8Oaeg7BJNmVimzoLy+vE6y+ghMBrVPmdf/41mrVahwmNIhICGXicnU+4fbwX09JZnb1CZmCUIT2mq7CDMJjn6vUKe/YWGLpR59GiSVTZZM32+ZNLFV48ewU9ZxKECZvVFhTynD1/kaF0ljNtF8sweWT7KDenl7H2dyMCE8vI0ZAem5s1LpqC/q0jfPnmAj9qpjggBItCEiYdUOmnCnmutKpc83wKNyrctm+A5bU8ftjmrkPbGexOs7jSZP3aMgd/7U58lvnEO36P4r499N3xOJq9Tm9wnqV6HsOyEXpnszxNzzK4/Qk8t8TiuReQ9iCGHjJ77TpdW7fSP7WHdv04pm11xDlKsb7pkukrIKXg4ScsnvyAzeOvLfD66U3qmw2Caot6rU6lETOcD1kspTuWHbc2k5pQRZblBhl0JtUkxYOP8PWzv0KUNNE0i7ayCaIYTWax9ISxgQmeWM/zx+EiRX2cxC1h9k+SVOa5XtrJ0JFHGO7bRWH3Go21m5SWF1m4cZFAd+jbeYBwZZlmuYmKgVhj0JA0wojFxMOxTKKdO3j5wjq+L+lLFzh95TK5Qp66G/LGxevcf2QPuunQ39fD1184Ri0sEoQxYRDRVexnYX6d1bU2O3bfzsqGolYPmbnpkyiNSq1CT1+BlCWZnHwnc7OfZTNJsA2DRqK4vLABCrYc3k9NJbjrm2wf7QPDorm6zh+8eJaapuPpHW/7lh8wlLKorc3Rs2OKhdNnWNy5lxhB/+E7WHjhW3h1j9P/7XMcfc97OP1Xn6f/0F04ZgLtACJFLrOPfO/tDKXGOX39m3zlM5e5c9e7sM7baCpF2Fpmub5OT7aILXRCGeM4FvscQSxBCYNHUgJ9SqPpCuqNCCtnkavCbBXq4ymsgkX+UIrWrEviJqjeBBpgbjXIZnu49yc/ROVKi81ojox7G0ezWd6cu0Yz0tmyr5/M5FFuDBTw+pcoxAHh5a9yabrOSH0LY4Pd2Ce+Rl4zIRakdbhRcvmFn/4RHn/y3fzgD/0YXn0dvz6POzDCSgipZonuvm1USxsoFaPrgkq7TEzERnOFPTvex9u7SqwvL1Cpw9Onv014OqHabBL4PkJIoiQkiBN62susLs0y77o4IuHX3n0HZ67OAiajmsvH7u7mhY0suwsah0azPDPfxg0Vq6UVxgo5TryxSr25yS/+3AjfevYYGxtXeGP/bn71Zx6lfuYFPvFahfVnP0NcOs/nDt3Nez7+jzAmHiE3/QbloMXZMZ22q+FrNsWsTSQMbn/vj1PM5zH1FkG7wfSZFxg79Bh/8eZXufHiX+FWW4wfuIuHjjza2ShLJkilWFu9gNFo0L31Hh59aILH3QOculpmMywg5o6T75sg0gM00yKJYzTTxq4lpE2DEy9d5vn5Mq5SuDW42N/LSDZFGYckJfjZz3yH9+y8j0GtizCIsR2HrGNywouprq1zpW+IkSjF6L3v5eKpb7PlnT/PqS/9IVk7w4IoMD68ndVFyCtJOc4SeAlhq8Izf/YimUSR0hXNRMPvHyFlaMSRi5NyWF2cReV70LQi2w/czb67t7Pl4hlWry+x90d/Cj0sETQ87n38IZYun+DKWsDqcpU4cihkcjy0fYBBylQvVXn11EUqbR/lbdD0Q/IjoyQYBO0uKqZGI72VgXREav8IvYM9DD3+Q4ioQrR1HD35NNXrHjuzAVOTeXruK5LdvYfH/vfnGRwbpK1pNC2LykqJAyNTZNqznL0Y0VSjbD80xqKnUY99SlFMfxgi3Yi1jQZHHt/PxiufZXatzmRvmunTr1ESO7BNm8SJmb++yEM7x3l6bDdKpcikTcytY2wsXmDn+F5urjzP114+ht2sU9V7SFt53nXvfUh/g+W5KlHOoDGzTDbXi2XrDA6Nsry2yvzSGs1G/f8PJPwCTyU8g8Z7DBMjjrhTwJrX4nelAbqJUoqWpvOiinhMN7mOzpzoFACsRytMns1S9bdy/uK/4aEdvdwsWHzsn32cF2KHoqHTmr2MvPICfUHAemuG1XgXV2eX6Mp/G3jy78egFbC8ssSNmyGEEcQJURjSNzbAxVqF1640GOhJs2/HIG3H4XKrxBde87jv9kGOH/siD/7kP2H6xHG6LJ27H36ElaVV1q5fxCwWmDp8GKW7nN6Y5erFJZTfpm9iih3jA5w6f5mrF6/w+Pveid5uMzM7h+f7pPJ5yjKDnc3TrCzhjPTSNbSFqLJIOzQxhUHS1lm8eInc40cQpo2005iawlAxIZKalUXl+rjp5KhuLuNtzFKfOEh37SJ6GNKeGKbkdBMLHWPma7iBh6jVuTgTcfH6AnfcexurFY/t2xxuLJaotjSWyx6VUpn5+QVa7c5u8AqoNgOcfJaMHbGyXmOjWuH66hLBzYvMz1TRLEnkx+RyDlqsISOTEV2h/IjADZBS3LJL1Al1A6IWIl1Ac/KoUsfKr7y2RDy6F179IrMbdaZ+/t+wMHsOZdgopahWq1iWhW3bxHGHoWk7Nqm0Q7Xa4MyFSzz9zHP80LvfhZQantvGSWeQnofb9pgcn2K53uLa1WW6R7s4d/ZlNpcryF6Pnv4JUkaLVmjQTO/GzxZI9ApGewEBWFWf7XPL7C66BFO7+NNXvs6M12JgfIwLp7P85CNHoHGRX/rl/5OJ8WEa9R7uGITRngyr/w9z/xUu2XVf96K/uXLlqp1z7N05o7uRMwgwkyDNAJEiJVK0ZMmyJftYlmUlm8eJskxJVKICJSaJGUwgcuxGNxroHHfOsXKuled52BB1z7265+H6fp/0sN/2rlpV31x7zjX+Y4xfrg2huWTSCYQt+dZTF1mqg9tqErKd+tu7ZzeZVJKbM3P4nocbglOrE/ghoRdy944HyOht5EtVbu26lQNDh+iI6BgxhcJyDrvoMHB4gHZdo9mXYl/7TrydHouNNWwF8kvP4ciQhqJhLizRiEjylSp7NqokuiyWwyEeSi9z8D98hK9d87j0t+fZOxbj24U8QkLEDegKowgUQjfA9mxMKfjEO36eb536Dq9Nn+V7z3yXd+24g9LKIslYhIRjYjmQDg0SA1Hu792gnnPQkyFGRKLoECv59ERqDNyW4w//RGUwmiKm6miaYLArgpk0ubpYpqrqKGaUMBS40T5C3WBzJYvZKlDXe+k+PIpaWyHUUhjxBGkzTh2N4htPo7kuiUiGtFKnslRBi2rUcy4bzTpuMUfz1FPIUOKFIa4XUOlIYMUNXF3QORIllY78E4jwawap2G7SHaM89fXXeeATv8vgoUfx8lf57v/6FGYszU/9l8dx7HZmn/sSDTeLn9tCvBlPNBFMIDnY18d/vnGTz44P8qG9vVxLdPDxbz9DMhLj2//5Z+ld3uSvv/IUBdentrqGJj1MIVFlQLkliUiI6IKICilLZdTwedy3uD2pI/BpC5qofRHe81yLbM1mRybChzKSz+shZsog1m2x8EKZX//Mbh75cIy51zV+6Wcvk2k3+NJ3j9Dqq/GffmMNrQ6Tq1WCUKJpKqHtkispVDcr/Navn8NUdvL+jyUwrShf/+pLNFshZ56b4gO/935+89d/yEc/NI4kT2ZAJVaSLF58ibsP3oY7vofNyhZBK4toOCiBQ5ifQ5omDTXCtB4y0dtFZ0cHly5dopjfwjItbvnkv6Jt/wEunH6djUuXKM1ewa9XceplpOMwMLSDq+fP4Xn/8LRTDRWm83VurG1wR1sUp1pChCHF1VXMiEW1XuHr33qci1dv4nkeo4OD5IoFPvned5EImnz/0tyPafbLb4RU1vK8819f5cvn3svaVYdEW0iwo8W3Zl9k6TUN1xHoJujJOGEYkJwvv9mhqDGpCkrrG/zUWcG1n3wPl1ouaUNjV6XO8lOnuOa4+Bqk9Tjt1vYGMF2o4QgIQygJl/Wyw+BAlHbPA9PEr85AuYgnLHKtPJ4CLd/HQeIAmpImDENCxcev3WTuagWp/RS//KuXqVXPYZgdNJsTPP7kKs38ZfA9LCVNJLLd/ZpfOoOysooWSyI0i9C1US0dPI/iqZPkkew9shu9LcLaZoWBB+/DLW5RXd4kd+MGEBC8WWcQSolrN7nr0DCtRp2BffsZGesgcEJmV2qUiy3M9nYKG3m8EHxANh00zUHJRMF7BeQo6CaS6DYBDx3JSZAtpLOFUIYRpiAIFXQN0DQsrYvhnl4CReIFAS+dnScWNzly+ASnz7xCV1c/1ptUXceHdiskaDURoST0HGTov/lef9eLDOmubj7ykQ9SrlYYGhjg+9/+Pk6riRDg2S1MU0cIQS1XxLLGWd50sOuSz/7ZIb76p3Mo0qO3W0XW62xlA97/vnaef36LRjPk9fPr7H2oHRG0OLJ/ghFdB0VjyW3w8K17+MaL5zEMg1Q8wt69o1yaWkbXdSzLIhKJkElnqNebOI5Dw65haOab4IsAx7PRNZ2m3UAIUBWV1c15VEXjyuQ5hvsmiEdSxKMpfN+l7voUdI82Q+Ou0U56Jwb4zuQifbcc4s5OjcbyCoOEpHSVpKaRtV0KroIqPILQxfMczr/wHe5650do5nJk+sdYc3xCu8D+0Z3MrMziN2roQ6MYkSR2q4AiFGrZBSL7jiCEgh1KLFXhejXksR6dhwZUejsFzWLIEU8ykVIQUlIsSHIq2N42gMYLBFpsCLQ6bmUOZzokrnWQzCjc8/47mLvcT8pQSOyK0yi79KhxomaI55Zo+nmaYQ0pJfVqDVUV3DOaYLUesFkLt6EDgcpgqp3anscImxd4z+gihckCX7lQIQx89nZG+MhtO6mFBzl1ZZ6a42IGkm/90bd5z/4T9B4wKNQqCD9gQ7/Ebxz9r0znW2RvTNIoVRFWDBULzVTxNY351SU629rojyWIayp2o8rKxgaB4iOlxPRDlFKOoTuPUN0q0Vhf52UZ4RbN5eDdPk/NS67MryPb1zh2/BCxaARfhmQ3stQ2Gmx4Cs6Gh2/oqOjbn3EgjluIMrDnEAlVobFZ5rlrK9TLW8TaI5RX5ph7468IgyYCBTM9QqzjCJrVRuhWGW7r4ODQCEdGRjg1c4Fnzl3gxAcfxnBatBoVhArP//k3KBUrhJkISipKdTPPrQcf5I0bL7HS9Nhh2WjCxvYFqd6A/v0HCYRKZaPI5sIWKVNh7EAKYoLidMBCM8ruWJWiG2Fvpo4EGp5Kb8QhbgQYIiD0oRYmsFWT3OYGLdtF1XRMUwPp0qpVkFLBK5fZOzbE4voWTXsbPnTy9UsMTLRz5oUpdCtGc3OTSmiwaTf5hX95LwurGn4wSaOQZ2++xIG+Dvz79vCux19Fs0wMKVnJ/v3DpSoFV6sV/FaAkjFY9FwejpgMrhSZDUAxNWrZCmakkyBUackOutMGhKsEnsdOReVJRaDpKrepOvvUFv+u0ELXdN555x6+8dQVfvo9t/K9s3NcvrmKunMY4QqCTBe5WoPyK6eprhdoVs8z9H8cI+J2s/DaZYzIDoxoFEs1cF0FKZPsvvtdXH76j0CmaI+NIa0uNubOUbNfZM/RB9mY70PQBBmgqCqvXS1S/o3TWBGVuK7x0Xf1MtQd5YWyh4FHeRGuFnP0pOGW5K34/VXeWN0gYLtH2tYEqoSDwQi7d3+ML6x/nXJtk6iqICIhfhhFUy1st0ZMxDjafZDqhWUMv0QifZCV5hWWN7Ok7XWa6GwpGXKVBpWVy4SNPEEph3PjPKmJvViVAjQ9ErpJK/AIkfQaGikFSiEMv/s+VppN0rKEFtG4vOWx5/hbsVNxruaa7B8fZH55g0rL5dr0HD/17vv4z196GTPSgRmJMjN3kWhsHMf1yW8tc/16B6qmcmPKJ7t5jbZMjOzWFK2IS7H4MrFYHCnrGIZO3nb4nhTEB/roaOvj8uuvIYQg31hhbHQHtLVxfm2VbLmObkUIbBdd05AJlc03XuPgR3+S4tIcN771Zfpufze2rHPnJz7Aq3/yRTRi5Je3SPWNQ7PJ/sc+xvTXvonteOw4/l+p7Vjg+dde4bkrTxO3LDYH4JG738ZTJ1dJWjGkZqErDmYsRPUUbNvnq3Wbj3aYND3JnNfi9qLkj+abvKXD4L7ONlprPk66nbtO1Zi9o51/+9sf4TPZL3PiwEFO/IuDPJ87jdqnsrrUpLGaZzw1zKGh43TcPs5GdpYjC5fJXTrLRrZG+5EdiEiS5//g19gbN8g1k1RqDTr6Z2mr9tPp2mw0bIShs1SDuwZUSulezrzyIk6jyu7hPi6/9CRZvYtdbSpe7x4iepx6vc7o8AgdsSh1t8rphesEzRanT71Cw48xnBmktHKNscQopxbP44beNrjzzSBUoVHmYCzC2CP/kdvDq7QnqlxfXOMbPzqJYuqkI3l8S2Npuc6BQ7cQ767TsbHGHBBJp7CdHBG5jP7gGI2GwvTTP6Ct8jeUzBZLe1a5dOkmv3Ti3Xzeu0Ff7iJvffUmP/ypD3BbUODMRo7BlMtS3SDmeWgL1/ASA9zy4X9Lpmcnqit48NYRLK3GLXf/FNm6w/173s/Uy6dItY1x9Mj7WS8WcOwymrRQhYUWTROM3s5d8XO8U9apuE3Onfw6pcRh+nYeQJcVGs01go42/EYL1YrSmQjQCFCaOvFIhKieQEUQ6AbxSBuKVNG1CI/tupd02wBmTYFIgGnFMA2VRgU2CjatYoOME6U91sXRd32Eyvkfcb5RolLIYRWXub5+FNM1WVzMsbK4TnWzBn6VkZ5OZhY2SMWi7BvpY3Y1y+hwF0mhUazUOXf+Eg+9/UF6jh8mNajSKOXRmiHVuSWe//7TfOpXfpH2dAfVbJZdu4fYKMxgdHdiV8qk2hK0pCCs5Liyuo4bN1lt+vihT1RpsXdPBzE5TcvOU7NieC2FF+bbSS++yNGDcVqXnqHttgdIHb2H2O3vxsr+gOGJPjqsGpnjB7G3skhFodVo0DfRj7ue5ejhoyzP32R0OM2VJQ8rss5Y5yC5Qp2hA220lwMW5tawV7awolHSzdOUZRlN1ai3XKKaSyZxnmP393DqahQ7CPn2uTnaOwTFrSKpkofsOYJQMxhdd5Es/hmXpubZv2MPMV3FD33OvPISsryINAxO7H0nrQ6HG8ur9HYlURWLWNTC0hS0VOYfXUA1EQgkJRnyqm7QE4kw2ajTRsCvKD7/RUqKCAxVY0MTXAs8jhgx0C0ahsUFUeT4oTg9TozO/e/l0uU/Qe3fy8maz/v2D2FLWDcU/uibX6P/uWc40vAY3XUYuXeY0q67/vchWCpUGw52vUlfwmK4J81sLWS9UuXiwjp9HSbL6w5R3cJKmJSXHQ4d7+eFl55mcb3G0L6jvOvQIQbiBq16g41cns6OFDevXWLfnXdy5it/gWJFUXWDk1/7Il2DgzSy6+R9FSuVxtncZDmXI1dpYIwMcfbGAmpPL051jWK+Sry9E+Jx7FyUsJyjUclT12Jk7riXZr2FENsOOSNs0N4WpeiNMzX5Em6zwfLiRYJWFaRkpbrJSjzBDsWiZGaQkQRKcZ0wCHHdAE0LaTkO0WiUrXyZO29PEk9INgsxHnqog/OXbIq1FoVKi/ZknM1CBd8LkEIjjBisLK4STUKY1mjrUPn+ty4Rj6n0jScZHewhnogwqJuEgaCVL+OGHtLxqFSr2zWH5Srm6EHU0MZO9lGdPI0iFEIktmvTH2bJOXVEfZXGzCWUnlGgha5rSBni+z6qqhGJRAhDSalYoa0thWs4FAtlvvuDJ5kYG+X48VtwWzbVSol0ewe5+Vm6++DwyA6+/dJZblyFmlNC6D3sOTbMyMg4XqOPm9emqMfH8UQnoriAJ30axTVGa2vQKCK7NP7qB9dZztfo7EhTjOzgxF2HMdt0Vuo7uOX2IsW560zVx/mFW/qIGzl+d8sgFisRN10alTwbYjudgpQkEgls26Er3cn68gKWaVFxXAIPwkAACoquc2RoH13JLlKZNvZ0jdMx2oaVFshIwHNff4FytsHbzfsZOjCCsHRuvf0IY4URtpQGb8zOcmPmh/TZTdKhTXspQBn2qRdMJpI2A4c12l+d4eA+l9KPniPPfuyedvJWjdWKi5pMIcotXMWgbDexDcHKwiQPHXyI8vwiHR0dlC9UmNqaIxNLsS/VRSG7QaPZIoaBs1kmYkXw8y02r2q0zgR0tYOmCoSqkJwwkd06B6IZXC9EQaAIsGs+XWnY1R9lpqQjVA2hxtAUDc2IoRKixHswmjWUlkOkawjPVYnETKTrU1mYx3RthG/j+xE6e0OyywXilk7E8In2dVF/4yLh/CxVK4rQQlKZKKHrkWlro1lR6R+LY+jePwEBVUmQio7Tqur07TlE//g7KBVdDh49we5bH6BacOkaHeTyVwsce/eHWVj5KtXNLK5fxvUrZITgHlVjJHQ4unOcj3RDIpnm0P6DPPTSObx0krGjh/CffJWPnNjNl0KNor/OOpK8VOgVElMGaLqGqQgyGrTpYIYOJxI686bFPVEbXQ/4ggUbdRuhCn7ncAQzV0XRNeJDUQZ3mUTLcfbeE2VtrcItx3bw4MOD5O0q3WOSH222ePgdbWydabFZ8XGaEs8N8T1BTBMklByf+Nm7+ePPfomH3/sIlUIdv97EJyS3luP3/ugsorHFWz74c8xe/RGJRIVo0sNp5lm6dJLYgfeg9u5AShs2VggjEYTXhM1ZAsdms7UH3w84NNrP+JFb6S/mCFsu7cdOkFvLMv/SS9TWF3FLm7j1CqHromsK9ZbDS088/v85eVQ1FC2CoaokMxmiuSIb+SKti1dRVIPr128ycegwtWqVa5cucP3SBRLJJJdiMT79s5/g+FAnbrOOen27CF0KH2EZqKbKy98tcL3vRfoPxAloMfmnPtWSRTMb4rgScHFDF8uyiAv1xx0JhqFjovDs2hLdP9pkX7KD0K3zzZpD2QspKRJFqvhuEyUAwzAIBQRhSBNBVUguN6oobpQnfmAz89yfExGCcd9lR07gCY9q6NEAmlLioyAViyD0EX70zSi4xdz1p9ha7iPdfZCW71Nb+QauXUf6BaSjYCvgKgLLMgnsJqGmIywf2cptd8uKCNJxCP2A9HA/YnOemdlNOnftoro4TbKznf6ju7bhRVOXAAhkiI/AQ6EzHWdgLMVCvcXgQCcRReHQbfv4/c8+TXtHkvnVPD7gS2g2XcKmg3AVQq0dWn+DMP81CBNJEsEUQt6O0E4QBL8H4Spew6Ow4lFzQgLfo+6tUvTq9HREqVd0avWApaUiiqIwMbEPVeisrk7TbFTZve9OamuL1OwNAmkjPRsZKAjx94X4QtM5dvQQuUKDm9duoAqDZqPJzh0jzMzOEQQeCgpICKsNtNoWDXv7qepbX1vgsQ9EadjBtrW/FpDRddwRi0t/ug6aIBZT0RMpEqk6S6tZlP4O9G6d9J4xls/P/11tMrpuIIQgGo2iaRrxeJyurk4ikSi9vT3k8wUcX6PpNLCMCPnKJrqq47g2YRgQtRLYbnO7n+fNvsFcaRNDj6IJFalq2EFIxQ8oeD7Fqk+0N0GpbvNfz1zh4R19vGVslGs3prmwsMxcpc5qvcXbJ4bQhWChUGbZ9WjWyyxPXqazb4h8fpOxE4+wtbHAdKuOoxskExn6J06QLefRM2munXoGU9PwvG2yYT0Q3JIRjJoqH+7RaSnQjAjiQwrvHLfAC2kVfCohzOQDHB8sFewAgup3iBJlqHOY4b4hBCZiWaXVbXDo3ndSaL5Cry5YuZlhY6lGtVnAGnYZJE7K1ciqglg0jqIIjg7E6KwGPDtTp+l5RBMpUiOj3H7LQXaIWdTNgB/NNXh1sca9QxYRFWYXpom1x3jgeA8Z/QhJsUgKwcrqBi2vzsnmAqHmUctWOL02y1+sXmdh9iwbWg4jMoimVpBBwG07dzPU28vy3Cz33XMPa3PTzEUiaJqK63rohsB3bKrTCwyM9pE4OMz16Vk8M4KieZQXQ0i5XHlhmpnFPF0DF4glYhiGRnGzwMb8IoeiIe6GJCVUxiydealiZDTG77qdaBhnuE/w8lWF0aMZNube4Mpz32Z479tZuvF9fAeMSC+x9sOY0R5SnT1szp9kT98AG0qFSsbhR8+cJ2KZXHvyZRavTtJz6z6IRymtbmFpKm1jAxCExHWLwfQApwsVvHgLlRDHlzhei/aeJCvzGwyM99Ax1MGt7z2BrqpcevEk2VyOeLtFZdmnqEnSZh1fCrosm7agSKO4TstpUfddWtUCXj2PrBYZHR3EcX2cVotqrUHLsbEMBVVRMYDjB/bwkfc8xF987YcsbubAc4mi0RXvZ72+wW17uqiYSRbXS0zdqNM53E5s7wjf/dZLPLJjDCpNlFQf+zpjVGISXXZRWSxQrTfZM96DiiAdiWBlTDaUEEsNaKTbONrVxkK9TqNaIqJLkA3K9Sq7BieYnbrJhzSVhFAI3+zXulPV+XBC4/eqNeqo6EKwkfPwDItKucmJ0UGur/ks5RziWpwwrrH8nZt870+eQQB+vUH+/OuMHxpkcPgOXv/Gtxnrj+N7MfqGbiWS6sSpzZHsH0XoSdbnLqNoKofe8nGuvXaS3rFBxg8/xvrsE+h6C7vVZHk+ZH29AorkkYMmXiVJZb1MMVemVgt4/0gvk35Ao17l/s4BIqHPdLFEpWkTyJDx+A6y1S0O9zzE/yp9m6nGJN3xQVRUyn4BFJWIlSSUAVXPxtlyOdJ2J5oX48XyBdyeXgYSaY6/7RdYrPhsNGyi9VWEInF7d7KZXQMhmJy+iioMZKNFKAWmqhLRdYp+QFJVcOIWVUXQ1Zbh/OQCPTuOMByDybkp+geH6e7p42bTYV+bgSwW8fyAeDRCq1Wnu3cnQbGEYUjA5sH77iCbt1lc3CB0bZYX1kkmLBr1IrXyItVSgTDwUNUoQVjdjtT7AUVpMDa2k7W1RcrVGh3tbQRhSCadpFTYorMrw1ahiqKpNKp1EokIwlOJp9uY/NEPOfC2d/LG336d3JWXCaWg/chebv3g+5k+fYP87BrRVApRKaKYUdKj23t599geND/G5dwXUBWDtkwHN+fPcnzkEMeGH+TU4jPEIwpbpVP4IqBVr9Oy6ziuT8PXcaRKPdDZUdH4d4bC69Zb+UT9g8RTCvERm49OfIGUYfCbj/45Vsbk+Sde47o+y8hH+jHSOtOf+RY95kEmjnRQaF5k8fTLrHSOcvye++kLa5SXXOaffRkhmhTqWVaDHnZ2OjS0FtNrLgkJjeUNPnj3PZxZWseVgrtcwTsPHuaVY7fz3e98nbaoTk9jhiurM5Q0MF/9Nvvvej/xWIzhgSFuHzvCxaXTXLxxjZSR4o7MOPFYklQsQod6mHjaZK1VYLm0huN5CCSaqiMUBX/4Nu46/FFcf45nX/o1Xrt8k9FknFuPDfDBR0bJ59c5O7/Ant6dVDWbUFUYHkpzbLCTJ97YomJF6LND/uI3fgs92MRPfZihlMKX/uq7TK9uEGm1+OT9H0L94DvZuvQ8P3Pybwizq/QMD/GKoSMqE4ROgHHnf6cnqmBpXWw+dw2lL8ng0Z3YjSS+FzC5Ms/8+gKZnlEynfu4+dIFzn/9C0gCQulD4CACg0zGonTtJD8srPOd7z7Hzj270fffQam8xEhYwmrUaOoaPgpB6NGbbEMGPr3pDP/+WJwX1muMtsc52DNAIYxDKEnG4ijtbbieJJ7ezrzGYnFilqBV9ogmutHRqTYk490BE3GNmZjJz/zKr5EfuJ3v/tFnORBepGPwKKoeRfg2ZnwAv64Sj0XZNT5AMmKxtLGJoUN2K4+KpNJo8fZ3v4/jj/4E8Z44q6vTPHPqaczNGhsrcxj1OtFWkYmIztbyMh3OAMmmJBeU0aImE7t2Q6NMKRFlam6TtUKR0YzB5FYNOwzpHxqgYOe5rOpofh3L8jEbLUQ6IDExQmrPQRJ7D6B1TGC3fNbXahy/pYto/x4al6dRdJtoRweb6xvkChW6JobooMiJHTozi1XGD97LkLnOFy6uEfElxaSks9ng+oUZSq2QXaMqH373Ab6Y62M1t0Gh4XJxdovBPp3xniInBlX69hzh2VMWrq/QTKdp5a+i56/QFb+Lam4eIRVEoHN1doY7j4yytZbHKeZourBnuJO+Ox/g0hPfoVFZJRXtI5lsZ6bg0J0UrFfEP7qAqguBQOAIQSPwycuQEGiioEiVqKpTJsSTIVLCeQUabpUHEu2cVyxim7Oc7g3p2zfKuHOY9T9bZeNQO+8MbW42HITvM7eywubUPKXOYb7WWuOIV2DX4AQ5939fwKh7Et+3wa7TTCdxLIeBMEJbWidEpZJv4ukRapUK+4ZSvBZKzr1xjlBKDF2lNDfHen8vN86fZ3VmhvrGMrWtDeLpDNdfeBolEmFo/0Gun3yJ3ok99PT30Lf3IIobUtrYJJvdJBaNMJ2rMfn8i1RUg3R3HFFv4eoa5vI81WIVP7+MIiQDu3YxsWOAiFPhqZcvEAQhAzFIiTKx0k20WAfWHR8kM/cay8uXt0XuWIrB+z5GKb9FffYi1Xgbmcoyq9UihAGu5xPUW0QjEfqGBhDS4dzZBfYfGSSTFJw8PY0bJghQiCcSrGwVqDdbqJpBs+VTLjaIjcWptRx0U+XZZ15F00A1VHbt6iW36dHRE2O8WicWEdQL8JLbww69SrNWJUAS+dinYWsBpaOLwErQuvDsdk2AgCN330O9UqaR38Q88ghK1wDyh1/G6ezGMk0QAtf1kEGA67qA4MDeMXaPDdHT28n3nnqFxZVNLt+Y5PChg4RhQCwe365VrDXQtrIYHWPsu/UDnD3zI+o3XbzWFie/8hrPxmeIHnuQDi1FJN6N6mSpxwbxAxPLLhE7/buUwzH+x6klPCPDrfsHSRy+m/e97R5cXDazVWY2NrixkqK4pPDPf2oYK2LS0evy1g/dxV//2SVWGyaRcp7O3i6cWJpDEzvp6exjbvYNMokEk8UKTUJajotbayADiVOtoEdMfnj+u4xndhAjzpoxzCMffi8de6PMv3KTZ5/7EUN7d9J+YABbQqVZ48zLr/DU2knO5SZphC6fK2/R2+XSdSgkOm5gdBkIW0Gvg9XZwYEHVmjJNn7zew1y1nXuPrSfmu6y4cXI7N6PVWxRr9WJyShr09P09g5w7exZbh04hK3b3LXjBPff8whf+PbnaQ3sIY4gFo1iuTUK9SpThRKVagzb2eZwaKb6JhxZECqCudUeCuVLDEbThIAR1XCiHtfzTZAKqhFBaCaalgYrTjPWg6UYBLaP3j5OoieJnwsRqkWYsLCzRTy7RlTVsJol6tU40YSCHvWJZTTKrkDrTbKabKN9YZaJmk1E08i99QTxeIpE1KCt3SLdESXwSv/4Aur21yZYX1knmkkw0K2irBX5m9/6Ve54/8dxmhs89/n/xsSJj+DWr+DX6+henHJ1DTcoo8qQHqEjTR2zI0XjwYMUF7f4zT/9Mh/JJFhxPT79W3/ITw8Nc0VVaC5uEEdyVSqsiZBDioLCtmsmoirENIWYDvGo4J0jHr+5ZvGu/RLFUpi8oSCAd+5Jcb9SY0uXKGqIFREMDRhoMzZ60EujqPLzn7nIox9oh3IXv/vbBR74iXb81SbVZhMlYVIvlAjqAU5TslUXPP9shU996m7++Hef5p4jj9FqNvk7Rp0MQi6dvMAf/8XPoce6iaUmiLbPYCS3CfTVSold/hZjdx7l5dcN7FgnSrqf0GkgtiYRG4tIu0KunuX5jXEGR0Y5PDrAxuIygdmFDMok27uoL1zHb9QIPZdoIsW9j34M10wwfttbyDkmQo+BHgfFIkTHDyVt5gx7Qo/enQOs+ArX5xeoNh3qrSYby4u86c8HIbhr/15++YPvQXOaOHYTIxJBWts9JrqpYSWjNOoO4XyKlDnK8hMOg3vaUepZlHoNPRZieNXtf5Khgm3bJN6kRWmahmVoSDegmszQMzTAD22Po4MjkM+j1IqkPR+l0cD3fcJAQbZcXEIcEWIgaIUhS9Ftl9apuRIVO0ckGmUqFmV3UrDobYtIVRQc4eMSQhhHQaJpJlErhhd4RMMa/W0OTv0HjHcdIZtRKZUVfK+Nhr9dHRAGPnZTEpgthB4i7AbC87ZJz0FI6HuEnkub0mJuZttxHbg2TrFEYz1LpD2FGrX4ew6cQiAlLT9karNFKFWGJtoorBWZma+TLVxGVWB5s4ott++6UEKh4dHYbOCXcqjhLqR5BBncQAgflA4QPlKY2x5X/QFE8XeQW1UUAuohhDLESqaoOi6JuEmxbLO5WaBULlKp1ijm1sm0dZPbWiOV6WB4qJ8nzrxKEAQIAb7nomxj67fLaKVAVTX8UODUS6imws3JGzh+SK7coFHfhksJtgno6aRK6Eh6OnRMU/Dqy2V+9uf3MtJsQEVFuDWseDfnX3Up1yT1RsieiQ4quQb1QCNfLFFvtphfNXn63BzNloOqquzfNULo2wx0x7jz+H6uTC7R19eLYlj40TSdpoHrehSqDpqiUrFrICGQAX7gomsmfuAThgFCKESMGKEMUYVKGG67xwhcXAktP6DhhxyM+jy3WcH1PcqOx9liGzPlyyQ0ndlQsFpvkW+2MJBcy5a4tlUk1dXDQPcudDNKOb9FJtOF6/ok27pIpHfhuz5bl05RaTUJDEGzmEPxVKxIN43WdhTnrRmNIUvjUsnjt2s2LR/e2wd+VOXwIY3O3RrxRclo0afXEEz522knBOxJRejfm0G2eSwWa4zUdSoRB6WWoTKpU8ciOmJQuTpDUOrAa1qs21mChI0cdeHqdpKgJ6YQ1wX3jsRQBTx+vYqQLvX8HKuv/CEvTs/zq/cZHOnaLrp/eDxOuemT1lSuzc+zx5XUUi1wfEaO72OoLLAbPotd/eRqTXaKNi47f0l/eYALeo3bH36UD9eH+bXXfh47V2ImW2UurHP0jmNcnrxGZW0dn+0+JQDf82g1m8Q1ncWnTzHyroeIdnQQbOYYSAhMRWVqVuDZNu9NTbO1NsXnz/lMxBR+41Gd75/zaCpdZA5HuGfa59lWCkUoVKoK7YMJTvQITk9KOvZEOP3Vb3L2O5/BiA2ycPMZFE3DMgfpHnqEvoGDjOzYy87bk/zoKxFKi3/O2x67D6+p8it//jOcfWadVHc71Gq0p+Oszq+RcSQd7e2kUPGEiaOZ2PVldo70EeRalF2JqQjcQGIaSQaOjHPzteuMHxxnZWqJjoEOIm0JEoFL0xUUFmu0Ao9mS+Fo9RrZ5RyeayMCB7+6jurVIPAwnBp+6DAzs4BtezRdH12RDPXEqdQlhD46cMetR9i3a4T/9gdf3Ab6aTr37vkg0/OXGOwocnK6yKGjHXS1R8h0eMxMOuzd30lff4bf3Nqi5Dk0/2aZ2/p7mOnqIxZdYTFXpd4QjPSk0R0F0YIOy+BGNktc0Zi8Psl512XiwEEiQtBlWWzU64iEypXJCwinxaylskuBXlXlYd1gUA/5tlfnhi3QNYEqJZaqc/v4GJtFlYXIKI27GyQ3FQp+geXc00x+4xyyaYOiIWXA1DPnmD11iROP/AuCwEMoCSKJPYwevJOxAxN864/+Bw9/8t+zeuMcVnMM3dRJ941x6L42Lr7yI+5620f50V9eB2aJxpPEzBJCQBiE1KTFr39+EUXxWc4qTHQm2PQdumQUP9KD6pvMlvMkMagrLooU7I7fwkFtL7/lf5/FVpW0FUOqLaQOOxIjbDVDDvTv49TsaSp2he9sPUmzo8UHI6PEWjFmS4vIUo7Tz/+AYmihKQqBopFaPslqZieF1RtovocMQppucxvcaBgc3t3BUHuEU89OMhSN0qmrTC1tcNvBnSS6RtgolJm+eZVIPMPC7E1ajSphGPLK3BV6MzFqLZsvfv8lNN2gUskyODjC2upNPvVz7+aZZ36IrkdZXpqkWqtimHGC7jjz89fo7x+hUWvS33+EWmULp76KpdkQBkhVYfrmZQLPZqwnieu2UFSF2RvncRyXbKmOJsBp2QRSkitUObJvD8L3yM5OU1reoG1sF249Ry1bZPnJJzj+sY/Dq9foO7iD3Nw6fqvBwo9O0350D61yhUtTOdJ9Cf79h/4T//az/wdbhRI9HR10m3vIR3QOdD/IVuMkrtKknqsSCg8ZhmgipFeT6HqSRb2dj2MR9ryPXPd7mLr2CZz6Er3qz7Jj359wX+plXr/lJtnvFLE6TboOtbP5bIHShRopc5jb9+7gSuws869/g77BXpIbF5h+tszgnmPs7csiNuu4VhfDU23cM9GOJhUul+q4rSYyqhEIk6MbLzHlDKMoCrfGE1xfW+b8jau45Q1OXn2FuUpIXAddUUjJOpYhMDTBa6ee5+qFkzQ9n1ANaWg2f/vkV5CuoKOzjRRJHOlyaOde7knfRmeyE0szaDgNNvIbnLnyBCPj70XXr7O4VmKgexdB7ga3DflcvJmjZZdopTUWrk/SnnEpZ6v83Lvu4PLNRbZqNcz9C4iUS0yE6MEyybYhVr1R3vPOB/nTb36fTRHwlz/8Pd71wBHCpODG4hJ3GCoDsRj/7cY1bstWaNcd2ixoVzS0+Wtkr02y//ij1NfLZJfqbNotug2NkcRONrqvcGf7QRwDIsce5OnTfwOKgqJpCN1CNRUW1/KcPH2ZRFsGwzI5sPRDmrUarWoeDQV7prA9fG006D7yz5BCwVNV7hwf4R23pWgUm7Qche5oEhEExGLx7YiVlEjPByGYrhd5cm4K3XgLpoygCoXaVh1hhcxvBHzhz7/O3nd9GtMW6D6ozgGiuRLNZZOoPgSGxCPLzdlVLEOloG2DOLwgJPB8NEOnI5Xirg+/nWi7ysz8FKW1FfxyDbu0SSwWoezD5kYe2T2MGTSZKq/RQMH2NfpllEggsaNtHN63m8Ezs1xfWUcQ4gQhZjyBqqjMq5LBuIbt+KQVnwm9ztiRXgbf9Q7M4dtQNIuwsUm4PMXRwyNcfP4Sx+6qk7zn/QhVxVo/TXfSQrM9IqakcHOLp2o25abDyGiOp85OEXEDyoUa2dDm4maVYq1JIBWWVguceul1Lpw/h2Vo7OzJkK/aVBrbrsZcw+BgusCJo7dz/WaJWsVlbjPEcKoYyiK7BnfxzM0ahUYdVwY8/9okgSJImXF8NWC+bPOFz30Gr1jEisW4ubzGsc5Rjoy0c32lCbL+jy6gphSVJJAQkI0kKESiRBtVtoTGd3SdPBB6DopQ0DWDIAiYVmC/4zKQiWJvDhCJg7g8zeLk33IhGse4OsmzP3gSOTrF3TtHee5rX6ewskY0m2Nn7wiKECzeuIosXAIe+9+6fksRGAFUEQhNoy10aVPq5NcbOK0WEUMQqCHzG0XGIx5jmsZCGBLYTRRVozx1FTe/hXBbxAdGKE5fxYpaDEzs4NjxY7QPDfHdv/oCie4BVAHd+w8wO79IengU4dm0J5O4vk/oS0LdQEuniKSSVJbKpBUTXUjiaZ3B4V4ee8/DxPA59/p5arZPZuECcTXBiF4l09GLPXcVt+XhHvtn3Miv0DW+H8OKUffA6d+FnRilEenHyk6Ty23g1UoIIAxA1wV9/d2oAlyvSiFXJzafJQggm22SSFoEgUCYFqYiaAgFGUoCKWjka1Qnk4zoFq1oCLhohoqmgd1waTQa9DQdyltF1ITODQZZylWYdB083wMhaD311wQHj9MUAv/cC6iGgYpAT3dQWJ7DCQVOo4K2MkX2D55EFYIwEaFl2+i6gaYp+KGEMGT3xAi//z/+PV2D45x55UXOXbpJrlhldnYeRVWRoYqmGQSBZD1bp+YnSMaTuEqMwfG3kF+doumDEtdR1ZDspWvk4ibdxyuYbf2E7QJ9sU5GXuLKhZDxvTvwVnMYepFKaYvY7Ov8xZ+tE+8fpruni+OjSTqVEm5mgDHN4OVzq5y7+AoF7RKO62DoKo6iEXUdhrozTJ55lYv1Kne+5QRvPPtFAq2LQJi4pRJhAM1iEel7BK0m67pPJIxSKZQIulrsDnPojTYWpmdxozUivTpVT4JwKbotlisrLGxNI+0Spqpy20Eba49EefB2vOl11LjB6P2dOC++ihIKlPFbuf7Ni3Qm+xlxQdoVzlah745biHfEEC9M49s+LUNDmBpGJklXrA2ZSlDdqLF/+ADKdI4PPfB+nnrtGd7ae5hcaYvQ80nFEqSzHn/5bZf9FqgeREoSRYVkWiHMpPnSlzeQPqSSOo24z2Qxj7cId40muefdR9k8347rAVYvDU8jGjE5GFvh+lqcQrIDFrbh276o0sqZVLKrRDWNmCoIVQvd0ImlVA4f76XedEm5kni7wrChc7Pi0RASvS1Df7lJdKKdlm2z43gnMqjgBv8EHKi+V8MXdZrrS2SLK3ztyvsw0m2szFxkZM9nuTmZ4oVv/DInv/uH+EGDPccfZqzzXhpeEQ+XLSEpmFBbLbO5XuEdV6fIdHRxYznPZ47tI5Uv8UsvvMYfKudpKQFvGR3np5yAuRAaElQJuiKwVIWIIYnrAXENYppGtMPmbTuTfK7Yyy8+HOX6kxVUpcx/eFjDWlSJOeA3QoQvmZ+rsbHs8x8/eYqeDovLV4t8/g8OcmNpk3/3izf48h/qOC2Pow90Ez8c4pQDAl9yc8XmQBKCaoxMRnDfW2/l2W++hCYFjpC4COKEZGImh28bQIZb9AymWE1arBVbSCnZvP4Km9dP0n/0LRx5yyfYLPSwK6PSUBKcuxDBbjmwuQDNMoptsxFLs3e0HafRYO7k60Ta+uh4+BN0PPhRaDUJPYfQldRadXKNgGpgkthlUs+v4FbzhPYGvmsjkaR3ZwhKVXTHZUc8xk8c20tFqvzo+gx5qVOuVtBdm59/630cHhvErebxpcSIxTBiMQJNRURAT0TA91EUlfb+blLVdp798x9yIR7lPf/x3WQLWYhCaavC+voadsPG9310ARGhEdOtbQKxotLf1cliMsPvXHiOpGrwe+9+D22FAnFC8vkcW5sb1Js2YRjiS0lTqqgESEVDNl0OtKVh3cZzm4SOR9XSmS4FVEKfuoBWAA3FxAl9hLRQFIuomcR3fVRVp7ern1R0iadf/yy6nuKD7/w9NvNNFJmgWCyxublF3d5+IAxdDyEhqAsk252QiusgFQXVMNEtg2KpTqKjAy1m0apKzFQcp9pAaDri/zaKECBhpWwTuJJqqBKKkO6Yzs3lMku5Aq6zjc0KpERKQTn0ya46tJ+bI7EjjjDmgR1IcwLhLW37JsVrhM7j4JxEljopnNqgVfBwhUrYqCBSncxcP8mpU+NUm4JyKc/y0iye7xOGIZ7nMLLjAEPDYwS1Agurk/hBCxkGSM8mVBRA+bHQLn0DSxMsLSxSrFfYWlvjxIlbECJK6NTIbm3iei4oghubPrcsLPHgA+O8ev0yQRDw2iseD97eAfUsaBkEcPbMFg1PcmBnhAP7M7Smlshvbcd8bdvGcRwURdkuMBeCtc0cltLBzNwmS6tb6JpKV9znZr5GYuwoqbXX6GmLsDS93XlqOw00VaNp17YHAppJ095+/Yi5LZ5KGRKxYtQaZSwzih94+OF2n24rCCk7HnOTc0x09PLs3AIzywscH+pkqlji2euzdMaiPDo+QLbe5PTKJuv1JkOjaaSvEQYempTUGyU0RWNix17uvvNOFpeWePH8K7S8Jk2vQaNURAYBzabC6kYZR0qyepIfblVpNH1U4P7uJPOoDEiblQ2fvj6dIBvwSi3kSiMARWx3pXqSrr2SNbVGcz1Bf9jETwRUUzrWClRli/WZSTIP7mRreo71Yp6Jgf2km22slJbxog6B74Pvcrg9SuALXF/y2MEk63WPB/e08xMnoL0zy689v8Xd/7GJ64UU6jZPz8JtvSadsSS1tXmm1pc4FAqulPOszE/iYBPXdUbjXdyb6qYZL3Pz0jkCc5EOc5i36+N85fnfJHV0L0FujQvzywyoe3l+eJCDhTxOs0mpXscLfATbUDEZhsjAR9ouK8+cpO8td3NzdpHv1dOMrJhcnW9yba1MYQP2xQX39qqUa/Dpr3ks+CHDhsdcIU7EEhBaqIqCPlVltCukFKhoA4LWSgPRJkHxCYIqjcoMPSN389BbHmNk7AhRSxCoAbn1Mr/8cz/J7/6nv+bazQ28EAbH27ly5RqVrQK+79PZ3U5bJoEuBJW8Tac9xr9562f4zFd+hpvFc+TLJQbi/Vy3JW0mSMMk1m4y89olMl1pNrfyZJompc0cncNtDKSS3FibIq04dOoBp4uS0a01ZOCg+jUMr4Tm5pFei2LZRddUapUWtuOhCOhKads9gVLQ0xFnfbPMwXvv4WJL4/E//Coi2O4+Du0mp6eeJmgEtO2f4IH945w5fZpSbo3NtTWGxt/O2qpkbKyX4YE97NdbuHaNL3z5BR7ZvYe18gopXccxTZq2SyyaxA6hZkliCIZGhth9YicbZQVqNkYkSqnYJKIJQk3SPRglnxXkmg6BFhJTIK4GeImAl9a3O7siwG+l0ky3AuyWpC4SrJnrzP/hN2ltliGUhBqEroem6ISBh5SSvt1dbMzmmLnxHJmhwwztfxep3iHGD0xw+ntfoGt0L1Ykg9Dgxo0rxOIJbt9/mL6R/Vx4/tssTl8h2TlEJeuCyJFOxvGDENt2uDzpIFHpzITcNdCP50hWyxonhlOYXcd59bUiF3MLaIr4MbztjVjIF+vfwRQePfGdCFklKkICu06YqOO6BR685We4vHQTz3Rw3AY/yD1DKnqcW9QBrmnLSAm1xQvUjV7adR+ldx+GFUGtZtF0C91QcWotVAGGpdGZNJnoS6BrCvemk5QTGWK1MooZZWZli9nZSYSZQFU1Go0aphIQs1Vmsw2O3PNO4qkOdCNCf7DCjW88SaNRZWryCkePfZxapUCxMI9pxUE49PakabUK2K0mggYrS6/S2RGn1fSoVFcJ7SYxXaCoKlW7hdlUSSej27TbRoCqKSQsE0NVcV2XarmBoSo4hOi6gtpoMHL0AE4+R2tpkc5dR6jlMrjlyzRX1ilMz6J3d7Hy+lUyRw6TXZtHFSrlhXXMvmEG9Q1emPw6WzcbVLxFqp7GH//SCxTno0xWJxntbqdDHqKkn8NRK7TqPnelTC5WwRACPd4GoU5F7CTc8yg3X/p5vNY60GLj+v/k1Wc/hX8jxeB4H429NkaHjrnLIKhVqV5oou5IcEp+lwFpMTQ6TFBbws3W2OVXOfHTH6X5xhLBIw9gxhLsTnsUrpwnDEIiUmclXyI1pqEbIZsVMAyVZNSimOlkEvjGhQsYqsJvv2svv/Kdq9g+5FshQXidtPUlokcfI/AVKq67zUKQDgW7SD0RxwgEW0tbCE9FRaXmN1BVnT1Dh6g0yrSn0vT2tCMDl+vTT9Fp3ETVu+iJj9IqrhMEKsW1VWYXywxFOxhM+Zy+scEjdx6m0WjxwqVlpKGQ7Byi8coLGB/8OcJXvkt/7hwPL2xw49BRbhnrpnDyCtGxdl6+ME9xYZ1Uw+clTeGOA7cS1w1GKFKRIeuBSr4G3nPP0/voI1yp1BCNkOJsiejhNKefWaFzf4KR7jvZshWEFnDg+EM889rXEaoKigJUcVoeNSuOeOe/wNtxiMnFa6iXnqIvZpDOdDN14yapTBs136f90Ud58vQcGSvO7kwnB+M72MyXeW51jSDwuWVkgrt7R5gqrPNnl8+Sc5ocaOvgV+9/D3/4/Bt8+epZksMHsDVBI8iTGkvzxkaTtnSOsYNvpVcPcOxlvGoBRVzlxrRKdmoTzVbRhMA3+7n1jn24ocfqcp6VpQ0sXUEVGrTFGXv3HSQzLvmtFdziFmd/8ATdQ8PMTc1R3ayC55MZ3UG3roHh84WvfhtHCgLNJNEWxWhLkUincNfzXFvbwvUDWm6A0A1UK4Ki6Rzrtjg2GKfuWVRrTSaisO/+PbQu/g2Kn0UoBq/8zy8zdWGDA8MxTvyLxzDbI2jjd6AEHvWNH6H0pKjPbhF1o0zEkuzobJGvNck2KuRlDOIBVVdyqmgjFzYZ3z9GrVbHtj1Wrpzmt97/CS7MXiD0V1BHE1xZLjGzHhB6FQZ39fPFH56nUVok3XGQ4yfeRXf+JH2JLJfnijSdBrXAxTK2eRmmahA1LdIyxDJNmitr22YIr4ea4hEJq8SSGRTpo2rqP7qAGlN1kgJymuBSNAJCMNw3SEnCZrVC6LkYuvljoI2qqshQ8lRznX/WuYPrkW5GimsMPf8ZqidGwKnR2Cpw7jtf4pZ9O/jK57Lk61k6dJUGIW31LHpDZaNSJh+E//sQLAFuGJJJJVGCgKhQ8H2PmG4Q+D6aadLpBTimQjlssC9qstXyqIQSU5W0jU7Q0dNNtVImPzvDnkfeiWYYdKdTpIdH6W9LcecHHuPyxcsEqspcvkbfjp2UlhdQHJvVbJ5avcnrr11HtsUIzRirT52kAx+72mB4/x7e8d4HOdLTwfLyCs888wyGalAobKFqGm6hweVKCWFfIiFClOPvQ+QK+OgMvf+3WTv9HXoPPUTKhJE+Haujk2ZVcPVyGeaLhGGArqv0tCXo6ZbEEwFuXbCw4HNtKo/vSzShMLLHoNmuUyxqRL0UQQ4qdZtExETr7qacr9G3M04hYrA8HeILDSMAP1QwFRN7YYNG6LNVD1hIKXR0dSF9B13XUXQTUcuinHkSRQFTgozECQOPdCbFVtVGj2ZQzBieDzrb50RNhIShJAh8fB+EEKiohBKee/EMS6uPUyiUuTGzxI7xMQYHB3n1zGscO3QAXddxnQaalUGYHdS1HspKOwXNILrvA2irF2g7/hEss8X5N5YR+wZYXthi9y0BQaqXeOkqbjYk3X0XY60Nhnd3cVO4XHzpLPG2PoLRfk699Bq/+bZ+2kMV24RVt8mffPckbmUDpSnJ+3ka+RKKpqNbMeZzTZa23iBw6rTsgLauCcLgFMXsNKTHiEbjtBoNrHgMr9nAc1z69x/ANyJEAlCtCH5MoxwGpPeNk2sWKLZK5LaqBIrEbThIJaS9rYc9ex+k2axhicvo4z6VPzlLqxBidAky/+Pd6BtnEGqeerWTTCHDmOnxSsuhW7Yxn+mjsjLF/KurjIb9yEDQJaJk15cZUTuISJ3LxRlevfQy7/ropwnWcmx4WXYk++hwTZxAJ61HyPsNRtoirNY0Lq4m2JkOWJUK0YhKrahy7VVwnAIdE3Fez2ZJber0mXGEJSgVIMhucfe+A1y8dIFDe/bx3Fo7hruKt3qKR8Z28ERF0LSTuEJFBFlGjRrNjna2SiaYUbQgweD4EXLr10gO9dCYl/RmkmRu0XnjK08yYLuUhOD2xz5IrLOLVDTEiNsk25MEXg5dGP8EIFLSo9pYJLd0kfG9n2LvvXupKpcor6/y0lc+z9rUGkYkwtCufXR1t9M59DZaSwHJ2AjV1jSOu8RFVzC+lePfDHTSc3gX11MZ/s+lFf5kfokNxyWpaOxImaSiEd7d3U7GrnMHZV4RKiC3aehCQdNA0wTxpE9qKERrE0zsSvDv/mOVj/6rX+XCpV/kztvaOb6/BUpIQpeIIKSRD9i46hPdYzB+KMlwPGT10x5//Odz3FxpEUsYDO+OQkKh964oMgxJdpk08w7zy032Hk5x9VKWe2/M8q9/6SF+9J2ThEGAg0RIAQJ6+uIMDe2nWLzK1vRp6o7Ci+dqP46vg2DtwrPErDixRBvPfvFrHH3XJ4imB7ANDSlcRNMmLCwQZntZXu+iu6+buckpFGOJoFnFrZcI3Na2GyMMGe7vZX5yFr/VQHr+9hBbKKCnUPQ0Uoaku9pRhUKxWqVUqxAuzpKKJ3l3X4p/96NTCOBzH3uUDkujtLlBJJ0ikkyiGRaKqqMnNBJdcaLRBE6lTkc0Tc/gII//0rcBSavm8MVf/DKIgK7Rbo595DiZY0mmb85QLpdJK9CZjBM1LJq+SyyRJNI/zKe++zggaWDzwa9+CSEFox0d/Kujt3BLuoPZuZuUy2WcNx2siGAbrOT6vPT8DdSBdtAkIgwIfJf8Uo5GCC2h0ELBCX0cQpJaG/FYG/GIheu6xBNRenotvv69/wIiRJF1/uIrHyAU0NE+ym23/CvSqYNMz81Tr9cJHBchQAbBNkFQQAAIXePWu29n8dIlUASxnm68hQVMIdDaU6imge+E/ENHiLXVVT7xC+8gE3H5nS+9QdxQ2Tue4ebKJlKKbTfrm4LlSuhzbaGO/r1V9g4lMO9KgVJANC+BmwUtud1PKj3wxvBubLJ5qU61JHH/zhVbLZLzb/DCS8/z9re9g/XVNXbs2kc8HqVedwg8iMTiHN03wje//ASBAaphomo6Mthea38nBEshkIFHrWHTbDRQUJCeyyMP3oUTmvSlFeZmZ7h6dRJFKBSzVWy1jb2jOm85kubbr+T50z+eYX//AN0ZIBphsWizudlguN/gsbd0E6vnWKk7rG/9wyX8UkpyhQr3HdvP3bfs4qnXFxBC5eZsFks2GF+uERhpVsqtbcFXhihCxfVdgjDAMqI4bvPHQqoiFEIZYBpR4pEkYRjScpuEQYAvLdwwpO4H/JfXrvHLhybo6O+lrT3Kd85c4usLi1QaLfaNDXBiZICoH/CHZy5SfTO+pMh2EvECLaHQ3Jgh0C1aqTLC0Kk06jRqFfL1IsHmHE5uHRFNEEhJRLNotmo4IXiRCAeiESbzVXZlTI5HFYTq8o11+LlOSVgPeH3a43uFkJoHQkoS+raD+VrLg0o7HbJG2mixXPMR1RiXLjUxBiPkFrL0XE6iuzYCwUZjg4yaZiw2SJUcCygk9W0ngO0HuJ6g2IBfu7ub3V06XtNBboR8+p42zg+bfOx7RVp+SNGRVG1JzfVpeQF+0+HVpRnsUDKwp5sr85s0iVJylqkrIYZh4KsKhfoW7cl9bGzm+e1H/4DfH/1bzv/BRZyWQwKTh6TFbKnE5ZtTZIuFbVM0oKoKUoaoikrMilLJ5mgtLqGYEYZFg00FrpcaBFKyGkC2Itkbqsw1Q2pvuli3yg1OXY7w0eMx9p6SvGFEOTowTrQmWS7B608sUS4/i5LRUSNJku07uO+hTzA2dAuBUChUGnQ78KPzk7QiKY7ubsPRFc48fYn+0TZyCyusTS1ud+8aOgOjfVy7MEm1UMYPJPFjaX7+5X9PkQae46PUW6TNFlKG5FqCA0lJZbPAZj7H5laBUqVFLKIxsKOXvokuXNelt1KiK61yodKgFSjorVUUrwpODV228O06NXvbWVor20igM2PREXuTtioVLBmynitj6IK+fUd57eWXWH/1zPZhQkC8s5ueHZAvFbh+s8Gx26PoFBFhlGYDZm88zeju91Iogm0vE3geha0VNEvDq21SLdeoS4FhGDgNF9+rkdB07jm6j/m1KrgeN6Y2yBbz3L/nGJ5usNj0aHqS0YE4eiyBsHSue01ecGuY0mY4LfncesD2jE5wh2kypGlcbEqqjRChtEh1jHHbL/0Ez//K51BVnVs/cJTZM/Pk5zeRYcjAznYe+rcPcfErrxEd2kvp9ZDxE/eRahMsXzvF2twc9/3Ev6ZRrbBQeY74bWuEdYOr+S8xWvlJdh57iNNPfIuHPvwporH3sXTjGheX/xORiIGqKgTBNkhQD13qFYVSs048rNBy42hZn3OVVYYjnWyFFQypE4YhH+q5h/FDe/j+xW/ScNrI1q9Qa2XREdRrSVSZ5IvP/y0xPU0gQyoySxjWKEcVhO2j6wqC7TNKr8jhWAMks+fQukYw1zYJq1WE1CAM0TSTO/Z0MLVcwDIUqnaAGcsg+8a5aZjkCy28V88z5tlseGvEDt9OqVigXXeImhqNZpOlxXlatQu0bIeeiEcoXYRQkcDiwlnuuPtt7Nk1xMrKHHt2DTM1eRHbrpPPFvF9m5079wKShbkzNOpbtCc0bNfBNEzcQCVAULUllZpNqdLEsgykqqMEHo2Wh4vEJEDXFBq2S3luhrb77mLHPbdz87mXaS5O0n7gBMLzcWs1Vl45Q3L/CUSlSWnyBoceezdT33qGxtRN+o7dxq9/5d+wWZlG9VRQQQiVT3/j5/nU7X9EOpHG9VpMFU/R8ouoqkIibvLTGVhoBix4kkYAhm6wUOzkriOdLNwYpLB4DaHuRihNWnaGyS+8wqHP6WhJlYGf7MXNSZypEKqC1cLXEX6NOVrs2H2Ysf493DGosparsLW8QdaJwvoGDXuR1PQ8GSVk4/oSHVfXMNtjeIrAsjyWKyFhykWLJqFa5rsrOU70KqxXJY3cCqaqEEqI64L1BsRyFXay7WJ6M6nJQ/v2s14oUKyHLGQXCaQPoYKiCCw1CoqGX7WZyU2yUDDxp13GOs3tipGpKQLFZH3jde5t83GUHXTaNYrjQ+CHFAp1fudXP8nly9f46++/SoMICIf65hodt32S4tQ1VHMP4cE9TLSd5PNnniS/nKdLSkaHhzFScb53YwG7d5SDExH++vXzVCs1Lik2MgTDVzFeeYno8Bhl08DPV1HKIfmZDdomDDoOJJl6dYP07gSB5uH4Hl64fc5TTB3FMBCqjz1zGrfvBFYxi3LxWYxkDPXA3ay98RTVag3P9dha36D9rjtITIzxxFefRxJysHeEn7j7LfzlC2f5s4tvEEqP96oB9957L1On53n85jmklCwWMuyb2MeljRWCICCwN4gIDa1WZnM5z+biBrJ2lgOP/kuuz82S21xntTGE++IiESOgtjhLb98AiUiL2dkcRx7up1jxMCJx8hs5VE0lc9tOzN4MXckIMVUjX69w4dmXyG0W2Fqts7pUI+F4hKqGMCL4QuLaFTRdJed6DHSYHNnRx4VnnqPt9sNcKTWYyxaJ6BpNqWBEk0jdwAsCJhICpd5g10gnthEgRjtYnJmlf6wNffMq6y/M8Vent+gi5B3v2EvQKqHEh0GNgmGxJ20wn61wpCdCLl8ijKssbZQIFI3XVnL0m23M51fY3ZdgxQ6JHxxnYy1LtdJAIogqTYKdnZhWO0nKvP/ONp4aiJEc72b+wjzVZoxf+Dd3cfq5V7knPMv3b+Y4v+LSHnH4qffey6nf+RofffhRltYXKBVy3L57go18Hun73Pn29/Pis88xc+0S417Az9/yDs7qs6DVWN/KE4h/fAE1bkQYFCHPCUFd09mv6WxUShQVDVVVSUoVRyjYvo9lGKhCoWE3qSqCekxnaPMa+1/7NFcG2ylcu4HiBghNxQoDZm5cRy6WKcQ0UFUsQ4NkAmN9izZFJfL/j8+vaaQcj1rUJKhWcdo7MJJRNFUhpRXpT0exNqp0jXTheC7znkO742Ej0ZD89kceZb7eohaGFE8c5dzJ06xvbBHv6qXT0jncnqLL1LF9H9OymF9dYbinj3237CXftLl6/gzXliqEuobMZWlMz9CWinHPrQe569Be/FKRl554gm+vrqIBvX39pNvbyTgBc0vL1Bs+timwYl04PXuxpIG8/DTqjrexXPRJjpxAXThP4WaNjWYVWS8T+jaKoTPamyE/pRCNxkjEomhBFJMk6fF92GsKlupQrjqEtsRuJOlKCtqMGEq9yUahhhACSwOJh6pCelcn4ZUFLCPElwGWoTM3VcCuBgRdEdKGSkwzGFq/QGP4EOm2DPFEklBuJxC3DURAsA3hVaJJFFVFNVNQXkMJJKKVR+s7QLByiWajjmkaBJ5HKCW6qtLR0cHO3h5eOvnGNujZ9QnCkMP79/PhD7+PqclpQglShniei4uCV1hBNF2q3ffjDvei7r+PeOFuwulzeEY3XftTlCyNeEJjsy1B19JryFhIOXKQsbvuZu6Zv2aiQ3DhwhRmpBO7miN3eY59GYkuayyv1Ii2RylVGiSDHMnuHo4N7+ePXpsHZRqvaaObBmYyha+B2ogzkdR4+vvfpFxsgi9xc5vEe/pJJXrQTINiNsfm4iKB52GoFuO7DtEZ7SUesSjVmsSsbt726GOUKkVKhQpN36NTQGZkjP2jKep6QM2vod2bQtRrmJaHF5FoaYVw9SZKQsWXJtkvXOMZrYvllMmOAxN8dWqd0uIb2Lk8iuPidfTRZiQYifXSribQQ4Wh3fv55qm/5LFD7+LCK09zaP9xFiZnOBDtw/IUCEMC36XUqnN4IMnWagujJFgrGyj372Tpah43cKipLkrNpSMfskuPE2gSTW5rdQSSK2fX2fFz+3n50gLXsx5GPEa6tMVqzSM7u0LQXOLQyA6mCxZW6TRNJPFUG0HmYWr5FqqMEUvuZPbmMl7DRG0aFK4nKOcVLvsuPxlKnkIy/Vdfp+OBX6TRleLQW2NU8gHC6KJnKP2PL6AqahRFggxtps8/iS4jjN6nk12ZY33+09t9R0acw3c8hmf3Y2ejFDa34TmK0IkJgea7GFqEmcUt4osb8I4HmdnK83/6PkiIaTof6Okms5bl3rU1NioNgDfj338noG1XCYBKGKpouoI63MXeXe/nC390kM/88VladshPfvidKAfWoP019Es2GAqeHyBESGHapVIqYR5vZ2GhzGd/Iw9CEIlojN2TYmauAm5IfqMJIkAIFSdwObdoM3xE5ak/f4UHPnaAj310N3/xpRts69sqqh7wgY++B9cNMWQdt1rl6y+5FMv2/1sVAkyf/vb2ZC3ZQ3RoP+VXzyFKWcK/m9Y1ylDZYKtQZGJ3D6WLz2P17cfM9KNbJkI0CDwXnYB8vkWgtSGtGKHiIP3tH9wWoddAunUMs59YWxtSCOKxGHXbwQ4CIprGYHuGwHORrQZNQ6O9f4BoKrntnFS3H+BSA3GGd42TO5Nl/y2H6OpP8crvn4Y3w+khgAxBwtbcJk9++gl6b+lnz0/sY+ryFMNJnR1Dw/ywuMl9ExP0tPfwK6deRsrgx9IyEiSSuVyOf/P0M9zS38lnduzjanMGV1QQEpAaBAq+4rGcL3PXHbvYKtXRNIWEqTHbbBECXqDiEOLLkICQdHKYsb5xVss/YNfofXR09/LCqV8BttfejwVOCfn8HD98+pcZ7L2Ng7s/zfXZaYLGtjtLSkmgKAhlW+DUtRjjmRjxA3v4Zx96lCce/wE136MVSnzXw4hEUBSw/8GhhGRjZgknpvLhO4d45WaB3UcHeFA1eea5S/+33132QZcB0cUG6cfn6A1HsG5NI0QTqRoIEQfiyJKkdWqN+e+s0woFWy4sSNB0E79ZpRVqrOdnOHn+Egd37KFYyrJr3zi+H2AqCs1KgS9/6QdMzr1BIG18r45QIHA9EMqbTEe2o/wypKurDUMJqVbK+P3dCMXk5aeeZmNlgcD1SKeS5LM5FN3iykwJYUR47JMniMXe4MVzZf7Df93k+B1pbHedyxeyxKI6n3hvP3ceiLH4+iwXZ1yMaJxIxHvT+CrehJGpRCyLiZFeAqdBKAOO7R1mLd9C0U1isSglIQhdMK2AuJVkq7hCxIqh+96bkX2x3YsrBKYRIQj8HztRDd3CcVuEMqTh1JDSwpchp1e3uJ4v8c3ZFeYuTnN5q0AgQ1LRKIfHBqm1HB4/e4VKo0n4JkWjI2ohRBJNLYCUlFyf0K4S81wmS3kWUx14jRpOs4ZcqeMFIelYGkVsX5uUCkLAqh+iIEkmIizZIV8XJp2B5FqlzicDjaUbPvMtSSig4odkVIWSJ7EDibOVJCEbDGiChtHFpQunOX77g4Rug8CrMbq7H8swSPT20hkVzG81MEKF6vwW60trb0LDBLYbYLsC21GQEUkCD1qSkivQIx4RVRBlu3M3YSrMFx0GIxB700XuOzYyLpAZjWur04yM7OW9Xf8LxXfJKa/yxMoXCXWHnd0P8Up2nb+a/Eu+uBRhvBjSKpcxdY2+VDtf/dJXKWS3tgVxz0MK0FSNZDyOruuUK1U0Qycei5O/NkvUSnLvaITH52tsVVs/vq86DIU7elWMLXijEiDZjvVdy9lURtOMaSEXTRNGDEgplGY8Lp/8PIXN1xCqxcS+9/D2D30SiNGsOcwsrGI36yzk80xuTBIYBsLcxeLLF/A1hQ/+9/fwxvfmKPSVWVhZw2nUePHxF7d7pAAtlcLo7UU/cSvJuS4KT/wI2/WwFIf39ma4Wm5yo1zhoWmf5I5ezl6YZWD38HaViO+AEFTzRSqlKr5nUnJcXB+02jKuY2M7NjoecVOgyADLtGiLKUjPpjOpsrRVIV8LaDkejhtQsyVBCPWlp3FuTKGEEvXN+79vbJzu/p1EUxHmz68y90qVfvVtjHZH+NH0Z2nWVxkeu5OOzg5mbryOpkeIGSH1hs25C1fZWiiTNk1ilkkj1yK0XERUY2mjgplKUSuXsJ0qThBsO2Yy7QyHIc/OLxJ4DvktnY6Ih58vI82AhBXw+6surQAURRAG28ODnJQ0mpJWwyMM82hLMXL1i6i6Sf/tO7nvnx9j6swCQtkeVsXb48ydnOFtv3SC098fwaufIxWvsPz695hfyNM+tBenaeM4W6wsv07fsRi6JlGKFQI1INM5iGZlWJ9+it6Bfg7c+W4uPi0IwpBozCIMJTIM8UoejilxVVirF9lwGwSK5GBmGBmEbJW2wQ2KonDl+peY2NzDz+3/l/zV1R+CmqIYVNAUBenH6Y22kys4JCNtZAydnphFobFKxW5xo75MWyZJ0+qioSZQDRVDSLzYTqquj1e+geKH6Nr2Pmzpgh19MW4uFJAyZD5vc5fXYKPZoJVoQwngtrEJBjYWuGbbeLk1MntuoTB7njCUZDfWqVfLJJNp0m2dtPQYreYKuhGSTLRTrS7y7FN/y623v4dGI45jSzo79rK0/CKOU2BwYBcrK5PUKmtEo9r2oEEoqELBc7ejzblSjYmJbm7Or+H6AU4osHSbQwd2s/TSK1iGvu14cX0iukkiEcefXaTrtsNMvvAS0m1iL00x9sDdLD77LM1yHjE/jWWlsKRFrW4zetchbjz1MoYlyTeWQIBlRlEEBKHNtakL/M/Kz/Ev7/sTchvQ2Axo1UCxoGl7GBmVT7VrhFLweEPiCUF3e4Hlq9M0SlHu+MDvcPaJi/Tt/WkKM1miMZvrf7lO5qE0C1/cwJsTKE5Ic6PJhn2DkdFxPv6hj3L+1ScIg50slwOMdBeLzzzOutWGNnOdZq3Bzmae/l0DvPzG0xzdNU5caWOg02TV9vGBVjzOzr4hnnar3B9b4MKaYLEW8PkLdXakFFQFCnZIw4Nrc0uMb11GFyrteozNRgHCbafacmEdN5QgQqKJCEHLJ0RQbRW54tsoqqDl1vB9n3ikn63lp8nVPCytzuHBFDsG2ph+bo01p0a+I0/gO/zMz3yIvGbxt0+eYaOl4StNxgcy+B+8g9smEvTcdRcv/8xj/GRsjBe6E/Q3Ounv7cRSdWanFglEQMZxqMxOM6eked9HHuapp88S+CFSAXH5CtncJj0PPki57tJyfLSST2E5R1jpxPMDkjvjlK5UUIcsZEwSBNvdyttdfwLF0FH1Imr9EtLQUSIxFDWBFo2SvOME9VNnUXWDeCJC+doNBh99B7ZjI2XIldUF3vcXn2G1WccPtmuDfnj+DK+cfYW86xBoBkLAYqHAL/zN5+FNB7rjLDM9s8LBIycoLa4jHUmo9vLEn/wZjfIKQrNoi4/gKgLDy1PZukFHV4qLr58inhri6597ilBVqQYe4/ffhuwxMJAUyw3WFjY5e/YSF6YXMBt1rlxcxA0CdE1jveUgHY9aY3sInd2sEjrw0AP344sVfnh9kaGuEV6+toynqHR1pmk1mlQcF03oNEoVlnNV9kU0JhfLJITg9o/dy+tPv4yiJSgu+nivl/ncM3ksAj56TzcdPQmsvcO4S7PoQ8dQkm28/uoV0j3tXF+ubJ9BHIdd491MLxcJdIubc3O0DJ/AMRCOZPLmIqqqUGs6aLrOsGIR6zXZm9pFZaXA4kKVd75vB+embPbubuf0aYcHH77Ggw8cQ5mq8x4RkHHhyC27iGkJXM9DC30ODO1gSRhMLa/T191GMV8glu6hWncY3LkbMwzJrm4yfssIJ2cvM9zXy+TK/D+6gCriaaTw2WzUyDs2lzwPiaTiOVQ8H0tRaElJADjeNozT9jwiuklV0zFf/XWeSehUqjlaLbCLRQLDYK1SQyDR4wotLyCqKrQMlcDzyEpJUhEE/y/g2f+fE7BByHzUIh5IYpbJUtUnE6ikIgpJS6caKtyMmtyNgWXoVPSQNUMQI0QoGjcWVxka7KWwVeCZHzxNd283Y8eOM9LfTdzQmV9bYjO/xUcOH+L05TeoxyIkNJXBtjQDmZAvf7dGdnGdPtNHMxT6dvaxY3SQ4e4Mq7MzTN24SbVcZveeXbS3d3F9cpL5y9do2Q362jKEMzl8X+I6ZWjmaBrvIjJ4F8lYFL+8RHHpMgszF0l1ZYjGLDy/hd+oQt1HLykYmopl6Oi6RqGl8o637uUz37lI4Cs0Kw4ZGbJ3rJfOhMldt+xkdWWL3FoeQ1O2q2QslZETI7x+cZUfvlqhXAqx9BheCImUhWnG2dsfgVqVbMNj9/F2qq8ViOaWcVauI6WKIt404G+vKKSmYbZ3ETMEFUdQ21rEb1aI9u0gZoJTWkJRtt9f1zSQIbqiYBoGScukz4SlgktbOsHNuVUipsXbdu5E10zGduwgYkVwmjVSmXYK+VdxQh1V91neeAGldT/09xK3NDQlSrW5gUx0Eh+KEY94VJeyiMVzVGYvUMjm6Bq+nyPHHmH29cfZtXsH19c9Lq5M05O8xG1H+1heL1OtllByJmq0ndZ6jr62GEPRBHsHD/Ha+ZdoVqrIIERra8MPAjRVYsWT9Cd7mfegWKniNVxqG2v0jk6QSHfSPzhMYX2duDTwwoBYNEFo6VTyJfxmg3oIqWg3m9UCrXoDxfOpBwp6ZxSnsE4+t47jNhDXCsiEIAwlShQaMwHqmZsEcx7hqMvisTtBqVGzBd+5uoCXLWC2bDTX207w4iEDBztoUW1K5rNz5JrTFKt5LrrnieoWldkzXF27gUzUWFdjVL06q3aZolfDLrs0ChoRIbjjLSF3ji9xrbPJX7wQoS8bEFctVAVUGWJJDUUIQikIEaxkfR5/8jLS6GCkeZby5mUqlSU836M7nSFXWeHKG8/T3tm9zcuRHuvFPOmeFkGkl9BXKJdmGd95hJk35ujujLC0GccvxUhEB/hmsMImIR2lLYybIUZ1Cb/RQW4pxo7bwDDb/il0oEJbci/p9gmS4QTCV9hcaBFPt5FI9KNGFOymIGLfycrJH7BRPE8QhtRba7h+kQghD+kmh5MxbvFDNCFYmF2mPZWmLxFBKjqq4/KxtgSb0wv8bb2JDCTnhGBahuz+OyFX2Z50a3qIpgtCERI2Ngidl7nryHv51d/+LADff2aJ+/cJBpZ95LXtv00Ox+ke2abCK1HBwnSTWJvFaF8MA0mj5WD2mzizOq8/XcT3feo5H6/mvTkVbnJ2RaW7vUD9xkX+xftVpDbBuderEITcd884P/HJW5i7+QUUZ44XT8O3f7D+puAr/6FtjZ33PMrlixfwly4g6rm/F6x9CaUNlEYeTRugPnOG1uoN1HgnWqwdYSYJUehpi1AulnCrVcLARfo+yGC7MEX+vfCs6hqxN2mQbrNJKp3e/i41g4ldu1heXKJ/YoJ4pg1V2wbnCEUj9AOklMS6Y2RfWufKV69w5a/Pgwqh//99rUgp2Ty/xq6378bqjNEVh69sbfD5Gzf4H5evob/Z5ff/8AqcX9vixvhOehNRnK1t8TwIQ0IUWlJBBHDt0hKhv71BXL++Qivc7hlFbjtPJeAISMa7Wcx9mUs3/5Rzl/87QtURgfP/uN5XNs6xc8cM8VgGmQ0I3/xcyt/vIhjRGC+dep2Pv+/tRBMWyWSClZU1Euk0tfUsSkSnPZNk8x+K1UQj7BtKEPgO1bpPsdTg+uUVfuYTD1NvtDh9ZurvryWU6ELQW/V549Ui7Tdq7HpLJ8m9GcwOAzWmwVaFzR+ssXKhxmzJp2DDmjBYlB5B4CB8D4lB3c5z6dpTbGwukYmnyedKqL5PLldgdnOSWitHvbVG4DfxnRJ+q4kkCiL88SpWFIkkJJNMoCOpFfPsHOjnc7/7WRJRi3qtQiadxLa3+4j3DMZZ36rROaLiX7jG2w/Gue1wH5M3N5heaBExHN5xWwe3HemkPdZk9cIKyxVBvekz3BHh7W9/C4lEAsuymJ2dRRcBE90xmrUy6YTJzalF3nXPBJ7UWC+GpAYOYJomzWaTra0tvjj1LZKxNsZHd6IYAavrK1RrJVbWFzB0izB8c5qqqEStOK7n4HgOQejj+y6BBD8UtEVM2iMWF7Il8s3t9fPTb7ubKwtrrGzmyVe2H4x+TA81DRKWiR+41Fs+SrtKVzxOoV4FVSMMQtTmFtX6tkCthAGZaIR0LE7ZEUgpSSZNFCHwpcB2PTRNI1QUSrbDcstFIPiNN1r81g6dpgILrRBVCloS7BAkghgB49LHJ0HZ99h9cJRk6DM+nKHgL5JbKpC/vExU9Um2w0rO52zRI26mGB/bzVIpjy6g5QU0bUFD8cmrYBKwVfcpe4KoBjsTKlfXmjh+SFKRtNyAbFNjxAhRFCh7DrlKAzfv8Y7j/5zDt/4rJioBL145yeGhOxGD+zjfuMTrm5PYVg1V8yBwWTu/Qsw0OX7kFhKmSdO2MQyLIPCJxSK0moIdY+O885G3EoSScxfPcfbcOVqBj9XWRlpVaSJpZaL8ynt03rha5/xkgWog+dqsSygE3YbCu+7u5Z0HTK5u6bw41+TupMozGFjtPoFicPrVy1TKkxjxXm6/9cPcfdc78JqwsJWlFZV4NLh+/pv4bg7NHOAtd7yd1aqkpih4DZv/8BOfBymJtyXJ9HZQ2Spg15t/T6KPxxGajlcsEFQq+LVt93WhVefPZioIAUPRCNOFKkP37Me/Ok8yHqGjt4/psxdAUYkmEzxXLGA6AkdqeFKh2dwWTFV8lrN1DHwMQyMMbYqhj+0FXF0MsN2AQILrhwShxNJVFBXktWU0qSCkjxQC3YhSL+bYuTPJmZNVGmGJfvMedMViKf8G5eIcUqjMTp/kgx//ODd/8Hkcy0D0pnDtgEN7xnjNXUbN14n6PkUE7akYGUPl5vQWLS+kJjWiW2UCx6babNIR+rxeK/Jz+yZ4oZBFcUpkWi5vTXnUDPj9BR873N5rJSDDkPqbg5JGPaTRaOK4DqYFQwcOEYuNMDE0yIvfOE8tW0bTTFAUZs5tMnMlx7ln5xg5/CBWLIX0NEaO/RSl1jOEagwz0cbC9ZOw2knoDBN2VzG6wbB0DCuOYsTo3/cIPQMjtMpNJCF+APVGk4hl4YcBmqLg6QpeKFGsCNdbOUYCg3VPEIQBSdUkZfo0XJeyrqJk59gzcALX8dkTOciaapCJdjNtNzBlhKG4ix3CRPsYndF2zmy9wWR1gzG9l1fWcjTsJVQ9goePF4YQelieh9Gq0GnpbNV9NMBreUyv1YhbOi03pCumc7NWR+0OsDaW6S5uUCpmKWcy9AqBovk8v7lMNJGhXCqhS4njuBAGlIo5EokE9UYD3fWIRuJErRgLc2+w/+Ct3Lj+twgBdqvI/v3/jMtXvk42O4XrVFGEi6aq26mPMMRzQoSm4dsumUyaob5BlqYXiKbihAg21rdIxJNY0RiFYhWhAIFEhB6rizOEEsp+g9ToKOWZGVSnhV8v03vbLUz94Gm8wgYiFdJq1mm9ZLP7/Q/QNrhOeTaLKgw0w0SXGoG0sbQOpAxZzs9hJAyG1CTygoXvNxC+JAxDNkKF2xNQD8EriW3BjAZRw8cwN1mejDJ0+FN0jw9RnTmJqywiljpZ/PQCQbOBooKmq1jRCL/wsY+TyQzyzW9+lUiim/mLM2hhg1SmEyvYJGGoVJoOYRDQfWSClVyVF6XGZtEh3tPk5W99FS9QGUoGeI0cseYCZb9JOgHrdYmuKmw2fKRUSRqCgr0dmY3qGvr8S3heB02/Qctz+OHF1wlR8UMX3dCwnQCpCDTFRFVVElqKarOKbhgIRaBpxv9V3JkHS3bd9f1z7n5777f3m3mzazQjzQhJtizJIGQhCTu2MeDgNVAVCv7AhFBFhRBS5q+kUiR/JH9QBQnlVABjDBSY2MZKZMuyNdolj0aakUbzZnvvzdu6X+/r3c85+aOfBQZCqHKq6Kqu6qqu23379Lnn/s73912o9yWP35vjoXtPs7Nxg8ZOh6upzVuNNt77bqfsFljMaS5cXOX3njxPGhbIzCF310o8eGSGZwsOM8dcXlgPueO+h3ggfYPfvTbg/OvXibTk2IF5jMkEozZLWuizoE36GwO++ZVvImwDISXpk0+w9tbLHPmZXyHKFFkYE8UCd5AyaDexh8dJhCQzFf5tBbaeuk7x7hpi1tr3fjfQhjEFNU0Dw7Gx8jlMz3vntT3v43zk/ez8/h8zN7vIuNlg44//HMcvYBgmWmgujiagNH6hiNaQJiFDv4ijIUsCHDdPGofTdUwptNb0e3XswjzXttapzVZJwgmEKVXXwpo/gp1pfHOCrL9JbvEoswcP4Zt97FwF145xPYfyQ/dwKA9kCitWtFpdbN9j98out1QZxYCnnrpElKSYhkEUJuRtm8xzGI1DkizDtF3uvONuMExkpphfXOHQux/g1S/9GcmoTzIOmCiQCnScMHf0Nlav3+LTd+Sp5RXXLncJv3CO95xdItMh3fUxf/FsnZoh+PDjNU68u8raS29z+vR7yd13H7K9hjR9MAxGwwmjYYxpGnT6E869usbCiRUmaYr0LE7Ne9zY2GM4jghThSUsDNNAGQY/8t4Ps9pMmDlUZj4uIx2byVttZvM+r2zC3e9pcMiu8pVz29xbGlMk5uGzZ1En7sJd7zNXLGNbFuu31pmdqTIzW6XX2aVYXeKVrz1BWRgsrhxkZ2+X1d41yqt1DJ2wWPFY3ZL/6AAq5RmEJRiMB3TjmMR2mKQJDrCgNPe7FZ4IO0jDRAhNkiaYpoVUirjbZgPNMFMMEs1CGJMJg8w0SKQiUpJJlKG1YJAmlDyfZhhjAx4C0/j+AVQhwDENnFTSDmKkgr3uENex2eoGzGCRMwzWW2OQimEcY2sYRArXg7tOHGEp73OsWuL2+U/zRr1NOZfDMgXLeY9vfescV65e4YVnnmX20EF+7JEPUvU98rbNs5t1jso+p4/msIRGpRlSZdTXpuv0fKXMyZMnaOy1GI3GpHKP2vIsd9xxhG63RZxM0OcmqDQhyVWQXg5vuIu2D3BrdYssHGB5JSgcpLFxE0GE57nkinlMy8bOuziWhWlAcxDx4ceWCXoDSv0GyW6DSqVAL4hZ39iCaMD24RqVcgGlFKW8Q3dkUfBt1i+uMe7G2IsVPvbIWXb2+rx+tQPKwjHyHM7Z5A2Dg9aQ8I0GlmGhJn18d+pFqvUUCzBME0MYxGlCseDT2FhjPBxOMQfAMxXRJCHs7AEa27Ep+FPw1xAmjmWRSMmSo1lZnieMYpqtLjU/h//mBUpHjxBXy5i2jZvLg5a0YocwjtCyTmImmI018gpi0ycJbQbNBmZ/RPXQWfoXv0Hpvh+h2TOYNOq0u7v82OaX+Ub+4xilGv3mZRaqNTayE5yobLLXn5AmkiAOCSYTTtRKdAYp9957jGShxrHudALG4wCZJAipEKZJolMmrskD9z9EEKbsNS6QpRJHaDxDUy2U2d5ZJwkCupMeNaNGffMmMr/EE61dDtYOYSmTOJvgkWN74xZhOKS9vcN41GWhuog3ShkEA8RYow8I3PfmsDoJlR96F8l3Nkgjm+tvx3xhXCezU9Y7koVAk0mLsdRTwhmCnXGHrg7YHg0pGQ5SZESeYjvo0E5HOLZNNLjJIBixPWiSsz2U0IRZTChTzmQeBc8mSVNev9Bj48YQf87i3YcVzaREKXHI9rEi37IwDUEkFZMsY6RSlFnAzi/yemOdqPcWA5lDjccUdle560CB3fJhtsIaNN/AMg08W+AWlsklNlEQ02n0OX7qdnIzW0zCjLQQc/1qj5Ey8LOMomNx1PIR3Sc59YkHsbJFZi2buXmP+naT2+74x/ZAlQHbzedQKsOxC3Qbr6DeHHK49AnyuWXGos5ctcL1Z/6Cve6r7Axe3j9uNPUQRPC7SULY6eG7LnGUcL7T49c8hxVh8KqZcUecsP3im/yZhM/vs057WjDlYZhTn8ZMkWWQpQZhIIh6JqplYMSCtRtf5vXXL3Ly9DIXzl/m7Ae7/NpjVX7Z7KBSTf3NASJJ8XyDIMoYNVPKd7vkD5hkrYycdPjOMy16N2N6VycIQ6ADyLJ9fqJWvHhtRC+ShIScudPnX3yqwvxnV9CmT6+V0N76PTbf6vM//mjIs690cUxBmqq/BZ8KDCynhPArDC48izFuo/RfCb21kIigz2Rvm35/BZ3FZKMmctwiMT2E5eB4OW678zHOrd5AJika8Q4LFJWiZQIqAZkiLBPTcig5LtF4hEwiTDGVBUSjVQ7WFsmXZ8G0UcJACAOt9T4Dbnr24ThBI/86Lvv3wJ8aqTVbr21ReXQWP+sRxtM0cZh29f++h9wfsW/u7PKvyiUMbZDuc10VCtQUTC9WHUpugfmizfUrU6acUuodVmy63/2U0iFMxqCz/cCvDP3/DE1L2Nz5JrXyr6I1yDSejoea+utVDx/h7jOnePDs7Zx7+Tzj8Zi9ehNtmNi+hxdNWDm4xGgw+ju/YTbncOlGk2GQcrMVsxfCtWduMLdY5F//6of4zGcaNJoDAHoCOggujBXXxxknRhk7X9xmLt8g5wlyJYss1Vy/HtOeKDakpgtIy6QvQKbT0bPthEl7FcufYyeN2JIaLRVpEKAUDHq3MB2DLOggZYKKA6bZ9Oq7DhT7/+90fjT3GlQKHscPLfD1p55hNByxm4aUigWSOGJ66Wiev9zmMx87yrPf2Wa5Iim7Fq2dm8zPL/HY2QqTRJOTY9oXLjE6MMdLl0aMxwkPnp7ld762x2B+sO/TmjI3N8eg2+bqzgDTtOhrk2aWca27R75YpjIzR7S3R5JMjdEHgwFhHDBTmcc0Lc78wJ088vgP86df/FOEMOh2O6RZjGnaFHMVpJJMohGO5RHGE0zTQqHItMFiIccvP3CW63tdPnfxGqfnqpx77QrDOKHZG/wVEGaY5H0XyzTZGU7IVbpECcwUSgTxPMdWTjLpt1nwhxyaM5kom2uNHOW5GvPzS+zu7TKOGhRETJbaJFrTmYRU8znGYYRUilCDZRiUC3kaQcClnmCAJpYaA4GWmrHS+IbgTlPhmDZjt8yENvXXbrEaS8ZyQKa3yXRKXgt8oRkGkkBq5m6vUZyrkbfLU98irQkTxUjIaYdRwSQxwMhQWiOEwVobXt2NiaKIUCoOlUyCWOIXfAzTJJAaUxo4UpClkubWHmHnMv/x5V/nPz38+2y1q7zQW0OXhijA3I/oi4djHr73XcxWZ9na3KRULqJcj9mFOXqtNrVFn0/91MeYqVbZazY5evAgb1+9Qr8/IBgMWDw4y4yn+dRJn0P1Pd5/MEf3ttMM0jGJITAzwYk8ZLtj4hdHPHZ4ntePllm40SDnORSlQ38k2Nx4Gr+ywgd+9Be5Z+UEaZpxbdjnyP1lunsj7nrgLq6+/iXSQcbc/DHue+weLl/rUjh+jDQIiIdjVBjQa7SxLYvZQzW01vR2myRBRDYc0n/m21iVCobvo4IpuBqnk31Gs2BnknCiOk/t5CHSr57j4ouvkiv6NOsdrK88zYd/7uPc+9jdfPPPz2FqA9PyyTsF4jjD821mSx7bewPSUUIqIefZFH2P2oKFa5tThiQCU2iEYbK112cQT95ZFU1hTJs+u3V8x8SyDPIlxfnG53DTWSaTEKmndh+t5hpRNKQ6SekOQtZ3u4jaIuOswCfe/16uXLnGMNLcEQVUyrMMegFDQ4FQhGEXu1jGa/YYxfG08C4f4MndDr+wXKLi28TNHT6fwdd3M7QwMIR6h/ktDEFfaQYIxuMR42BEkkSM11/AuPQpxGnBM1/5bzTbA3QoUSpDGQJL2KhUEmzusmk9x9lTn+C5rz3J4Tt+GNstU1o4gGGalOxZFsunyZkesRwRBCOsqsGgucPcgSOYdpFW06RxY504TTFNE7RGmFMmwYJXoEeCUBCgGIdj+m6JZcchSRJ87VKqlMl6Ozzs3k8sevxe/TxIST6/wmEKBMaERWcZA/CtEduTLqt7dRZXDvPvHvgNPvv8b/Ie6wy/c+W3sUwDx7GQ2gShMQyBFJBYILWJLWOkECitWd0YcHypQBhLTExWg5DCW69xJpdjpCRXowg3DPHTDHsSMIx2sBYPIjd3uK1cJDl0CkNJes1txuPJVDmgNc3WDvn8Au//0K9z5fJT1HfO79+XPNrtOo6tyQyFZeaYjAP6/S6ZTEkyi7xjYxiCTCqWlhb51tPPsN5s43W6JOm0wfn8i+c5fvJ2RucvkMUpiZTECo7d/y42X7tE8/wFFt59P2Kphm269N+4yG0/+SG2Z2ZxHB+3bLLz9iWOPfpxmudvUD5zkt75y3zskZ/l3Isv041en1oh6AyERaK7PL/5u/zMXZ9FaoXUCSqQaEtxYag4OmPgmoIgGeA4NlpGbF9eJV9ZYvHUD9K4eZ7rL/wJ5ZlVSBRKgePkGfeGpEmGO1/Ez+V4+8KrzC2sMV/N4UV1dtIMr1hm4+brLM+WmKvNseRYVPMevmPwpZeuUT2wwuIRh4s3+jRmj6Blyq6UJO0Rh8wImcETa5Kqa2ALwUrFZMYVmAZ85tEzfPH5y1xqa8bdFoGaIdQThjLG1AaaDI0kTaa1rJQKbSlSFWNgo7UijANsY7qBi6yAv3x5zJnlDqeP5dltD1m9ss72nM3pnE1XaiajgOfOvUGSWtiWQW3G4+hMjnOXM6p7NzmSneGJP/gq1uM/wVNr81z9r/8WY+UQvZvXeaM35vGffC+TV1apHV6mtDhP74XLBKu7yLkZkjdfZ+vGaxSxEPnCNNFaGaRCMOl0qY+3Kd8cE69YSKlRhmbmoUOsPf0CUa4FpjGlXwljWl7Lqdc2hoHpuVi5PKbnYvo5vOVlFj/wKHvPvIjj+bRe+g6mexDTsPbJBRnCNFHpNJjFNC1UEqGVxDQs0nCIaTkI00Zm6bRZZR1mebnG4rEVbt3YRYwm9DrX0fYimGXC0TUWDp8hDXsoz8SRPvaBw8wrQTwK+IGf/XG2sxBjMmC73sUbamrLS8hIsdW8xXONF+mNR4g0xXc9gjiiljdojBKwDLYbHaI4m8q9SwWur64y6LcoLxxnZfNN5g7kOXelx45hYdsW2nbA9hg29lDKwlgwmFnwuccVXFob8wdfu0w/VvgGnKmYPPzoIebun+GPv3CDUwVF++kvMfNwH/foh5DRmDhJyTsmaaZI0qnHas61sJXE91yMqs3G1i794ZgwzCgvzjLqjjAEJEHMze09xKllCkmdSu0ww0GfVj1FF4YE6SKHHZPh05sc3zzEZO4INfk22t6m8Qcpcq7Ku4/fTq9bx7IEF6+scveZs5y54yF2d7cZ64BcOU99ZxOdRMzXStiFOY4bA7a7Y5ZmFv/R8dORcBg5DrOuy7Uooi9DPK15xK9wX34O08oTS8n/Tod4lk2cJFPSjzDIMk1NQ9U2GIYpQZRiAqkhmGSKTEGYTdd3zxaMU8m1yZDbDIOe1lQM8X2fv2mYIAxCE2Y9fwqyWB7dccCBuQo9KclJPV2H1FSxEgG+5+K5DlujCVXPwbNMTs5WOFYt0Qwi5nM+tiH4+I//FBubt5ipVgmEgWvZNIKIUTSglveJOtfpR9P9jKENDNtlduEAE8MC4XB4boYziws069u8+OpL3Lp1gzAa43kS182jsgLIafI8hk24c4Wo30ZFPcziElkwRLtF9Nxh/NEOYXuDydAjiyP8YpVPnD3IbKGI6Vice22daNAl6Q9ZWaqyMFvk0kYbwzKpNwZ8/dk3+fkPv4v3PXgnh3cXGY5DnOYqVSXwDlQJnZhxu4lrOlQLNipOMEZNWpOEg0cXyUmLIEtRQuLaBqNUYXt5tFbE4YRgNCSJIxYPHWbY7pAqMNBowwKh8S1NkkxVml6+iMJAYOA7Hn6+QDAZ82MPvJvi2mXqvZDC8ixniiXumAS89dST+LJL6aM/T+L7mLaDzhJsbxZlhITjFm7Ww5tsYI08jHQDBpepqDFRa5nWF54hS7pEV18hdWLKC3XGnV1QYw63L9C87xGCJ1cR3XWcVpMo79CSkihKkFmCUA6TIMNyFjlZOcjNt8a8pXySIETLDCyLyaCPY1uU5hbIjCJvrzfZaIYkwsO1IxbzJou1g1y99Cq9yZgsSdBpxnjQw3cq1NUWC+Ua/W6LKArodOrEaYSKJUkyYdRpoUTKjWaDo8vHaURbcESgY83gpkHwiqRUv0HSi9GzFpe+ZXE9NyKwHCyp8aXETCXoqXoBYdOIhzhmiKWm0vxMK1Q4DVPuhyOkkqh9izvLNGlGg33bOw1a8fJwSuQI04S0LfFMl4LIKNkWJiN2yCgZDmGWMhlmCDSxlvTSiEBLjlguQhQxj/9z3KDJsdptjL75KwgGbO2EIHLUTnyckethjK5QPnAX5uJZ8rkEp1QgnmwQ9OocOXuQWxd2OPlAwuTtMunCowzNIgfdReq6xdzRmMJRQToUrNyvwExJgvj/DwNVCPG+70PET39yhXG0BthINUFrjWNVp0VtOtqX1uZQOiZ9h933XYm2zbdVxoU0Jc1SAm1goKmEIaUgYAcQCEoaUqEZ6O8CifvAjQalNLG2CKVikgmCVBCrjMgQcPE1Di/Umbz4S+j4DVQ2YhKC/bUeozctNDHhTszangIxTdMTGgY3I3adMdlQTr0wbVDSQKXfBU2/F2ZTSvH2rQn/Ydfirlclp/7XiPvvK5MKSWMs6Hckf/ZMj+4gRQB56//WUdPMHDpFY2sdFQyn6Zt/E4RUCsZNpNLfw+wkC9FZiJQBl158hqi9OwX29oHPvwllin0GqpYZhmnj5nNo10VJSaIU/+w9d5H3HdJBG8t1MSwbTAstxHTLbJj0Oj1OPHKCW1+/QRz9wydk2Ioo5zWT3oifPnWUP9naIIyTf/DxrWBCsTq3f3EbZOJ7BohUZhhZBo5HqNVU5i/+plRe0RqMOXHs06zf+hOSNPoHf/8kaGNVC6gsmTIw9ZSBoIFjt9/Gw3ef5uULl7m5dotBr0scxViuy6jVxs15BOOAMAz/zs9uBwnfudWnWC6C7xJFA7Is4w//4iKLB+b49Cd/iP/yW0+8I/fvKE2oFCUE8UijeymzZoqNJu8ZhKmmk2iGGvpAiMEkU6SmgQFYro/jTT2pdBKTdm8SBSNMw2bc75HGAaYJaTCdM1prTMvBtBzCMPteAFVosjRl2G2SjCyuX72ObVocXJ6l25veYKMwZG5uDiUzruzB5768zR1Hqly+MWSnPeBIrUxPj7m2N2aUQDUnmAQ2o9frSCvPfLHMf/7SHht9KFZSBoPp+LiuS3lmDtM0sSzrnadpWSRS02y1UHt7ZFlGHMeEYchedwvLssnn8rTqHQoFn0cffZynn3qGKEyIE4tqcf6deRanEbblTn1f98HCzNBEUrIzDvn85ZtTK45Ojyj72wwD2zIJ45h0/71MxuBOQ2oMw6Ays4hWGhV36Q4STNeiPFdjZeUovl9gMBwwyOcYNSdMJjaJ1Oy1u3S6PUytcSyD/MIiYRAwlBKh4MlGRK1kEElItMIzpiFkodKUbZORucBAT0hSRW8oiGKJpIk2IpTKyDRMEMzbJp/8l7exNXG5dCWjbw6RUtKKDOYdtR/WlJGmmmFsIIxpMJpUEqkVl5rhNMwJjSUEUaIo+UVm8mUyB+ylGjvX1lnd+AYP3/YL3HbXQ/z28uf4weX38Y03v0pqJFi+iancd8YzUZJ8ucLTz30bpRSVcpVjx44SKM043uZH3/8B3HKJ7W6bbrdFN47wy2UG/T6ZknTzFbbW1/i2sci29V6Op0OuOlV8lVJRCU3DJ9fLWFQBG24R0RA8nu7wFf9uBrkScgSDyz3iZMhHP/ZvOH18mSRW9EYZh49kfP63fpuFxXt4eOlR/NIijr3IR/7pRxF52Nq9gL1yiIpnMdlt0L9yFaUFWZLSvLlFrlJk4fAB4iCk3+iQ1utkjQbCshBSYpgmkhSpFYYWjJXmpcmAk6aBX3bY3uojen0Q8Oarl7j3kfdw8p47GfWGvHruAmk6wnMPMFedJZMZpbzPwYUyt+o9klRyYLHKwlx1ig+gCcKITn/MxnaL/iTBsS3EX1tWlZJTT0AhePviW8gsYO3WiOVjJ7l58dy+3BOkytja2+Olb7+Ob4hp+qphYNgOV29u4ds5ztx2kGdffJOVA0fo9QKySYgoWCSJxNWKWErcaoVCtYoHdG/WyYTPb64P+Egh4+uZzfpYYTv71h4IHnccnggCENAUBrFp0B92iaKATMbTYvFohu58nb3ukLTXR5jmvod0RpqF2LbPykO3EzdCJuUm7lqf7WsWSyePU6zM063vEgz2sByDMMjo6h4FX4GQFGdqWI5DHCk2Lz3JZHCVTCkU08ZGFCcIYWA6FuN4SM406IbTAjUtV4ltj5pT4JKRYnkus6MhLjav5Dy2+teBKYioxDS51RYWhlJEkcW8W2FrvMvT68/yi499kj+69lmkNcZ++3eQmUSKqURb71uwpFoyXyhQK+QY+BPWmx3IMsbjBNM26Y4SbMcl0LBsO+xJyduTAENA0OvT8z1Uf8iB08e4cPUqZ4uzuN0G7cYG9uwiRxYW6Y5HaJVNPcOF4D0P/iKD/g1ee+WLWBZIqUiSEUmS0O/1kXJAsTRPkkT7oV7TKlIqhY8JtkO/1WG306VSyJEpBcKg6rk0Wk2EobBtB5kqzEwSmyZuqYhhQLFYhNYeM0tLTFptRJrQfe0Sx977QwS36jR3Nlk4fIqckBy85xjtq02scplXv/FNwmwPxyi90wI/NHMH1/ojvnTu9/nEgz+Hay6jVYqyUlSquBppGqnFKBWMgz3m8zMII2AyOI9T+mFab/53OjufJ1eaJQ2rZGmIEDGOYZHL5dGehBT6uz0abpnVrQEH0dwcN1haLLGx2WM0HHJmZY68LXAsh7xnc3WnzfNvb+H7BS5d01iFg5w6+yBKZYwHHTo719npeSz7Ix6djdkZaSJlsVJ16GUuG72Yf/+tXWyzyqFlh1dDC9+CNM1wTHO/oT4Nt9R6WitEk5hCJYeKFYZlQCAwhYnQBqZpkMuXCHSftWGeVmeEKQXVEyWcYcClS3VOvXuFl57fZH7pAM2dDmHaQWYeT7+1g7CXqN9YpP1cG3/tWfYuXWW7tkv/+Dy+51OUkrlKifr1HeiPSU2DVqp44CMP8cKXv43dbvP8d75KogM+cPcHSTyXVOr9e73g5saLrHaeJtsts7Lwg2ixH0bogJjN2Hzpecyaj+X5mH4OK+dj5X2sfB7L8xD79bKw7H02qkPtI+/H8j3qf/kNTNMkX5jDcnNImaCVxLAcjH2/bst2ydIpe9iyXZJohGW5U/+/eMpIZdJlb0/TanVYXlwhqgjoGJgzB4l2NnGVYLD7FtgOnStNDK9IFiaMupskUnDg/Qu88fIaUWvEwsoc490ex+9aRNVbJAtVWvUeQaxpdscYxtQyaDcTpEmGqQyub3bRUoGAKE0JRxGOLnAyLziUZlyODIquR9AeYlZm0SlowyANxqTYDHb7WL7DbN7kfcuCVsmmm2SUPIsf+ekTiFyEVm3icMLaKE94dcjK3A6Hjecwq7dP2eOjeF/dI3AckyBKuLa6SbE2g1KaSSKxikVKSx5aKwoeDMcZWaronahRdTKsd/8T1rZ7kOsQbN3EaN7iqLnH7s4ZVsYdisUc7kyRuvkBYh2SFJsUsoC17U3uOnqAa5vbLC4eYPXmOs12l5OHVti8vsnS/BybO7dYypl4CLrb12ikKQuzFXaazX90AHWMST+VnMnPYBsjXMvmXm+OTJvcMg0WMLmjfITX9y7SHvWxlJqSaJRiOG5QlYrFTkhOaYamRUMpmnFGX0ocS7xDtskUFCyTMFM0lWLWNDCV/r7PXyGoui6m0Bj764/SmsVqkTCZAjl5odFSIgDXMDCFwHRtDMPkYr3NZn/M0VKO5XIBKRULOZdBnBCkGY5lUplfQgiD9U4PpTXdKKG+2+DUwixvvfEGhgEyk6BNFIpKaZ3lpRpHjx1htTnD5q2bbN28TBgECAHBRDIeSzRjMGempCatIJugYgsjHSMsDzVuT/fZWiJkjGlYJKVF1KiBVpJxr8HpY6dZqBTI5XNUKx3+/GXJb/zCwyzP7v/+l2/w4ftPcP7qLn/47et89dVb3H/6ILYfYmYmZRdKCzlkuUqr3qK7HTMyPWZdE7TCVxnzWch49xamoTElYNjEaUaaWYxHfeJwPMUktADDpLm5iWUZZJmaYg96aq847nZQCkozs7BvffK+e85wdWsX23GpVSu8p6z41lvXKE1ArTWYSTP6Wcq3REr9pZf56MEa4uGPQi5H1txgrxdg2C4qzhAygd1LmP1tgv5F5moVVL5Cb+d1evU3MRyHtN9DLCTEZgiGptUb03RCZqTP8od+ie9cfYMkfpGr9XVWSj2STCHQHDp4iO12yNLCffzP167T0SaRt4yMo307goxMKXSaYmrNcO8WIzUgafXwLEi1SYRD49YmtmEy6PaQqaTT3CSwPIaOT8kuIUdj5msHaPZ2CdOAKAqxtiEIRgzbDTzXwbJtbuxGLNpF9O0e0Qsxl78eU3EsnHzAMy94DITP016BecMhZupzr0wTmQbkTIeYGENpUp2hlSJUkiST0xBmprkg38WVNJCphFjuU/yEQGqFyhSNIMLYr69tYZLqjF2ZsROFGAJ8YdIQEKtsSt4RAhMDgYmpwbAFpgt2wcUrnyS6+Q0Wii7aPUAYhriOSzH8GluHP4zlfQI372OaFm5RIGOXynxGq7nD8TvvobLcwnUSTnxwRPTlEsfmP4kdu2QzBj/wEx5uro+9kOIv5WhsN3D971+A/38AIN6BKkWFfzIAAAAASUVORK5CYII=); background-position-y: 0; width: 16px; display: inline-block; height: 16px; margin-right: 2px; margin-top: 4px }\
  2087. div.raid_list_item span.DotDX_extMagics > span {margin-top: 0; vertical-align: text-top; margin-right: 1px; } \
  2088. div.raid_list_item span.DotDX_extMagics {float:right}\
  2089. #kong_game_ui div.chat_message_window p > span.slider > span.magic:first-child { margin-left: 5px; } \
  2090. #kong_game_ui div.chat_message_window p > span.slider > span.magic:last-child { margin-right: 5px; } \
  2091. #kong_game_ui div.chat_message_window p > span.slider > span.user { display: inline-block; height: 16px; margin-left: 5px; margin-top: 4px; vertical-align: text-top; font-style: italic; cursor: pointer}\
  2092. #kong_game_ui div.chat_message_window p > span.slider > span.user:first-child { text-overflow: ellipsis; max-width: 80px; white-space: nowrap; overflow: hidden; padding: 0 3px; font-style: normal; }\
  2093. #kong_game_ui div.chat_message_window p > span.slider > span.user:last-child { margin-right: 10px; } \
  2094. #kong_game_ui div.chat_message_window p > span.slider > span.user:hover { text-shadow: 0 0 6px #888; } \
  2095. #kong_game_ui div.chat_message_window p.emote {font-style: italic; color: #085088; text-align: center;} \
  2096. #kong_game_ui div.chat_message_window p.emote span.username, #kong_game_ui div.chat_message_window p.emote span.separator { display: none; } \
  2097. #kong_game_ui div.chat_message_window p span.room { color: #666; font-size: 9px;} \
  2098. #kong_game_ui div.chat_message_window div.error_msg { background-color: #FFF8E0; margin: 0; padding: 3px 5px; border-bottom: 1px solid #ddd; font-size: 9px; color: #555; } \
  2099. #kong_game_ui .chatOverlayMain {border-style: solid; border-color: #C2A71C; border-width: 1px 0; font-family: \"Trebuchet MS\", Helvetica, sans-serif; color: #fff; font-size: 11px; font-weight: normal; text-align: right} \
  2100. #kong_game_ui .chatOverlayMain > span {padding: 3px 10px; cursor: pointer;} \
  2101. #kong_game_ui .chatOverlayMain > span:hover {background-color: #C2A71C; font-style: italic; color: #555}\
  2102. #kong_game_ui textarea.chat_input { height: 30px !important; margin: 0 !important; outline: none; padding: 4px 6px 4px } \
  2103. #kong_game_ui div.dotdx_chat_buttons { position: relative; width: 100%; padding: " + (SRDotDX.isFirefox ? "0 0 1px" : "1px 0 0") + "; background-color: #eaeaea; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; font-style: italic; color: #444; box-shadow: 0 0 6px -2px #333; border-width: 1px 0; border-style: solid; border-color: #888; background: -webkit-linear-gradient(top,#ddd,#f0f0f0); background: -moz-linear-gradient(top,#ddd,#f0f0f0);}\
  2104. #kong_game_ui div.dotdx_chat_buttons > span { display: inline-block; padding: 3px 7px; cursor: pointer; transition: text-shadow .2s; }\
  2105. #kong_game_ui input.dotdx_chat_filter { border: 1px solid #ccc; padding: 0 4px; display: inline-block; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; font-style: italic; color: #333; width: 110px; background-color: #f7f7f7; outline: none; }\
  2106. #kong_game_ui input.dotdx_chat_filter:focus { background-color: #fff }\
  2107. div.dotdx_chat_buttons > span.active { text-shadow: 0 0 4px #aaa }\
  2108. div.dotdx_chat_buttons > span:hover { text-shadow: 0 0 4px #888 }\
  2109. div.tab_pane p.collapsingCategory { border: 1px solid #999; border-width: 1px 0; margin: 5px 0 0; cursor: pointer; background-color: #ddd; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; padding: 2px 6px 1px; padding-right: 10px; box-shadow: 0 0 4px #ccc; background: -webkit-linear-gradient(top, #ccc, #eee); background: -moz-linear-gradient(top, #ccc, #eee); transition: all .3s; } \
  2110. div.tab_pane p.collapsingCategory:hover { background: -webkit-linear-gradient(top, #ccc, #ddd); background: -moz-linear-gradient(top, #ccc, #ddd); box-shadow: 0 0 4px #bbb;}\
  2111. div.tab_pane div.collapsingField { padding-top: 3px; }\
  2112. xxx {display:block !important}\
  2113. span.DotDX_RaidListVisited {padding: 0 3px; vertical-align: text-bottom} \
  2114. span.DotDX_List_diff {display: inline-block; width: 20px; font-weight: bold; padding-left: 2px; vertical-align: text-bottom} \
  2115. span.DotDX_List_diff.DotDX_N {color: #00BB00;} \
  2116. span.DotDX_List_diff.DotDX_H {color: #DDAA00;} \
  2117. span.DotDX_List_diff.DotDX_L {color: #FF0000;} \
  2118. span.DotDX_List_diff.DotDX_NM {color: #BB00BB;} \
  2119. div.tab_pane input, div.tab_pane select {border: 1px solid #ccc; padding: 1px} \
  2120. div.tab_pane input {height: 14px;} \
  2121. div.tab_pane select {height: 18px} \
  2122. div.tab_pane input[type=\"button\"] {height: 26px; padding: 0 3px; color: #444; border: 1px solid #bbb; background-color: #f7f7f7; outline: none; box-shadow: 0 0 3px #ddd; background: -webkit-linear-gradient(top, #eee, #fff); background: -moz-linear-gradient(top, #eee, #fff); font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; border-radius: 2px; transition: all .3s} \
  2123. div.tab_pane input[type=\"button\"].generic:hover {background: -webkit-linear-gradient(top, #fff, #ccc); background: -moz-linear-gradient(top, #fff, #ccc); box-shadow: 0 0 5px #bbb; text-shadow: 0 0 3px #bbb;}\
  2124. div.tab_pane input[type=\"button\"].green:hover {background: -webkit-linear-gradient(top, #fff, #b9daaf); background: -moz-linear-gradient(top, #fff, #b9daaf); box-shadow: 0 0 5px #a7ca9c; text-shadow: 0 0 3px #bbb;}\
  2125. div.tab_pane input[type=\"button\"].blue:hover {background: -webkit-linear-gradient(top, #fff, #a4c8ee); background: -moz-linear-gradient(top, #fff, #a4c8ee); box-shadow: 0 0 5px #a9d3ff; text-shadow: 0 0 3px #bbb;}\
  2126. div.tab_pane input[type=\"button\"].red:hover,\
  2127. div.tab_pane input[type=\"button\"][value=\"Cancel\"]:hover {background: -webkit-linear-gradient(top, #fff, #f0a4a4); background: -moz-linear-gradient(top, #fff, #f0a4a4); box-shadow: 0 0 5px #ffbaba; text-shadow: 0 0 3px #bbb;}\
  2128. div.tab_pane input.landpmbutton { height: 20px; width: 22px; } \
  2129. div.tab_pane input.landpmbuttonhigh { height: 20px; width: 22px; background-color: #82BA00; background: -webkit-linear-gradient(top,#8DC98D,#fff); background: -moz-linear-gradient(top,#8DC98D,#fff); } \
  2130. div.tab_pane input.landtxtfield { padding: 2px 0; width: 50px; text-align: center} \
  2131. div.tab_pane input.landtxtfieldc { padding: 2px 0; width: 100%; text-align: center } \
  2132. div.tab_pane td.landname { padding-top: 3px} \
  2133. div.tab_pane input.landsavebutton { height: 20px; width:100% } \
  2134. table.raids, table.camps { font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 10px; text-align: center; border-collapse: collapse; margin: 5px auto } \
  2135. table.raids td { border: 1px solid #bbb; width: 55px; background-color: #fff; }\
  2136. table.camps td { border: 1px solid #bbb; width: 20px; background-color: #fff; }\
  2137. table.raids td.ep, table.camps td.ep { text-align: right; width: auto; padding: 0 6px; } \
  2138. table.raids th, table.camps th { border: 1px solid #bbb; background-color: #efefef; } \
  2139. table.raids tr.head, table.camps tr.head { background-color: #fafafa; } \
  2140. table.raids tr.split td, table.camps th { border-bottom-width: 2px; } \
  2141. table.raids tr.best td, table.camps td.mark { background-color: #eff4f9; } \
  2142. table.camps .tb {border-right-width: 2px} \
  2143. table.raids colgroup col.selected { border: 2px solid #5f9ea0; }\
  2144. ul#SRDotDX_tabpane_tabs input[type=\"checkbox\"] {display: none}\
  2145. ul#SRDotDX_tabpane_tabs input[type=\"checkbox\"] + label {font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; cursor: pointer;}\
  2146. ul#SRDotDX_tabpane_tabs input[type=\"checkbox\"] + label:before { content:\"\"; display:inline-block; width:18px; height:14px; position: relative; top: 3px; }\
  2147. ul#SRDotDX_tabpane_tabs input[type=\"checkbox\"].generic + label:before { margin-left: 6px }\
  2148. ul#SRDotDX_tabpane_tabs input[type=\"radio\"] {display: none}\
  2149. ul#SRDotDX_tabpane_tabs input[type=\"radio\"] + label {font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; cursor: pointer;}\
  2150. ul#SRDotDX_tabpane_tabs input[type=\"radio\"] + label:before { content:\"\"; display:inline-block; width:16px; height:13px; position: relative; top: 2px; }\
  2151. ul#SRDotDX_tabpane_tabs input[type=\"radio\"].generic + label:before { margin-left: 5px }\
  2152. ul#SRDotDX_tabpane_tabs input[type=\"text\"].generic { border: 1px dashed transparent; border-bottom-color: #bbb; padding: 0 1px; background-color: transparent; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; color: #333; outline: none; height: 15px; text-align: center; }\
  2153. ul#SRDotDX_tabpane_tabs input[type=\"text\"].generic:hover { border-style: solid; }\
  2154. ul#SRDotDX_tabpane_tabs input[type=\"text\"].generic:focus {border-style: solid; border-color: #ccc; background: -webkit-linear-gradient(top,#eee,#fff); background: -moz-linear-gradient(top,#eee,#fff);}\
  2155. ul#SRDotDX_tabpane_tabs input[type=\"text\"][disabled].generic { color: #aaa; }\
  2156. ul#SRDotDX_tabpane_tabs input[type=\"text\"].color {float: right; margin-right: 6px; width: 40px;}\
  2157. input#raidsBossFilter {width: 260px; box-shadow: 0 0 4px -1px #aaa; outline: none; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; padding: 3px 5px; background: -webkit-linear-gradient(top, #fff, #d1dfee); background: -moz-linear-gradient(top, #fff, #d1dfee); border-color: #aaa; margin: 4px auto; display: block; border-radius: 2px;}\
  2158. input#raidsBossFilter:hover, input#raidsBossFilter:focus {background: -webkit-linear-gradient(top, #DFE8F1, #fff); background: -moz-linear-gradient(top, #DFE8F1, #fff);}\
  2159. textarea#DotDX_raidsToSpam, textarea#options_sbConfig { border: 1px solid #aaa; width: 254px; margin-left: 6px; margin-top: 5px; margin-bottom: 4px; padding: 3px 7px; resize: none; outline: none; font-size: 10px; font-style: italic; }\
  2160. #kong_game_ui div#dotdx_status_div {font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-style: italic; font-size: 11px; margin: 0; border-bottom: 1px solid #aaa; }\
  2161. #kong_game_ui div#helpBox { padding: 0; position: absolute; bottom: 8px; overflow: hidden; width: 282px; transition: max-height .5s; border-top-width: 0; border-top-style: solid; font-family: \"Trebuchet MS\",Helvetica,sans-serif; font-size: 12px; font-style: italic;}\
  2162. #kong_game_ui div#helpBox > span {display: inline-block; padding: 11px 8px 9px;}\
  2163. #kong_game_ui span.generic { display: inline-block; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; }\
  2164. #kong_game_ui span.notice { display: inline-block; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 10px; font-style: italic; margin: 3px 6px; }\
  2165. #kong_game_ui div#dotdx_usercontext { display: none; position: absolute; background-color: #eee; border: 1px solid #888; display: none; box-shadow: 0 0 8px #888; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; background: -webkit-linear-gradient(top,#e7e7e7,#fff); background: -moz-linear-gradient(top,#e7e7e7,#fff); cursor: pointer;}\
  2166. #kong_game_ui div#dotdx_usercontext span { display: inline-block; padding: 3px 6px 2px }\
  2167. #kong_game_ui div#dotdx_usercontext span:hover { text-shadow: 0 0 3px #aaa; }\
  2168. #kong_game_ui td {vertical-align: middle}\
  2169. div#FPXfsOptions span.generic {float:left; clear:both}\
  2170. div#FPXfsOptions span.share { font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 10px; margin-right: 10px; margin-right: 5px; display: inline-block; padding-top: 3px; }\
  2171. div#FPXfsOptions label { margin-right: 3px; }\
  2172. div#dotdx_sidebar_container { margin-top: 0; padding-top: 5px; overflow: hidden; }\
  2173. div#dotdx_sidebar_container > button {width: 60px; border: 1px solid #555; margin-bottom: 5px; font-size: 11px; font-family: \"Trebuchet MS\", Helvetica, sans-serif; height: 21px; transition-property: box-shadow, text-shadow, border-color, background; transition-duration: .5s; outline: none; position: relative; z-index: 9;}\
  2174. div#dotdx_sidebar_container > button:hover { position: relative; z-index: 40;}\
  2175. div#dotdx_sidebar_container > div.label { text-align: center; color: #fff; padding-top: 7px; height: 19px; text-shadow: 0 0 6px #fff; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; }\
  2176. div#dotdx_sidebar_container > div { width: 60px; height: 26px }\
  2177. div#dotdx_sidebar_container > input[type=\"text\"] { border: 1px solid #555; margin-bottom: 5px; display: inline-block; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; font-style: italic; width: 46px; outline: none; height: 13px; text-align: center; position:absolute; z-index:3; padding: 3px 6px; transition: width .5s; }\
  2178. div#dotdx_sidebar_container > input[type=\"text\"].slim {width: 16px}\
  2179. div#dotdx_sidebar_container > input[type=\"text\"]:hover, div#dotdx_sidebar_container > input[type=\"text\"]:focus { width:250px; text-align: left; }\
  2180. div#dotdx_sidebar_container > div#serverButton {cursor: pointer; border: 1px solid #111; text-align: center; height: auto; width: 58px; padding: 4px 0px; box-shadow: 0px 0px 4px #222; margin-bottom: 7px; transition: all .5s ease 0s;}\
  2181. div#dotdx_sidebar_container > div#serverButton:hover {border-radius: 5px;} \
  2182. div#dotdx_sidebar_container > button.slim, div#dotdx_sidebar_container > div.slim {width: 30px}\
  2183. div#dotdx_sidebar_container.slim {width: 32px}\
  2184. div#dotdx_sidebar_container > div#serverButton.slim {width: 28px}\
  2185. #kong_game_ui div#chat_room_tabs div a, #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head {transition: all .3s;}\
  2186. div.raid_list_item > span.DotDX_extState { display: inline-block; width:27px; padding-top: 2px }\
  2187. div.raid_list_item > span.DotDX_extInfo { float: right; display:inline; margin-right: 8px; color:#c0c0c0; font-size: 11px }\
  2188. div.raid_list_item > br {clear:both}\
  2189. div.raid_list_item > span.DotDX_extInfo.failings {color: #ffda8e}\
  2190. div.raid_list_item > span.DotDX_extInfo.failingm {color: #ff8080}\
  2191. div.raid_list_item > span.DotDX_extInfo.failingh {color: #ff4040}\
  2192. #FPXRaidFilterWhatDiv table {max-height: 327px; overflow-y: auto;}\
  2193. #FPXRaidFilterWhatDiv table tr td:first-child {text-overflow: ellipsis; white-space: pre; overflow-x: hidden; width: 150px; display: inline-block;}\
  2194. #chat_raids_overlay table {margin-top: 2px;}\
  2195. #chat_raids_overlay table td {line-height: 13px;}\
  2196. #chat_raids_overlay table td.best {text-decoration: underline;}\
  2197. #chat_raids_overlay table td:nth-child(odd) {text-align: right; padding-right: 2px; min-width: 18px;}\
  2198. #chat_raids_overlay table td:nth-child(even) {width: 45px;}\
  2199. " + elemPositionFix).attach("to", document.head);
  2200. SRDotDX.c('style').set({type: "text/css", id: 'DotDX_themeClass'}).attach('to', document.head);
  2201. SRDotDX.gui.applyTheme();
  2202. SRDotDX.c('style').set({type: "text/css", id: 'DotDX_tabs'}).attach('to', document.head);
  2203. SRDotDX.c('style').set({type: "text/css", id: 'DotDX_fontClass'}).attach('to', document.head);
  2204. SRDotDX.gui.applyFontSize();
  2205. var link = SRDotDX.c('a').set({href: '#lots_tab_pane', class: ''}).html(SRDotDX.config.dotdxTabName, false).attach('to', SRDotDX.c('li').set({ class: 'tab', id: 'lots_tab' }).attach('after', 'chat_tab').ele()).ele();
  2206. var sbTmp = JSON.stringify(SRDotDX.config.sbConfig);
  2207. sbTmp = sbTmp.slice(1, sbTmp.length - 1).replace(/},/g, "},&#10;").replace(/l,/g, "l,&#10;");
  2208. var pane = SRDotDX.c('div').set({id: 'lots_tab_pane'}).html(' \
  2209. <div id="dotdx_shadow_wrapper">\
  2210. <div id="dotdx_status_div">DotDX: <span id="StatusOutput"></span></div> \
  2211. <div style="height: 617px; overflow: hidden;">\
  2212. <ul id="SRDotDX_tabpane_tabs"> \
  2213. <li class="tab active"> \
  2214. <div class="tab_head" id="raids_tab">Raids</div> \
  2215. <div class="tab_pane" id="mainRaidsFrame"> \
  2216. <div id="topRaidPane"> \
  2217. <div id="FPXRaidFilterDiv" class="collapsible_panel"> \
  2218. <p class="collapsingCategory" id="collapsingCat10" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidFiltering\', this, \'raid_list\')">Filtering<span style="float:right">&minus;</span></p> \
  2219. <div id="FPXRaidFiltering" style="display:block" class="collapsingField"> \
  2220. <input type="text" id="raidsBossFilter" name="FPXRaidBossNameFilter"> \
  2221. <input type="checkbox" id="dotdx_flt_vis"><label for="dotdx_flt_vis" style="margin-right: 9px; margin-left:5px; display: inline-block">Incl visited</label>\
  2222. <input type="checkbox" id="dotdx_flt_full"><label for="dotdx_flt_full" style="margin-right: 9px;">Excl full</label>\
  2223. <input type="checkbox" id="dotdx_flt_all"><label for="dotdx_flt_all">Bypass filters</label>\
  2224. </div> \
  2225. </div> \
  2226. <!-- <div id="FPXRaidSortingDiv" class="collapsible_panel"> \
  2227. <p class="collapsingCategory" id="collapsingCat11" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidSort\', this, \'raid_list\')">Sorting<span style="float:right">+</span></p> \
  2228. <div id="FPXRaidSort" style="display:none"> \
  2229. <table> \
  2230. <tr><td rowspan="2"><input type="button" class="regBtn" style="display:inline; height: 40px" id="SortRaidsButton" onClick="SRDotDX.gui.FPXSortRaids();return false;" value="Sort" onmouseout="SRDotDX.gui.turnNormal(this.id);" onmouseover="SRDotDX.gui.highlightButton(this.id,\'Sort raids based on selected criteria.\');"></td> \
  2231. <td>&nbsp;Sort by: \
  2232. <select style="width: 90px" id="FPXRaidSortSelection" tabIndex="-1"> \
  2233. <option value="Time" selected>TimeStamp</option> \
  2234. <option value="Name">Raid Name</option> \
  2235. <option value="Diff">Difficulty</option> \
  2236. <option value="Id">Raid Id</option> \
  2237. </select> \
  2238. <select style="width: 56px" id="FPXRaidSortDirection" tabIndex="-1"> \
  2239. <option value="asc" selected>Asc</option> \
  2240. <option value="desc">Desc</option> \
  2241. </select></td></tr> \
  2242. <tr><td style="padding: 2px"><input type="checkbox" id="SRDotDX_options_newRaidsAtTopOfRaidList"><div><label>New raids at top of raid list</label></div></td></tr> \
  2243. </table> \
  2244. </div> \
  2245. </div> --> \
  2246. <input style="width: 94px; margin-top: 6px; margin-left: 5px" name="ImportRaids" class="blue" id="ImportRaidsButton" onclick="SRDotDX.request.raids(false,1); return false;" tabIndex="-1" type="button" value="Import" onmouseout="SRDotDX.gui.displayHint();" onmouseover="SRDotDX.gui.displayHint(\'Import raids from server.\');">\
  2247. <input style="width: 55px;" name="DumpRaids" class="generic" id="DumpRaidsButton" onclick="SRDotDX.gui.RaidAction(\'share\');return false;" tabIndex="-1" type="button" value="Share" onmouseout="SRDotDX.gui.displayHint();" onmouseover="SRDotDX.gui.displayHint(\'Copy all displayed raids to the share tab.\');"> \
  2248. <input style="width: 55px;" name="PostRaids" class="generic" id="PostRaidsButton" onclick="SRDotDX.gui.RaidAction(\'post\');return false;" tabIndex="-1" type="button" value="Post" onmouseout="SRDotDX.gui.displayHint();" onmouseover="SRDotDX.gui.displayHint(\'Post all displayed raids to chat.\');"> \
  2249. <input style="width: 55px;" name="DeleteRaids" class="red" id="DeleteRaidsButton" onclick="SRDotDX.gui.RaidAction(\'delete\'); return false;" tabIndex="-1" type="button" value="Delete" onmouseout="SRDotDX.gui.displayHint();" onmouseover="SRDotDX.gui.displayHint(\'Delete displayed raids.\');"><br> \
  2250. <input style="width: 94px; margin-bottom: 7px; margin-left: 5px; margin-top: 4px"name="JoinRaids" class="green" id="AutoJoinVisibleButton" onclick="SRDotDX.gui.joinSelectedRaids(false) ;return false;" tabIndex="-1" type="button" value="Join" onmouseout="SRDotDX.gui.displayHint();" onmouseover="SRDotDX.gui.displayHint(\'Join all displayed (not dead) raids.\'); "> \
  2251. <input style="width: 173px; margin-bottom: 5px; margin-top: 4px" name="ImpJoinRaids" class="green" id="AutoImpJoinVisibleButton" onclick="SRDotDX.request.joinAfterImport = true; SRDotDX.request.raids(false,1);return false;" tabIndex="-1" type="button" value="Import & Join" onmouseout="SRDotDX.gui.displayHint();" onmouseover="SRDotDX.gui.displayHint(\'Import from server and join all selected (not dead) raids.\'); "> \
  2252. </div> \
  2253. <div style="" id="raid_list" tabIndex="-1"></div> \
  2254. </div> \
  2255. </li> \
  2256. <li class="tab"> \
  2257. <div class="tab_head">Opts</div> \
  2258. <div class="tab_pane"> \
  2259. <div id="FPXRaidOptionsDiv" class="collapsible_panel"> \
  2260. <p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat20" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidOptions\', this)">Raid Options<span style="float:right">+</span></p> \
  2261. <div id="FPXRaidOptions" name="dotdxOptsTabs" style="display:none" class="collapsingField"> \
  2262. <input type="checkbox" id="SRDotDX_options_markMyRaidsVisited" class="generic"><label for="SRDotDX_options_markMyRaidsVisited">Mark raids posted by me as visited</label><br> \
  2263. <input type="checkbox" id="SRDotDX_options_confirmWhenDeleting" class="generic"><label for="SRDotDX_options_confirmWhenDeleting">Confirm when manually deleting raids</label><br> \
  2264. <input type="checkbox" id="SRDotDX_options_importFiltered" class="generic"><label for="SRDotDX_options_importFiltered">Add to database filtered raids only</label><br> \
  2265. </div> \
  2266. </div> \
  2267. <div id="FPXChatOptionsDiv" class="collapsible_panel"> \
  2268. <p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat21" onclick="SRDotDX.gui.toggleDisplay(\'FPXChatOptions\', this)">Chat Options<span style="float:right">+</span></p> \
  2269. <div id="FPXChatOptions" name="dotdxOptsTabs" style="display:none" class="collapsingField"> \
  2270. <input type="checkbox" id="SRDotDX_options_hideRaidLinks" class="generic"><label for="SRDotDX_options_hideRaidLinks">Hide all raid links in chat</label><br> \
  2271. <input type="checkbox" id="SRDotDX_options_hideBotLinks" class="generic"><label for="SRDotDX_options_hideBotLinks">Hide bot raid links in chat</label><br> \
  2272. <input type="checkbox" id="SRDotDX_options_hideVisitedRaids" class="generic"><label for="SRDotDX_options_hideVisitedRaids">Hide visited raids in chat</label><br> \
  2273. <input type="checkbox" id="options_formatChatLinks" class="generic"><label for="options_formatChatLinks">Format all links in chat</label><br> \
  2274. <span class="generic">Chat size:</span>\
  2275. <input type="radio" id="SRDotDX_options_chatSizeNormal" name="chatSize" value="300"/><label for="SRDotDX_options_chatSizeNormal">Normal</label> \
  2276. <input type="radio" id="SRDotDX_options_chatSizePlus25" name="chatSize" value="375" class="generic"/><label for="SRDotDX_options_chatSizePlus25">+25%</label> \
  2277. <input type="radio" id="SRDotDX_options_chatSizePlus50" name="chatSize" value="400" class="generic"/><label for="SRDotDX_options_chatSizePlus50">+50%</label><br> \
  2278. <span class="generic">Font size:</span>\
  2279. <input type="radio" id="SRDotDX_options_fontSizeNormal" name="fontSize" value="0"/><label for="SRDotDX_options_fontSizeNormal">Normal</label> \
  2280. <input type="radio" id="SRDotDX_options_fontSizeSmaller" name="fontSize" value="2" class="generic"/><label for="SRDotDX_options_fontSizeSmaller">Smaller</label> \
  2281. <input type="radio" id="SRDotDX_options_chatSizeBigger" name="fontSize" value="1" class="generic"/><label for="SRDotDX_options_chatSizeBigger">Bigger</label><br> \
  2282. <span class="generic">IGN mode:</span>\
  2283. <input type="radio" id="SRDotDX_options_ignHide" name="ignMode" value="0"/><label for="SRDotDX_options_ignHide">Hide</label> \
  2284. <input type="radio" id="SRDotDX_options_ignReplace" name="ignMode" value="1" class="generic"/><label for="SRDotDX_options_ignReplace">Replace</label> \
  2285. <input type="radio" id="SRDotDX_options_ignAttach" name="ignMode" value="2" class="generic"/><label for="SRDotDX_options_ignAttach">Attach</label><br> \
  2286. <input type="checkbox" id="SRDotDX_options_hideScrollbar" class="generic"><label for="SRDotDX_options_hideScrollbar">Hide scrollbar for chat and user window</label><br> \
  2287. <span class="generic">More info in raid links:</span> \
  2288. <input type="checkbox" id="SRDotDX_options_showFS"><label for="SRDotDX_options_showFS">Show FS</label> \
  2289. <input type="checkbox" id="SRDotDX_options_showAP" class="generic"><label for="SRDotDX_options_showAP">Show AP</label> \
  2290. </div> \
  2291. </div> \
  2292. <div id="FPXIntOptionsDiv" class="collapsible_panel"> \
  2293. <p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat23" onclick="SRDotDX.gui.toggleDisplay(\'FPXIntOptions\', this)">Interface Options<span style="float:right">+</span></p> \
  2294. <div id="FPXIntOptions" name="dotdxOptsTabs" style="display:none" class="collapsingField"> \
  2295. <input type="checkbox" id="options_hideGameTitle" class="generic"><label for="options_hideGameTitle">Hide titlebar above game window</label><br>\
  2296. <input type="checkbox" id="options_hideGameDetails" class="generic"><label for="options_hideGameDetails">Hide details under game window</label><br>\
  2297. <input type="checkbox" id="options_hideKongForum" class="generic"><label for="options_hideKongForum">Hide forum under game window</label><br>\
  2298. <input type="checkbox" id="options_trueMsgCount" class="generic"><label for="options_trueMsgCount">Display true kong messages count</label><br>\
  2299. <input type="checkbox" id="options_hideGameTab" class="generic"><label for="options_hideGameTab">Hide Game tab</label><br>\
  2300. <input type="checkbox" id="options_hideAccTab" class="generic"><label for="options_hideAccTab">Hide Achievements tab</label><br>\
  2301. <input type="checkbox" id="options_clearRMB" class="generic"><label for="options_clearRMB">Use RMB to clear chat input field</label><br>\
  2302. <span class="generic">Script tab name</span><input type="text" class="generic color" id="options_dotdxTabName"><br> \
  2303. <span class="generic">Background color</span><input type="text" class="generic color" id="SRDotDX_colors_background"><br> \
  2304. <span class="generic">Theme:</span>\
  2305. <input type="radio" id="theme_lightGrey" name="chatTheme" value="0"><label for="theme_lightGrey">Light Grey</label>\
  2306. <input type="radio" id="theme_crimsonBlack" name="chatTheme" value="1" class="generic"><label for="theme_crimsonBlack">Crimson Black</label>\
  2307. <span class="generic">World Chat:</span>\
  2308. <input type="checkbox" id="options_wcLeft" class="generic"><label for="options_wcLeft">Show on the left </label><input type="checkbox" id="options_wcRemove" class="generic"><label for="options_wcRemove">Remove</label>\
  2309. </div>\
  2310. </div> \
  2311. <div id="FPXsbOptionsDiv" class="collapsible_panel"> \
  2312. <p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat24" onclick="SRDotDX.gui.toggleDisplay(\'FPXsbOptions\', this)">Sidebar Options<span style="float:right">+</span></p> \
  2313. <div id="FPXsbOptions" name="dotdxOptsTabs" style="display:none" class="collapsingField"> \
  2314. <input type="checkbox" id="options_sbEnable" class="generic"><label for="options_sbEnable">Enable DotDX Sidebar</label><br>\
  2315. <input type="checkbox" id="options_sbSlim" class="generic"><label for="options_sbSlim">Use slim Sidebar</label><br>\
  2316. <input type="checkbox" id="options_sbRightSide" class="generic"><label for="options_sbRightSide">Show sidebar on the right side of chat</label><br> \
  2317. <textarea wrap="off" id="options_sbConfig" rows="25" style="overflow-y: hidden; overflow-x: scroll; white-space: nowrap">' + sbTmp + '</textarea> \
  2318. <input id="dotdx_sbConfigSave" style="margin: 0 0 2px 6px; width: 156px;" class="blue" type="button" value="Apply new sidebar layout" onclick="SRDotDX.gui.applySidebarUI(0); return false;">\
  2319. <input id="dotdx_sbConfigDefault" style="width: 110px;" class="red" type="button" value="Restore default" onclick="SRDotDX.gui.restoreDefaultSB(); return false;">\
  2320. </div> \
  2321. </div> \
  2322. <div id="FPXfsOptionsDiv" class="collapsible_panel"> \
  2323. <p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat25" onclick="SRDotDX.gui.toggleDisplay(\'FPXfsOptions\', this)">Friend Share Options<span style="float:right">+</span></p> \
  2324. <div id="FPXfsOptions" name="dotdxOptsTabs" style="display:none; text-align:right" class="collapsingField"> \
  2325. </div> \
  2326. </div> \
  2327. </div> \
  2328. </li> \
  2329. <li class="tab"> \
  2330. <div class="tab_head" id="FPXShareTab">Share</div> \
  2331. <div class="tab_pane"> \
  2332. <div id="FPXRaidSpamDiv"> \
  2333. <div id="FPXShareDiv" class="collapsible_panel"> \
  2334. <p class="collapsingCategory" id="collapsingCat30" onclick="SRDotDX.gui.toggleDisplay(\'FPXShare\', this, \'share_list\')">Share<span style="float:right">+</span></p> \
  2335. <div id="FPXShare" style="display:block" class="collapsingField"> \
  2336. <input type="checkbox" id="SRDotDX_options_formatLinkOutput" class="generic"><label for="SRDotDX_options_formatLinkOutput">Enable formatting of posted raid links</label><br> \
  2337. <span class="generic">Whisper to </span><input type="text" class="generic" id="SRDotDX_options_whisperTo"><br>\
  2338. <span class="notice">(if "whisper to" field is blank, raids will be posted public)</span> \
  2339. <input id="dotdx_share_post_button" style="margin: 3px 0 0 6px; width: 133px" name="Submit" class="generic" type="button" tabIndex="-1" value="Post Links to Chat" onclick="SRDotDX.gui.RaidAction(\'post_share\');return false;"/> \
  2340. <input id="dotdx_friend_post_button" style="width: 133px" name="Submit1" class="green" type="button" tabIndex="-1" value="Friend Share links" onclick="SRDotDX.gui.RaidAction(\'post_friend\');return false;"/><br> \
  2341. </div> \
  2342. </div> \
  2343. <div id="FPXImportDiv" class="collapsible_panel" class="collapsingField"> \
  2344. <p class="collapsingCategory" id="collapsingCat31" onclick="SRDotDX.gui.toggleDisplay(\'FPXImport\', this, \'share_list\')">Import<span style="float:right">+</span></p> \
  2345. <div id="FPXImport" style="display:none" class="collapsingField"> \
  2346. <input type="checkbox" id="SRDotDX_options_markImportedRaidsVisited" class="generic"><label for="SRDotDX_options_markImportedRaidsVisited">Mark imported raids visited</label><br> \
  2347. <input style="margin-left: 6px; margin-top: 6px; width: 133px" name="Submit2" class="blue" type="button" tabIndex="-1" value="Import to Raid Tab" onClick="SRDotDX.gui.FPXimportRaids();return false;"/> \
  2348. <input style="width: 133px" name="Submit3" class="blue" type="button" tabIndex="-1" value="Delete and Import" onClick="SRDotDX.gui.FPXdeleteAllRaids();SRDotDX.gui.FPXimportRaids();return false;"/> \
  2349. </div> \
  2350. </div> \
  2351. </div> \
  2352. <textarea id="DotDX_raidsToSpam" name="FPXRaidSpamInput" style="height:437px;"></textarea> \
  2353. </div> \
  2354. </li> \
  2355. <li class="tab"> \
  2356. <div class="tab_head">Filter</div> \
  2357. <div class="tab_pane"> \
  2358. <div id="FPXRaidFilterDiv"> \
  2359. <div id="FPXRaidFilterWhereDiv"> \
  2360. <p class="collapsingCategory" id="collapsingCat40" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidFilterWhere\', this)">Filtering options<span style="float:right">+</span></p> \
  2361. <div id="FPXRaidFilterWhere" style="display:block" class="collapsingField"> \
  2362. <input type="checkbox" id="SRDotDX_options_perRaidFilterLinks" class="generic"><label for="SRDotDX_options_perRaidFilterLinks">Activate filtering on raid links</label><br> \
  2363. <input type="checkbox" id="SRDotDX_options_perRaidFilterRaidList" class="generic"><label for="SRDotDX_options_perRaidFilterRaidList">Activate filtering on raid list tab</label><br> \
  2364. </div>\
  2365. </div> \
  2366. <div id="FPXRaidFilterWhatDiv"> \
  2367. <div id="FPXRaidTableSmallDiv" class="collapsible_panel"> \
  2368. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat41" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableSmall\', this)">Small Raids<span style="float:right">+</span></p> \
  2369. <table id="FPXRaidTableSmall" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2370. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2371. <tbody id="FPXRaidFilterWhatSmall"> \
  2372. <!-- Dynamic content --> \
  2373. </tbody> \
  2374. </table> \
  2375. </div> \
  2376. <div id="FPXRaidTableMediumDiv" class="collapsible_panel"> \
  2377. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat42" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableMedium\', this)">Medium Raids<span style="float:right">+</span></p> \
  2378. <table id="FPXRaidTableMedium" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2379. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2380. <tbody id="FPXRaidFilterWhatMedium"> \
  2381. <!-- Dynamic content --> \
  2382. </tbody> \
  2383. </table> \
  2384. </div> \
  2385. <div id="FPXRaidTableLargeDiv" class="collapsible_panel"> \
  2386. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat43" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableLarge\', this)">Large Raids<span style="float:right">+</span></p> \
  2387. <table id="FPXRaidTableLarge" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2388. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2389. <tbody id="FPXRaidFilterWhatLarge"> \
  2390. <!-- Dynamic content --> \
  2391. </tbody> \
  2392. </table> \
  2393. </div> \
  2394. <div id="FPXRaidTableEpicDiv" class="collapsible_panel"> \
  2395. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat44" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableEpic\', this)">Epic Raids<span style="float:right">+</span></p> \
  2396. <table id="FPXRaidTableEpic" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2397. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2398. <tbody id="FPXRaidFilterWhatEpic"> \
  2399. <!-- Dynamic content --> \
  2400. </tbody> \
  2401. </table> \
  2402. </div> \
  2403. <div id="FPXRaidTableColossalDiv" class="collapsible_panel"> \
  2404. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat45" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableColossal\', this)">Colossal Raids<span style="float:right">+</span></p> \
  2405. <table id="FPXRaidTableColossal" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2406. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2407. <tbody id="FPXRaidFilterWhatColossal"> \
  2408. <!-- Dynamic content --> \
  2409. </tbody> \
  2410. </table> \
  2411. </div> \
  2412. <div id="FPXRaidTableGiganticDiv" class="collapsible_panel"> \
  2413. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat46" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableGigantic\', this)">Gigantic Raids<span style="float:right">+</span></p> \
  2414. <table id="FPXRaidTableGigantic" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2415. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2416. <tbody id="FPXRaidFilterWhatGigantic"> \
  2417. <!-- Dynamic content --> \
  2418. </tbody> \
  2419. </table> \
  2420. </div> \
  2421. <div id="FPXRaidTableGuildDiv" class="collapsible_panel"> \
  2422. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat47" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableGuild\', this)">Guild Raids<span style="float:right">+</span></p> \
  2423. <table id="FPXRaidTableGuild" name="dotdxFilterTab" style="display:none; height: 330px; overflow-y: auto;" class="collapsingField"> \
  2424. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2425. <tbody id="FPXRaidFilterWhatGuild"> \
  2426. <!-- Dynamic content --> \
  2427. </tbody> \
  2428. </table> \
  2429. </div> \
  2430. <div id="FPXRaidTableSpecialDiv" class="collapsible_panel"> \
  2431. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat48" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableSpecial\', this)">World Raids<span style="float:right">+</span></p> \
  2432. <table id="FPXRaidTableSpecial" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2433. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2434. <tbody id="FPXRaidFilterWhatSpecial"> \
  2435. <!-- Dynamic content --> \
  2436. </tbody> \
  2437. </table> \
  2438. </div> \
  2439. </div> \
  2440. </div> \
  2441. </div> \
  2442. </li> \
  2443. <li class="tab"> \
  2444. <div class="tab_head">Util</div> \
  2445. <div class="tab_pane"> \
  2446. <div id="FPXLandCalcDiv" class="collapsible_panel"> \
  2447. <p class="collapsingCategory" id="collapsingCat50" onclick="SRDotDX.gui.toggleDisplay(\'FPXLandCalc\', this)">Land Calculator<span style="float:right">+</span></p> \
  2448. <div id="FPXLandCalc" style="display:block" class="collapsingField"> \
  2449. <form id="FPXLand" name="FPXLandForm" onSubmit="return false;" style="padding-bottom:6px"> \
  2450. <table style="margin: 0 auto; padding-right: 10px;"> \
  2451. <tr><td class="landname" colspan="3">Cornfield</td><td style="width: 10px">&nbsp;</td><td class="landname" colspan="3">Stable</td></tr> \
  2452. <tr> \
  2453. <td> <input class="landpmbutton red" id="a_1" name="FPXminusTen_1" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="10"/></td> \
  2454. <td> <input class="generic" maxlength="10" name="tf_1" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="1" /></td> \
  2455. <td> <input class="landpmbutton blue" id="b_1" name="FPXplusTen_1" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="11"/></td> \
  2456. <td></td> \
  2457. <td> <input class="landpmbutton red" id="a_2" name="FPXminusTen_2" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="12"/></td> \
  2458. <td> <input class="generic" maxlength="10" name="tf_2" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="2" /></td> \
  2459. <td> <input class="landpmbutton blue" id="b_2" name="FPXplusTen_2" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="13"/></td> \
  2460. </tr> \
  2461. <tr><td class="landname" colspan="3">Barn</td><td></td><td class="landname" colspan="3">Store</td></tr> \
  2462. <tr> \
  2463. <td> <input class="landpmbutton red" id="a_3" name="FPXminusTen_3" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="14"/></td> \
  2464. <td> <input class="generic" maxlength="10" name="tf_3" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="3" /></td> \
  2465. <td> <input class="landpmbutton blue" id="b_3" name="FPXplusTen_3" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="15"/></td> \
  2466. <td></td> \
  2467. <td> <input class="landpmbutton red" id="a_4" name="FPXminusTen_4" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="16"/></td> \
  2468. <td> <input class="generic" maxlength="10" name="tf_4" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="4" /></td> \
  2469. <td> <input class="landpmbutton blue" id="b_4" name="FPXplusTen_4" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="17"/></td> \
  2470. </tr> \
  2471. <tr><td class="landname" colspan="3">Pub</td><td></td><td class="landname" colspan="3">Inn</td></tr> \
  2472. <tr> \
  2473. <td> <input class="landpmbutton red" id="a_5" name="FPXminusTen_5" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="18"/></td> \
  2474. <td> <input class="generic" maxlength="10" name="tf_5" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="5" /></td> \
  2475. <td> <input class="landpmbutton blue" id="b_5" name="FPXplusTen_5" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="19"/></td> \
  2476. <td></td> \
  2477. <td> <input class="landpmbutton red" id="a_6" name="FPXminusTen_6" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="20"/></td> \
  2478. <td> <input class="generic" maxlength="10" name="tf_6" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="6" /></td> \
  2479. <td> <input class="landpmbutton blue" id="b_6" name="FPXplusTen_6" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="21"/></td> \
  2480. </tr> \
  2481. <tr><td class="landname" colspan="3">Sentry</td><td></td><td class="landname" colspan="3">Fort</td></tr> \
  2482. <tr> \
  2483. <td> <input class="landpmbutton red" id="a_7" name="FPXminusTen_7" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="22"/></td> \
  2484. <td> <input class="generic" maxlength="10" name="tf_7" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="7" /></td> \
  2485. <td> <input class="landpmbutton blue" id="b_7" name="FPXplusTen_7" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="23"/></td> \
  2486. <td></td> \
  2487. <td> <input class="landpmbutton red" id="a_8" name="FPXminusTen_8" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="24"/></td> \
  2488. <td> <input class="generic" maxlength="10" name="tf_8" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="8" /></td> \
  2489. <td> <input class="landpmbutton blue" id="b_8" name="FPXplusTen_8" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="25"/></td> \
  2490. </tr> \
  2491. <tr><td class="landname" colspan="3">Castle</td></tr> \
  2492. <tr> \
  2493. <td> <input class="landpmbutton red" id="a_9" name="FPXminusTen_9" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="26"/></td> \
  2494. <td> <input class="generic" maxlength="10" name="tf_9" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="9" /></td> \
  2495. <td> <input class="landpmbutton blue" id="b_9" name="FPXplusTen_9" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="27"/></td> \
  2496. <td></td> \
  2497. <td colspan="3"> <input class="landsavebutton green" id="lsbutton" type="button" value="Save" onClick="SRDotDX.gui.FPXLandButtonSave();return false;" tabindex="28"/></td> \
  2498. </tr> \
  2499. </table> \
  2500. </form> \
  2501. </div> \
  2502. </div>\
  2503. <div id="WhoPostedMyRaidDiv" class="collapsible_panel"> \
  2504. <p class="collapsingCategory" id="collapsingCat51" onclick="SRDotDX.gui.toggleDisplay(\'WhoPostedMyRaid\', this)">Who posted my raid?<span style="float:right">+</span></p> \
  2505. <div id="WhoPostedMyRaid" style="display:block" class="collapsingField"> \
  2506. <span class="generic" style="margin-top:6px; margin-right: 2px">Raid link or id: </span>\
  2507. <input type="text" class="generic" id="DotDX_checkRaidPoster" style="width:120px">\
  2508. <input class="green" type="button" value="Check" onClick="SRDotDX.request.poster(); return false;" style="height:20px; width:46px"><br>\
  2509. <span class="generic">Raid: </span><span class="generic" id="DotDX_whoPosted_Raid"></span><br> \
  2510. <span class="generic">Time: </span><span class="generic" id="DotDX_whoPosted_Time"></span><br> \
  2511. <span class="generic">Poster: </span><span class="generic" id="DotDX_whoPosted_Poster"></span><br> \
  2512. </div> \
  2513. </div>\
  2514. </div> \
  2515. </li> \
  2516. </ul> \
  2517. </div>\
  2518. <div id="helpBox" style="max-height:0"><span>Help message</span></div> \
  2519. </div>\
  2520. ', false).attach('to', 'kong_game_ui').ele();
  2521. SRDotDX.c('style').set({type: "text/css", id: 'DotDX_colors'}).text(' \
  2522. .DotDX_filter_dummy_0 {display: none !important} \
  2523. ').attach('to', document.head);
  2524.  
  2525. //pane.style.height = document.getElementById('chat_tab_pane').style.height;
  2526. var e = pane.getElementsByClassName('tab_head');
  2527. for(var i = 0, il = e.length; i < il; ++i) {
  2528. e[i].addEventListener('click', function () {
  2529. if (!/\bactive\b/i.test(this.className)) {
  2530. var e = document.getElementById("lots_tab_pane").getElementsByTagName("li");
  2531. for(var i = 0, il = e.length; i < il; ++i) if(e[i].getAttribute("class").indexOf("active") > -1) e[i].className = e[i].className.replace(/ active$/g, "");
  2532. this.parentNode.className += ' active';
  2533. }
  2534. });
  2535. }
  2536. holodeck._tabs.addTab(link);
  2537. SRDotDX.gui.applyTabs();
  2538. //Set up custom chat size
  2539. SRDotDX.gui.hideWC(true);
  2540.  
  2541. //Chat raids overlay div
  2542. SRDotDX.c('div').set({id: 'chat_raids_overlay'}).html('<span id="chat_raids_overlay_text"></span>', true).attach("to", 'chat_tab_pane');
  2543.  
  2544. //Sidebar elements generator
  2545. if (SRDotDX.config.sbEnable) SRDotDX.gui.applySidebarUI(1);
  2546.  
  2547. //spam tab
  2548. var FPXimpSpam = SRDotDX.c('#DotDX_raidsToSpam');
  2549. var FPXSpamText = 'Paste raid links here to share or import\n\nLinks must be comma (,) separated.';
  2550. FPXimpSpam.ele().value = FPXSpamText;
  2551. FPXimpSpam.on('blur', function(){if(this.value === '') this.value = FPXSpamText});
  2552. FPXimpSpam.on('focus', function(){if(this.value === FPXSpamText) this.value = ''});
  2553.  
  2554. //chat global listener
  2555. var chat_window = document.getElementById('chat_rooms_container');
  2556. chat_window.addEventListener('click', SRDotDX.gui.chatWindowMouseDown, true);
  2557. chat_window.addEventListener('contextmenu', SRDotDX.gui.chatWindowContextMenu, false);
  2558. //land tab
  2559. els = document.FPXLandForm;
  2560. for(i = 0; i < 9; ++i) els.elements['tf_' + (i + 1)].value = SRDotDX.config.FPXLandOwnedCount[i];
  2561. SRDotDX.gui.FPXLandUpdater();
  2562.  
  2563. //raid tab
  2564. var raids_tab = document.getElementById('raids_tab');
  2565. raids_tab.addEventListener('click', function () {
  2566. SRDotDX.gui.refreshRaidList();
  2567. }, false);
  2568.  
  2569. var raidBossFilter = SRDotDX.c('#raidsBossFilter');
  2570. raidBossFilter.ele().value = SRDotDX.config.lastFilter[SRDotDX.config.serverMode - 1];
  2571. raidBossFilter.on("keyup", function () {
  2572. SRDotDX.gui.updateFilterTxt(this.value, true);
  2573. });
  2574.  
  2575. var filterIncVis = SRDotDX.c('#dotdx_flt_vis');
  2576. filterIncVis.ele().checked = SRDotDX.config.fltIncVis;
  2577. filterIncVis.on('click', function () {
  2578. SRDotDX.config.fltIncVis = this.checked;
  2579. if(!document.getElementById('dotdx_flt_all').checked) SRDotDX.gui.selectRaidsToJoin('checkbox');
  2580. });
  2581.  
  2582. var filterExclFull = SRDotDX.c('#dotdx_flt_full');
  2583. filterExclFull.ele().checked = SRDotDX.config.fltExclFull;
  2584. filterExclFull.on('click', function () {
  2585. SRDotDX.config.fltExclFull = this.checked;
  2586. if(!document.getElementById('dotdx_flt_all').checked) SRDotDX.gui.selectRaidsToJoin('checkbox');
  2587. });
  2588.  
  2589. var filterShowAll = SRDotDX.c('#dotdx_flt_all');
  2590. filterShowAll.ele().checked = SRDotDX.config.fltShowAll;
  2591. filterShowAll.on('click', function () {
  2592. SRDotDX.config.fltShowAll = this.checked;
  2593. SRDotDX.gui.selectRaidsToJoin('checkbox')
  2594. });
  2595.  
  2596. //raidlist global click listener
  2597. var raid_list = document.getElementById('raid_list');
  2598. raid_list.addEventListener('click', function (e) {
  2599. e.preventDefault();
  2600. e.stopPropagation();
  2601. return false
  2602. }, false);
  2603. raid_list.addEventListener('mousedown', function (e) {
  2604. SRDotDX.gui.FPXraidListMouseDown(e)
  2605. }, false);
  2606.  
  2607. //options tab
  2608. var optsImportFiltered = SRDotDX.c('#SRDotDX_options_importFiltered');
  2609. optsImportFiltered.ele().checked = SRDotDX.config.importFiltered;
  2610. optsImportFiltered.on('click', function () {
  2611. SRDotDX.config.importFiltered = this.checked;
  2612. SRDotDX.config.save(false)
  2613. });
  2614.  
  2615. var optsShowFs = SRDotDX.c('#SRDotDX_options_showFS');
  2616. optsShowFs.ele().checked = SRDotDX.config.linkShowFs;
  2617. optsShowFs.on('click', function () {
  2618. SRDotDX.config.linkShowFs = this.checked;
  2619. SRDotDX.config.save(false)
  2620. });
  2621.  
  2622. var optsShowAp = SRDotDX.c('#SRDotDX_options_showAP');
  2623. optsShowAp.ele().checked = SRDotDX.config.linkShowAp;
  2624. optsShowAp.on('click', function () {
  2625. SRDotDX.config.linkShowAp = this.checked;
  2626. SRDotDX.config.save(false)
  2627. });
  2628.  
  2629. var optsHideARaids = SRDotDX.c('#SRDotDX_options_hideRaidLinks');
  2630. var optsHideBRaids = SRDotDX.c('#SRDotDX_options_hideBotLinks');
  2631. var optsHideVRaids = SRDotDX.c('#SRDotDX_options_hideVisitedRaids');
  2632. var optsConfirmDeletes = SRDotDX.c('#SRDotDX_options_confirmWhenDeleting');
  2633. var optsMarkImportedVisited = SRDotDX.c('#SRDotDX_options_markImportedRaidsVisited');
  2634. var optsWhisperTo = SRDotDX.c('#SRDotDX_options_whisperTo');
  2635. var optsMarkMyRaidsVisited = SRDotDX.c('#SRDotDX_options_markMyRaidsVisited');
  2636. var optsFormatLinkOutput = SRDotDX.c('#SRDotDX_options_formatLinkOutput');
  2637.  
  2638. var optsChatSizeNormal = SRDotDX.c('#SRDotDX_options_chatSizeNormal');
  2639. optsChatSizeNormal.on('click', function(){SRDotDX.gui.chatResize(300)});
  2640. var optsChatSizePlus25 = SRDotDX.c('#SRDotDX_options_chatSizePlus25');
  2641. optsChatSizePlus25.on('click', function(){SRDotDX.gui.chatResize(375)});
  2642. var optsChatSizePlus50 = SRDotDX.c('#SRDotDX_options_chatSizePlus50');
  2643. optsChatSizePlus50.on('click', function(){SRDotDX.gui.chatResize(450)});
  2644. switch (SRDotDX.config.chatSize) {
  2645. case 300: optsChatSizeNormal.ele().checked = true; break;
  2646. case 375: optsChatSizePlus25.ele().checked = true; break;
  2647. case 450: optsChatSizePlus50.ele().checked = true; break;
  2648. default: optsChatSizeNormal.ele().checked = true; break;
  2649. }
  2650.  
  2651. var optsChatFontNormal = SRDotDX.c('#SRDotDX_options_fontSizeNormal');
  2652. optsChatFontNormal.on('click', function () {
  2653. SRDotDX.gui.applyFontSize(0)
  2654. });
  2655. var optsChatFontSmaller = SRDotDX.c('#SRDotDX_options_fontSizeSmaller');
  2656. optsChatFontSmaller.on('click', function () {
  2657. SRDotDX.gui.applyFontSize(2)
  2658. });
  2659. var optsChatFontBigger = SRDotDX.c('#SRDotDX_options_chatSizeBigger');
  2660. optsChatFontBigger.on('click', function () {
  2661. SRDotDX.gui.applyFontSize(1)
  2662. });
  2663. switch (SRDotDX.config.fontNum) {
  2664. case 2: optsChatFontSmaller.ele().checked = true; break;
  2665. case 1: optsChatFontBigger.ele().checked = true; break;
  2666. default: optsChatFontNormal.ele().checked = true; break;
  2667. }
  2668.  
  2669. var optsChatHideScrollbar = SRDotDX.c('#SRDotDX_options_hideScrollbar');
  2670. optsChatHideScrollbar.ele().checked = SRDotDX.config.hideScrollBar;
  2671. optsChatHideScrollbar.on('click', function () {
  2672. SRDotDX.config.hideScrollBar = this.checked;
  2673. SRDotDX.config.save(false);
  2674. SRDotDX.gui.chatResize();
  2675. });
  2676.  
  2677. var optsHideKongForum = SRDotDX.c('#options_hideKongForum');
  2678. optsHideKongForum.ele().checked = SRDotDX.config.hideKongForum;
  2679. optsHideKongForum.on('click', function () {
  2680. SRDotDX.config.hideKongForum = this.checked;
  2681. SRDotDX.c('#DotDX_forum').html('div.game_page_wrap {padding-top: 16px; margin-top: 14px !important; background: #333 !important; display: ' + (SRDotDX.config.hideKongForum ? 'none' : 'block') + '}', true)
  2682. });
  2683.  
  2684. var optsHideGameDetails = SRDotDX.c('#options_hideGameDetails');
  2685. optsHideGameDetails.ele().checked = SRDotDX.config.hideGameDetails;
  2686. optsHideGameDetails.on('click', function () {
  2687. SRDotDX.config.hideGameDetails = this.checked;
  2688. SRDotDX.c('#DotDX_details').html('div.game_details_outer {margin-top: 14px !important; width: 900px !important; border: solid 20px #333 !important; display: ' + (SRDotDX.config.hideGameDetails ? 'none' : 'block') + '}', true)
  2689. });
  2690.  
  2691. var optsHideGameTitle = SRDotDX.c('#options_hideGameTitle');
  2692. optsHideGameTitle.ele().checked = SRDotDX.config.hideGameTitle;
  2693. optsHideGameTitle.on('click', function () {
  2694. SRDotDX.config.hideGameTitle = this.checked
  2695. });
  2696.  
  2697. var optsTrueMsgCount = SRDotDX.c('#options_trueMsgCount');
  2698. optsTrueMsgCount.ele().checked = SRDotDX.config.kongMsg;
  2699. optsTrueMsgCount.on('click', function () {
  2700. SRDotDX.config.kongMsg = this.checked
  2701. });
  2702. if (SRDotDX.config.kongMsg) SRDotDX.gui.setMessagesCount();
  2703.  
  2704. var optsHideGameTab = SRDotDX.c('#options_hideGameTab');
  2705. optsHideGameTab.ele().checked = SRDotDX.config.hideGameTab;
  2706. optsHideGameTab.on('click', function () {
  2707. SRDotDX.config.hideGameTab = this.checked;
  2708. SRDotDX.gui.applyTabs()
  2709. });
  2710.  
  2711. var optsHideAccTab = SRDotDX.c('#options_hideAccTab');
  2712. optsHideAccTab.ele().checked = SRDotDX.config.hideAccTab;
  2713. optsHideAccTab.on('click', function () {
  2714. SRDotDX.config.hideAccTab = this.checked;
  2715. SRDotDX.gui.applyTabs()
  2716. });
  2717.  
  2718. var optsDotdxTabName = SRDotDX.c('#options_dotdxTabName');
  2719. optsDotdxTabName.ele().value = SRDotDX.config.dotdxTabName;
  2720. optsDotdxTabName.on('keyup', function () {
  2721. SRDotDX.config.dotdxTabName = this.value;
  2722. SRDotDX.gui.applyTabs()
  2723. });
  2724.  
  2725. var optsFormatChatLinks = SRDotDX.c('#options_formatChatLinks');
  2726. optsFormatChatLinks.ele().checked = SRDotDX.config.formatLinks;
  2727. optsFormatChatLinks.on('click', function (){SRDotDX.config.formatLinks = this.checked;});
  2728.  
  2729. var optsClearRMB = SRDotDX.c('#options_clearRMB');
  2730. optsClearRMB.ele().checked = SRDotDX.config.clearRMB;
  2731. optsClearRMB.on('click', function (){SRDotDX.config.clearRMB = this.checked;});
  2732.  
  2733. var optsChatIgnHide = SRDotDX.c('#SRDotDX_options_ignHide');
  2734. optsChatIgnHide.on('click', function(){SRDotDX.config.ignMode = 0});
  2735. var optsChatIgnReplace = SRDotDX.c('#SRDotDX_options_ignReplace');
  2736. optsChatIgnReplace.on('click', function(){SRDotDX.config.ignMode = 1});
  2737. var optsChatIgnAttach = SRDotDX.c('#SRDotDX_options_ignAttach');
  2738. optsChatIgnAttach.on('click', function(){SRDotDX.config.ignMode = 2});
  2739. switch(SRDotDX.config.ignMode) {
  2740. case 0: optsChatIgnHide.ele().checked = true; break;
  2741. case 1: optsChatIgnReplace.ele().checked = true; break;
  2742. case 2: optsChatIgnAttach.ele().checked = true; break;
  2743. }
  2744.  
  2745. var optsChatThemeLightGrey = SRDotDX.c('#theme_lightGrey');
  2746. optsChatThemeLightGrey.on('click', function(){SRDotDX.gui.applyTheme(0)});
  2747. var optsChatThemeCrimsonBlack = SRDotDX.c('#theme_crimsonBlack');
  2748. optsChatThemeCrimsonBlack.on('click', function(){SRDotDX.gui.applyTheme(1)});
  2749. switch(SRDotDX.config.themeNum) {
  2750. case 1: optsChatThemeCrimsonBlack.ele().checked = true; break;
  2751. case 0: optsChatThemeLightGrey.ele().checked = true; break;
  2752. }
  2753.  
  2754. var optsWcLeft = SRDotDX.c('#options_wcLeft');
  2755. optsWcLeft.ele().checked = SRDotDX.config.leftWChat;
  2756. optsWcLeft.on('click', function(){
  2757. SRDotDX.config.leftWChat = this.checked;
  2758. SRDotDX.config.extSave();
  2759. });
  2760.  
  2761. var optsWcRemove = SRDotDX.c('#options_wcRemove');
  2762. optsWcRemove.ele().checked = SRDotDX.config.removeWChat;
  2763. optsWcRemove.on('click', function(){SRDotDX.gui.removeWC(this.checked)});
  2764.  
  2765. //Opts -> Sidebar Options
  2766. var optsSbEnable = SRDotDX.c('#options_sbEnable');
  2767. optsSbEnable.ele().checked = SRDotDX.config.sbEnable;
  2768. optsSbEnable.on('click', function () {
  2769. SRDotDX.config.sbEnable = this.checked;
  2770. SRDotDX.gui.applySidebarUI(this.checked ? 1 : -1);
  2771. SRDotDX.config.save(false)
  2772. });
  2773.  
  2774. var optsSbRightSide = SRDotDX.c('#options_sbRightSide');
  2775. optsSbRightSide.ele().checked = SRDotDX.config.sbRightSide;
  2776. optsSbRightSide.on('click', function () {
  2777. SRDotDX.config.sbRightSide = this.checked;
  2778. SRDotDX.gui.applySidebarUI(2);
  2779. SRDotDX.config.save(false)
  2780. });
  2781.  
  2782. //var optsCbDisable = SRDotDX.c('#options_cbDisable');
  2783. //optsCbDisable.ele().checked = SRDotDX.config.cbDisable;
  2784. //optsCbDisable.on('click', function(){ SRDotDX.config.cbDisable = this.checked; SRDotDX.config.save(false) });
  2785.  
  2786. var optsSlimSB = SRDotDX.c('#options_sbSlim');
  2787. optsSlimSB.ele().checked = SRDotDX.config.sbSlim;
  2788. optsSlimSB.on('click', function () {
  2789. SRDotDX.config.sbSlim = this.checked;
  2790. SRDotDX.config.save(false);
  2791. SRDotDX.gui.toggleSlimSB();
  2792. });
  2793.  
  2794. optsMarkMyRaidsVisited.ele().checked = SRDotDX.config.markMyRaidsVisted;
  2795. optsFormatLinkOutput.ele().checked = SRDotDX.config.formatLinkOutput;
  2796. optsMarkImportedVisited.ele().checked = SRDotDX.config.markImportedVisited;
  2797. optsWhisperTo.ele().value = SRDotDX.config.whisperTo;
  2798. optsConfirmDeletes.ele().checked = SRDotDX.config.confirmDeletes;
  2799. SRDotDX.c('#SRDotDX_colors_background').ele().value = SRDotDX.config.bckColor;
  2800. optsHideVRaids.ele().checked = SRDotDX.config.hideVisitedRaids;
  2801. optsHideBRaids.ele().checked = SRDotDX.config.hideBotLinks;
  2802. if (SRDotDX.config.hideRaidLinks) {
  2803. optsHideARaids.ele().checked = true;
  2804. optsHideVRaids.ele().disabled = true;
  2805. optsHideBRaids.ele().disabled = true;
  2806. }
  2807.  
  2808. optsConfirmDeletes.on('click', function(){SRDotDX.config.confirmDeletes = this.checked});
  2809. optsMarkImportedVisited.on("click", function(){SRDotDX.config.markImportedVisited = this.checked;});
  2810. optsWhisperTo.on("change", function () {
  2811. console.log("[SRDotDX] Whisper person changed to " + this.value);
  2812. SRDotDX.config.whisperTo = this.value;
  2813. });
  2814. SRDotDX.c('#SRDotDX_colors_background').on("change", function(){SRDotDX.config.bckColor = this.value;});
  2815. optsFormatLinkOutput.on("click", function(){SRDotDX.config.formatLinkOutput = this.checked;});
  2816. optsMarkMyRaidsVisited.on("click", function(){SRDotDX.config.markMyRaidsVisted = this.checked;});
  2817. optsHideARaids.on("click", function(){
  2818. document.getElementById('SRDotDX_options_hideVisitedRaids').disabled = this.checked;
  2819. document.getElementById('SRDotDX_options_hideSeenRaids').disabled = this.checked;
  2820. SRDotDX.config.hideRaidLinks = this.checked;
  2821. SRDotDX.c('#SRDotDX_raidClass').html('.DotDX_raid {display: ' + (this.checked ? 'none !important' : 'block') + '}', true);
  2822. }, true);
  2823. optsHideBRaids.on("click", function(){SRDotDX.gui.switchBot()}, true);
  2824. optsHideVRaids.on("click", function(){
  2825. SRDotDX.config.hideVisitedRaids = this.checked;
  2826. SRDotDX.c('#SRDotDX_visitedRaidClass').html('.SRDotDX_visitedRaid {display: ' + (this.checked ? 'none !important' : 'block') + '}', true);
  2827. }, true);
  2828.  
  2829. //CHAT TAB CLICK SCROLL (id=chat_tab, class=chat_message_window)
  2830. document.getElementById('chat_tab').addEventListener("click", function() {
  2831. document.getElementById('lots_tab_pane').style.display = 'none';
  2832. setTimeout(function(){
  2833. var el = document.getElementsByClassName('chat_message_window')[SRDotDX.util.getChatNumber()];
  2834. console.log("[DotDX] Scrolling chat window " + el.scrollTop + " : " + el.scrollHeight);
  2835. el.scrollTop = el.scrollHeight;
  2836. SRDotDX.gui.selectRaidsToJoin();
  2837. }, 50);
  2838. }, true);
  2839.  
  2840. //RAIDS TAB CLICK EVENT LISTENER
  2841. document.getElementById('lots_tab').addEventListener("click", function() {
  2842. setTimeout(SRDotDX.gui.selectRaidsToJoin, 50)
  2843. }, true);
  2844.  
  2845. //FriendShare
  2846. SRDotDX.gui.refreshFriends();
  2847.  
  2848. // Filtering tab
  2849. SRDotDX.gui.createFilterTab();
  2850.  
  2851. var filterChatCb = SRDotDX.c('#SRDotDX_options_perRaidFilterLinks');
  2852. filterChatCb.on("click", function () {
  2853. SRDotDX.config.filterChatLinks = this.checked;
  2854. SRDotDX.gui.toggleFiltering();
  2855. }, true).ele().checked = SRDotDX.config.filterChatLinks;
  2856.  
  2857. var filterListCb = SRDotDX.c('#SRDotDX_options_perRaidFilterRaidList');
  2858. filterListCb.on("click", function () {
  2859. SRDotDX.config.filterRaidList = this.checked;
  2860. SRDotDX.gui.toggleFiltering();
  2861. }, true).ele().checked = SRDotDX.config.filterRaidList;
  2862.  
  2863. SRDotDX.c('li').set({class: 'rate'}).html('<a class="spritegame" href="http://www.kongregate.com/games/5thPlanetGames/dawn-of-the-dragons" onclick="SRDotDX.reload(); return false;">Reload Game</a>', false).attach('after', 'quicklinks_favorite_block');
  2864. if(!SRDotDX.config.removeWChat) SRDotDX.c('li').set({id: 'wcbutton', class: 'rate'}).html('<a id="hideWCtxt" class="spritegame" href="http://www.kongregate.com/games/5thPlanetGames/dawn-of-the-dragons" onclick="SRDotDX.gui.hideWC(false); return false;">' + (SRDotDX.config.hideWChat ? 'Show World Chat' : 'Hide World Chat') + '</a>', false).attach('after', 'quicklinks_play_later_block');
  2865.  
  2866. //Chat buttons overlay div
  2867. var hd = document.getElementById('chat_window_header').getElementsByClassName('room_name_container')[0].innerHTML;
  2868. document.getElementById('chat_window_header').getElementsByClassName('room_name_container')[0].innerHTML = hd + '<div class="dotdx_chat_overlay">DotDX: <span id="dotdx_chat_overlay"></span></div>';
  2869. setTimeout(SRDotDX.gui.BeginDeletingExpiredUnvisitedRaids, 10000);
  2870. //SRDotDX.util.updateUser(true);
  2871. window.userInt = setInterval(function(){
  2872. if(typeof active_user == 'object' && active_user.username().toLowerCase() != 'guest') {
  2873. SRDotDX.config.kongUser = active_user.username();
  2874. SRDotDX.config.kongId = active_user.id();
  2875. SRDotDX.config.kongAuth = active_user.gameAuthToken();
  2876. console.log("[DotDX] Initialized user: " + SRDotDX.config.kongUser + " | " + SRDotDX.config.kongId);
  2877. clearInterval(window.userInt);
  2878. }
  2879. else console.log("[DotDX] User init failed... trying again");
  2880. },3000);
  2881. window.guildInt = setInterval(function(){
  2882. if( typeof holodeck == 'object' &&
  2883. typeof holodeck._guildRosters == 'object' &&
  2884. Object.keys(holodeck._guildRosters).length > 0 &&
  2885. typeof holodeck.getGuildRoomForCurrentGameCookie == 'function' &&
  2886. typeof holodeck.getGuildRoomForCurrentGameCookie().guild_id == 'string') {
  2887. var guildUsers = holodeck._guildRosters[holodeck.getGuildRoomForCurrentGameCookie().guild_id];
  2888. console.log("[DotDX] Received guild roster list, number of entries: " + guildUsers.length);
  2889. clearInterval(window.guildInt);
  2890. for(var i = 0, il = guildUsers.length; i < il; ++i) if(typeof SRDotDX.config.ignUsers[guildUsers[i].username] === 'undefined') SRDotDX.config.ignUsers[guildUsers[i].username] = guildUsers[i].game_character_name;
  2891. }
  2892. else console.log("[DotDX] Guild roster not processed... trying again");
  2893. },10000);
  2894. console.log('[DotDX] DotDeXtension loading complete');
  2895. SRDotDX.gui.doStatusOutput('Loaded successfully', 2000, false);
  2896. setTimeout(function(){delete SRDotDX.gui.load; delete SRDotDX.load},1000);
  2897. setTimeout(SRDotDX.config.save, 2000);
  2898. //SRDotDX.c('#shim').del();
  2899. }
  2900. else {
  2901. setTimeout(SRDotDX.gui.load, 500)
  2902. }
  2903. },
  2904. fsEleClick: function (e) {
  2905. e = e || window.event;
  2906. var el = e.target.id.split(':');
  2907. if (el[0] == 'fs') {
  2908. SRDotDX.config.friendUsers[el[1]][el[2]] = e.target.checked;
  2909. }
  2910. },
  2911. FPXraidLinkClick: function(id) {
  2912. if (!SRDotDX.gui.joining) SRDotDX.request.joinRaid(SRDotDX.config.raidList[id]);
  2913. else SRDotDX.gui.joinRaidList.push(SRDotDX.config.raidList[id]);
  2914. },
  2915. FPXLandButtonHandler: function (ele, name) {
  2916. var x = name.charAt(name.length - 1), sign = 1;
  2917. if (name.charAt(3) != 'p')sign = -1;
  2918. document.FPXLandForm.elements["tf_" + x].value = parseInt(document.FPXLandForm.elements["tf_" + x].value, 10) + (10 * sign);
  2919. SRDotDX.gui.FPXLandUpdater();
  2920. },
  2921. FPXLandUpdater: function () {
  2922. var owned = [0, 0, 0, 0, 0, 0, 0, 0, 0], els = document.FPXLandForm, i = 9;
  2923. while (i--) owned[i] = parseInt(els.elements['tf_' + (i + 1)].value, 10);
  2924. var ratio = FPX.LandCostRatio(owned), best = 0, cn;
  2925. i = 9;
  2926. while (i--) {
  2927. cn = document.getElementById('b_' + (i + 1)).className;
  2928. if (cn.indexOf('landpmbutton ') == -1) document.getElementById('b_' + (i + 1)).className = cn.replace('landpmbuttonhigh', 'landpmbutton');
  2929. //document.getElementById('b_'+(i+1)).prevClassName = 'landpmbutton';
  2930. if (ratio[i] > ratio[best]) best = i;
  2931. }
  2932. cn = document.getElementById('b_' + (best + 1)).className;
  2933. document.getElementById('b_' + (best + 1)).className = cn.replace('landpmbutton', 'landpmbuttonhigh');
  2934. },
  2935. FPXLandButtonSave: function () {
  2936. var els = document.FPXLandForm, i = 9;
  2937. while (i--) SRDotDX.config.FPXLandOwnedCount[i] = els.elements['tf_' + (i + 1)].value;
  2938. SRDotDX.config.save(false);
  2939. SRDotDX.gui.doStatusOutput('Land count saved!');
  2940. },
  2941. FPXraidListMouseDown: function (e) {
  2942. e.preventDefault();
  2943. e.stopPropagation();
  2944. var classtype = e.target.className;
  2945. e = e || window.event;
  2946. if (e.which == 1) {
  2947. switch (classtype) {
  2948. case 'dotdxRaidListDelete':
  2949. SRDotDX.gui.deleteRaid(e.target.parentNode);
  2950. break;
  2951. case 'DotDX_RaidLink':
  2952. SRDotDX.gui.FPXraidLinkClick(e.target.parentNode.getAttribute("raidid"));
  2953. break;
  2954. }
  2955. }
  2956. },
  2957. chatWindowContextMenu: function (e) {
  2958. e = e || window.event;
  2959. var clickedClass = e.target.className.split(" "), nick = "";
  2960. console.log('[DotDX] Chat window menu [' + e.target.className + ']');
  2961. if (clickedClass[0] === 'username' && clickedClass[1] === 'chat_message_window_username') {
  2962. nick = e.target.getAttribute('dotdxname');
  2963. var frTxt = SRDotDX.config.friendUsers[nick]?'unFriend':'Friend';
  2964. var uMenu = document.getElementById(clickedClass[clickedClass.length - 1]);
  2965. if(uMenu !== null) {
  2966. uMenu.innerHTML = '<span class="user dotdx_name_' + nick + '">' + nick + '</span><span class="user dotdx_friend_' + nick + '">' + frTxt + '</span><span class="user dotdx_slap_' + nick + '">Slap</span><span class="user dotdx_mute_' + nick + '">Mute</span>';
  2967. uMenu.style.maxWidth = "220px";
  2968. }
  2969. e.preventDefault();
  2970. e.stopPropagation();
  2971. }
  2972. else if(clickedClass[0] === 'chat_input' && SRDotDX.config.clearRMB) {
  2973. e.target.value = '';
  2974. e.preventDefault();
  2975. e.stopPropagation();
  2976. }
  2977. return false;
  2978. },
  2979. chatWindowMouseDown: function (e) {
  2980. e = e || window.event;
  2981. var clickedClass = e.target.className.split(" "), nick = "";
  2982. console.log('[DotDX] Chat window (' + e.which + ') [' + e.target.className + ']');
  2983. if(e.which === 1) {
  2984. switch(clickedClass[0]) {
  2985. case 'username':
  2986. if(clickedClass[1] === 'chat_message_window_username')
  2987. {
  2988. e.preventDefault();
  2989. e.stopPropagation();
  2990. nick = e.target.getAttribute('dotdxname');
  2991. console.log("[DotDX] Whisp to user with nick [" + nick + "]");
  2992. holodeck.chatWindow().insertPrivateMessagePrefixFor(nick);
  2993. }
  2994. break;
  2995. case 'chatRaidLink':
  2996. e.preventDefault();
  2997. e.stopPropagation();
  2998. var raid = clickedClass[1].split("|");
  2999. var rObj = {id: raid[0], hash: raid[1], boss: raid[2], diff: raid[3], sid: raid[4]};
  3000. if (!SRDotDX.gui.joining) SRDotDX.request.joinRaid(rObj);
  3001. else SRDotDX.gui.joinRaidList.push(rObj);
  3002. break;
  3003. case 'user':
  3004. e.preventDefault();
  3005. e.stopPropagation();
  3006. var classTokens = clickedClass[1].split("_");
  3007. switch (classTokens[1]) {
  3008. case 'slap':
  3009. var num = Math.round((Math.random() * (SRDotDX.slapSentences.length - 1)));
  3010. SRDotDX.gui.FPXdoWork('*' + SRDotDX.slapSentences[num].replace(/<nick>/g, classTokens[2]) + '*');
  3011. break;
  3012. case 'mute':
  3013. SRDotDX.config.mutedUsers[classTokens[2]] = true;
  3014. SRDotDX.config.save(false);
  3015. break;
  3016. case 'friend':
  3017. if (typeof SRDotDX.config.friendUsers[classTokens[2]] == 'object') delete SRDotDX.config.friendUsers[classTokens[2]];
  3018. else SRDotDX.config.friendUsers[classTokens[2]] = [false, false, false, false, true];
  3019. SRDotDX.config.save(false);
  3020. SRDotDX.gui.refreshFriends();
  3021. break;
  3022. case 'name':
  3023. holodeck.showMiniProfile(classTokens[2]);
  3024. break;
  3025. }
  3026. e.target.parentNode.style.maxWidth = "0";
  3027. }
  3028. return false;
  3029. }
  3030. },
  3031. raidListItemUpdate: function (id) {
  3032. var ele = document.getElementById('DotDX_' + id);
  3033. var r = SRDotDX.config.raidList[id];
  3034. if(ele !== null && typeof r === 'object') ele.children[2].innerHTML = (r.visited ? '&#9733;' : '');
  3035. },
  3036. raidListItemRemoveById: function (id) {
  3037. var ele = document.getElementById('DotDX_' + id);
  3038. if(ele !== null) ele.parentNode.removeChild(ele);
  3039. },
  3040. toggleCSS: function (p) {
  3041. if (p) {
  3042. var ele = document.getElementById(p.id);
  3043. if(ele !== null) {
  3044. document.head.removeChild(ele);
  3045. SRDotDX.c("style").set({
  3046. type: "text/css",
  3047. id: p.id
  3048. }).text(p.cls).attach("to", document.head);
  3049. }
  3050. }
  3051. },
  3052. toggleRaid: function (type, id, tog) {
  3053. var d = document.getElementsByClassName("DotDX_raidId_" + id);
  3054. if (typeof SRDotDX.config.raidList[id] === 'object') {
  3055. var raid = SRDotDX.config.raidList[id];
  3056. raid = SRDotDX.getRaidDetails("&kv_difficulty=" + raid.diff + "&kv_hash=" + raid.hash + "&kv_raid_boss=" + raid.boss + "&kv_raid_id=" + raid.id);
  3057. }
  3058. for(var i = 0, il = d.length; i < il; ++i) {
  3059. if (tog && d[i].className.indexOf('DotDX_' + type + 'Raid') < 0) d[i].className += ' DotDX_' + type + 'Raid';
  3060. else if (!tog && d[i].className.indexOf('DotDX_' + type + 'Raid') >= 0) d[i].className = d[i].className.replace(new RegExp('DotDX_' + type + 'Raid( |$)', 'i'), '');
  3061. if (typeof raid == 'object') d[i].getElementsByTagName('a')[0].innerHTML = raid.linkText();
  3062. }
  3063. }
  3064. },
  3065. searchPatterns: {
  3066. z1: ['kobold', 'scorp', 'ogre'],
  3067. z2: ['rhino', 'alice', 'lurker'],
  3068. z3: ['4ogre', 'squid', 'batman', 'drag', 'tainted'],
  3069. z4: ['bmane', '3dawg', 'hydra', 'sircai', 'tyranthius'],
  3070. z5: ['ironclad', 'zombiehorde', 'stein', 'bogstench', 'nalagarst'],
  3071. z6: ['gunnar', 'nidhogg', 'kang', 'ulfrik', 'kalaxia'],
  3072. z7: ['maraak', 'erakka_sak', 'wexxa', 'guilbert', 'bellarius'],
  3073. z8: ['hargamesh', 'grimsly', 'rift', 'sisters', 'mardachus'],
  3074. z9: ['mesyra', 'nimrod', 'phaedra', 'tenebra', 'valanazes'],
  3075. 'z1_9': ['kobold', 'scorp', 'ogre', 'rhino', 'alice', 'lurker', '4ogre', 'squid', 'batman', 'drag', 'tainted', 'bmane', '3dawg', 'hydra', 'sircai', 'tyranthius', 'ironclad', 'zombiehorde', 'stein', 'bogstench', 'nalagarst', 'gunnar', 'nidhogg', 'kang', 'ulfrik', 'kalaxia', 'maraak', 'erakka_sak', 'wexxa', 'guilbert', 'bellarius', 'hargamesh', 'grimsly', 'rift', 'sisters', 'mardachus', 'mesyra', 'nimrod', 'phaedra', 'tenebra', 'valanazes'],
  3076. 'z9.5': ['pumpkin', 'jacksrevenge1'],
  3077. 'z9.7': ['hellemental', 'shadow'],
  3078. z10: ['krugnug', 'tomb_gargoyle', 'leonine_watcher', 'centurion_marius', 'caracalla'],
  3079. z14: ['zugen', 'gulkinari', 'verkiteia', 'cannibal_barbarians'],
  3080. z15: ['korxun', 'xerkara', 'shaar', 'nereidon', 'drulcharus'],
  3081. z16: ['bad_blood','way_warden','draconic_dreams','doppelganger'],
  3082. farm: ['maraak', 'erakka_sak', 'wexxa', 'guilbert', 'bellarius', 'drag', 'tainted', 'ogre', 'scorp', 'baroness'],
  3083. flute: ['kobold', 'scorp', 'ogre', 'rhino', 'alice', 'lurker', '4ogre', 'squid', 'batman', 'drag', 'tainted', 'harpy', 'spider', 'djinn', 'evilgnome', 'basilisk', 'roc', 'gladiators', 'chimera', 'crabshark', 'gorgon', 'warewolfpack', 'blobmonster', 'giantgolem'],
  3084. tower: ['thaltherda', 'hurkus', 'malleus', 'yydians_sanctuary', 'clockwork_dragon', 'krxunara', 'karkata', 'corrupted_wilds', 'marble_colossus'],
  3085. small: ['kobold', 'rhino', 'bmane', '4ogre', 'serpina', 'dragons_lair', 'gunnar', 'hargamesh', 'ironclad', 'krugnug', 'maraak', 'thaltherda', 'zugen', 'nereidon', 'mestr_rekkr_rematch', 'ghostly_alchemist', 'master_ninja_bakku','valtrias','bad_blood'],
  3086. medium: ['alice', 'erakka_sak', 'grimsly', '3dawg', 'scorp', 'nidhogg', 'tomb_gargoyle', 'squid', 'tisiphone', 'zombiehorde', 'baroness', 'hurkus', 'gulkinari', 'korxun', 'drunken_ragunt', 'shadow', 'rudaru_the_axe_master','doppelganger'],
  3087. large: ['ogre', 'batman', 'hydra', 'kang', 'leonine_watcher', 'lurker', 'rift', 'stein', 'wexxa', 'teremarthu', 'zralkthalat', 'malleus', 'verkiteia', 'drulcharus', 'gigantomachy', 'green_killers', 'yule_present_bearer','clockwork_giant'],
  3088. epic: ['bogstench', 'centurion_marius', 'drag', 'tainted', 'guilbert', 'pumpkin', 'jacksrevenge1', 'mesyra', 'nimrod', 'phaedra', 'sircai', 'sisters', 'ulfrik', 'frogmen_assassins', 'burbata', 'yydians_sanctuary', 'grundus', 'shaar', 'tuxargus', 'nylatrix', 'rannveig', 'valley_of_death', 'murgrux_the_mangler', 'marble_colossus', 'drakes_fire_elemental'],
  3089. colossal: ['bellarius', 'caracalla', 'kalaxia', 'tyranthius', 'mardachus', 'nalagarst', 'tenebra', 'valanazes', 'siculus', 'ruzzik', 'cannibal_barbarians', 'vortex_abomination', 'xerkara', 'keron', 'clockwork_dragon', 'krxunara', 'hellemental', 'kanehuar_yachu', 'karkata', 'thratus_abomination', 'way_warden', 'faetouched_dragon'],
  3090. gigantic: ['imryx', 'trekex', 'gataalli_huxac', 'kessov_fort', 'corrupted_wilds','draconic_dreams','horthania_stam','jormungan_the_sea_storm_stam'],
  3091. glyph: ['maraak', 'erakka_sak', 'wexxa', 'guilbert', 'bellarius'],
  3092. goblin: ['master_ninja_bakku', 'green_killers'],
  3093. citadel: ['thaltherda', 'hurkus', 'malleus', 'yydians_sanctuary', 'clockwork_dragon', 'krxunara', 'karkata', 'corrupted_wilds', 'marble_colossus'],
  3094. festival: ['vortex_abomination', 'drunken_ragunt', 'mestr_rekkr_rematch', 'valley_of_death', 'green_killers', 'murgrux_the_mangler'],
  3095. aquatic: ['dirthax', 'frogmen_assassins', 'lurker', 'nidhogg', 'crabshark', 'squid', 'thaltherda', 'nereidon', 'krxunara', 'trekex', 'paracoprion', 'bog_bodies','karkata','jormungan_the_sea_storm_stam'],
  3096. beastman: ['bmane', 'burbata', 'frogmen_assassins', 'batman', 'war_boar', 'hargamesh', 'hurkus', 'krugnug', 'malleus', 'scorp', 'ruzzik', 'squid', 'korxun', 'shaar', 'nereidon', 'drulcharus', 'trekex'],
  3097. beasts: ['lurker', 'rhino', '3dawg', 'nidhogg', 'hydra', 'kang', 'wexxa', 'karkata', 'nrlux', 'spider', 'basilisk', 'chimera', 'doomglare', 'roc', 'crabshark', 'dirthax', 'nrlux', 'paracoprion', 'corrupted_wilds'],
  3098. bludheim: ['gunnar', 'nidhogg', 'kang', 'ulfrik', 'kalaxia'],
  3099. colosseum: ['gladiators', 'serpina', 'crabshark', 'tisiphone', 'chimera', 'green_killers', 'marble_colossus'],
  3100. construct: ['cedric', 'erakka_sak', 'giantgolem', 'leonine_watcher', 'tomb_gargoyle', 'stein', 'yydians_sanctuary', 'clockwork_dragon', 'clockwork_giant', 'thratus_abomination', 'marble_colossus'],
  3101. demon: ['apoc_demon', '3dawg', 'tyranthius', 'lunacy', 'salome', 'sircai', 'blobmonster', 'malchar', 'zralkthalat', 'krxunara', 'adrastos', 'hellemental','valtrias'],
  3102. dragon: ['bellarius', 'corrupterebus', 'dragons_lair', 'echidna', 'drag', 'kalaxia', 'krykagrius', 'mardachus', 'mesyra', 'nalagarst', 'nimrod', 'phaedra', 'rhalmarius_the_despoiler', 'tainted', 'tenebra', 'thaltherda', 'tisiphone', 'grundus', 'valanazes', 'verkiteia', 'winter_kessov', 'xerkara', 'nereidon', 'drulcharus', 'keron', 'tuxargus', 'nylatrix', 'clockwork_dragon', 'imryx', 'draconic_dreams', 'horthania_stam', 'jormungan_the_sea_storm_stam', 'drakes_fire_elemental', 'faetouched_dragon'],
  3103. giant: ['gigantomachy', 'gataalli_huxac', 'kanehuar_yachu','clockwork_giant'],
  3104. human: ['agony', 'rhino', 'gladiators', 'baroness', 'warewolfpack', 'alice', 'cannibal_barbarians', 'guilbert', 'gunnar', 'pumpkin', 'jacksrevenge1', 'lunacy', 'slaughterers', 'ulfrik', 'mestr_rekkr_rematch', 'rannveig', 'adrastos', 'legion_of_darkness', 'yule_present_bearer', 'bad_blood'],
  3105. magical: ['djinn', 'grimsly', 'hargamesh', 'fairy_prince', 'rift', 'sisters', 'vortex_abomination', 'grundus', 'shadow', 'bog_bodies', 'corrupted_wilds','way_warden', 'doppelganger', 'drakes_fire_elemental', 'faetouched_dragon'],
  3106. ogre: ['ogre', '4ogre', 'felendis', 'zugen', 'korxun', 'drunken_ragunt', 'valley_of_death', 'murgrux_the_mangler'],
  3107. orc: ['darhednal', 'rudaru_the_axe_master', 'green_killers'],
  3108. qwiladrian: ['gulkinari', 'teremarthu', 'vortex_abomination'],
  3109. ryndor: ['bmane', '3dawg', 'hydra', 'sircai', 'tyranthius'],
  3110. siege: ['echidna', 'ulfrik', 'yydians_sanctuary', 'drunken_ragunt', 'kessov_fort'],
  3111. undead: ['agony', 'bogstench', 'serpina', 'ironclad', 'malleus', 'nalagarst', 'stein', 'siculus', 'zombiehorde', 'caracalla', 'centurion_marius', 'ghostly_alchemist'],
  3112. underground: ['maraak', 'erakka_sak', 'wexxa', 'guilbert', 'bellarius', 'spider', 'tomb_gargoyle', 'leonine_watcher', 'centurion_marius', 'caracalla', 'dragons_lair', 'kang', '3dawg', 'lurker', 'salome', 'stein', 'imryx']
  3113. },
  3114. raids: {
  3115. adrastos: {name: 'Adrastos of the Kavala ', shortname: 'Adrastos', id: 'adrastos', type: 'Human, Demon', stat: 'H', size: 101, nd: 5, duration: 192, health: [5000000000, 6250000000, 8750000000, 10000000000, 0, 0], lt: ['keron', 'keron', 'keron', 'keron']},
  3116. agony: {name: 'Agony', shortname: 'Agony', id: 'agony', type: 'Undead, Human', stat: 'H', size: 101, nd: 5, duration: 168, health: [700000000, 875000000, 1120000000, 1400000000, 0, 0]},
  3117. apoc_demon: {name: 'Apocolocyntosised Demon', shortname: 'Apoc', id: 'apoc_demon', type: 'Demon', stat: 'H', size: 50, nd: 3, duration: 144, health: [500000000, 750000000, 1000000000, 2000000000, 0, 0], lt: ['apoc', 'apoc', 'apoc', 'apoc']},
  3118. djinn: {name: 'Al-Azab', shortname: 'Azab', id: 'djinn', type: 'Magical Creature', stat: 'H', size: 100, nd: 4, duration: 168, health: [55000000, 68750000, 88000000, 110000000, 0, 0]},
  3119. spider: {name: 'Arachna', shortname: 'Arachna', id: 'spider', type: 'Underground, Beast', stat: 'H', size: 50, nd: 3, duration: 144, health: [22000000, 27500000, 35200000, 44000000, 0, 0]},
  3120. rhino: {name: 'Ataxes', shortname: 'Ataxes', id: 'rhino', type: 'Human, Beast', stat: 'S', size: 10, nd: 2, duration: 120, health: [2000000, 2500000, 3200000, 4000000, 0, 0]},
  3121. gladiators: {name: 'Batiatus Gladiators ', shortname: 'Gladiators', id: 'gladiators', type: 'Colosseum, Human', stat: 'H', size: 10, nd: 2, duration: 120, health: [12000000, 15000000, 19200000, 24000000, 0, 0]},
  3122. bellarius: {name: 'Bellarius the Guardian', shortname: 'Bellarius', id: 'bellarius', type: 'Dragon, Underground', stat: 'S', size: 500, nd: 6, duration: 96, health: [900000000, 1125000000, 1440000000, 1800000000, 0, 0]},
  3123. bad_blood: {name: 'Bad Blood', shortname: 'Bad Blood', id: 'bad_blood', type: 'Human', stat: 'S', size:30, nd:4, duration:48, health: [8000000000,16000000000,24000000000,32000000000,0,0], lt: ['badb','badb','badb','badb']},
  3124. baroness: {name: 'The Baroness', shortname: 'Baroness', id: 'baroness', type: 'Human', stat: 'S', size: 50, nd: 3, duration: 60, health: [68000000, 85000000, 108800000, 136000000, 0, 0]},
  3125. werewolfpack: {name: 'The Black Moon Pack', shortname: 'Black Moon', id: 'werewolfpack', type: 'Human', stat: 'H', size: 50, nd: 3, duration: 144, health: [135000000, 168750000, 216000000, 270000000, 0, 0]},
  3126. alice: {name: 'Bloody Alice', shortname: 'Alice', id: 'alice', type: 'Human', stat: 'S', size: 50, nd: 3, duration: 120, health: [15000000, 18750000, 24000000, 30000000, 0, 0]},
  3127. bog_bodies: {name: 'The Bog Bodies', shortname: 'Bog Bodies', id: 'bog_bodies', type: 'Magical Creature, Aquatic', stat: 'H', size:101, nd:5, duration:192, health: [3750000000,7500000000,11250000000,15000000000,0,0], lt: ['keron', 'keron', 'keron', 'keron']},
  3128. bogstench: {name: 'Bogstench', shortname: 'Bogstench', id: 'bogstench', type: 'Undead', stat: 'S', size: 250, nd: 5, duration: 96, health: [450000000, 562500000, 720000000, 900000000, 0, 0]},
  3129. '4ogre': {name: 'Briareus the Butcher', shortname: 'Briareus', id: '4ogre', type: 'Ogre', stat: 'S', size: 10, nd: 2, duration: 72, health: [4500000, 5625000, 7200000, 9000000, 0, 0]},
  3130. bmane: {name: 'Bloodmane', shortname: 'Bloodmane', id: 'bmane', type: 'Beastman, Ryndor', stat: 'S', size: 10, nd: 2, duration: 72, health: [7000000, 8750000, 11200000, 14000000, 0, 0]},
  3131. burbata: {name: 'Burbata the Spine-Crusher', shortname: 'Burbata', id: 'burbata', type: 'Beastman', stat: 'S', size: 250, nd: 5, duration: 96, health: [1000000000, 2000000000, 3500000000, 5000000000, 0, 0], lt: ['z10', 'z10', 'z10', 'z10']},
  3132. cannibal_barbarians: {name: 'Cannibal Barbarians', shortname: 'Cannibals', id: 'cannibal_barbarians', type: 'Human', stat: 'S', size: 500, nd: 6, duration: 128, health: [60000000000, 90000000000, 180000000000, 240000000000, 0, 0], lt: ['canib', 'canib', 'canib', 'canib']},
  3133. cedric: {name: 'Cedric the Smashable', shortname: 'Cedric', id: 'cedric', type: 'Construct', stat: 'ESH', size: 90000, nd: 0, duration: 24, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3134. caracalla: {name: 'Caracalla', shortname: 'Caracalla', id: 'caracalla', type: 'Undead, Underground', stat: 'S', size: 500, nd: 6, duration: 128, health: [50000000000, 75000000000, 150000000000, 200000000000, 0, 0], lt: ['cara', 'cara', 'cara', 'cara']},
  3135. harpy: {name: 'Celeano', shortname: 'Celeano', id: 'harpy', type: '', stat: 'H', size: 10, nd: 2, duration: 120, health: [3000000, 3750000, 4800000, 6000000, 0, 0]},
  3136. centurion_marius: {name: 'Centurion Marius', shortname: 'Marius', id: 'centurion_marius', type: 'Undead, Underground', stat: 'S', size: 250, nd: 5, duration: 96, health: [10000000000, 12000000000, 16000000000, 40000000000, 0, 0], lt: ['z10', 'z10', 'z10', 'z10']},
  3137. kobold: {name: 'Chieftain Horgrak', shortname: 'Horgrak', id: 'kobold', type: '', stat: 'S', size: 10, nd: 2, duration: 168, health: [150000, 187500, 240000, 300000, 0, 0]},
  3138. clockwork_dragon: {name: 'Clockwork Dragon', shortname: 'Clock Dragon', id: 'clockwork_dragon', type: 'Construct, Dragon', stat: 'S', size: 500, nd: 6, duration: 128, health: [70000000000, 140000000000, 210000000000, 280000000000], lt: ['clock', 'clock', 'clock', 'clock']},
  3139. clockwork_giant: {name: 'Clockwork Giant',shortname: 'Clockwork Giant',id: 'clockwork_giant', type: 'Construct, Giant', stat: 'H', size:100, nd:4, duration:12, health: [5000000000,10000000000,15000000000,20000000000,0,0], lt: ['cwg','cwg','cwg','cwg']},
  3140. corrupterebus: {name: 'Corrupted Erebus', shortname: 'Cbus', id: 'corrupterebus', type: 'Dragon', stat: 'ESH', size: 90000, nd: 0, duration: 96, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3141. corrupted_wilds: {name: 'Corrupted Wilds',shortname: 'Corrupted Wilds',id: 'corrupted_wilds', type: 'Magical Creature, Beast', stat: 'S', size:800, nd:6, duration:128, health: [325000000000,650000000000,975000000000,1300000000000,0,0], lt: ['wlds','wlds','wlds','wlds']},
  3142. serpina: {name: 'Countess Serpina', shortname: 'Serpina', id: 'serpina', type: 'Colosseum, Undead', stat: 'E', size: 15, nd: 2, duration: 5, health: [75000000, 112500000, 150000000, 187500000, 0, 0]},
  3143. darhednal: {name: 'Dar\'Hed\'Nal', shortname: 'Dar\'Hed\'Nal', id: 'darhednal', type: 'Orc', stat: 'H', size: 50, nd: 3, duration: 144, health: [500000000, 1000000000, 1500000000, 2000000000, 0, 0], lt: ['keron', 'keron', 'keron', 'keron']},
  3144. basilisk: {name: 'Deathglare', shortname: 'Deathglare', id: 'basilisk', type: 'Beast', stat: 'H', size: 50, nd: 3, duration: 144, health: [45000000, 56250000, 72000000, 90000000, 0, 0]},
  3145. dirthax: {name: 'Dirthax', shortname: 'Dirthax', id: 'dirthax', type: 'Aquatic, Beast', stat: 'H', size: 100, nd: 4, duration: 168, health: [550000000, 687500000, 880000000, 1100000000, 0, 0]},
  3146. doomglare: {name: 'Doomglare', shortname: 'Doomglare', id: 'doomglare', type: 'Beast', stat: 'H', size: 100, nd: 4, duration: 12, health: [500000000, 1250000000, 2000000000, 3000000000, 0, 0], lt: ['keron', 'keron', 'keron', 'keron']},
  3147. doppelganger: {name: 'Doppelganger', shortname: 'Doppelganger', id: 'doppelganger', type: 'Magical Creature', stat: 'S', size:50, nd:5, duration:60, health: [12000000000,24000000000,36000000000,48000000000,0,0], lt: ['dopp','dopp','dopp','dopp']},
  3148. draconic_dreams: {name: 'Draconic Dreams', shortname: 'D. Dreams',id: 'draconic_dreams', type: 'Dragon', stat: 'S', size:800, nd:6, duration:128, health: [500000000000,1000000000000,1500000000000,2000000000000,0,0], lt: ['drac','drac','drac','drac']},
  3149. dragons_lair: {name: 'Dragons Lair', shortname: 'Lair', id: 'dragons_lair', type: 'Dragon, Underground', stat: 'S', size: 13, nd: 2, duration: 5, health: [100000000, 500000000, 1000000000, 1500000000, 0, 0], lt: ['nDl', 'hDl', 'lDl', 'nmDl']},
  3150. drakes_fire_elemental: {name: 'Drake\'s Fire Elemental', shortname: 'Fire Elemental', id: 'drakes_fire_elemental', type: 'Magical Creature, Dragon', stat: 'H', size:50, nd:5, duration:48, health: [12000000000,16000000000,20000000000,24000000000,0,0], lt: ['fel','fel','fel','fel']},
  3151. drulcharus: {name: 'Drulcharus', shortname: 'Drulcharus', id: 'drulcharus', type: 'Dragon, Beastman', stat: 'S', size: 100, nd: 5, duration: 72, health: [10000000000, 15000000000, 20000000000, 25000000000, 0, 0], lt: ['z15hi', 'z15hi', 'z15hi', 'z15hi']},
  3152. drunken_ragunt: {name: 'Drunken Ragunt', shortname: 'Ragunt', id: 'drunken_ragunt', type: 'Siege, Ogre', stat: 'S', size: 50, nd: 5, duration: 60, health: [8500000000, 14450000000, 18700000000, 25500000000, 0, 0], lt: ['rag', 'rag', 'rag', 'rag']},
  3153. echidna: {name: 'Echidna', shortname: 'Echidna', id: 'echidna', type: 'Dragon, Siege', stat: 'ESH', size: 90000, nd: 0, duration: 96, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3154. kessov_fort: {name: 'Engines of War', shortname: 'Engines of War', id: 'kessov_fort', type: 'Siege', stat: 'S', size: 800, nd: 6, duration: 128, health: [300000000000, 600000000000, 900000000000, 1200000000000, 0, 0], lt: ['eow', 'eow', 'eow', 'eow']},
  3155. erakka_sak: {name: 'Erakka-Sak', shortname: 'Erakka-Sak', id: 'erakka_sak', type: 'Underground, Construct', stat: 'S', size: 50, nd: 3, duration: 60, health: [62000000, 77500000, 99200000, 124000000, 0, 0]},
  3156. giantgolem: {name: 'Euphronios', shortname: 'Euphronios', id: 'giantgolem', type: 'Construct', stat: 'H', size: 101, nd: 5, duration: 168, health: [450000000, 562500000, 720000000, 900000000, 0, 0]},
  3157. echthros: {name: 'Echthros', shortname: 'Echty', id: 'echthros', type: '', stat: 'ESH', size: 90000, nd: 2, duration: 96, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3158. drag: {name: 'Erebus the Black', shortname: 'Erebus', id: 'drag', type: 'Dragon', stat: 'S', size: 250, nd: 5, duration: 168, health: [150000000, 187500000, 240000000, 300000000, 0, 0]},
  3159. faetouched_dragon: {name: 'Faetouched Dragon',shortname: 'Fae Dragon',id: 'faetouched_dragon', type: 'Magical Creature, Dragon', stat: 'H', size:100, nd:6, duration:48, health: [25000000000,33000000000,41000000000,50000000000,0,0], lt: ['fae','fae','fae','fae']},
  3160. frogmen_assassins: {name: 'Frog-Men Assassins', shortname: 'Frog-Men', id: 'frogmen_assassins', type: 'Beastman, Aquatic', stat: 'S', size: 250, nd: 5, duration: 96, health: [16000000000, 24000000000, 32000000000, 64000000000, 0, 0], lt: ['cara', 'cara', 'cara', 'cara']},
  3161. felendis: {name: 'Felendis & Shaoquin', shortname: 'Banhammer', id: 'felendis', type: 'Ogre', stat: 'H', size: 100, nd: 4, duration: 168, health: [441823718, 549238221, 707842125, 888007007, 0, 0]},
  3162. gataalli_huxac: {name: 'Gataalli Huxac', shortname: 'Gataalli', id: 'gataalli_huxac', type: 'Giant', stat: 'S', size: 800, nd: 6, duration: 128, health: [375000000000, 750000000000, 1125000000000, 1500000000000], lt: ['gat', 'gat', 'gat', 'gat']},
  3163. ogre: {name: 'General Grune', shortname: 'Grune', id: 'ogre', type: 'Ogre', stat: 'S', size: 100, nd: 4, duration: 172, health: [20000000, 25000000, 32000000, 40000000, 0, 0]},
  3164. korxun: {name: 'General Korxun', shortname: 'Korxun', id: 'korxun', type: 'Beastman, Ogre', stat: 'S', size: 50, nd: 4, duration: 60, health: [8000000000, 12000000000, 16000000000, 20000000000, 0, 0], lt: ['z15lo', 'z15lo', 'z15lo', 'z15lo']},
  3165. ghostly_alchemist: {name: 'Ghostly Alchemist', shortname: 'Alchemist', id: 'ghostly_alchemist', type: 'Undead', stat: 'S', size: 25, nd: 4, duration: 48, health: [5000000000, 10000000000, 15000000000, 20000000000], lt: ['alch', 'alch', 'alch', 'alch']},
  3166. dreadbloom: {name: 'Giant Dreadbloom', shortname: 'Dreadbloom', id: 'dreadbloom', type: '', stat: 'H', size: 101, nd: 5, duration: 192, health: [900000000, 1125000000, 1440000000, 1800000000, 0, 0]},
  3167. gigantomachy: {name: 'Gigantomachy', shortname: 'Gigantomachy', id: 'gigantomachy', type: 'Giant', stat: 'S', size: 100, nd: 5, duration: 72, health: [25000000000, 50000000000, 75000000000, 100000000000], lt: ['gig', 'gig', 'gig', 'gig']},
  3168. batman: {name: 'Gravlok the Night-Hunter', shortname: 'Gravlok', id: 'batman', type: 'Beastman', stat: 'S', size: 100, nd: 4, duration: 72, health: [50000000, 62500000, 80000000, 100000000, 0, 0]},
  3169. green_killers: {name: 'Green Killers', shortname: 'Green Killers', id: 'green_killers', type: 'Orc, Goblin, Festival, Colosseum', stat: 'S', size: 100, nd: 4, duration: 48, health: [12500000000, 25000000000, 37500000000, 50000000000, 0, 0], lt: ['gk', 'gk', 'gk', 'gk']},
  3170. evilgnome: {name: 'Groblar Deathcap', shortname: 'Groblar', id: 'evilgnome', type: '', stat: 'H', size: 10, nd: 2, duration: 120, health: [6000000, 7500000, 9600000, 12000000, 0, 0]},
  3171. grundus: {name: 'Grundus', shortname: 'Grundus', id: 'grundus', type: 'Dragon, Magical Creature', stat: 'H', size: 101, nd: 5, duration: 72, health: [800000000, 1600000000, 4000000000, 12000000000]},
  3172. guilbert: {name: 'Guilbert the Mad', shortname: 'Guilbert', id: 'guilbert', type: 'Underground, Human', stat: 'S', size: 250, nd: 5, duration: 96, health: [550000000, 687500000, 880000000, 1100000000, 0, 0]},
  3173. gulkinari: {name: 'Gulkinari', shortname: 'Gulkinari', id: 'gulkinari', type: 'Qwiladrian', stat: 'S', size: 50, nd: 4, duration: 60, health: [7500000000, 9375000000, 12000000000, 15000000000, 0, 0], lt: ['gulk', 'gulk', 'gulk', 'gulk']},
  3174. gunnar: {name: 'Gunnar the Berserk', shortname: 'Gunnar', id: 'gunnar', type: 'Bludheim, Human', stat: 'S', size: 10, nd: 2, duration: 48, health: [12000000, 15000000, 19200000, 24000000, 0, 0]},
  3175. war_boar: {name: 'Hammer', shortname: 'Hammer', id: 'war_boar', type: 'Beastman', stat: 'H', size: 50, nd: 3, duration: 144, health: [220000000, 275000000, 352000000, 440000000, 0, 0]},
  3176. hargamesh: {name: 'Hargamesh', shortname: 'Hargamesh', id: 'hargamesh', type: 'Beastman, Magical Creature', stat: 'S', size: 10, nd: 2, duration: 48, health: [18000000, 22500000, 28800000, 36000000, 0, 0]},
  3177. grimsly: {name: 'Headmaster Grimsly', shortname: 'Grimsly', id: 'grimsly', type: 'Magical Creature', stat: 'S', size: 50, nd: 3, duration: 60, health: [72000000, 90000000, 115200000, 144000000, 0, 0]},
  3178. hellemental: {name: 'Hellemental', shortname: 'Hellemental', id: 'hellemental', type: 'Demon', stat: 'S', size: 500, nd: 6, duration: 128, health: [75000000000, 150000000000, 225000000000, 300000000000, 0, 0], lt: ['hell', 'hell', 'hell', 'hell']},
  3179. horthania_stam: {name: 'Horthania the Grey', shortname: 'Horthania', id: 'horthania_stam', type: 'Dragon', stat: 'S', size:800, nd:6, duration:128, health: [500000000000,1000000000000,1500000000000,2000000000000,0,0], lt: ['hort','hort','hort','hort']},
  3180. hurkus: {name: 'Hurkus the Eviscerator', shortname: 'Hurkus', id: 'hurkus', type: 'Beastman', stat: 'S', size: 50, nd: 4, duration: 60, health: [2812500000, 4218750000, 5625000000, 11250000000, 0, 0], lt: ['hurk', 'hurk', 'hurk', 'hurk']},
  3181. hydra: {name: 'Hydra', shortname: 'Hydra', id: 'hydra', type: 'Ryndor, Beast', stat: 'S', size: 100, nd: 4, duration: 72, health: [65000000, 81250000, 104000000, 130000000, 0, 0]},
  3182. imryx: {name: 'Imryx the Incinerator', shortname: 'Imryx', id: 'imryx', type: 'Underground, Dragon', stat: 'S', size: 800, nd: 6, duration: 128, health: [180000000000, 360000000000, 540000000000, 720000000000, 0, 0], lt: ['imx', 'imx', 'imx', 'imx']},
  3183. ironclad: {name: 'Ironclad', shortname: 'Ironclad', id: 'ironclad', type: 'Undead', stat: 'S', size: 10, nd: 2, duration: 48, health: [10000000, 12500000, 16000000, 20000000, 0, 0]}, //0.5/0.625/0.8/1
  3184. pumpkin: {name: 'Jack', shortname: 'Jack', id: 'pumpkin', type: 'Human', stat: 'S', size: 250, nd: 6, duration: 48, health: [1000000000, 1500000000, 2000000000, 3000000000], lt: ['njack', 'hjack', 'ljack', 'nmjack']},
  3185. jacksrevenge1: {name: 'Jack\'s Revenge', shortname: 'Revenge', id: 'jacksrevenge1', type: 'Human', stat: 'S', size: 250, nd: 6, duration: 48, health: [5000000000, 7500000000, 10000000000, 15000000000], lt: ['njr', 'hjr', 'ljr', 'nmjr']},
  3186. jormungan_the_sea_storm_stam: {name: 'Jormungan the Sea-Storm', shortname: 'Jormungan', id: 'jormungan_the_sea_storm_stam', type: 'Dragon, Aquatic', stat: 'S', size:800, nd:6, duration:128, health: [750000000000,1500000000000,2250000000000,3000000000000,0,0], lt: ['jorm','jorm','jorm','jorm']},
  3187. kang: {name: 'Kang-Gsod', shortname: 'Kang', id: 'kang', type: 'Bludheim, Underground, Beast', stat: 'S', size: 100, nd: 4, duration: 72, health: [95000000, 118750000, 152000000, 190000000, 0, 0]},
  3188. '3dawg': {name: 'Kerberos', shortname: 'Kerberos', id: '3dawg', type: 'Demon, Underground, Ryndor, Beast', stat: 'S', size: 50, nd: 3, duration: 72, health: [35000000, 43750000, 56000000, 70000000, 0, 0]},
  3189. keron: {name: 'Keron the Sky-Shaker', shortname: 'Keron', id: 'keron', type: 'Dragon', stat: 'H', size: 101, nd: 6, duration: 192, health: [15000000000, 18750000000, 24000000000, 30000000000, 0, 0], lt: ['keron', 'keron', 'keron', 'keron']},
  3190. kessovtowers: {name: 'Kessov Towers', shortname: 'Towers', id: 'kessovtowers', type: 'Siege', stat: 'ESH', size: 90000, nd: 0, duration: 120, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3191. kessovtower: {name: 'Treachery and the Tower', shortname: 'Treachery', id: 'kessovtower', type: 'Siege', stat: 'ESH', size: 90000, nd: 0, duration: 24, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3192. kessovforts: {name: 'Kessov Forts', shortname: 'Forts', id: 'kessovforts', type: 'Siege', stat: 'ESH', size: 90000, nd: 0, duration: 120, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3193. kessovcastle: {name: 'Kessov Castle', shortname: 'Castle', id: 'kessovcastle', type: 'Siege', stat: 'ESH', size: 90000, nd: 0, duration: 144, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3194. kalaxia: {name: 'Kalaxia the Far-Seer', shortname: 'Kalaxia', id: 'kalaxia', type: 'Dragon, Bludheim', stat: 'S', size: 500, nd: 6, duration: 96, health: [800000000, 1000000000, 1280000000, 1600000000, 0, 0]},
  3195. kanehuar_yachu: {name: 'Kanehuar Yachu', shortname: 'Kanehuar Yachu', id: 'kanehuar_yachu', type: 'Giant', stat: 'S', size: 500, nd: 6, duration: 128, health: [100000000000, 200000000000, 300000000000, 400000000000, 0, 0], lt: ['kane', 'kane', 'kane', 'kane']},
  3196. karkata: {name: 'Karkata', shortname: 'Karkata',id: 'karkata', type: 'Aquatic, Beast', stat: 'S', size:500, nd:6, duration:128, health: [95000000000,190000000000,285000000000,380000000000,0,0], lt: ['kark','kark','kark','kark']},
  3197. krugnug: {name: 'Krugnug', shortname: 'Krugnug', id: 'krugnug', type: 'Beastman', stat: 'S', size: 25, nd: 4, duration: 48, health: [1000000000, 1500000000, 2000000000, 4000000000, 0, 0], lt: ['z10', 'z10', 'z10', 'z10']},
  3198. krxunara: {name: 'Kr\'xunara of the Bloody Waves', shortname: 'Kr\'xunara', id: 'krxunara', type: 'Aquatic, Demon', stat: 'S', size: 500, nd: 6, duration: 128, health: [62500000000, 125000000000, 187500000000, 250000000000], lt: ['krx', 'krx', 'krx', 'krx']},
  3199. krykagrius: {name: 'Krykagrius', shortname: 'Krykagrius', id: 'krykagrius', type: 'Dragon', stat: 'ESH', size: 90000, nd: 0, duration: 72, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3200. legion_of_darkness: {name: 'Legions of Darkness', shortname: 'Darkness', id: 'legion_of_darkness', type: 'Human', stat: 'S', size: 250, nd: 5, duration: 96, health: [20000000000, 40000000000, 60000000000, 80000000000], lt: ['dark', 'dark', 'dark', 'dark']},
  3201. leonine_watcher: {name: 'Leonine', shortname: 'Leonine', id: 'leonine_watcher', type: 'Underground, Construct', stat: 'S', size: 100, nd: 5, duration: 48, health: [4000000000, 6000000000, 8000000000, 16000000000, 0, 0], lt: ['z10', 'z10', 'z10', 'z10']},
  3202. tyranthius: {name: 'Lord Tyranthius', shortname: 'Tyranthius', id: 'tyranthius', type: 'Demon, Ryndor', stat: 'S', size: 500, nd: 6, duration: 168, health: [600000000, 750000000, 960000000, 1200000000, 0, 0]},
  3203. lunacy: {name: 'Lunatics', shortname: 'Lunatics', id: 'lunacy', type: 'Demon, Human', stat: 'H', size: 50, nd: 3, duration: 144, health: [180000000, 225000000, 288000000, 360000000, 0, 0]},
  3204. lurker: {name: 'Lurking Horror', shortname: 'Lurking Horror', id: 'lurker', type: 'Underground, Aquatic, Beast', stat: 'S', size: 100, nd: 4, duration: 120, health: [35000000, 43750000, 56000000, 70000000, 0, 0]},
  3205. malleus: {name: 'Malleus Vivorum', shortname: 'Malleus', id: 'malleus', type: 'Beastman, Undead', stat: 'S', size: 100, nd: 5, duration: 72, health: [8000000000, 12000000000, 16000000000, 20000000000, 0, 0], lt: ['mall', 'mall', 'mall', 'mall']},
  3206. maraak: {name: 'Maraak the Impaler', shortname: 'Maraak', id: 'maraak', type: 'Underground', stat: 'S', size: 10, nd: 2, duration: 48, health: [15000000, 18750000, 24000000, 30000000, 0, 0]},
  3207. marble_colossus: {name: 'Marble Colossus', shortname: 'Colossus', id: 'marble_colossus', type: 'Construct, Colosseum', stat: 'S', size:250, nd:6, duration:84, health: [30000000000,60000000000,90000000000,120000000000,0,0], lt: ['marb','marb','marb','marb']},
  3208. mardachus: {name: 'Mardachus the Destroyer', shortname: 'Mardachus', id: 'mardachus', type: 'Dragon', stat: 'S', size: 500, nd: 6, duration: 96, health: [1100000000, 1375000000, 1760000000, 2200000000, 0, 0]},
  3209. master_ninja_bakku: {name: 'Master Ninja Bakku', shortname: 'Bakku', id: 'master_ninja_bakku', type: 'Goblin', stat: 'S', size: 25, nd: 4, duration: 48, health: [5500000000, 11000000000, 16500000000, 22000000000, 0, 0], lt: ['bak', 'bak', 'bak', 'bak']},
  3210. scorp: {name: 'Mazalu', shortname: 'Mazalu', id: 'scorp', type: 'Beastman', stat: 'S', size: 50, nd: 3, duration: 168, health: [5000000, 6250000, 8000000, 10000000, 0, 0]},
  3211. mestr_rekkr_rematch: {name: 'Mestr Rekkr Rematch', shortname: 'Rekkr II', id: 'mestr_rekkr_rematch', type: 'Human', stat: 'S', size: 25, nd: 4, duration: 48, health: [6000000000, 9000000000, 13200000000, 18000000000, 0, 0], lt: ['rekkr', 'rekkr', 'rekkr', 'rekkr']},
  3212. mesyra: {name: 'Mesyra the Watcher', shortname: 'Mesyra', id: 'mesyra', type: 'Dragon', stat: 'S', size: 250, nd: 5, duration: 96, health: [1000000000, 1250000000, 1600000000, 2000000000, 0, 0]},
  3213. murgrux_the_mangler: {name: 'Murgrux the Mangler', shortname: 'Murgrux', id: 'murgrux_the_mangler', type: 'Ogre, Festival', stat: 'S', size: 250, nd: 5, duration: 48, health: [25000000000, 50000000000, 75000000000, 100000000000, 0, 0], lt: ['murg', 'murg', 'murg', 'murg']},
  3214. nalagarst: {name: 'Nalagarst', shortname: 'Nalagarst', id: 'nalagarst', type: 'Dragon, Undead', stat: 'S', size: 500, nd: 6, duration: 98, health: [700000000, 875000000, 1120000000, 1400000000, 0, 0]},
  3215. nereidon: {name: 'Nereidon the Sea Slayer', shortname: 'Nereidon', id: 'nereidon', type: 'Dragon, Beastman, Aquatic', stat: 'S', size: 30, nd: 3, duration: 48, health: [6000000000, 9000000000, 12000000000, 15000000000, 0, 0], lt: ['z15lo', 'z15lo', 'z15lo', 'z15lo']},
  3216. nidhogg: {name: 'Nidhogg', shortname: 'Nidhogg', id: 'nidhogg', type: 'Bludheim, Aquatic, Beast', stat: 'S', size: 50, nd: 3, duration: 60, health: [52000000, 65000000, 83200000, 104000000, 0, 0]},
  3217. nimrod: {name: 'Nimrod the Hunter', shortname: 'Nimrod', id: 'nimrod', type: 'Dragon', stat: 'S', size: 250, nd: 5, duration: 96, health: [1200000000, 1500000000, 1920000000, 2400000000, 0, 0]},
  3218. nylatrix: {name: 'Nylatrix', shortname: 'Nylatrix', id: 'nylatrix', type: 'Dragon', stat: 'H', size: 101, nd: 5, duration: 192, health: [2000000000, 2500000000, 3400000000, 4000000000, 0, 0], lt: ['nker', 'hker', 'lker', 'nmker']},
  3219. paracoprion: {name: 'Paracoprion', shortname: 'Paracoprion', id: 'paracoprion', type: 'Aquatic, Beast', stat: 'H', size:101, nd:5, duration:192, health: [2000000000,4000000000,6000000000,8000000000,0,0], lt: ['keron', 'keron', 'keron', 'keron']},
  3220. phaedra: {name: 'Phaedra the Deceiver', shortname: 'Phaedra', id: 'phaedra', type: 'Dragon', stat: 'S', size: 250, nd: 5, duration: 96, health: [1400000000, 1750000000, 2240000000, 2800000000, 0, 0]},
  3221. fairy_prince: {name: 'Prince Obyron', shortname: 'Obyron', id: 'fairy_prince', type: 'Magical Creature', stat: 'H', size: 10, nd: 2, duration: 120, health: [30000000, 37500000, 48000000, 60000000, 0, 0]},
  3222. roc: {name: 'Ragetalon', shortname: 'Ragetalon', id: 'roc', type: 'Beast', stat: 'H', size: 100, nd: 4, duration: 168, health: [110000000, 137500000, 176000000, 220000000, 0, 0]},
  3223. rannveig: {name: 'Rannveig', shortname: 'Rannveig', id: 'rannveig', type: 'Human', stat: 'E', size: 250, nd: 6, duration: 128, health: [15000000000, 30000000000, 45000000000, 60000000000, 0, 0], lt: ['rann', 'rann', 'rann', 'rann']},
  3224. rhalmarius_the_despoiler: {name: 'Rhalmarius the Despoiler', shortname: 'Rhalmarius', id: 'rhalmarius_the_despoiler', type: 'Dragon', stat: 'H', size: 100, nd: 6, duration: 84, health: [500000000, 1250000000, 3125000000, 7812500000, 0, 0]},
  3225. tomb_gargoyle: {name: 'Riddler Gargoyle', shortname: 'Riddler', id: 'tomb_gargoyle', type: 'Underground, Construct', stat: 'S', size: 50, nd: 4, duration: 48, health: [2000000000, 3000000000, 4000000000, 8000000000, 0, 0], lt: ['z10', 'z10', 'z10', 'z10']},
  3226. rift: {name: 'Rift the Mauler', shortname: 'Rift', id: 'rift', type: 'Magical Creature', stat: 'S', size: 100, nd: 4, duration: 72, health: [125000000, 156250000, 200000000, 250000000, 0, 0]},
  3227. rudaru_the_axe_master: {name: 'Rudaru the Axe Master', shortname: 'Rudaru', id: 'rudaru_the_axe_master', type: 'Orc', stat: 'S', size: 50, nd: 4, duration: 48, health: [10500000000, 21000000000, 31500000000, 36750000000, 0, 0], lt: ['rud', 'rud', 'rud', 'rud']},
  3228. ruzzik: {name: 'Ruzzik the Slayer', shortname: 'Ruzzik', id: 'ruzzik', type: 'Beastman', stat: 'S', size: 500, nd: 6, duration: 128, health: [55000000000, 82500000000, 165000000000, 220000000000, 0, 0], lt: ['ruzz', 'ruzz', 'ruzz', 'ruzz']},
  3229. salome: {name: 'Salome the Seductress', shortname: 'Salome', id: 'salome', type: 'Demon, Underground', stat: 'H', size: 100, nd: 4, duration: 48, health: [666000000, 832500000, 1065600000, 1332000000, 0, 0], lt: ['nSlut', 'hSlut', 'lSlut', 'nmSlut']},
  3230. crabshark: {name: 'Scuttlegore', shortname: 'Scuttlegore', id: 'crabshark', type: 'Colosseum, Aquatic, Beast', stat: 'H', size: 100, nd: 4, duration: 168, health: [220000000, 275000000, 352000000, 440000000, 0, 0]},
  3231. squid: {name: 'Scylla', shortname: 'Scylla', id: 'squid', type: 'Beastman, Aquatic', stat: 'S', size: 50, nd: 3, duration: 72, health: [25000000, 31250000, 40000000, 50000000, 0, 0]},
  3232. shaar: {name: 'Shaar the Reaver', shortname: 'Shaar', id: 'shaar', type: 'Beastman', stat: 'S', size: 250, nd: 6, duration: 96, health: [12000000000, 24000000000, 36000000000, 60000000000, 0, 0], lt: ['z15hi', 'z15hi', 'z15hi', 'z15hi']},
  3233. shadow: {name: 'Shadow', shortname: 'Shadow', id: 'shadow', type: 'Magical Creature', stat: 'S', size: 50, nd: 5, duration: 60, health: [10000000000, 17000000000, 25000000000, 35000000000, 0, 0], lt: ['shd', 'shd', 'shd', 'shd']},
  3234. sircai: {name: 'Sir Cai', shortname: 'Sir Cai', id: 'sircai', type: 'Demon, Ryndor', stat: 'S', size: 250, nd: 5, duration: 168, health: [350000000, 437500000, 560000000, 700000000, 0, 0]},
  3235. sisters: {name: 'Sisters of the Song', shortname: 'Sisters', id: 'sisters', type: 'Magical Creature', stat: 'S', size: 250, nd: 5, duration: 96, health: [600000000, 750000000, 960000000, 1200000000, 0, 0]},
  3236. slaughterers: {name: 'Slaughterers Six', shortname: 'Slaughterers', id: 'slaughterers', type: 'Human', stat: 'H', size: 10, nd: 2, duration: 120, health: [24000000, 30000000, 38400000, 48000000, 0, 0]},
  3237. stein: {name: 'Stein', shortname: 'Stein', id: 'stein', type: 'Undead, Underground, Construct', stat: 'S', size: 100, nd: 4, duration: 72, health: [80000000, 100000000, 128000000, 160000000, 0, 0]},
  3238. siculus: {name: 'Count Siculus\' Phantom', shortname: 'Siculus', id: 'siculus', type: 'Undead', stat: 'S', size: 500, nd: 6, duration: 128, health: [850000000, 1700000000, 2975000000, 4250000000, 0, 0], lt: ['sic', 'sic', 'sic', 'sic']},
  3239. tainted: {name: 'Tainted Erebus', shortname: 'Tainted', id: 'tainted', type: 'Dragon', stat: 'S', size: 250, nd: 5, duration: 168, health: [250000000, 312500000, 400000000, 500000000, 0, 0]},
  3240. tenebra: {name: 'Tenebra Shadow Mistress', shortname: 'Tenebra', id: 'tenebra', type: 'Dragon', stat: 'S', size: 500, nd: 6, duration: 128, health: [2000000000, 2500000000, 3200000000, 4000000000, 0, 0]},
  3241. thaltherda: {name: 'Thaltherda the Sea-Slitherer', shortname: 'Thaltherda', id: 'thaltherda', type: 'Aquatic, Dragon', stat: 'S', size: 25, nd: 4, duration: 48, health: [3000000000, 4500000000, 6000000000, 7500000000, 0, 0], lt: ['nessy', 'nessy', 'nessy', 'nessy']},
  3242. thratus_abomination: {name: 'Thratu\'s Abomination',shortname: 'Abomination',id: 'thratus_abomination', type: 'Construct', stat: 'S', size:500, nd:6, duration:128, health: [90000000000,180000000000,270000000000,360000000000,0,0], lt: ['abo','abo','abo','abo']},
  3243. tisiphone: {name: 'Tisiphone the Vengeful', shortname: 'Tisiphone', id: 'tisiphone', type: 'Dragon, Colosseum', stat: 'E', size: 50, nd: 3, duration: 12, health: [500000000, 2500000000, 5000000000, 7500000000, 0, 0], lt: ['nTisi', 'hTisi', 'lTisi', 'nmTisi']},
  3244. teremarthu: {name: 'Teremarthu', shortname: 'Teremarthu', id: 'teremarthu', type: 'Qwiladrian', stat: 'S', size: 100, nd: 5, duration: 48, health: [6000000000, 9000000000, 12000000000, 24000000000, 0, 0], lt: ['z10', 'z10', 'z10', 'z10']},
  3245. chimera: {name: 'Tetrarchos', shortname: 'Tetrarchos', id: 'chimera', type: 'Colosseum, Beast', stat: 'H', size: 50, nd: 3, duration: 144, health: [90000000, 112500000, 144000000, 180000000, 0, 0]},
  3246. gorgon: {name: 'Tithrasia', shortname: 'Tithrasia', id: 'gorgon', type: '', stat: 'H', size: 10, nd: 2, duration: 120, health: [18000000, 22500000, 28800000, 36000000, 0, 0]},
  3247. trekex: {name: 'Trekex\'s Amphibious Assault', shortname: 'Trekex', id: 'trekex', type: 'Aquatic, Beastman', stat: 'S', size: 800, nd: 6, duration: 128, health: [250000000000, 500000000000, 750000000000, 1000000000000], lt: ['trex', 'trex', 'trex', 'trex']},
  3248. tuxargus: {name: 'Tuxargus', shortname: 'Tuxargus', id: 'tuxargus', type: 'Dragon', stat: 'H', size: 101, nd: 5, duration: 192, health: [2000000000, 2500000000, 3400000000, 4000000000, 0, 0], lt: ['nker', 'hker', 'lker', 'nmker']},
  3249. ulfrik: {name: 'Ulfrik', shortname: 'Ulfrik', id: 'ulfrik', type: 'Bludheim, Siege, Human', stat: 'S', size: 250, nd: 5, duration: 96, health: [500000000, 625000000, 800000000, 1000000000, 0, 0]},
  3250. valanazes: {name: 'Valanazes the Gold', shortname: 'Valanazes', id: 'valanazes', type: 'Dragon', stat: 'S', size: 500, nd: 6, duration: 128, health: [2400000000, 3000000000, 3840000000, 4800000000, 0, 0]},
  3251. valley_of_death: {name: 'Valley of Death', shortname: 'Valley of Death', id: 'valley_of_death', type: 'Ogre, Festival', stat: 'S', size: 250, nd: 5, duration: 48, health: [22000000000, 44000000000, 66000000000, 88000000000, 0, 0], lt: ['valley', 'valley', 'valley', 'valley']},
  3252. valtrias: {name: 'Valtrias', shortname: 'Valtrias', id: 'valtrias', type: 'Demon', stat: 'S', size:25, nd:4, duration:48, health: [6250000000, 12500000000, 18750000000, 25000000000, 0, 0], lt: ['val','val','val','val']},
  3253. blobmonster: {name: 'Varlachleth', shortname: 'Varlachleth', id: 'blobmonster', type: 'Demon', stat: 'H', size: 100, nd: 4, duration: 168, health: [330000000, 412500000, 528000000, 660000000, 0, 0]},
  3254. verkiteia: {name: 'Verkiteia', shortname: 'Verkiteia', id: 'verkiteia', type: 'Dragon', stat: 'S', size: 100, nd: 5, duration: 72, health: [11250000000, 14062500000, 18000000000, 22500000000, 0, 0], lt: ['verk', 'verk', 'verk', 'verk']},
  3255. vortex_abomination: {name: 'Vortex Abomination', shortname: 'Vortex', id: 'vortex_abomination', type: 'Qwiladrian, Magical Creature', stat: 'S', size: 500, nd: 6, duration: 128, health: [50000000000, 75000000000, 110000000000, 205000000000, 0, 0], lt: ['vort', 'vort', 'vort', 'vort']},
  3256. zugen: {name: 'Warlord Zugen', shortname: 'Zugen', id: 'zugen', type: 'Ogre', stat: 'S', size: 25, nd: 4, duration: 48, health: [4000000000, 6000000000, 8000000000, 10000000000, 0, 0], lt: ['zugen', 'zugen', 'zugen', 'zugen']},
  3257. way_warden: {name: 'Way Warden', shortname: 'Way Warden', id: 'way_warden', type: 'Magical Creature', stat: 'S', size:500, nd:6, duration:128, health: [115000000000,230000000000,345000000000,460000000000,0,0], lt: ['way','way','way','way']},
  3258. wexxa: {name: 'Wexxa the Worm-Tamer', shortname: 'Wexxa', id: 'wexxa', type: 'Underground, Beast', stat: 'S', size: 100, nd: 4, duration: 72, health: [110000000, 137500000, 176000000, 220000000, 0, 0]},
  3259. winter_kessov: {name: 'Blood Will Run Cold', shortname: 'Cold Blood', id: 'winter_kessov', type: 'Dragon, Siege', stat: 'ESH', size: 90000, nd: 0, duration: 290, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3260. xessus: {name: 'Xessus of the Grim Wood', shortname: 'Xessus', id: 'xessus', type: '', stat: 'H', size: 100, nd: 4, duration: 48, health: [500000000, 625000000, 800000000, 1000000000, 0, 0], lt: ['nIns', 'hIns', 'lIns', 'nmIns']},
  3261. malchar: {name: 'Malchar the Tri-Eyed', shortname: 'Malchar', id: 'malchar', type: 'Demon', stat: 'H', size: 100, nd: 4, duration: 48, health: [500000000, 625000000, 800000000, 1000000000, 0, 0], lt: ['nIns', 'hIns', 'lIns', 'nmIns']},
  3262. krasgore: {name: 'Krasgore', shortname: 'Krasgore', id: 'krasgore', type: '', stat: 'H', size: 100, nd: 4, duration: 48, health: [500000000, 625000000, 800000000, 1000000000, 0, 0], lt: ['nIns', 'hIns', 'lIns', 'nmIns']},
  3263. nrlux: {name: 'N\'rlux the Devourer', shortname: 'N\'rlux', id: 'nrlux', type: 'Giant Insect, Beast', stat: 'H', size: 100, nd: 6, duration: 48, health: [10000000000, 12500000000, 16000000000, 20000000000, 0, 0], lt: ['lux', 'lux', 'lux', 'lux']},
  3264. xerkara: {name: 'Xerkara', shortname: 'Xerkara', id: 'xerkara', type: 'Dragon', stat: 'S', size: 500, nd: 6, duration: 128, health: [65000000000, 113750000000, 143000000000, 260000000000, 0, 0], lt: ['z15hi', 'z15hi', 'z15hi', 'z15hi']},
  3265. yule_present_bearer: {name: 'Yule Present Bearer', shortname: 'Present Bearer', id: 'yule_present_bearer', type: 'Human', stat: 'S', size: 100, nd: 5, duration: 48, health: [30000000000, 60000000000, 90000000000, 120000000000, 0, 0], lt: ['yule', 'yule', 'yule', 'yule']},
  3266. yydians_sanctuary: {name: 'Yydian\'s Sanctuary', shortname: 'Yydian', id: 'yydians_sanctuary', type: 'Siege, Construct', stat: 'S', size: 250, nd: 5, duration: 96, health: [10000000000, 20000000000, 30000000000, 50000000000, 0, 0], lt: ['yyd', 'yyd', 'yyd', 'yyd']},
  3267. zombiehorde: {name: 'Zombie Horde', shortname: 'Zombies', id: 'zombiehorde', type: 'Undead', stat: 'S', size: 50, nd: 3, duration: 60, health: [45000000, 56250000, 72000000, 90000000, 0, 0]},
  3268. zralkthalat: {name: 'Z\'ralk\'thalat', shortname: 'Z\'ralk\'thalat', id: 'zralkthalat', type: 'Demon', stat: 'S', size: 100, nd: 4, duration: 72, health: [8750000000, 13125000000, 17500000000, 35000000000, 0, 0], lt: ['z10', 'z10', 'z10', 'z10']}
  3269. },
  3270.  
  3271. raidSizes: {
  3272. 10: { name: 'Small', ratios: [0.6, 0.9, 1.2, 1.6, 2.5, 3.5], enames: ['1E6T', '1E8T', '2E', '2/3E', '3E', '3/4E'] },
  3273. 13: { name: 'Small' },
  3274. 15: { name: 'Small', ratios: [0.45, 0.6, 0.755, 0.9, 1.05, 1.2, 1.35, 1.5, 1.65, 1.8, 1.95], enames: ['65D', '92D', '119D', '146D', '173D', '200D', '227D', '264D', '301D', '338D', '375D'] },
  3275. 25: { name: 'Small', ratios: [0.6, 0.9, 1.2, 1.6, 2.5, 3.5], enames: ['1E6T', '1E8T', '2E', '2/3E', '3E', '3/4E'] },
  3276. 30: { name: 'Small', ratios: [0.6, 0.9, 1.2, 1.6, 2.5, 3.5], enames: ['1E6T', '1E8T', '2E', '2/3E', '3E', '3/4E'] },
  3277. 50: { name: 'Medium', ratios: [0.7, 0.95, 2.05, 3.125, 6.75, 8.5], enames: ['1E6T', '1E8T', '2E', '2/3E', '3E', '3/4E'] },
  3278. 100: { name: 'Large', ratios: [0.9, 1.5, 2.2, 3.2, 6.5, 9.0], enames: ['1E6T', '1E8T', '2E', '2/3E', '3E', '3/4E'] },
  3279. 101: { name: 'Epic', ratios: [0.225, 0.325, 0.625, 1.775, 4.525, 10.25], enames: ['1E6T', '1E8T', '2E', '2/3E', '3E', '3/4E'] },
  3280. 250: { name: 'Epic', ratios: [0.225, 0.325, 0.625, 1.775, 4.525, 10.25], enames: ['1E6T', '1E8T', '2E', '2/3E', '3E', '3/4E'] },
  3281. 500: { name: 'Colossal', ratios: [0.45, 0, 0.65, 1.25, 2.5, 9.0], enames: ['1E6T', '1E8T', '2E', '2/3E', '3E', '3/4E'] },
  3282. 800: { name: 'Gigantic' },
  3283. 90000: { name: 'World' }
  3284. },
  3285.  
  3286. lootTiers: {
  3287. u: { tiers: ['Not yet known'], epics: [0], best: 0},
  3288. fel: { tiers: [200,300,500,750,100,1500,2000,2500,3000,4000,5000,7500,10000], epics: [8,12,16,21,25,33,42,48,54,63,71,81,90], best: 1, e: false},
  3289. fae: { tiers: [200,300,500,750,100,1500,2000,2500,3000,4000,5000,7500,10000,15000,20000], epics: [8,12,16,21,25,34,42,49,56,65,74,86,97,116,134], best: 1, e: false},
  3290. hort: { tiers: [200,300,500,1000,1500,2000,2500,3000,4000,5000,6000,7000,8000,9000,10000,12500,15000,17500,20000,25000,30000,40000,50000,60000,75000], epics: [0,1,6,13,22,32,40,48,55,65,70,74,78,86,94,98,105,110,119,126,134,149,200,237,275], best: 7, e: false},
  3291. jorm: { tiers: [200,300,500,1000,1500,2000,2500,3000,4000,5000,6000,7000,8000,9000,10000,12500,15000,17500,20000,25000,30000,40000,50000,60000,70000,80000,90000,100000], epics: [0,1,6,13,22,32,40,48,55,65,70,74,78,86,94,98,105,110,119,126,134,149,200,238,276,315,353,400], best: 7, e: false},
  3292. drac: { tiers: [1000,1500,2000,2500,3000,4000,5000,6000,7000,8000,9000,10000,12500,15000,17500,20000,25000,30000,40000,50000,60000,70000,80000,90000,100000], epics: [15,23,31,40,48,57,65,69,74,78,86,94,98,103,110,117,126,134,150,198,236,273,311,348,398], best: 4, e: false },
  3293. dopp: { tiers: [100,250,500,750,1000,1250,1500,2000,2500], epics: [1,2,7,12,18,20,25,31,35], best: 4, e: false},
  3294. badb: { tiers: [100,250,500,800,100,1250,1500,2000,2500,5000], epics: [1,2,5,10,13,17,22,26,30,49], best: 6, e: false},
  3295. way: { tiers: [100,200,300,400,500,600,700,800,880,1000,1250,1500,1750,2000,2250,2500,2750,3000,4000,5000,6000,8000,10000,12500,15000,20000,25000], epics: [3,6,7,8,10,11,13,14,15,17,21,25,29,31,37,42,45,50,54,62,70,78,85,95,106,126,136], best: 4, e: false},
  3296. marb: { tiers: [100,200,300,400,500,600,700,800,900,1000,1400,2000], epics: [2,4,6,8,10,12,14,16,18,21,32,43], best: 10, e: false},
  3297. abo: { tiers: [200,300,400,500,600,700,800,900,1000,1250,1500,1750,2000,2250,2500,2750,3000,4000,5000,6000,8000,10000,12500,15000,20000], epics: [6,7,8,10,11,12,13,14,17,21,25,29,33,37,41,45,49,53,60,68,76,83,94,105,126], best: 2, e: false },
  3298. wlds: { tiers: [750,1000,1500,2000,2500,3000,4000,5000,6000,7000,8000,9000,10000,12500,15000,17500,20000,25000,30000,40000], epics: [5,10,15,22,28,37,42,47,52,57,62,67,72,77,82,87,93,100,107,120], best: 5, e: false },
  3299. cwg: { tiers: [100,200,750,1250,1500,2000,2500,3750,5000], epics: [1,2,3,4,5,8,10,12,15], best: 0, e: true },
  3300. val: { tiers: [50,100,250,500,750,1000,1250,1500,2000,2500,5000], epics: [1,2,4,17,21,27,35,44,53,61,99], best: 3, e: false},
  3301. kark: { tiers: [200,300,400,500,600,700,800,900,1000,1250,1500,1750,2000,2250,2500,2750,3000,4000,5000,6000,8000,10000,12500,15000], epics: [8,9,10,11,12,13,14,15,17,20,24,29,32,36,40,44,48,52,59,66,73,80,90,100], best: 2, e: false},
  3302. yule: { tiers: [100,200,300,400,500,750,1000,1500,2000,2500,3000,3500,4000,4500,5000,10000], epics: [0,4,8,10,15,20,30,35,40,50,70,75,80,90,95,125], best: 5, e: true },
  3303. eow: { tiers: [100,200,300,500,1000,1500,2000,2500,3000,4000,5000,6000,7000,8000,9000,10000,12500,15000,17500,20000,25000,30000,35000,40000], epics: [1,2,3,5,10,15,22,28,37,42,47,52,57,63,68,73,78,83,88,95,101,108,115,121], best: 8, e: false },
  3304. gk: { tiers: [150,250,300,400,500,750,1000,1500,2000,2500,3500,5000], epics: [5,6,9,10,12,14,17,23,30,35,49,67], best: 2, e: false },
  3305. murg: { tiers: [150,250,500,750,1000,1500,2000,2500,3000,3500,4000,4500,5000], epics: [0,1,2,5,10,15,31,41,57,67,72,78,87], best: 9, e: false},
  3306. valley: { tiers: [150,250,500,750,1000,1500,2000,2500,3000,3500,4000,4500,5000,6500,8000], epics: [0,1,2,5,10,15,21,35,60,63,67,72,76,84,92], best: 8, e: false},
  3307. bak: { tiers: [100,200,250,300,400,500,650,800,1000,1250,1500,2000], epics: [3,8,10,11,12,15,18,20,26,30,38,47], best: 5, e: false},
  3308. rud: { tiers: [300,500,750,1000,1500], epics: [13,15,17,25,32], best: 1, e: false},
  3309. imx: { tiers: [100,150,200,250,300,400,500,750,1000,1250,1500,1750,2000,2500,3000,3500,4000,4500,5000,6000,7000,8000,9000,10000,12500,15000,17500,20000,25000], epics: [16,21,26,32,38,44,51,69,86,118,142,166,191,239,286,330,355,381,408,435,462,489,516,544,592,640,688,736,815], best: 13, e: false},
  3310. shd: { tiers: [50,75,100,150,200,250,300,500,750,1000], epics: [1,2,5,8,10,12,14,16,19,25], best: 6, e: false},
  3311. hell: { tiers: [200,250,300,500,750,1000,1500,2000,2500,3000,4000,5000,6000,8000,10000], epics: [8,12,16,25,28,34,41,50,58,64,71,77,85,102,120], best: 2, e: false},
  3312. kane: { tiers: [200,250,300,500,750,1000,1500,2000,2500,3000,4000,5000,6000,8000,10000,12500,15000], epics: [6,10,14,21,27,30,37,45,54,62,68,75,81,93,110,127,141], best: 3, e: false},
  3313. dark: { tiers: [200,300,500,750,1000,1500,2000,2500,3000,4000,5000], epics: [2,4,8,14,18,30,40,50,60,75,85], best: 7, e: false},
  3314. gat: { tiers: [1000,1500,2000,2500,3000,4000,5000,6000,7000,8000,9000,10000,12500,15000,17500,20000,25000,30000,40000], epics: [27,48,66,81,94,103,122,132,144,158,176,194,204,209,219,225,242,284,301], best: 2, e: false},
  3315. trex: { tiers: [100,150,200,250,300,400,500,750,1000,1250,1500,1750,2000,2500,3000,3500,4000,4500,5000,6000,7000,8000,9000,10000,12500,15000,17500,20000], epics: [21,28,38,44,47,59,68,94,119,147,179,215,250,308,381,431,498,546,557,593,627,661,691,725,790,861,926,980], best: 14, e: false},
  3316. alch: { tiers: [100,150,200,250,300,400,500,650,800,1000,1250,1500], epics: [4,6,8,9,11,13,15,17,19,20,25,32], best: 5, e: false},
  3317. rann: { tiers: [100,200,300,400,500,600,700,800,900,1000,2000,3000], epics: [12,24,36,48,61,73,85,97,109,122,245,369], best: 9, e: false },
  3318. clock: { tiers: [300,400,750,1000,1500,2000,2500,3000,4000,5000,6000,8000,10000], epics: [56,66,94,118,192,226,254,270,290,360,368,400,460], best: 0, e: false},
  3319. krx: { tiers: [300,400,750,1000,1500,2000,2500,3000,4000,5000,6000,8000], epics: [56,66,94,118,192,226,254,270,290,360,368,400], best: 0, e: false},
  3320. gig: { tiers: [200,300,400,500,750,1000,1500,2000,2500,5000,8000], epics: [36,48,63,76,94,111,146,199,256,400,490], best: 3, e: false},
  3321. rekkr: { tiers: [250,300,400,500,720,1000,1500,2500,3500], epics: [10,11,15,18,23,26,34,37,51], best: 2, e: true},
  3322. rag: { tiers: [225,310,400,510,750,1000,1500,2500,5000], epics: [11,13,17,19,23,27,37,39,61], best: 2, e: true},
  3323. z15lo: { tiers: [225,240,300,400,750,1000,1500,2500,5000], epics: [8,9,14,16,19,23,33,36,48], best: 2, e: true},
  3324. z15hi: { tiers: [225,240,300,400,750,1000,1500,2500,5000,8000], epics: [8,9,14,16,19,23,33,60,90,100], best: 2, e: true},
  3325. apoc: { tiers: [12,24,36,40,60,80,100,120,140,160,180], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true },
  3326. cara: { tiers: [400,500,600,700,800,900,1000,1250,1500,1750,2000,2250,2500,2750,3000], epics: [10,11,12,13,14,15,16,20,24,28,32,36,40,44,48], best: 0, e: true },
  3327. zugen: { tiers: [120,180,225,240,300,400,750,1000,1500], epics: [8,9,10,11,14,16,19,23,33], best: 4, e: true},
  3328. gulk: { tiers: [90,135,150,180,225,300,550,900,1500], epics: [2,5,7,9,11,15,18,22,34], best: 5, e: true },
  3329. verk: { tiers: [100,175,250,300,375,450,525,600,900,1500], epics: [3,8,12,13,15,16,18,21,23,36], best: 2, e: true},
  3330. canib: { tiers: [250,300,380,480,580,660,900,1500,2000,2800,3500], epics: [12,13,14,17,18,21,23,34,46,68,88], best: 0, e: true},
  3331. ruzz: { tiers: [300,400,500,600,700,800,900,1000,1250,1500,1750,2000,2250,2500,2750,3000], epics: [2,5,11,12,13,14,15,16,20,24,28,32,36,40,44,48], best: 2, e: true },
  3332. z10: { tiers: [100,200,300,400,500,600,700,800,900,1000], epics: [7,8,9,10,11,12,13,14,15,16], best: 0, e: true },
  3333. nmDl: { tiers: [105,135,150,225,300,375,450,525,600,675], epics: [2,4,6,8,10,12,14,16,18,20], best: 2, e: true },
  3334. lDl: { tiers: [70,90,100,150,200,250,300,350,400,450], epics: [2,4,6,8,10,12,14,16,18,20], best: 2, e: true },
  3335. hDl: { tiers: [35,45,50,75,100,125,150,175,200,225], epics: [2,4,6,8,10,12,14,16,18,20], best: 2, e: true },
  3336. nDl: { tiers: [7,9,10,15,20,25,30,35,40,45], epics: [2,4,6,8,10,12,14,16,18,20], best: 2, e: true },
  3337. nmTisi: { tiers: [75,105,135,150,225,300,375,450,525,600,675], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true },
  3338. lTisi: { tiers: [50,70,90,100,150,200,250,300,350,400,450], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true },
  3339. hTisi: { tiers: [25,35,45,50,75,100,125,150,175,200,225], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true },
  3340. nTisi: { tiers: [5,7,9,10,15,20,25,30,35,40,45], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true },
  3341. njack: { tiers: [4,20,24,48,72,96,120,144,168,192], epics: [2,3,4,6,7,8,9,10,11,12], best: 0, e: true},
  3342. hjack: { tiers: [6,30,36,72,108,144,180,216,252,288], epics: [2,3,4,6,7,8,9,10,11,12], best: 0, e: true},
  3343. ljack: { tiers: [8,40,48,96,144,192,240,288,336,384], epics: [2,3,4,6,7,8,9,10,11,12], best: 0, e: true},
  3344. nmjack: { tiers: [12,60,72,144,216,288,360,432,504,576], epics: [2,3,4,6,7,8,9,10,11,12], best: 0, e: true},
  3345. hjr: { tiers: [30,150,180,360,750,1500], epics: [8,12,16,27,36,72], best: 0, e: true},
  3346. njr: { tiers: [20,100,120,240,500,1000], epics: [8,12,16,27,36,72], best: 0, e: true},
  3347. ljr: { tiers: [40,200,240,480,1000,2000], epics: [8,12,16,27,36,72], best: 0, e: true},
  3348. nmjr: { tiers: [60,300,360,720,1500,3000], epics: [8,12,16,27,36,72], best: 0, e: true},
  3349. yyd: { tiers: [125,175,250,300,375,450,525,625,900,1500], epics: [3,8,12,13,15,16,18,21,23,36], best: 2, e: true},
  3350. nessy: { tiers: [120,180,225,240,300,500,750,1000], epics: [9,10,11,12,13,14,17,20], best: 1, e: true},
  3351. hurk: { tiers: [90,135,150,180,225,300,550,900], epics: [3,7,10,12,15,19,26,30], best: 2, e: true},
  3352. mall: { tiers: [100,150,225,300,375,450,525,600,900], epics: [3,8,11,12,14,16,18,20,24], best: 1, e: true},
  3353. nIns: { tiers: [5,7,9,10,15,20,25,30,35,40,45], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true},
  3354. hIns: { tiers: [6.250,8.750,11.25,12.50,18.75,25,31.25,37.50,43.75,50,56.25], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true},
  3355. lIns: { tiers: [8,11.20,14.40,16,24,32,40,48,56,64,72], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true},
  3356. nmIns: { tiers: [10,14,18,20,30,40,50,60,70,80,90], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true},
  3357. nker: { tiers: [20,28,36,40,60,80,100,120,140,160,180], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true},
  3358. hker: { tiers: [25,35,45,50,75,100,125,150,175,200,225], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true},
  3359. lker: { tiers: [32,44.80,57.60,64,96,128,160,192,224,256,288], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true},
  3360. nmker: { tiers: [40,56,72,80,120,160,200,240,280,320,360], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true},
  3361. nSlut: { tiers: [6.660,9.324,11.99,13.32,19.98,26.64,33.30,39.96,46.62,53.28,59.94], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true},
  3362. hSlut: { tiers: [8.325,11.66,14.99,16.65,24.98,33.30,41.63,49.95,58.28,66.60,74.93], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true},
  3363. lSlut: { tiers: [10.66,14.92,19.18,21.31,31.97,42.62,53.28,63.94,74.59,85.25,95.90], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true},
  3364. nmSlut: { tiers: [13.32,18.65,23.98,26.64,39.96,53.28,66.60,79.92,93.24,106.6,119.9], epics: [1,2,3,4,5,6,7,8,9,10,11], best: 3, e: true},
  3365. sic: { tiers: [400,500,600,700,800,900,1000,2000], epics: [10,11,12,13,14,15,16,32], best: 0, e: true},
  3366. vort: { tiers: [200,300,400,500,600,700,800,900,1000,1500,2000,2500,3000,3500], epics: [3,10,14,15,17,18,21,23,32,37,44,52,58,90], best: 1, e: true},
  3367. lux: { tiers: [8,17,26,35,45,56,67,78,90,103,116,129,143,157,173,188,202,220,238,255,270,293,311,330,350], epics: [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26], best: 9, e: true },
  3368. keron: { tiers: [8,17,26,35,45,56,67,78,90,103,116,129,143,157,173,188,202,220,238,255,270,293,311,330,350,1000], epics: [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,30], best: 9, e: true }
  3369. },
  3370. camps: {
  3371. bob: {name: 'Bastion of Blood', time: [120, 96], prefixes: 'Regenerating, Morphling, Vengeful, Chilling', numNodes: 6, nodes: ['bmp', 'gor', 'chi', 'zh', 'sic', 'bob'],
  3372. mods: ['Speed Run: halved camp timer, +20% guild rep from EoC', 'Hailstorm: +1 prefix, +20% guild exp from EoC', 'Nerfed: -30% player damage, special loot from EoC'],
  3373. tiers: [[5, 31, 0],[25, 32, 0],[75, 33, 0],[100, 34, 0],[200, 35, 7],[250, 36, 8],[320, 37, 9],[375, 38, 10],[480, 39, 11],[550, 43, 14],[640, 46, 17],[960, 48, 22],[1500, 50, 24],[2400, 53, 26],[2750, 55, 29],[5000, 62, 38],[7000, 64, 42],[10000, 69, 47],[15000, 74, 52]],
  3374. bmp: {name: 'Black Moon Pack', sname: 'Bmp', type: 'Human, Campaign', size: 25, hp: [6000, 18000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]},
  3375. gor: {name: 'Gorgon', sname: 'Gor', type: 'Campaign', size: 50, hp: [12000, 36000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]},
  3376. chi: {name: 'Chimera', sname: 'Chi', type: 'Campaign', size: 75, hp: [28000, 84000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]},
  3377. zh: {name: 'Zombie Horde', sname: 'ZH', type: 'Campaign, Undead', size: 100, hp: [50000, 150000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]},
  3378. sic: {name: 'Byron Siculus', sname: 'Sic', type: 'Campaign', size: 100, hp: [50000, 150000], gold: true, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]},
  3379. bob: {name: 'Bastion of Blood', sname: 'BoB', type: 'Campaign, Undead, Siege', size: 100, hp: [50000, 150000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}},
  3380. mam: {name: 'Monsters and Magma', time: [120, 96], prefixes: 'Regenerating, Vengeful, Chilling, Curse', numNodes: 7, nodes: ['wlp', 'tos', 'gol', 'ele', 'gmh', 'wrm', 'imx'],
  3381. mods: ['Speed Run: halved camp timer, +20% guild rep from EoC', 'Hailstorm: +1 prefix, +20% guild exp from EoC', 'Fatigued: -45% player damage, special loot and +3 slots from EoC', 'Endurance Run: Node timer set to 4h, Molten Troves in EoC'],
  3382. tiers: [[5, 31, 0],[25, 32, 0],[75, 33, 0],[100, 34, 0],[200, 35, 7],[250, 36, 8],[320, 37, 9],[375, 38, 10],[480, 39, 11],[550, 40, 12],[640, 41, 13],[960, 42, 14],[1500, 43, 15],[2400, 44, 16],[2750, 45, 17],[4500, 58, 24],[5000, 62, 38],[5500, 64, 26],[7000, 64, 42],[7500, 74, 28],[10000, 69, 47],[15000, 74, 52]],
  3383. wlp: {name: 'Imryx\'s Whelps', sname: 'Wlp', type: 'Dragon, Underground, Campaign', size: 25, hp: [7000, 21000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0]},
  3384. tos: {name: 'Magma Tossers', sname: 'Tos', type: 'Underground, Construct, Campaign', size: 50, hp: [13000, 39000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0]},
  3385. gol: {name: 'Magma Golem', sname: 'Gol', type: 'Underground, Construct, Campaign', size: 50, hp: [16000, 48000], gold: true, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0]},
  3386. ele: {name: 'Magma Elemental', sname: 'Ele', type: 'Underground, Magical Creature, Campaign', size: 75, hp: [30000, 90000], gold: false,tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0]},
  3387. gmh: {name: 'Grt. Magma Horror', sname: 'Gmh', type: 'Campaign, Undead', size: 100, hp: [55000, 165000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1]},
  3388. wrm: {name: 'Magma Worm', sname: 'Wrm', type: 'Underground, Campaign', size: 100, hp: [60000, 180000], gold: true, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1]},
  3389. imx: {name: 'Imryx the Incinerator', sname: 'Imx', type: 'Dragon, Underground, Campaign', size: 100, hp: [65000, 195000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0]}},
  3390. gd: {name: 'The Grey Death', time: [120, 96], prefixes: 'Regenerating, Vengeful, Chilling, Curse', numNodes: 6, nodes: ['crk', 'zrn', 'nun', 'tms', 'crn', 'hrt'],
  3391. mods: ['Speed Run: halved camp timer, +20% guild rep from EoC', 'Hailstorm: +1 prefix, +20% guild exp from EoC', 'Fatigued: -45% player damage, special loot and +3 slots from EoC'],
  3392. tiers: [[25, 31, 0],[100, 34, 0],[200, 36, 6],[300, 38, 9],[500, 40, 14],[750, 42, 16],[1000, 45, 18],[2500, 48, 21],[4100, 50, 25],[6500, 58, 29],[6500, 54, 27],[8500, 62, 31],[8500, 63, 32],[10000, 64, 33],[15000, 66, 35],[20000, 68, 37],[30000, 70, 39],[40000, 73, 41]],
  3393. crk: {name: 'Carshk the Marauder', sname: 'Crk', type: 'Campaign', size: 25, hp: [8000, 25600], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0]},
  3394. zrn: {name: 'Zranras', sname: 'Zrn', type: 'Campaign, Beastman', size: 50, hp: [15000, 48000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0]},
  3395. nun: {name: 'General Nund', sname: 'Nun', type: 'Campaign, Ogre', size: 50, hp: [20000, 50000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0]},
  3396. tms: {name: 'Thurmavus the Ripper', sname: 'Tms', type: 'Campaign, Dragon', size: 100, hp: [75000, 202500], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1]},
  3397. crn: {name: 'Craenaestra the Stalker', sname: 'Crn', type: 'Campaign, Dragon', size: 100, hp: [80000, 224000], gold: true, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1]},
  3398. hrt: {name: 'Horthania the Grey', sname: 'Hrt', type: 'Campaign, Dragon', size: 100, hp: [90000, 270000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1]}},
  3399. goc: {name: 'Giants of Chalua', time: [120, 96], prefixes: 'Regenerating, Vengeful, Chilling, Curse', numNodes: 6, nodes: ['mwm', 'bl', 'gh', 'fgs', 'gc', 'ha'],
  3400. mods: ['Speed Run: halved camp timer, +20% guild rep from EoC', 'Hailstorm: +1 prefix, +20% guild exp from EoC', 'Fatigued: -45% player damage, Boss loot from EoC', 'Endurance Run: Node timer set to 4h, 10 guild tokens in EoC'],
  3401. tiers: [[25, 32, 0, 0],[150, 34, 0, 0],[250, 35, 7, 0],[480, 39, 11, 0],[640, 41, 16, 0],[960, 42, 18, 1],[1500, 43, 19, 1],[2500, 45, 21, 3],[4750, 48, 25, 4],[5500, 52, 27, 5],[6400, 54, 29, 5],[8750, 56, 31, 6],[10000, 58, 34, 6],[15000, 60, 38, 8],[25000, 64, 44, 9],[30000, 66, 46, 9],[35000, 68, 48, 9],[40000, 70, 50, 9],[50000, 74, 56, 10]],
  3402. mwm: {name: 'Monkey Warrior Minions', sname: 'MWM', type: 'Human, Campaign', size: 25, hp: [15000, 45000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]},
  3403. bl: {name: 'Basileus Lizard', sname: 'BL', type: 'Campaign', size: 50, hp: [25000, 75000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]},
  3404. gh: {name: 'Giant Hunter', sname: 'GH', type: 'Giant, Campaign', size: 75, hp: [55000, 165000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0]},
  3405. fgs: {name: 'Fire Giant Shaman', sname: 'FGS', type: 'Giant, Campaign', size: 100, hp: [100000, 250000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0]},
  3406. gc: {name: 'Giant Cook', sname: 'GC', type: 'Giant, Campaign', size: 100, hp: [125000, 312500], gold: true, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0]},
  3407. ha: {name: 'Hitullpa Aatqui', sname: 'HA', type: 'Giant, Campaign', size: 100, hp: [150000, 375000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]}},
  3408. fw: {name: 'The Frozen War', time: [120, 96], prefixes: 'Frighten Mount, Ethereal, Trample, Intimidate, Vulnerable, Vengeful, Chilling, Curse', numNodes: 6, nodes: ['ur', 'fe', 'nsg', 'bsn', 'bsh', 'eiw'],
  3409. mods: ['Speed Run: halved camp timer, +20% guild rep from EoC', 'Hailstorm: +1 prefix, +20% guild exp from EoC', 'Fatigued: -45% player damage, Extra loot from EoC', 'Endurance Run: Node timer set to 4h, 10 guild tokens in EoC'],
  3410. tiers: [[25, 32, 0, 0],[150, 34, 0, 0],[250, 35, 7, 0],[480, 39, 11, 0],[640, 41, 16, 0],[960, 42, 18, 1],[1500, 86, 38, 1],[2500, 90, 42, 3],[4750, 96, 50, 4],[5500, 104, 54, 5],[6400, 108, 58, 5],[8750, 112, 62, 6],[10000, 116, 68, 6],[15000, 120, 76, 8],[10000, 112, 62, 6],[15000, 116, 68, 8],[25000, 120, 76, 9],[30000, 132, 92, 9],[35000, 136, 96, 9],[40000, 140, 100, 9],[50000, 150, 112, 9]],
  3411. ur: {name: 'Ursine Raiders', sname: 'UR', type: 'Aquatic, Human, Campaign', size: 25, hp: [18000, 54000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]},
  3412. fe: {name: 'Frost Elemental', sname: 'FE', type: 'Aquatic, Magical Cereature, Campaign', size: 50, hp: [28000, 84000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]},
  3413. nsg: {name: 'Northern Sea Giant', sname: 'NSG', type: 'Aquatic, Giant, Campaign', size: 100, hp: [105000, 262500], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0]},
  3414. bsn: {name: 'Konguar, Giant King & Jormungan the Sea-Storm (Normal)', sname: 'BSN', type: 'Aquatic, Dragon, Giant, Campaign', size: 100, hp: [160000, 400000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], epics: [0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1]},
  3415. bsh: {name: 'Konguar, Giant King & Jormungan the Sea-Storm (Hard)', sname: 'BSH', type: 'Aquatic, Dragon, Giant, Campaign', size: 100, hp: [160000, 400000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], epics: [0,0,0,0,0,1,1,1,2,2,3,0,0,0,3,4,4,5,5,6,6]},
  3416. eiw: {name: 'Elvigar the Ice Waver', sname: 'EIW', type: 'Aquatic, Undead, Campaign', size: 100, hp: [170000, 425000], gold: true, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], epics: [0,0,0,0,0,1,1,1,1,1,2,0,0,0,3,4,5,6,7,8,10]}}
  3417. },
  3418. linkNames: { 'prntscr.com': 'LightShot', 'www.youtube.com': 'YouTube', 'i.imgur.com': 'imgur', 'imgur.com': 'imgur', 'docs.google.com': 'Google Docs', 'userscripts.org': 'Script', 'www.dawnofthedragons.com': 'DotD Forum', 'dotd.wikia.com': 'DotD Wiki', 'www.fooby.de': 'DotD Log Analyzer'},
  3419. //raidArray: [],
  3420. slapSentences: [
  3421. 'slaps <nick> in the face with a rotten old fish',
  3422. 'slaps <nick> around with a glove',
  3423. 'slaps <nick> around with an armoured glove',
  3424. 'hacks into <nick>\'s computer and slaps <nick> up side the head with a rubber chicken',
  3425. 'slaps <nick> around a bit with a wet noddle',
  3426. 'slaps <nick> about the head and shoulders with a rubber chicken',
  3427. 'slaps <nick>\'s face so hard, <nick> has to walk backwards from now on',
  3428. 'slaps some sense into <nick> with a red brick',
  3429. 'slaps <nick> with a herring',
  3430. 'slaps <nick> with a fire hose',
  3431. 'slaps <nick> with a huge law suit',
  3432. 'slaps <nick> with a great big, wet, 100% rubber duck',
  3433. 'slaps <nick> with a large dildo'
  3434. ],
  3435. reload: function () { SRDotDX.util.extEcho('Reloading, please wait...'); activateGame(); },
  3436. gframe: function(msg) { if(typeof document.getElementById('gameiframe') === 'object' && typeof document.getElementById('gameiframe').contentWindow === 'object') document.getElementById('gameiframe').contentWindow.postMessage(msg, '*'); },
  3437. fails: 0,
  3438. load: function () {
  3439. if (typeof holodeck === 'object' && holodeck.ready && typeof ChatDialogue === 'function' && typeof activateGame === 'function') {
  3440. ChatDialogue.prototype.sendInput = function () {
  3441. //workaround for broken raid links - fixing on the fly
  3442. var b = this._input_node.value.replace(/kv_&/ig, "&kv_");
  3443. var a = b.match(/(?:.|\n){1,240}(\b|$)/g);
  3444. if(a !== null) {
  3445. var al = a.length - 1, i;
  3446. if (al < 1 || this._input_node.value.charAt(0) == '/') this._holodeck.processChatCommand(a[0]) && this._holodeck.filterOutgoingMessage(a[0], this._onInputFunction);
  3447. else {
  3448. var msg, tout = 50;
  3449. for(i = 0; i <= al; i++) {
  3450. msg = (i == 0 ? '' : '... ') + a[i] + (i == al ? '' : '...');
  3451. (function (a, b) {
  3452. return SRDotDX.gui.FPXTimerArray[i] = setTimeout(function(){b._holodeck.filterOutgoingMessage(a,b._onInputFunction)},tout);
  3453. })(msg, holodeck._active_dialogue);
  3454. tout += 500;
  3455. }
  3456. }
  3457. }
  3458. this._input_node.value = "";
  3459. };
  3460. ChatDialogue.prototype.SRDotDX_emote = function (msg) {
  3461. var user = holodeck._active_user.chatUsername();
  3462. this.displayUnsanitizedMessage(user, '**' + user + ' ' + msg + '**', {class: 'emote'}, {});
  3463. };
  3464. ChatDialogue.MESSAGE_TEMPLATE = new Template('<p class="#{classNames}"><span id="dotdm_#{magId}" class="slider" style="max-width:0" onmouseleave="this.style.maxWidth=\'0\'"></span><span class="timestamp">#{timestamp}</span><span class="room">#{room}</span></span><span class="username #{userClassNames} dotdm_#{magId}" username="#{username}" dotdxname="#{dotdxusr}" oncontextmenu="return false;">#{prefix}#{user}</span><span class="ign ingamename">#{ign}</span><span class="separator">: </span><span name="SRDotDX_#{dotdxusr}" class="message">#{message}</span><span class="clear"></span></p>');
  3465.  
  3466. Holodeck.prototype.addDotdChatCommand = function (a, b) {
  3467. a = a.split(',');
  3468. for (var i = 0; i < a.length; i++) {
  3469. this._chat_commands[a[i]] || (this._chat_commands[a[i]] = []);
  3470. this._chat_commands[a[i]].push(b)
  3471. }
  3472. };
  3473. ChatDialogue.prototype.displayUnsanitizedMessage = function (usr, msg, cls, pfx) {
  3474. cls || (cls = {});
  3475. pfx || (pfx = {});
  3476. var active_room, allow_mutes = (active_room = this._holodeck.chatWindow().activeRoom()) && !active_room.canUserModerate(active_room.self()) || pfx.whisper;
  3477. if (!allow_mutes || !this._user_manager.isMuted(usr)) {
  3478. var e = !pfx.non_user ? "chat_message_window_username" : "chat_message_window_undecorated_username";
  3479. var f = usr == this._user_manager.username(), h = [], rm = '';
  3480. var curTs = new Date().getTime().toString();
  3481. var kongUsr = usr;
  3482. if (msg.charAt(0) == '[' && (msg.charAt(2) == '|' || msg.charAt(3) == '|')) {
  3483. var sp = msg.split(']');
  3484. rm = sp[0].split('|')[0] + ']&ensp;';
  3485. usr = sp[0].split('|')[1];
  3486. msg = sp[1];
  3487. h.push('bot')
  3488. }
  3489. var trueUsr = usr;
  3490. e = [e];
  3491. pfx = pfx['private'] ? 'To ' : '';
  3492. if (cls['class'] != 'script') this._messages_count % 2 && h.push("even"), this._messages_count++;
  3493. cls['class'] && h.push(cls['class']);
  3494. if ((!cls['class'] || cls['class'].indexOf('emote') == -1) && msg.charAt(0) == '*' && msg.charAt(2) != '*') {
  3495. var msgLen = msg.length;
  3496. if (msgLen > 5) {
  3497. msg = '**' + usr + ' ' + (msg.charAt(msgLen - 1) == '*' ? msg.slice(1, msgLen - 1) : msg.slice(1, msgLen)) + '**';
  3498. h.push('emote');
  3499. }
  3500. }
  3501. var rUsr = h.join(' ').indexOf('sent_whisper') > -1 ? this._user_manager.username() : usr;
  3502. var raid = SRDotDX.getRaidLink(msg, rUsr);
  3503. if (raid) {
  3504. h.push('DotDX_raid');
  3505. h.push('DotDX_sid_' + raid.sid);
  3506. h.push('DotDX_diff_' + raid.diff);
  3507. h.push('DotDX_raidId_' + raid.id);
  3508. if (raid.visited) h.push('DotDX_visitedRaid');
  3509. h.push('DotDX_fltChat_' + raid.boss + '_' + (raid.diff - 1));
  3510. msg = raid.ptext + '<a href="' + raid.url + '" class="chatRaidLink ' + raid.id + '|' + raid.hash + '|' + raid.boss + '|' + raid.diff + '|' + raid.sid + '" style="float:right;" onmouseout="SRDotDX.gui.helpBox(\'chat_raids_overlay\',\'dotdm_' + curTs + '\',\'\',true);" onmouseover="SRDotDX.gui.helpBox(\'chat_raids_overlay\',\'dotdm_' + curTs + '\',' + raid.id + ',false);">' + raid.linkText() + '</a>' + raid.ntext;
  3511. SRDotDX.gui.toggleRaid('visited', raid.id, raid.visited);
  3512. SRDotDX.gui.joining ? SRDotDX.gui.pushRaidToJoinQueue(raid.id) : SRDotDX.gui.selectRaidsToJoin('chat');
  3513. }
  3514. else {
  3515. //var linkReg = /((?:ht|(?:t|s)?f)tps?\:(?:\/\/))?((?:[a-z\d\-\_]+?\.)+[a-z]{2,4}\b|\b(?:[1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(?:\.(?:[0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])){3}\b)((?:\/[\w\/\.\-\,\:\%\#\=]+)?(?:\/?\?[\w\-\#\:\?\=\&\.\;]*|\/?\#(?:\w+)?)?\b)?/g;
  3516. var linkReg = /(?:^|\s|,|;)(((?:ht|(?:t|s)?f)tps?:(?:\/\/))([\w\.\-]{4,}[a-z0-9])([\w\/\?\.\-=&#:;%()!]*[\w#;)])?)/g;
  3517. var links, link, lname, lidx, found = false;
  3518. while((links = linkReg.exec(msg))) {
  3519. found = true;
  3520. console.log('[DotDX] Link found: ' + msg);
  3521. if(!/kongregate.com/i.test(links[1]) && !/\.\./.test(links[1])){
  3522. link = links[1].replace(/&amp;/ig,'&').replace(/&nbsp;/ig,'');
  3523. lname = SRDotDX.config.formatLinks ? (SRDotDX.linkNames[links[3]] ? ('['+SRDotDX.linkNames[links[3]]+']') : links[3]) : link;
  3524. link = '<a href="' + link + '" target="_blank" class="chat_link">' + lname + '</a>';
  3525. linkReg.lastIndex += link.length - links[1].length;
  3526. lidx = links.index + links.indexOf(links[1]);
  3527. msg = msg.substring(0, lidx) + link + msg.substring(lidx + links[1].length, msg.length);
  3528. }
  3529. }
  3530. if(found) SRDotDX.linksHistory.push({t:new Date().getTime(), u:usr, m:msg});
  3531. }
  3532. var ign = '';
  3533. if (SRDotDX.config.mutedUsers[usr]) h.push('DotDX_hidden');
  3534.  
  3535. var fCls = h.join(' ');
  3536. if (SRDotDX.config.ignUsers[usr] && fCls.indexOf('emote') < 0) {
  3537. switch(SRDotDX.config.ignMode) {
  3538. case 2: ign = ' ('+SRDotDX.config.ignUsers[usr]+')'; break;
  3539. case 1: usr = SRDotDX.config.ignUsers[usr]; e.push('ign'); break;
  3540. }
  3541. }
  3542. var ts = fCls.indexOf('emote') > -1 || fCls.indexOf('script') > -1 ? '' : ('(' + ('0' + (new Date().getHours())).slice(-2) + ':' + ('0' + (new Date().getMinutes())).slice(-2) + ')&ensp;');
  3543. f && e.push('is_self');
  3544.  
  3545. usr = ChatDialogue.MESSAGE_TEMPLATE.evaluate({prefix: pfx, user: usr, username: kongUsr, dotdxusr: trueUsr, ign: ign, message: msg, classNames: fCls, userClassNames: e.join(' '), timestamp: ts, room: rm, magId: curTs });
  3546. this.insert(usr);
  3547. }
  3548. };
  3549. ChatRoomGroup.prototype.buildRegularRoomNode = function (a) {
  3550. var b = new Element("li", {"class": 0 === i % 2 ? "even room" : "odd room"});
  3551. b.room = a;
  3552. var c = (new Element("p", {"class": "name"})).update(a.name);
  3553. a.premium_only && (active_user.isPremium() || c.addClassName("upsell"), c.addClassName("premium_room_icon spritesite"));
  3554. b.insert(c);
  3555. b.insert((new Element("p", {"class": "user_count" + (a.joinable ? "" : " full")})).update(a.total_user_count));
  3556. b.insert(new Element("div", {style: "clear:both;"}));
  3557. return b
  3558. };
  3559. holodeck.addDotdChatCommand("stop", function (deck, text) {
  3560. if (SRDotDX.gui.isPosting) SRDotDX.gui.FPXStopPosting();
  3561. else SRDotDX.util.extEcho('<b>/stop</b>: Links are not being posted. Stop command invalid.');
  3562. return false;
  3563. });
  3564. holodeck.addDotdChatCommand("e", function (deck, text) {
  3565. var s = text.slice(2);
  3566. if (s != "") holodeck.activeDialogue().SRDotDX_emote(s);
  3567. else SRDotDX.util.extEcho('<b>/e</b>: Empty message specified');
  3568. return false;
  3569. });
  3570. holodeck.addDotdChatCommand("kill", function (deck, text) {
  3571. document.getElementById("gameiframe").src = "";
  3572. SRDotDX.util.extEcho('Game window killed, have a nice chatting.');
  3573. return false;
  3574. });
  3575. holodeck.addDotdChatCommand("update", function (deck, text) {
  3576. SRDotDX.request.version();
  3577. return false;
  3578. });
  3579. holodeck.addDotdChatCommand("help", function (deck, text) {
  3580. var d = "<b>Available chat commands:</b><br>";
  3581. d += "/stop /e /kill /update /reload /relaod /rl /reloaf /mute /unmute /mutelist /ign /unign /ignlist /friend /unfriend /script /clear /cls /clearx /clx /getlinks /wikil /import /imp /fs /room /ijoin /join /wiki /guide /manual /slap /sh /camp /perc /citadel /raid /rd /help";
  3582. d += '<br><br><a href="https://docs.google.com/document/d/14X0WhnJrISQbxdfQv_scJbG1sUyXdE2g4iMfHmLM0E0/edit" target="_blank">You can click here to navigate to script guide for detailed instructions or use /guide and /manual commands.</a>';
  3583. SRDotDX.util.extEcho(d);
  3584. return false;
  3585. });
  3586. holodeck.addDotdChatCommand("reload,relaod,rl,reloaf", function (deck, text) {
  3587. SRDotDX.reload();
  3588. return false;
  3589. });
  3590. holodeck.addDotdChatCommand("mute", function (deck, text) {
  3591. var s = text.split(" ");
  3592. if (s.length == 2 && s[1] != "") {
  3593. SRDotDX.config.mutedUsers[s[1]] = true;
  3594. SRDotDX.util.extEcho('User "' + s[1] + '" muted. Use the /unmute command to undo, and the /mutelist to see all muted users.');
  3595. SRDotDX.config.save(false);
  3596. }
  3597. else SRDotDX.util.extEcho('<b>/mute</b>: Invalid parameters specified. The proper syntax is "/mute [username]".');
  3598. return false;
  3599. });
  3600. holodeck.addDotdChatCommand("ign", function (deck, text) {
  3601. var s = text.split(" ");
  3602. if (s.length == 3 && s[1] != "" && s[2] != "") {
  3603. SRDotDX.config.ignUsers[s[1]] = s[2];
  3604. SRDotDX.util.extEcho(s[1] + '\'s ign "' + s[2] + '" added. Use the /unign command to undo, and the /ignlist to see all users with known ign.');
  3605. SRDotDX.config.save(false);
  3606. }
  3607. else SRDotDX.util.extEcho('<b>/ign</b>: Invalid parameters specified. The proper syntax is "/ign [kong username] [in game name]".');
  3608. return false;
  3609. });
  3610. holodeck.addDotdChatCommand('unmute', function (deck, text) {
  3611. var s = text.split(' ');
  3612. if (s.length === 2 && s[1] !== '') {
  3613. if (s[1] === 'all') {
  3614. for (var u in SRDotDX.config.mutedUsers) delete SRDotDX.config.mutedUsers[u];
  3615. SRDotDX.config.save(false);
  3616. SRDotDX.util.extEcho('All users unmuted.');
  3617. }
  3618. else if (SRDotDX.config.mutedUsers[s[1]]) {
  3619. delete SRDotDX.config.mutedUsers[s[1]];
  3620. SRDotDX.util.extEcho('User "' + s[1] + '" unmuted.');
  3621. SRDotDX.config.save(false);
  3622. }
  3623. else SRDotDX.util.extEcho('No muted user "' + s[1] + '" found.');
  3624. }
  3625. else SRDotDX.util.extEcho('<b>/unmute</b>: Invalid parameters specified. The proper syntax is "/unmute [username]". "/unmute all" can be used to unmute all muted users.');
  3626. return false;
  3627. });
  3628. holodeck.addDotdChatCommand('unign', function (deck, text) {
  3629. var s = text.split(' ');
  3630. if (s.length === 2 && s[1] !== '') {
  3631. if (s[1] === 'all') {
  3632. for (var u in SRDotDX.config.ignUsers) delete SRDotDX.config.ignUsers[u];
  3633. SRDotDX.config.save(false);
  3634. SRDotDX.util.extEcho('All users removed from IGN list.');
  3635. }
  3636. else if (SRDotDX.config.ignUsers[s[1]]) {
  3637. delete SRDotDX.config.ignUsers[s[1]];
  3638. SRDotDX.util.extEcho('Removed ' + s[1] + '\'s IGN.');
  3639. SRDotDX.config.save(false);
  3640. }
  3641. else SRDotDX.util.extEcho('No IGN of user "' + s[1] + '" found.');
  3642. }
  3643. else SRDotDX.util.extEcho('<b>/unign</b>: Invalid parameters specified. The proper syntax is "/unign [username]". "/unign all" can be used to clear IGN list.');
  3644. return false;
  3645. });
  3646. holodeck.addDotdChatCommand('mutelist', function (deck, text) {
  3647. var s = '<b>List of users currently muted:</b><br/>';
  3648. var i = 0;
  3649. for (var u in SRDotDX.config.mutedUsers) {
  3650. s += u + '<br>';
  3651. i++
  3652. }
  3653. if (i == 0) s = 'No users currently muted.<br/>';
  3654. s += '<br>Use the /mute and /unmute commands to add or remove users on this list.';
  3655. SRDotDX.util.extEcho(s);
  3656. return false;
  3657. });
  3658. holodeck.addDotdChatCommand('ignlist', function (deck, text) {
  3659. var s = '<b>List of known users IGN:</b><br>';
  3660. if (SRDotDX.config.ignUsers.length === 0) s = 'No users added to IGN list.<br/>';
  3661. else for (var u in SRDotDX.config.ignUsers) s += u + ':' + SRDotDX.config.ignUsers[u] + '<br/>';
  3662. s += '<br>Use the /ign and /unign commands to add or remove users on this list.';
  3663. SRDotDX.util.extEcho(s);
  3664. return false;
  3665. });
  3666. holodeck.addDotdChatCommand('script', function (deck, text) {
  3667. SRDotDX.gui.FPXdoWork('Script link: https://greasyfork.org/scripts/406-mutik-s-dotd-script');
  3668. return false;
  3669. });
  3670. holodeck.addDotdChatCommand('clear,cls', function (deck, text) {
  3671. holodeck.activeDialogue().clear();
  3672. return false
  3673. });
  3674. holodeck.addDotdChatCommand('clearx,clx', function (deck, text) {
  3675. var x = document.getElementsByClassName('script');
  3676. var i = x.length;
  3677. while(i--) x[i].parentNode.removeChild(x[i]);
  3678. setTimeout(SRDotDX.gui.scrollChat, 50);
  3679. return false
  3680. });
  3681. holodeck.addDotdChatCommand('wikil', function (deck, text) {
  3682. SRDotDX.gui.FPXdoWork('http://dotd.wikia.com/wiki/Dawn_of_the_Dragons_Wiki');
  3683. return false;
  3684. });
  3685. holodeck.addDotdChatCommand('import,imp', function (deck, text) {
  3686. SRDotDX.util.extEcho('Importing all raids from server');
  3687. SRDotDX.request.raids();
  3688. return false;
  3689. });
  3690. holodeck.addDotdChatCommand('friend', function (deck, text) {
  3691. var s = text.split(" ");
  3692. if (s.length == 2 && s[1] != "") {
  3693. if (typeof SRDotDX.config.friendUsers[s[1]] != 'object') {
  3694. SRDotDX.config.friendUsers[s[1]] = [false, false, false, false, true];
  3695. SRDotDX.config.save(false);
  3696. SRDotDX.gui.refreshFriends();
  3697. SRDotDX.util.extEcho('Added ' + s[1] + ' to friends');
  3698. }
  3699. }
  3700. return false;
  3701. });
  3702. holodeck.addDotdChatCommand('unfriend', function (deck, text) {
  3703. var s = text.split(" ");
  3704. if (s[1] == 'all') {
  3705. for (var u in SRDotDX.config.friendUsers) delete SRDotDX.config.friendUsers[u];
  3706. SRDotDX.config.save(false);
  3707. SRDotDX.gui.refreshFriends();
  3708. SRDotDX.util.extEcho('All users removed from friend list.');
  3709. }
  3710. else if (SRDotDX.config.friendUsers[s[1]]) {
  3711. delete SRDotDX.config.friendUsers[s[1]];
  3712. SRDotDX.config.save(false);
  3713. SRDotDX.gui.refreshFriends();
  3714. SRDotDX.util.extEcho('Removed ' + s[1] + ' from friends');
  3715. }
  3716. else SRDotDX.util.extEcho('User "' + s[1] + '" not found on friend list.');
  3717. return false;
  3718. });
  3719. holodeck.addDotdChatCommand('fs', function (deck, text) {
  3720. var cmd = text.split(' ');
  3721. if (cmd[0] === '/fs' && cmd[1]) {
  3722. SRDotDX.util.extEcho('Posting raid to friends');
  3723. document.getElementById('DotDX_raidsToSpam').value = cmd[1];
  3724. SRDotDX.gui.spamRaidsToFriends();
  3725. }
  3726. else SRDotDX.util.extEcho('Wrong syntax. Usage: /fs <raid link>');
  3727. return false;
  3728. });
  3729. holodeck.addDotdChatCommand('room', function (deck, text) {
  3730. var cmd = text.split(' ');
  3731. if (cmd[0] === '/room' && cmd[1]) SRDotDX.gui.gotoRoom(cmd[1]);
  3732. else SRDotDX.gui.gotoRoom(0);
  3733. return false;
  3734. });
  3735. holodeck.addDotdChatCommand('getlinks', function (deck, text) {
  3736. SRDotDX.util.getChatLinks();
  3737. SRDotDX.util.extEcho('Links opened in new tab');
  3738. return false;
  3739. });
  3740. holodeck.addDotdChatCommand('ijoin,join', function (deck, text) {
  3741. if (text.charAt(1) === 'j') SRDotDX.gui.quickImportAndJoin(text.slice(6));
  3742. else SRDotDX.gui.quickImportAndJoin(text.slice(7), true);
  3743. return false;
  3744. });
  3745. holodeck.addDotdChatCommand('wiki', function (deck, text) {
  3746. var p = /^\/wiki (.*?)$/i.exec(text);
  3747. if (p) {
  3748. window.open('http://dotd.wikia.com/wiki/Special:Search?search=' + p[1]);
  3749. SRDotDX.util.extEcho('Wiki search opened.');
  3750. }
  3751. else SRDotDX.util.extEcho('<b>/wiki</b>: Invalid parameters specified');
  3752. return false;
  3753. });
  3754. holodeck.addDotdChatCommand('guide,manual', function (deck, text) {
  3755. window.open('https://docs.google.com/document/d/14X0WhnJrISQbxdfQv_scJbG1sUyXdE2g4iMfHmLM0E0/edit');
  3756. SRDotDX.util.extEcho('Script guide opened in new tab/window.');
  3757. return false;
  3758. });
  3759. holodeck.addDotdChatCommand('slap', function (deck, text) {
  3760. var p = /^\/slap (.*?)$/i.exec(text);
  3761. if (p) {
  3762. var num = Math.round((Math.random() * (SRDotDX.slapSentences.length - 1)));
  3763. SRDotDX.gui.FPXdoWork('*' + SRDotDX.slapSentences[num].replace(/<nick>/g, p[1]) + '*');
  3764. }
  3765. else SRDotDX.util.extEcho('<b>/slap</b>: Invalid parameters specified');
  3766. return false;
  3767. });
  3768. holodeck.addDotdChatCommand('sh', function (deck, text) {
  3769. var p = /^\/sh (.*?)$/i.exec(text);
  3770. if (p) {
  3771. var fnd1 = p[1].toLowerCase(), fnd2 = p[1].length, found = false, sho;
  3772. for (i in SRDotDX.shortcuts) {
  3773. if (SRDotDX.shortcuts.hasOwnProperty(i)) {
  3774. sho = SRDotDX.shortcuts[i];
  3775. if (sho.n.toLowerCase().indexOf(fnd1) > -1 && sho.n.length == fnd2) {
  3776. SRDotDX.util.extEcho('<b>' + sho.bn + '</b>: ' + sho.desc);
  3777. found = true;
  3778. }
  3779. }
  3780. }
  3781. if (!found) SRDotDX.util.extEcho('<b>/sh</b>: Shortcut not found in db');
  3782. }
  3783. else SRDotDX.util.extEcho('<b>/sh</b>: No parameters specified');
  3784. return false;
  3785. });
  3786. holodeck.addDotdChatCommand('perc', function (deck, text) {
  3787. var bok = text.indexOf('bok', 4);
  3788. var cwp = text.indexOf('cwp', 4);
  3789. var empty = text.length < 6;
  3790. var output = "";
  3791. if (bok >= 0 || empty) output = "<b>Book of Knowledge Perc. Tiers:</b><br>\
  3792. 1 3999: Brown/Grey<br>\
  3793. 4000 5999: Brown/Grey/Green<br>\
  3794. 6000 9999: Grey/Green<br>\
  3795. 10000 13999: Grey/Green/Blue<br>\
  3796. 14000 15999: Green/Blue<br>\
  3797. 16000 17999: Green/Blue/Purple<br>\
  3798. 18000 21999: Blue/Purple<br>\
  3799. 22000 23999: Blue/Purple/Orange<br>\
  3800. 24000 29999: Purple/Orange<br>\
  3801. 30000 - 32999: Orange<br>\
  3802. 33000 - 35999: Orange/Red (more orange)<br>\
  3803. 36000 - 49999: Orange/Red (more red)<br>\
  3804. 50000 - 69999: Orange/Red (even more red)<br>\
  3805. 70000+ : Red";
  3806. if (empty) output += "<br>\
  3807. -------------------------------------------------<br>";
  3808. if (cwp >= 0 || empty) output += "<b>Clockwork Parts Perc. Tiers:</b><br>\
  3809. 1-1999: 10x Perf. Clockwork Part<br>\
  3810. 2000-3999: 25x Perf. Clockwork Part<br>\
  3811. 4000-5999: 40x Perf. Clockwork Part<br>\
  3812. 6000-7999: 55x Perf. Clockwork Part<br>\
  3813. 8000-9999: 70x Perf. Clockwork Part<br>\
  3814. 10000-11999: 85x Perf. Clockwork Part<br>\
  3815. 12000-13999: 100x Perf. Clockwork Part<br>\
  3816. 14000-15999: 115x Perf. Clockwork Part<br>\
  3817. 16000-17999: 130x Perf. Clockwork Part<br>\
  3818. 18000-19999: 145x Perf. Clockwork Part<br>\
  3819. 20000-21999: 160x Perf. Clockwork Part<br>\
  3820. 22000-23999: 175x Perf. Clockwork Part<br>\
  3821. 24000-25999: 190x Perf. Clockwork Part<br>\
  3822. 26000-27999: 205x Perf. Clockwork Part<br>\
  3823. 28000-29999: 220x Perf. Clockwork Part<br>\
  3824. 30000-32999: 235x Perf. Clockwork Part<br>\
  3825. 33000-35999: 245x Perf. Clockwork Part<br>\
  3826. 36000+ : 260x Perf. Clockwork Part";
  3827. SRDotDX.util.extEcho(output);
  3828. return false;
  3829. });
  3830. holodeck.addDotdChatCommand('citadel', function (deck, text) {
  3831. SRDotDX.util.extEcho("Barrack Book = Grune N Quest<br>\
  3832. Barrack Scroll 1 = Hydra NM Raid<br>\
  3833. Barrack Scroll 2 = Research Library book<br>\
  3834. Barrack Scroll 3 = Rhalmarius the Despoiler NM Raid/Crafting<br>\
  3835. Barrack Scroll 4 = The New Claw (World Raid) craft<br>\
  3836. Barrack Scroll 5 = Burbata the Spine-Crusher NM Raid<br>\
  3837. Barrack Scroll 6 = Temp loot from Hargamesh/Grimsly NM Raids<br>\
  3838. Barrack Scroll 7 = The Baroness NM Quest<br>\
  3839. Barrack Scroll 8 = Crafting from Imryx the Incinerator NM Raid<br>\
  3840. Armorsmith Book = Lurking Horror N Quest<br>\
  3841. Armorsmith Scroll 1 = Nalagarst NM Raid<br>\
  3842. Armorsmith Scroll 2 = Research Library 1<br>\
  3843. Armorsmith Scroll 3 = Dragon's Lair NM Raid<br>\
  3844. Armorsmith Scroll 4 = Temp loot from Rift/Sisters NM Raid<br>\
  3845. Armorsmith Scroll 5 = Baroness NM Raid<br>\
  3846. Weaponsmith Book = Erebus N Quest<br>\
  3847. Weaponsmith Scroll 1 = Baroness NM Raid<br>\
  3848. Weaponsmith Scroll 2 = Research Library 1<br>\
  3849. Weaponsmith Scroll 3 = Dragon's Lair NM Raid<br>\
  3850. Weaponsmith Scroll 4 = Temp loot from Mardachus NM Raid<br>\
  3851. Weaponsmith Scroll 5 = Warlord Zugen NM Raid<br>\
  3852. Alchemist Book = Nalagarst N Quest<br>\
  3853. Alchemist Scroll 1 = Kalaxia N Quest<br>\
  3854. Alchemist Scroll 2 = Research Library 5<br>\
  3855. Alchemist Scroll 3 = The New Claw (World Raid)<br>\
  3856. Alchemist Scroll 4 = Teremarthu NM Raid<br>\
  3857. Research Book = Bellarius N Quest<br>\
  3858. Research Library Scroll 1 = Mardachus NM Raid<br>\
  3859. Research Library Scroll 2 = Valanazes NM Raid<br>\
  3860. Research Library Scroll 3 = Teremarthu NM Raid<br>\
  3861. Research Library Scroll 4 = Z'ralk'thalat NM Raid<br>\
  3862. Research Library Scroll 5 = Simulacrum of Dahrizon NM Quest<br>\
  3863. Research Library Scroll 6 = Count Siculus' Phantom N Quest<br>\
  3864. Pet Emporium Book = Count Siculus' Phantom N Quest<br>\
  3865. Pet Emporium Scroll 1 = Research Library 4<br>\
  3866. Pet Emporium Scroll 2 = Cannibal Barbarians NM Raid<br>\
  3867. Stables Book = Valanazes N Quest<br>\
  3868. Stables Scroll 1 = Frog-men Assassins NM Raid<br>\
  3869. Stables Scroll 2 = Research Library 2<br>\
  3870. Stables Scroll 3 = Mount Chest<br>\
  3871. Training Ground Book = Teremarthu N Quest<br>\
  3872. Training Ground Scroll 1 = Research Library 3<br>\
  3873. Training Ground Scroll 2 = Temporary loot from Z7 NM Raids<br>\
  3874. Training Ground Scroll 3 = Invasion Rank: Wyrm-Commander<br>\
  3875. Training Ground Scroll 4 = Invasion Rank: Chief Battlefield Overseer<br>\
  3876. Training Ground Scroll 5 = Count Siculus' Phantom L&NM Raid<br>\
  3877. Training Ground Scroll 6 = Thaltherda the Sea-Slitherer NM Raid<br>\
  3878. Wizard's Tower Book = Ruzzik the Slayer N Quest<br>\
  3879. Wizard's Tower Scroll 1 = Salome the Seductress NM Raid<br>\
  3880. Wizard's Tower Scroll 2 = Kalaxia the Far-Seer NM Raid<br>\
  3881. Wizard's Tower Scroll 3 = Yydian's Sanctuary NM Raid<br>\
  3882. Wizard's Tower Scroll 4 = Drulcharus NM Raid<br>\
  3883. Jeweler Book = Krugnug N Quest<br>\
  3884. Jeweler Scroll 1 = Thaltherda the Sea-Slitherer NM Raid<br>\
  3885. Jeweler Scroll 2 = Crafting (General/Events)<br>\
  3886. Jeweler Scroll 3 = Spectral Erebus Raid/Crafting");
  3887. return false;
  3888. });
  3889. holodeck.addDotdChatCommand('camp', function(deck, text) {
  3890. var p = text.split(' '), msg = '';
  3891. if (p[1] && SRDotDX.camps.hasOwnProperty(p[1].toLowerCase())) {
  3892. var camp = SRDotDX.camps[p[1].toLowerCase()];
  3893. var num = camp.tiers[0].length, j, jl;
  3894. msg += '<a class="title" target="_blank" href="http://dotd.wikia.com/wiki/' + camp.name.replace(/ /g, '_').replace(/'/g, "%27") + '">' + camp.name + '</a>';
  3895. msg += '<br>Camp time: N ' + camp.time[0] + 'h, H ' + camp.time[1] + 'h<br>Prefixes: ' + camp.prefixes;
  3896. msg += '<br><table class="camps"><thead><tr><th>Dmg</th><th>CU</th>' + (num > 3 ? '<th>R</th><th class="tb">E</th>' : '<th class="tb">RE</th>');
  3897. for(var i = 0, il = camp.numNodes; i < il; ++i) msg += '<th>' + camp[camp.nodes[i]].sname + '</th>'; msg += '</tr></thead><tbody>';
  3898. if(num > 3) {
  3899. for(i = 0, il = camp.tiers.length; i < il; ++i) {
  3900. msg += '<tr class="head"><td class="ep">' + SRDotDX.util.getShortNumMil(camp.tiers[i][0]) + '</td><td>' + camp.tiers[i][1] + '</td><td>' + camp.tiers[i][2] + '</td><td class="tb">' + camp.tiers[i][3] + '</td>';
  3901. for(j = 0, jl = camp.numNodes; j < jl; ++j) msg += camp[camp.nodes[j]].tiers[i] ? '<td class="mark">'+(camp[camp.nodes[j]].epics !== undefined ? camp[camp.nodes[j]].epics[i] : '&#x2713;' )+'</td>' : '<td></td>';
  3902. }
  3903. }
  3904. else {
  3905. for(i = 0, il = camp.tiers.length; i < il; ++i) {
  3906. msg += '<tr class="head"><td class="ep">' + SRDotDX.util.getShortNumMil(camp.tiers[i][0]) + '</td><td>' + camp.tiers[i][1] + '</td><td class="tb">' + camp.tiers[i][2] + '</td>';
  3907. for(j = 0, jl = camp.numNodes; j < jl; ++j) msg += camp[camp.nodes[j]].tiers[i] ? '<td class="mark">&#x2713;</td>' : '<td></td>';
  3908. }
  3909. }
  3910. msg += '</tbody></table>';
  3911. var node;
  3912. for(i = 0, il = camp.numNodes; i < il; ++i) {
  3913. node = camp[camp.nodes[i]];
  3914. msg += (i ? '<br>' : '') + node.sname + ' &mdash; ' + node.name + ', FS: N ' + SRDotDX.util.getShortNumMil(node.hp[0] / node.size) + ' / H ' + SRDotDX.util.getShortNumMil(node.hp[1] / node.size);
  3915. }
  3916. SRDotDX.util.extEcho(msg);
  3917. }
  3918. else SRDotDX.util.extEcho('No campaigns found matching "' + (p[1] ? p[1] : '') + '". Valid values are: ' + Object.keys(SRDotDX.camps).join(', '));
  3919. return false;
  3920. });
  3921. holodeck.addDotdChatCommand('raid,rd', function(deck, text) {
  3922. var p = text.split(' ');
  3923. if(p[1]) {
  3924. var msg = '', j, jl;
  3925. var diff = !isNaN(p[2]) ? p[2] - 1 : -1;
  3926. var fnd = p[1].toLowerCase();
  3927. var keys = Object.keys(SRDotDX.raids);
  3928. for(var k = 0, kl = keys.length; k < kl; ++k) {
  3929. var raid = SRDotDX.raids[keys[k]];
  3930. if(raid.name.toLowerCase().indexOf(fnd) > -1) {
  3931. if(msg !== '') msg += '<hr>';
  3932. msg += '<a class="title" target="_blank" href="http://dotd.wikia.com/wiki/' + raid.name.replace(/ /g, '_').replace(/'/g, "%27") + (raid.stat === 'H' ? '_(Guild_Raid)">' : '_(Raid)">') + raid.name + '</a>';
  3933. msg += '<br>' + (raid.type === '' ? '' : raid.type + '<br>') + SRDotDX.raidSizes[raid.size].name + ' Raid (' + (raid.size === 101 ? 100 : raid.size) + ' slots) | ' + raid.duration + 'h';
  3934. msg += '<br><table class="raids">';
  3935. switch(diff) {
  3936. case 0: msg += '<colgroup><col><col class="selected"><col><col><col></colgroup>'; break;
  3937. case 1: msg += '<colgroup><col><col><col class="selected"><col><col></colgroup>'; break;
  3938. case 2: msg += '<colgroup><col><col><col><col class="selected"><col></colgroup>'; break;
  3939. case 3: msg += '<colgroup><col><col><col><col><col class="selected"></colgroup>'; break;
  3940. default: msg += '<colgroup><col><col><col><col><col></colgroup>'; break;
  3941. }
  3942. var size = raid.size < 15 ? 10 : raid.size, fs = [];
  3943. for(j = 0; j < 4; ++j) fs[j] = raid.health[j] / (raid.size == 101 ? 100 : raid.size);
  3944. msg += '<thead> \
  3945. <tr><th style="border:0; background-color: transparent;"></th><th>Normal</th><th>Hard</th><th>Legend</th><th>NMare</th></tr> \
  3946. </thead> \
  3947. <tbody> \
  3948. <tr class="head"><td class="ep">HP</td><td>' + SRDotDX.util.getShortNum(raid.health[0]) + '</td><td>' + SRDotDX.util.getShortNum(raid.health[1]) + '</td><td>' + SRDotDX.util.getShortNum(raid.health[2]) + '</td><td>' + SRDotDX.util.getShortNum(raid.health[3]) + '</td></tr> \
  3949. <tr class="head"><td class="ep">FS</td><td>' + SRDotDX.util.getShortNum(fs[0]) + '</td><td>' + SRDotDX.util.getShortNum(fs[1]) + '</td><td>' + SRDotDX.util.getShortNum(fs[2]) + '</td><td>' + SRDotDX.util.getShortNum(fs[3]) + '</td></tr> \
  3950. <tr class="head split"><td class="ep">AP</td><td>&mdash;</td><td>&mdash;</td><td>&mdash;</td><td>' + SRDotDX.util.getShortNum(fs[3] / 2.0) + '</td></tr>';
  3951. if(typeof raid.lt !== 'object' && raid.id !== 'rhalmarius_the_despoiler' && raid.id !== 'grundus' && raid.size < 10000) {
  3952. var ratio = SRDotDX.raidSizes[size].ratios;
  3953. var ename = SRDotDX.raidSizes[size].enames;
  3954. for (j = 0, jl = ratio.length; j < jl; ++j) if (ratio[j] > 0) msg += '<tr><td class="ep">' + ename[j] + '</td><td>' + SRDotDX.util.getShortNum(fs[0] * ratio[j]) + '</td><td>' + SRDotDX.util.getShortNum(fs[1] * ratio[j]) + '</td><td>' + SRDotDX.util.getShortNum(fs[2] * ratio[j]) + '</td><td>' + SRDotDX.util.getShortNum(fs[3] * ratio[j]) + '</td></tr>';
  3955. }
  3956. else if (typeof raid.lt === 'object') {
  3957. var elen = SRDotDX.lootTiers[raid.lt[0]].tiers;
  3958. var eleh = SRDotDX.lootTiers[raid.lt[1]].tiers;
  3959. var elel = SRDotDX.lootTiers[raid.lt[2]].tiers;
  3960. var elenm = SRDotDX.lootTiers[raid.lt[3]].tiers;
  3961. var epics = SRDotDX.lootTiers[raid.lt[0]].epics;
  3962. var best = SRDotDX.lootTiers[raid.lt[0]].best;
  3963. var e = SRDotDX.lootTiers[raid.lt[0]].e ? 'E' : '';
  3964. if(typeof elen[0] === 'number') for(j = 0, jl = epics.length; j < jl; ++j) msg += '<tr' + (j === best ? ' class="best"' : '') + '><td class="ep">' + epics[j] + e + '</td><td>' + SRDotDX.util.getShortNumMil(elen[j]) + '</td><td>' + SRDotDX.util.getShortNumMil(eleh[j]) + '</td><td>' + SRDotDX.util.getShortNumMil(elel[j]) + '</td><td>' + SRDotDX.util.getShortNumMil(elenm[j]) + '</td></tr>';
  3965. else msg += '<tr><td class="ep">-</td><td>' + elen[0] + '</td><td>' + eleh[0] + '</td><td>' + elel[0] + '</td><td>' + elenm[0] + '</td></tr>';
  3966. }
  3967. msg += '</tbody></table>';
  3968. }
  3969. }
  3970. if (msg != '') SRDotDX.util.extEcho(msg);
  3971. else SRDotDX.util.extEcho('No raids found matching: ' + p[1]);
  3972. }
  3973. else SRDotDX.util.extEcho('<b>/raid</b>: Invalid parameters specified (<a href="#" onclick="SRDotDX.gui.help(\'raid\')">help</a>)');
  3974. return false;
  3975. });
  3976. window.onbeforeunload = function(){SRDotDX.config.save(false)};
  3977. SRDotDX.fails = 0;
  3978. console.log('[DotDX] Core loaded. Loading user interface...');
  3979. SRDotDX.gui.load();
  3980. SRDotDX.request.init();
  3981. setTimeout(function(){delete SRDotDX.load}, 100);
  3982. }
  3983. else if(++SRDotDX.fails < 20) {
  3984. console.log('[DotDX] Missing needed Kong resources (try:' + SRDotDX.fails + '), retrying in 0.75 second...');
  3985. setTimeout(SRDotDX.load, 750);
  3986. }
  3987. else {
  3988. console.log('[DotDX] Unable to locate required Kong resources. Loading aborted');
  3989. setTimeout(function(){delete SRDotDX}, 1);
  3990. }
  3991. }
  3992. };
  3993. console.log('[DotDX] Initialized. Checking for needed Kong resources ...');
  3994. SRDotDX.load();
  3995. }
  3996.  
  3997. console.log('[DotDX] Initializing ...');
  3998. if (window.top == window.self) {
  3999. document.addEventListener("dotd.req", function (param) {
  4000. var p = JSON.parse(param.data);
  4001. if (p.wrappedJSObject) p = p.wrappedJSObject;
  4002. p.callback = function (e, r) {
  4003. this.onload = null;
  4004. this.onerror = null;
  4005. this.ontimeout = null;
  4006. this.event = e;
  4007. this.status = r.status;
  4008. this.responseText = r.responseText;
  4009. var c = document.createEvent("MessageEvent");
  4010. if (c.initMessageEvent) c.initMessageEvent(this.eventName, false, false, JSON.stringify(this), document.location.protocol + "//" + document.location.hostname, 1, unsafeWindow, null);
  4011. else c = new MessageEvent(this.eventName, {"origin": document.location.protocol + "//" + document.location.hostname, "lastEventId": 1, "source": unsafeWindow, "data": JSON.stringify(this)});
  4012. document.dispatchEvent(c);
  4013. };
  4014. p.onload = p.callback.bind(p, "load");
  4015. p.onerror = p.callback.bind(p, "error");
  4016. p.ontimeout = p.callback.bind(p, "timeout");
  4017. setTimeout(function () {
  4018. GM_xmlhttpRequest(p)
  4019. }, 1);
  4020. });
  4021. var scr = document.createElement('script');
  4022. scr.appendChild(document.createTextNode('(' + main + ')()'));
  4023. document.head.appendChild(scr);
  4024. }
  4025. }
  4026. else if(window.location.host == '50.18.191.15') {
  4027. if (typeof GM_setValue === 'undefined') {
  4028. var GM_setValue = function (name, value)
  4029. {
  4030. localStorage.setItem(name, (typeof value).substring(0, 1) + value);
  4031. };
  4032. }
  4033. if (typeof GM_getValue === 'undefined') {
  4034. var GM_getValue = function (name, dvalue)
  4035. {
  4036. var value = localStorage.getItem(name);
  4037. if (typeof value !== 'string') return dvalue;
  4038. else {
  4039. var type = value.substring(0, 1);
  4040. value = value.substring(1);
  4041. if (type === 'b') return (value === 'true');
  4042. else if (type === 'n') return Number(value);
  4043. else return value;
  4044. }
  4045. };
  4046. }
  4047. window.onmessage = function(e){
  4048. var c = e.data.split('#');
  4049. if(c[0].indexOf('dotdx') !== -1) {
  4050. if(c[0] == 'dotdx.save') {
  4051. GM_setValue('DotDXext', c[1]);
  4052. console.log("[DotDX] Saved data: "+c[1]);
  4053. }
  4054. var conf = JSON.parse(c[1]);
  4055. if(conf.removeWChat) {
  4056. if(document.getElementById('swfdiv') !== null) document.getElementById('swfdiv').parentNode.style.left = '0px';
  4057. if(document.getElementById('chatdiv') !== null) {
  4058. var remdiv = document.getElementById('chatdiv').parentNode;
  4059. remdiv.parentNode.removeChild(remdiv);
  4060. }
  4061. }
  4062. else if(conf.leftWChat && !conf.hideWChat) {
  4063. if(document.getElementById('chatdiv') !== null) document.getElementById('chatdiv').parentNode.style.left = '0px';
  4064. if(document.getElementById('swfdiv') !== null) document.getElementById('swfdiv').parentNode.style.left = '265px';
  4065. }
  4066. else {
  4067. if(document.getElementById('chatdiv') !== null) document.getElementById('chatdiv').parentNode.style.left = '760px';
  4068. if(document.getElementById('swfdiv') !== null) document.getElementById('swfdiv').parentNode.style.left = '0px';
  4069. }
  4070. }
  4071. };
  4072. if (typeof GM_getValue("DotDXext") != 'string') GM_setValue("DotDXext",JSON.stringify({'removeWChat':false,'leftWChat':false,'hideWChat':false}));
  4073. window.postMessage('dotdx.init#'+GM_getValue('DotDXext'),'*');
  4074. console.log("[DotDX] Injected code into GameFrame");
  4075. }