diff --git a/BetterDiscordApp/js/main.js b/BetterDiscordApp/js/main.js
index 430cec7..ff38fc3 100644
--- a/BetterDiscordApp/js/main.js
+++ b/BetterDiscordApp/js/main.js
@@ -311,7 +311,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) *
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _0globals__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../0globals */ \"./src/0globals.js\");\n/* harmony import */ var _dataStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dataStore */ \"./src/modules/dataStore.js\");\n/* harmony import */ var _v2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./v2 */ \"./src/modules/v2.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ \"./src/modules/utils.js\");\n\n\n\n //import DiscordCrypt from \"./DiscordCrypt\";\n\nconst Constants = {\n EmojiRegex: //g\n};\nlet CustomEmojiModule = BDModules.get(e => e.CustomEmoji)[0];\nlet EmojiModuleApi = BDModules.get(e => e.default && e.default.getCustomEmojiById)[0];\nlet AutocompleteModule = BDModules.get(e => e.default && e.default.displayName === \"Autocomplete\")[0];\nlet AutoCompletionTemplates = BDModules.get(e => e.getAutocompleteOptions)[0];\nlet EmojiModuleQuery = BDModules.get(e => e.default && e.default.queryEmojiResults)[0];\nlet Messages = BDModules.get(e => e.default && e.default.Messages && e.default.Messages.EMOJI_MATCHING)[0];\nlet guildModule = BDModules.get(e => e.default && e.default.getGuild && e.default.getGuilds && !e.default.isFetching)[0];\nlet emojiSearch = BDModules.get(e => e.default && e.default.getDisambiguatedEmojiContext);\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmojiModule {\n constructor() {\n this.init();\n }\n\n async init() {\n if (!AutocompleteModule) AutocompleteModule = await window.Lightcord.Api.ensureExported(e => e.default && e.default.displayName === \"Autocomplete\");\n if (!AutoCompletionTemplates) AutoCompletionTemplates = await window.Lightcord.Api.ensureExported(e => e.getAutocompleteOptions);\n if (!EmojiModuleQuery) EmojiModuleQuery = await window.Lightcord.Api.ensureExported(e => e.default && e.default.queryEmojiResults);\n if (!Messages) Messages = await window.Lightcord.Api.ensureExported(e => e.default && e.default.Messages && e.default.Messages.EMOJI_MATCHING);\n if (!guildModule) guildModule = await window.Lightcord.Api.ensureExported(e => e.default && e.default.getGuild && e.default.getGuilds && !e.default.isFetching);\n if (!emojiSearch) emojiSearch = await window.Lightcord.Api.ensureExported(e => e.default && e.default.getDisambiguatedEmojiContext);\n\n if (true\n /** AutocompleteModule && AutoCompletionTemplates && EmojiModuleQuery && Messages && guildModule && emojiSearch */\n ) {\n /*\r\n if(!this.cancelAutocompleteRender){\r\n this.cancelAutocompleteRender = Utils.monkeyPatch(AutocompleteModule, \"default\", {\r\n })\r\n }*/\n console.log(`Patching getAutocompleteOptions of AutoCompletionTemplates`, AutoCompletionTemplates);\n const getAutocompleteOptions = AutoCompletionTemplates.getAutocompleteOptions;\n\n AutoCompletionTemplates.getAutocompleteOptions = function (e, t, n, r, a) {\n const value = getAutocompleteOptions.call(this, ...arguments);\n value.LIGHTCORD_EMOJIS = {\n matches(arg1, arg2) {\n let condition = arg2.length > 1 && \".\" === arg1;\n setEmojiUsable(condition);\n return condition;\n },\n\n queryResults(t) {\n let results = EmojiModuleQuery.default.queryEmojiResults(t, e);\n return results;\n },\n\n renderResults(e, t, n, r, a) {\n return D(e, t, a.emojis, n, r, Messages.default.Messages.EMOJI_MATCHING, Messages.default.Messages.EMOJI, AutocompleteModule.default.Emoji, function (e) {\n return {\n emoji: e,\n key: e.id || e.uniqueName || e.name,\n sentinel: \".\",\n guild: null != e.guildId ? guildModule.default.getGuild(e.guildId) : null\n };\n }, function (e) {\n return \".\" + e + \".\";\n });\n },\n\n getPlainText(id, emojis) {\n var emojis = emojis.emojis;\n return null == emojis || null == emojis[id] ? \"\" : \".\" + emojis[id].name + \".\";\n },\n\n getRawText(id, guild) {\n var emojis = guild.emojis;\n if (null == emojis || null == emojis[id]) return \"\";\n var emoji = emojis[id],\n isAnimated = emoji.animated ? \"a\" : \"\";\n return emoji.managed || null == emoji.id ? \".\" + emoji.name + \".\" : \"<\" + isAnimated + \".\" + (emoji.originalName || emoji.name) + \".\" + emoji.id + \">\";\n }\n\n };\n return value;\n };\n } else {}\n\n while (!_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].MessageComponent) await new Promise(resolve => setTimeout(resolve, 100));\n\n if (!this.cancelEmojiRender) {\n this.cancelEmoteRender = _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].monkeyPatch(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].MessageComponent, \"default\", {\n before: data => {\n const message = _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getNestedProp(data.methodArguments[0], \"childrenMessageContent.props.message\");\n if (!message) return;\n const content = _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getNestedProp(data.methodArguments[0], \"childrenMessageContent.props.content\");\n if (!content || !content.length) return; // content = DiscordCrypt.decryptContent(content)\n\n /**\r\n * @type {{\r\n * raw: string,\r\n * name: string,\r\n * id: string,\r\n * animated: boolean\r\n * }[]}\r\n */\n\n let emojis = [];\n const newContent = [];\n\n for (let node of content) {\n if (typeof node !== \"string\") {\n newContent.push(node);\n continue;\n }\n\n ;\n let parsed;\n let hasParsed = false;\n\n do {\n parsed = Constants.EmojiRegex.exec(node);\n\n if (parsed) {\n hasParsed = true;\n if (!EmojiModuleApi) EmojiModuleApi = BDModules.get(e => e.default && e.default.getCustomEmojiById)[0];\n const emoji = EmojiModuleApi.default.getCustomEmojiById(parsed[2]);\n\n if (emoji) {\n emojis.push({\n animated: emoji.animated,\n name: emoji.name,\n id: emoji.id,\n raw: parsed[0]\n });\n } else {\n emojis.push({\n animated: parsed[0].startsWith(\" {\n if (!word) return \"\";\n const emoji = emojis.find(e => e.raw == word);\n if (!emoji) return word;\n if (!CustomEmojiModule) CustomEmojiModule = BDModules.get(e => e.CustomEmoji)[0];\n return React.createElement(CustomEmojiModule.CustomEmoji, {\n emoji: {\n name: `.${emoji.name}.`,\n emojiId: emoji.id,\n animated: emoji.animated,\n jumboable: arr.length === 1 && content.length === 1\n }\n });\n }).reduce((previous, current) => {\n if (previous.length === 0) return [current];\n\n if (typeof current === \"string\") {\n if (typeof previous[previous.length - 1] === \"string\") {\n previous[previous.length - 1] += ` ${current}`;\n return previous;\n }\n\n previous.push(\" \" + current);\n return previous;\n }\n\n previous.push(\" \", current);\n return previous;\n }, []);\n newContent.push(...words);\n } else {\n newContent.push(node);\n }\n }\n\n while (data.methodArguments[0].childrenMessageContent.props.content[0]) {\n data.methodArguments[0].childrenMessageContent.props.content.shift();\n }\n\n while (newContent[0]) {\n data.methodArguments[0].childrenMessageContent.props.content.push(newContent.shift());\n }\n }\n });\n }\n }\n\n disable() {\n if (!this.cancelEmoteRender) return;\n this.cancelEmoteRender();\n this.cancelEmoteRender = null;\n }\n\n}());\n\nfunction D(e, t, n, r, o, i, s, u, l, c) {\n if (null == n || 0 === n.length) return null;\n var d = n.map(function (e, n) {\n return React.createElement(u, Object.assign({\n onClick: o,\n onHover: r,\n selected: t === n,\n index: n\n }, l(e, n)));\n });\n return [R(i, s, e, c), d];\n}\n\nfunction R(e, t, n, r) {\n var a = n.length > 0 ? e.format({\n prefix: r(n)\n }) : t;\n\n if (Array.isArray(a)) {\n a.unshift(React.createElement(\"strong\", {}, \"[Lightcord] \"));\n } else {\n a = \"[LIGHTCORD] \" + a;\n }\n\n return React.createElement(AutocompleteModule.default.Title, {\n title: a\n }, a);\n}\n\nR.displayName = \"renderHeader\";\nlet EmojiFilterModule = BDModules.get(e => e.default && e.default.isEmojiDisabled)[0];\nlet isEmojiDisabled = EmojiFilterModule && EmojiFilterModule.default.isEmojiDisabled;\nlet isUsable = false;\nlet hasPatched = false;\n\nfunction setEmojiUsable(usable) {\n isUsable = usable;\n if (hasPatched) return;\n if (!EmojiFilterModule) EmojiFilterModule = BDModules.get(e => e.default && e.default.isEmojiDisabled)[0];\n if (!EmojiFilterModule) return;\n if (!isEmojiDisabled) isEmojiDisabled = EmojiFilterModule.default.isEmojiDisabled;\n hasPatched = true;\n\n EmojiFilterModule.default.isEmojiDisabled = function () {\n if (isUsable) return false;\n return isEmojiDisabled.call(this, ...arguments);\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcz8wODg4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJkQ29uZmlnLCBzZXR0aW5nc0Nvb2tpZSB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjsgLy9pbXBvcnQgRGlzY29yZENyeXB0IGZyb20gXCIuL0Rpc2NvcmRDcnlwdFwiO1xuXG5jb25zdCBDb25zdGFudHMgPSB7XG4gIEVtb2ppUmVnZXg6IC88YT9cXC4oXFx3KylcXC4oXFxkKyk+L2dcbn07XG5sZXQgQ3VzdG9tRW1vamlNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5DdXN0b21FbW9qaSlbMF07XG5sZXQgRW1vamlNb2R1bGVBcGkgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXN0b21FbW9qaUJ5SWQpWzBdO1xubGV0IEF1dG9jb21wbGV0ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkF1dG9jb21wbGV0ZVwiKVswXTtcbmxldCBBdXRvQ29tcGxldGlvblRlbXBsYXRlcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMpWzBdO1xubGV0IEVtb2ppTW9kdWxlUXVlcnkgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5xdWVyeUVtb2ppUmVzdWx0cylbMF07XG5sZXQgTWVzc2FnZXMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcyAmJiBlLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcpWzBdO1xubGV0IGd1aWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGQgJiYgZS5kZWZhdWx0LmdldEd1aWxkcyAmJiAhZS5kZWZhdWx0LmlzRmV0Y2hpbmcpWzBdO1xubGV0IGVtb2ppU2VhcmNoID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0RGlzYW1iaWd1YXRlZEVtb2ppQ29udGV4dCk7XG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRW1vamlNb2R1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIGFzeW5jIGluaXQoKSB7XG4gICAgaWYgKCFBdXRvY29tcGxldGVNb2R1bGUpIEF1dG9jb21wbGV0ZU1vZHVsZSA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdXRvY29tcGxldGVcIik7XG4gICAgaWYgKCFBdXRvQ29tcGxldGlvblRlbXBsYXRlcykgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyk7XG4gICAgaWYgKCFFbW9qaU1vZHVsZVF1ZXJ5KSBFbW9qaU1vZHVsZVF1ZXJ5ID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKTtcbiAgICBpZiAoIU1lc3NhZ2VzKSBNZXNzYWdlcyA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcyAmJiBlLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcpO1xuICAgIGlmICghZ3VpbGRNb2R1bGUpIGd1aWxkTW9kdWxlID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEd1aWxkICYmIGUuZGVmYXVsdC5nZXRHdWlsZHMgJiYgIWUuZGVmYXVsdC5pc0ZldGNoaW5nKTtcbiAgICBpZiAoIWVtb2ppU2VhcmNoKSBlbW9qaVNlYXJjaCA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXREaXNhbWJpZ3VhdGVkRW1vamlDb250ZXh0KTtcblxuICAgIGlmICh0cnVlXG4gICAgLyoqIEF1dG9jb21wbGV0ZU1vZHVsZSAmJiBBdXRvQ29tcGxldGlvblRlbXBsYXRlcyAmJiBFbW9qaU1vZHVsZVF1ZXJ5ICYmIE1lc3NhZ2VzICYmIGd1aWxkTW9kdWxlICYmIGVtb2ppU2VhcmNoICovXG4gICAgKSB7XG4gICAgICAgIC8qXHJcbiAgICAgICAgaWYoIXRoaXMuY2FuY2VsQXV0b2NvbXBsZXRlUmVuZGVyKXtcclxuICAgICAgICB0aGlzLmNhbmNlbEF1dG9jb21wbGV0ZVJlbmRlciA9IFV0aWxzLm1vbmtleVBhdGNoKEF1dG9jb21wbGV0ZU1vZHVsZSwgXCJkZWZhdWx0XCIsIHtcclxuICAgICAgICB9KVxyXG4gICAgICAgIH0qL1xuICAgICAgICBjb25zb2xlLmxvZyhgUGF0Y2hpbmcgZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyBvZiBBdXRvQ29tcGxldGlvblRlbXBsYXRlc2AsIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzKTtcbiAgICAgICAgY29uc3QgZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyA9IEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzLmdldEF1dG9jb21wbGV0ZU9wdGlvbnM7XG5cbiAgICAgICAgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMuZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyA9IGZ1bmN0aW9uIChlLCB0LCBuLCByLCBhKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRBdXRvY29tcGxldGVPcHRpb25zLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICB2YWx1ZS5MSUdIVENPUkRfRU1PSklTID0ge1xuICAgICAgICAgICAgbWF0Y2hlcyhhcmcxLCBhcmcyKSB7XG4gICAgICAgICAgICAgIGxldCBjb25kaXRpb24gPSBhcmcyLmxlbmd0aCA+IDEgJiYgXCIuXCIgPT09IGFyZzE7XG4gICAgICAgICAgICAgIHNldEVtb2ppVXNhYmxlKGNvbmRpdGlvbik7XG4gICAgICAgICAgICAgIHJldHVybiBjb25kaXRpb247XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBxdWVyeVJlc3VsdHModCkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0cyA9IEVtb2ppTW9kdWxlUXVlcnkuZGVmYXVsdC5xdWVyeUVtb2ppUmVzdWx0cyh0LCBlKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICByZW5kZXJSZXN1bHRzKGUsIHQsIG4sIHIsIGEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIEQoZSwgdCwgYS5lbW9qaXMsIG4sIHIsIE1lc3NhZ2VzLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcsIE1lc3NhZ2VzLmRlZmF1bHQuTWVzc2FnZXMuRU1PSkksIEF1dG9jb21wbGV0ZU1vZHVsZS5kZWZhdWx0LkVtb2ppLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBlbW9qaTogZSxcbiAgICAgICAgICAgICAgICAgIGtleTogZS5pZCB8fCBlLnVuaXF1ZU5hbWUgfHwgZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgc2VudGluZWw6IFwiLlwiLFxuICAgICAgICAgICAgICAgICAgZ3VpbGQ6IG51bGwgIT0gZS5ndWlsZElkID8gZ3VpbGRNb2R1bGUuZGVmYXVsdC5nZXRHdWlsZChlLmd1aWxkSWQpIDogbnVsbFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiLlwiICsgZSArIFwiLlwiO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldFBsYWluVGV4dChpZCwgZW1vamlzKSB7XG4gICAgICAgICAgICAgIHZhciBlbW9qaXMgPSBlbW9qaXMuZW1vamlzO1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbCA9PSBlbW9qaXMgfHwgbnVsbCA9PSBlbW9qaXNbaWRdID8gXCJcIiA6IFwiLlwiICsgZW1vamlzW2lkXS5uYW1lICsgXCIuXCI7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXRSYXdUZXh0KGlkLCBndWlsZCkge1xuICAgICAgICAgICAgICB2YXIgZW1vamlzID0gZ3VpbGQuZW1vamlzO1xuICAgICAgICAgICAgICBpZiAobnVsbCA9PSBlbW9qaXMgfHwgbnVsbCA9PSBlbW9qaXNbaWRdKSByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgdmFyIGVtb2ppID0gZW1vamlzW2lkXSxcbiAgICAgICAgICAgICAgICAgIGlzQW5pbWF0ZWQgPSBlbW9qaS5hbmltYXRlZCA/IFwiYVwiIDogXCJcIjtcbiAgICAgICAgICAgICAgcmV0dXJuIGVtb2ppLm1hbmFnZWQgfHwgbnVsbCA9PSBlbW9qaS5pZCA/IFwiLlwiICsgZW1vamkubmFtZSArIFwiLlwiIDogXCI8XCIgKyBpc0FuaW1hdGVkICsgXCIuXCIgKyAoZW1vamkub3JpZ2luYWxOYW1lIHx8IGVtb2ppLm5hbWUpICsgXCIuXCIgKyBlbW9qaS5pZCArIFwiPlwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihuZXcgRXJyb3IoXCJDb3VsZG4ndCBzdGFydCBhdXRvY29tcGxldGlvbiBvZiBMaWdodGNvcmQncyBlbW9qaXMuXCIpKTtcbiAgICB9XG5cbiAgICB3aGlsZSAoIUJEVjIuTWVzc2FnZUNvbXBvbmVudCkgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xuXG4gICAgaWYgKCF0aGlzLmNhbmNlbEVtb2ppUmVuZGVyKSB7XG4gICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge1xuICAgICAgICBiZWZvcmU6IGRhdGEgPT4ge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcImNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZVwiKTtcbiAgICAgICAgICBpZiAoIW1lc3NhZ2UpIHJldHVybjtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnRcIik7XG4gICAgICAgICAgaWYgKCFjb250ZW50IHx8ICFjb250ZW50Lmxlbmd0aCkgcmV0dXJuOyAvLyBjb250ZW50ID0gRGlzY29yZENyeXB0LmRlY3J5cHRDb250ZW50KGNvbnRlbnQpXG5cbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIEB0eXBlIHt7XHJcbiAgICAgICAgICAgKiAgcmF3OiBzdHJpbmcsXHJcbiAgICAgICAgICAgKiAgbmFtZTogc3RyaW5nLFxyXG4gICAgICAgICAgICogIGlkOiBzdHJpbmcsXHJcbiAgICAgICAgICAgKiAgYW5pbWF0ZWQ6IGJvb2xlYW5cclxuICAgICAgICAgICAqIH1bXX1cclxuICAgICAgICAgICAqL1xuXG4gICAgICAgICAgbGV0IGVtb2ppcyA9IFtdO1xuICAgICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBbXTtcblxuICAgICAgICAgIGZvciAobGV0IG5vZGUgb2YgY29udGVudCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIGxldCBwYXJzZWQ7XG4gICAgICAgICAgICBsZXQgaGFzUGFyc2VkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcGFyc2VkID0gQ29uc3RhbnRzLkVtb2ppUmVnZXguZXhlYyhub2RlKTtcblxuICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgaGFzUGFyc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoIUVtb2ppTW9kdWxlQXBpKSBFbW9qaU1vZHVsZUFwaSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZClbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgZW1vamkgPSBFbW9qaU1vZHVsZUFwaS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZChwYXJzZWRbMl0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVtb2ppKSB7XG4gICAgICAgICAgICAgICAgICBlbW9qaXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBlbW9qaS5hbmltYXRlZCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZW1vamkubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGVtb2ppLmlkLFxuICAgICAgICAgICAgICAgICAgICByYXc6IHBhcnNlZFswXVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGVtb2ppcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IHBhcnNlZFswXS5zdGFydHNXaXRoKFwiPGFcIiksXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcnNlZFsxXSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHBhcnNlZFsyXSxcbiAgICAgICAgICAgICAgICAgICAgcmF3OiBwYXJzZWRbMF1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocGFyc2VkKTtcblxuICAgICAgICAgICAgaWYgKGhhc1BhcnNlZCkge1xuICAgICAgICAgICAgICBjb25zdCB3b3JkcyA9IG5vZGUuc3BsaXQoXCIgXCIpLm1hcCgod29yZCwgaW5kZXgsIGFycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghd29yZCkgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICAgICAgY29uc3QgZW1vamkgPSBlbW9qaXMuZmluZChlID0+IGUucmF3ID09IHdvcmQpO1xuICAgICAgICAgICAgICAgIGlmICghZW1vamkpIHJldHVybiB3b3JkO1xuICAgICAgICAgICAgICAgIGlmICghQ3VzdG9tRW1vamlNb2R1bGUpIEN1c3RvbUVtb2ppTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuQ3VzdG9tRW1vamkpWzBdO1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEN1c3RvbUVtb2ppTW9kdWxlLkN1c3RvbUVtb2ppLCB7XG4gICAgICAgICAgICAgICAgICBlbW9qaToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBgLiR7ZW1vamkubmFtZX0uYCxcbiAgICAgICAgICAgICAgICAgICAgZW1vamlJZDogZW1vamkuaWQsXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBlbW9qaS5hbmltYXRlZCxcbiAgICAgICAgICAgICAgICAgICAganVtYm9hYmxlOiBhcnIubGVuZ3RoID09PSAxICYmIGNvbnRlbnQubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXMubGVuZ3RoID09PSAwKSByZXR1cm4gW2N1cnJlbnRdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByZXZpb3VzW3ByZXZpb3VzLmxlbmd0aCAtIDFdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzW3ByZXZpb3VzLmxlbmd0aCAtIDFdICs9IGAgJHtjdXJyZW50fWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcHJldmlvdXMucHVzaChcIiBcIiArIGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHByZXZpb3VzLnB1c2goXCIgXCIsIGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICAgICAgICBuZXdDb250ZW50LnB1c2goLi4ud29yZHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3Q29udGVudC5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaWxlIChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnRbMF0pIHtcbiAgICAgICAgICAgIGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudC5zaGlmdCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaWxlIChuZXdDb250ZW50WzBdKSB7XG4gICAgICAgICAgICBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnQucHVzaChuZXdDb250ZW50LnNoaWZ0KCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICBpZiAoIXRoaXMuY2FuY2VsRW1vdGVSZW5kZXIpIHJldHVybjtcbiAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyKCk7XG4gICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlciA9IG51bGw7XG4gIH1cblxufSgpO1xuXG5mdW5jdGlvbiBEKGUsIHQsIG4sIHIsIG8sIGksIHMsIHUsIGwsIGMpIHtcbiAgaWYgKG51bGwgPT0gbiB8fCAwID09PSBuLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gIHZhciBkID0gbi5tYXAoZnVuY3Rpb24gKGUsIG4pIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCh1LCBPYmplY3QuYXNzaWduKHtcbiAgICAgIG9uQ2xpY2s6IG8sXG4gICAgICBvbkhvdmVyOiByLFxuICAgICAgc2VsZWN0ZWQ6IHQgPT09IG4sXG4gICAgICBpbmRleDogblxuICAgIH0sIGwoZSwgbikpKTtcbiAgfSk7XG4gIHJldHVybiBbUihpLCBzLCBlLCBjKSwgZF07XG59XG5cbmZ1bmN0aW9uIFIoZSwgdCwgbiwgcikge1xuICB2YXIgYSA9IG4ubGVuZ3RoID4gMCA/IGUuZm9ybWF0KHtcbiAgICBwcmVmaXg6IHIobilcbiAgfSkgOiB0O1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgYS51bnNoaWZ0KFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdHJvbmdcIiwge30sIFwiW0xpZ2h0Y29yZF0gXCIpKTtcbiAgfSBlbHNlIHtcbiAgICBhID0gXCJbTElHSFRDT1JEXSBcIiArIGE7XG4gIH1cblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChBdXRvY29tcGxldGVNb2R1bGUuZGVmYXVsdC5UaXRsZSwge1xuICAgIHRpdGxlOiBhXG4gIH0sIGEpO1xufVxuXG5SLmRpc3BsYXlOYW1lID0gXCJyZW5kZXJIZWFkZXJcIjtcbmxldCBFbW9qaUZpbHRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZClbMF07XG5sZXQgaXNFbW9qaURpc2FibGVkID0gRW1vamlGaWx0ZXJNb2R1bGUgJiYgRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQ7XG5sZXQgaXNVc2FibGUgPSBmYWxzZTtcbmxldCBoYXNQYXRjaGVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHNldEVtb2ppVXNhYmxlKHVzYWJsZSkge1xuICBpc1VzYWJsZSA9IHVzYWJsZTtcbiAgaWYgKGhhc1BhdGNoZWQpIHJldHVybjtcbiAgaWYgKCFFbW9qaUZpbHRlck1vZHVsZSkgRW1vamlGaWx0ZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQpWzBdO1xuICBpZiAoIUVtb2ppRmlsdGVyTW9kdWxlKSByZXR1cm47XG4gIGlmICghaXNFbW9qaURpc2FibGVkKSBpc0Vtb2ppRGlzYWJsZWQgPSBFbW9qaUZpbHRlck1vZHVsZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZDtcbiAgaGFzUGF0Y2hlZCA9IHRydWU7XG5cbiAgRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGlzVXNhYmxlKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGlzRW1vamlEaXNhYmxlZC5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cyk7XG4gIH07XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/emojiModule.js\n");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _0globals__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../0globals */ \"./src/0globals.js\");\n/* harmony import */ var _dataStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dataStore */ \"./src/modules/dataStore.js\");\n/* harmony import */ var _v2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./v2 */ \"./src/modules/v2.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ \"./src/modules/utils.js\");\n\n\n\n //import DiscordCrypt from \"./DiscordCrypt\";\n\nconst Constants = {\n EmojiRegex: //g\n};\nlet CustomEmojiModule = BDModules.get(e => e.CustomEmoji)[0];\nlet EmojiModuleApi = BDModules.get(e => e.default && e.default.getCustomEmojiById)[0];\nlet AutocompleteModule = BDModules.get(e => e.default && e.default.displayName === \"Autocomplete\")[0];\nlet AutoCompletionTemplates = BDModules.get(e => e.getAutocompleteOptions)[0];\nlet EmojiModuleQuery = BDModules.get(e => e.default && e.default.queryEmojiResults)[0];\nlet Messages = BDModules.get(e => e.default && e.default.Messages && e.default.Messages.EMOJI_MATCHING)[0];\nlet guildModule = BDModules.get(e => e.default && e.default.getGuild && e.default.getGuilds && !e.default.isFetching)[0];\nlet emojiSearch = BDModules.get(e => e.default && e.default.getDisambiguatedEmojiContext);\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmojiModule {\n constructor() {\n this.init();\n }\n\n async init() {\n /** Emoji AutoComplete */\n if (!AutocompleteModule) AutocompleteModule = await window.Lightcord.Api.ensureExported(e => e.default && e.default.displayName === \"Autocomplete\");\n if (!AutoCompletionTemplates) AutoCompletionTemplates = await window.Lightcord.Api.ensureExported(e => e.getAutocompleteOptions);\n if (!EmojiModuleQuery) EmojiModuleQuery = await window.Lightcord.Api.ensureExported(e => e.default && e.default.queryEmojiResults);\n if (!Messages) Messages = await window.Lightcord.Api.ensureExported(e => e.default && e.default.Messages && e.default.Messages.EMOJI_MATCHING);\n if (!guildModule) guildModule = await window.Lightcord.Api.ensureExported(e => e.default && e.default.getGuild && e.default.getGuilds && !e.default.isFetching);\n if (!emojiSearch) emojiSearch = await window.Lightcord.Api.ensureExported(e => e.default && e.default.getDisambiguatedEmojiContext);\n\n if (AutocompleteModule && AutoCompletionTemplates && EmojiModuleQuery && Messages && guildModule && emojiSearch) {\n console.log(`Patching getAutocompleteOptions of AutoCompletionTemplates`, AutoCompletionTemplates);\n const getAutocompleteOptions = AutoCompletionTemplates.getAutocompleteOptions;\n\n AutoCompletionTemplates.getAutocompleteOptions = function (e, t, n, r, a) {\n const value = getAutocompleteOptions.call(this, ...arguments);\n value.LIGHTCORD_EMOJIS = {\n matches(arg1, arg2) {\n let condition = arg2.length > 1 && \".\" === arg1;\n setEmojiUsable(condition);\n return condition;\n },\n\n queryResults(t) {\n let results = EmojiModuleQuery.default.queryEmojiResults(t, e);\n return results;\n },\n\n renderResults(e, t, n, r, a) {\n return D(e, t, a.emojis, n, r, Messages.default.Messages.EMOJI_MATCHING, Messages.default.Messages.EMOJI, AutocompleteModule.default.Emoji, function (e) {\n return {\n emoji: e,\n key: e.id || e.uniqueName || e.name,\n sentinel: \".\",\n guild: null != e.guildId ? guildModule.default.getGuild(e.guildId) : null\n };\n }, function (e) {\n return \".\" + e + \".\";\n });\n },\n\n getPlainText(id, guild) {\n var emojis = guild.emojis;\n if (null == emojis || null == emojis[id]) return \"\";\n var emoji = emojis[id],\n isAnimated = emoji.animated ? \"a\" : \"\";\n return emoji.managed || null == emoji.id ? \".\" + emoji.name + \".\" : \"<\" + isAnimated + \".\" + (emoji.originalName || emoji.name) + \".\" + emoji.id + \">\";\n },\n\n getRawText(id, guild) {\n var emojis = guild.emojis;\n if (null == emojis || null == emojis[id]) return \"\";\n var emoji = emojis[id],\n isAnimated = emoji.animated ? \"a\" : \"\";\n return emoji.managed || null == emoji.id ? \".\" + emoji.name + \".\" : \"<\" + isAnimated + \".\" + (emoji.originalName || emoji.name) + \".\" + emoji.id + \">\";\n }\n\n };\n return value;\n };\n } else {\n console.error(new Error(\"Couldn't start autocompletion of Lightcord's emojis.\"));\n }\n /** Emoji display */\n\n\n while (!_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].MessageComponent) await new Promise(resolve => setTimeout(resolve, 100));\n\n if (!this.cancelEmojiRender) {\n this.cancelEmoteRender = _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].monkeyPatch(_v2__WEBPACK_IMPORTED_MODULE_2__[\"default\"].MessageComponent, \"default\", {\n before: data => {\n const message = _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getNestedProp(data.methodArguments[0], \"childrenMessageContent.props.message\");\n if (!message) return;\n const content = _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getNestedProp(data.methodArguments[0], \"childrenMessageContent.props.content\");\n if (!content || !content.length) return; // content = DiscordCrypt.decryptContent(content)\n\n /**\r\n * @type {{\r\n * raw: string,\r\n * name: string,\r\n * id: string,\r\n * animated: boolean\r\n * }[]}\r\n */\n\n let emojis = [];\n const newContent = [];\n\n for (let node of content) {\n if (typeof node !== \"string\") {\n newContent.push(node);\n continue;\n }\n\n ;\n let parsed;\n let hasParsed = false;\n\n do {\n parsed = Constants.EmojiRegex.exec(node);\n\n if (parsed) {\n hasParsed = true;\n if (!EmojiModuleApi) EmojiModuleApi = BDModules.get(e => e.default && e.default.getCustomEmojiById)[0];\n const emoji = EmojiModuleApi.default.getCustomEmojiById(parsed[2]);\n\n if (emoji) {\n emojis.push({\n animated: emoji.animated,\n name: emoji.name,\n id: emoji.id,\n raw: parsed[0]\n });\n } else {\n emojis.push({\n animated: parsed[0].startsWith(\" {\n if (!word) return \"\";\n const emoji = emojis.find(e => e.raw == word);\n if (!emoji) return word;\n if (!CustomEmojiModule) CustomEmojiModule = BDModules.get(e => e.CustomEmoji)[0];\n return React.createElement(CustomEmojiModule.CustomEmoji, {\n emoji: {\n name: `.${emoji.name}.`,\n emojiId: emoji.id,\n animated: emoji.animated,\n jumboable: arr.length === 1 && content.length === 1\n }\n });\n }).reduce((previous, current) => {\n if (previous.length === 0) return [current];\n\n if (typeof current === \"string\") {\n if (typeof previous[previous.length - 1] === \"string\") {\n previous[previous.length - 1] += ` ${current}`;\n return previous;\n }\n\n previous.push(\" \" + current);\n return previous;\n }\n\n previous.push(\" \", current);\n return previous;\n }, []);\n newContent.push(...words);\n } else {\n newContent.push(node);\n }\n }\n\n while (data.methodArguments[0].childrenMessageContent.props.content[0]) {\n data.methodArguments[0].childrenMessageContent.props.content.shift();\n }\n\n while (newContent[0]) {\n data.methodArguments[0].childrenMessageContent.props.content.push(newContent.shift());\n }\n }\n });\n }\n }\n\n disable() {\n if (!this.cancelEmoteRender) return;\n this.cancelEmoteRender();\n this.cancelEmoteRender = null;\n }\n\n}());\n\nfunction D(e, t, n, r, o, i, s, u, l, c) {\n if (null == n || 0 === n.length) return null;\n var d = n.map(function (e, n) {\n return React.createElement(u, Object.assign({\n onClick: o,\n onHover: r,\n selected: t === n,\n index: n\n }, l(e, n)));\n });\n return [R(i, s, e, c), d];\n}\n\nfunction R(e, t, n, r) {\n var a = n.length > 0 ? e.format({\n prefix: r(n)\n }) : t;\n\n if (Array.isArray(a)) {\n a.unshift(React.createElement(\"strong\", {}, \"[Lightcord] \"));\n } else {\n a = \"[LIGHTCORD] \" + a;\n }\n\n return React.createElement(AutocompleteModule.default.Title, {\n title: a\n }, a);\n}\n\nR.displayName = \"renderHeader\";\nlet EmojiFilterModule = BDModules.get(e => e.default && e.default.isEmojiDisabled)[0];\nlet isEmojiDisabled = EmojiFilterModule && EmojiFilterModule.default.isEmojiDisabled;\nlet isUsable = false;\nlet hasPatched = false;\n\nfunction setEmojiUsable(usable) {\n isUsable = usable;\n if (hasPatched) return;\n if (!EmojiFilterModule) EmojiFilterModule = BDModules.get(e => e.default && e.default.isEmojiDisabled)[0];\n if (!EmojiFilterModule) return;\n if (!isEmojiDisabled) isEmojiDisabled = EmojiFilterModule.default.isEmojiDisabled;\n hasPatched = true;\n\n EmojiFilterModule.default.isEmojiDisabled = function (emoji) {\n if (isUsable) {\n if (emoji.surrogates || emoji.diversity) return true;\n return false;\n }\n\n return isEmojiDisabled.call(this, ...arguments);\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcz8wODg4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJkQ29uZmlnLCBzZXR0aW5nc0Nvb2tpZSB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjsgLy9pbXBvcnQgRGlzY29yZENyeXB0IGZyb20gXCIuL0Rpc2NvcmRDcnlwdFwiO1xuXG5jb25zdCBDb25zdGFudHMgPSB7XG4gIEVtb2ppUmVnZXg6IC88YT9cXC4oXFx3KylcXC4oXFxkKyk+L2dcbn07XG5sZXQgQ3VzdG9tRW1vamlNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5DdXN0b21FbW9qaSlbMF07XG5sZXQgRW1vamlNb2R1bGVBcGkgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXN0b21FbW9qaUJ5SWQpWzBdO1xubGV0IEF1dG9jb21wbGV0ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkF1dG9jb21wbGV0ZVwiKVswXTtcbmxldCBBdXRvQ29tcGxldGlvblRlbXBsYXRlcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMpWzBdO1xubGV0IEVtb2ppTW9kdWxlUXVlcnkgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5xdWVyeUVtb2ppUmVzdWx0cylbMF07XG5sZXQgTWVzc2FnZXMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcyAmJiBlLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcpWzBdO1xubGV0IGd1aWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGQgJiYgZS5kZWZhdWx0LmdldEd1aWxkcyAmJiAhZS5kZWZhdWx0LmlzRmV0Y2hpbmcpWzBdO1xubGV0IGVtb2ppU2VhcmNoID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0RGlzYW1iaWd1YXRlZEVtb2ppQ29udGV4dCk7XG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRW1vamlNb2R1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIGFzeW5jIGluaXQoKSB7XG4gICAgLyoqIEVtb2ppIEF1dG9Db21wbGV0ZSAqL1xuICAgIGlmICghQXV0b2NvbXBsZXRlTW9kdWxlKSBBdXRvY29tcGxldGVNb2R1bGUgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiQXV0b2NvbXBsZXRlXCIpO1xuICAgIGlmICghQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMpIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMpO1xuICAgIGlmICghRW1vamlNb2R1bGVRdWVyeSkgRW1vamlNb2R1bGVRdWVyeSA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5xdWVyeUVtb2ppUmVzdWx0cyk7XG4gICAgaWYgKCFNZXNzYWdlcykgTWVzc2FnZXMgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJX01BVENISU5HKTtcbiAgICBpZiAoIWd1aWxkTW9kdWxlKSBndWlsZE1vZHVsZSA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRHdWlsZCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGRzICYmICFlLmRlZmF1bHQuaXNGZXRjaGluZyk7XG4gICAgaWYgKCFlbW9qaVNlYXJjaCkgZW1vamlTZWFyY2ggPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0RGlzYW1iaWd1YXRlZEVtb2ppQ29udGV4dCk7XG5cbiAgICBpZiAoQXV0b2NvbXBsZXRlTW9kdWxlICYmIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzICYmIEVtb2ppTW9kdWxlUXVlcnkgJiYgTWVzc2FnZXMgJiYgZ3VpbGRNb2R1bGUgJiYgZW1vamlTZWFyY2gpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBQYXRjaGluZyBnZXRBdXRvY29tcGxldGVPcHRpb25zIG9mIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzYCwgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMpO1xuICAgICAgY29uc3QgZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyA9IEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzLmdldEF1dG9jb21wbGV0ZU9wdGlvbnM7XG5cbiAgICAgIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMgPSBmdW5jdGlvbiAoZSwgdCwgbiwgciwgYSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGdldEF1dG9jb21wbGV0ZU9wdGlvbnMuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpO1xuICAgICAgICB2YWx1ZS5MSUdIVENPUkRfRU1PSklTID0ge1xuICAgICAgICAgIG1hdGNoZXMoYXJnMSwgYXJnMikge1xuICAgICAgICAgICAgbGV0IGNvbmRpdGlvbiA9IGFyZzIubGVuZ3RoID4gMSAmJiBcIi5cIiA9PT0gYXJnMTtcbiAgICAgICAgICAgIHNldEVtb2ppVXNhYmxlKGNvbmRpdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBxdWVyeVJlc3VsdHModCkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBFbW9qaU1vZHVsZVF1ZXJ5LmRlZmF1bHQucXVlcnlFbW9qaVJlc3VsdHModCwgZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgcmVuZGVyUmVzdWx0cyhlLCB0LCBuLCByLCBhKSB7XG4gICAgICAgICAgICByZXR1cm4gRChlLCB0LCBhLmVtb2ppcywgbiwgciwgTWVzc2FnZXMuZGVmYXVsdC5NZXNzYWdlcy5FTU9KSV9NQVRDSElORywgTWVzc2FnZXMuZGVmYXVsdC5NZXNzYWdlcy5FTU9KSSwgQXV0b2NvbXBsZXRlTW9kdWxlLmRlZmF1bHQuRW1vamksIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZW1vamk6IGUsXG4gICAgICAgICAgICAgICAga2V5OiBlLmlkIHx8IGUudW5pcXVlTmFtZSB8fCBlLm5hbWUsXG4gICAgICAgICAgICAgICAgc2VudGluZWw6IFwiLlwiLFxuICAgICAgICAgICAgICAgIGd1aWxkOiBudWxsICE9IGUuZ3VpbGRJZCA/IGd1aWxkTW9kdWxlLmRlZmF1bHQuZ2V0R3VpbGQoZS5ndWlsZElkKSA6IG51bGxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBcIi5cIiArIGUgKyBcIi5cIjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBnZXRQbGFpblRleHQoaWQsIGd1aWxkKSB7XG4gICAgICAgICAgICB2YXIgZW1vamlzID0gZ3VpbGQuZW1vamlzO1xuICAgICAgICAgICAgaWYgKG51bGwgPT0gZW1vamlzIHx8IG51bGwgPT0gZW1vamlzW2lkXSkgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICB2YXIgZW1vamkgPSBlbW9qaXNbaWRdLFxuICAgICAgICAgICAgICAgIGlzQW5pbWF0ZWQgPSBlbW9qaS5hbmltYXRlZCA/IFwiYVwiIDogXCJcIjtcbiAgICAgICAgICAgIHJldHVybiBlbW9qaS5tYW5hZ2VkIHx8IG51bGwgPT0gZW1vamkuaWQgPyBcIi5cIiArIGVtb2ppLm5hbWUgKyBcIi5cIiA6IFwiPFwiICsgaXNBbmltYXRlZCArIFwiLlwiICsgKGVtb2ppLm9yaWdpbmFsTmFtZSB8fCBlbW9qaS5uYW1lKSArIFwiLlwiICsgZW1vamkuaWQgKyBcIj5cIjtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZ2V0UmF3VGV4dChpZCwgZ3VpbGQpIHtcbiAgICAgICAgICAgIHZhciBlbW9qaXMgPSBndWlsZC5lbW9qaXM7XG4gICAgICAgICAgICBpZiAobnVsbCA9PSBlbW9qaXMgfHwgbnVsbCA9PSBlbW9qaXNbaWRdKSByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgIHZhciBlbW9qaSA9IGVtb2ppc1tpZF0sXG4gICAgICAgICAgICAgICAgaXNBbmltYXRlZCA9IGVtb2ppLmFuaW1hdGVkID8gXCJhXCIgOiBcIlwiO1xuICAgICAgICAgICAgcmV0dXJuIGVtb2ppLm1hbmFnZWQgfHwgbnVsbCA9PSBlbW9qaS5pZCA/IFwiLlwiICsgZW1vamkubmFtZSArIFwiLlwiIDogXCI8XCIgKyBpc0FuaW1hdGVkICsgXCIuXCIgKyAoZW1vamkub3JpZ2luYWxOYW1lIHx8IGVtb2ppLm5hbWUpICsgXCIuXCIgKyBlbW9qaS5pZCArIFwiPlwiO1xuICAgICAgICAgIH1cblxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKG5ldyBFcnJvcihcIkNvdWxkbid0IHN0YXJ0IGF1dG9jb21wbGV0aW9uIG9mIExpZ2h0Y29yZCdzIGVtb2ppcy5cIikpO1xuICAgIH1cbiAgICAvKiogRW1vamkgZGlzcGxheSAqL1xuXG5cbiAgICB3aGlsZSAoIUJEVjIuTWVzc2FnZUNvbXBvbmVudCkgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xuXG4gICAgaWYgKCF0aGlzLmNhbmNlbEVtb2ppUmVuZGVyKSB7XG4gICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge1xuICAgICAgICBiZWZvcmU6IGRhdGEgPT4ge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcImNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZVwiKTtcbiAgICAgICAgICBpZiAoIW1lc3NhZ2UpIHJldHVybjtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnRcIik7XG4gICAgICAgICAgaWYgKCFjb250ZW50IHx8ICFjb250ZW50Lmxlbmd0aCkgcmV0dXJuOyAvLyBjb250ZW50ID0gRGlzY29yZENyeXB0LmRlY3J5cHRDb250ZW50KGNvbnRlbnQpXG5cbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIEB0eXBlIHt7XHJcbiAgICAgICAgICAgKiAgcmF3OiBzdHJpbmcsXHJcbiAgICAgICAgICAgKiAgbmFtZTogc3RyaW5nLFxyXG4gICAgICAgICAgICogIGlkOiBzdHJpbmcsXHJcbiAgICAgICAgICAgKiAgYW5pbWF0ZWQ6IGJvb2xlYW5cclxuICAgICAgICAgICAqIH1bXX1cclxuICAgICAgICAgICAqL1xuXG4gICAgICAgICAgbGV0IGVtb2ppcyA9IFtdO1xuICAgICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBbXTtcblxuICAgICAgICAgIGZvciAobGV0IG5vZGUgb2YgY29udGVudCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIGxldCBwYXJzZWQ7XG4gICAgICAgICAgICBsZXQgaGFzUGFyc2VkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcGFyc2VkID0gQ29uc3RhbnRzLkVtb2ppUmVnZXguZXhlYyhub2RlKTtcblxuICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgaGFzUGFyc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoIUVtb2ppTW9kdWxlQXBpKSBFbW9qaU1vZHVsZUFwaSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZClbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgZW1vamkgPSBFbW9qaU1vZHVsZUFwaS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZChwYXJzZWRbMl0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVtb2ppKSB7XG4gICAgICAgICAgICAgICAgICBlbW9qaXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBlbW9qaS5hbmltYXRlZCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZW1vamkubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGVtb2ppLmlkLFxuICAgICAgICAgICAgICAgICAgICByYXc6IHBhcnNlZFswXVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGVtb2ppcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IHBhcnNlZFswXS5zdGFydHNXaXRoKFwiPGFcIiksXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcnNlZFsxXSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHBhcnNlZFsyXSxcbiAgICAgICAgICAgICAgICAgICAgcmF3OiBwYXJzZWRbMF1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocGFyc2VkKTtcblxuICAgICAgICAgICAgaWYgKGhhc1BhcnNlZCkge1xuICAgICAgICAgICAgICBjb25zdCB3b3JkcyA9IG5vZGUuc3BsaXQoXCIgXCIpLm1hcCgod29yZCwgaW5kZXgsIGFycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghd29yZCkgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICAgICAgY29uc3QgZW1vamkgPSBlbW9qaXMuZmluZChlID0+IGUucmF3ID09IHdvcmQpO1xuICAgICAgICAgICAgICAgIGlmICghZW1vamkpIHJldHVybiB3b3JkO1xuICAgICAgICAgICAgICAgIGlmICghQ3VzdG9tRW1vamlNb2R1bGUpIEN1c3RvbUVtb2ppTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuQ3VzdG9tRW1vamkpWzBdO1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEN1c3RvbUVtb2ppTW9kdWxlLkN1c3RvbUVtb2ppLCB7XG4gICAgICAgICAgICAgICAgICBlbW9qaToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBgLiR7ZW1vamkubmFtZX0uYCxcbiAgICAgICAgICAgICAgICAgICAgZW1vamlJZDogZW1vamkuaWQsXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBlbW9qaS5hbmltYXRlZCxcbiAgICAgICAgICAgICAgICAgICAganVtYm9hYmxlOiBhcnIubGVuZ3RoID09PSAxICYmIGNvbnRlbnQubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXMubGVuZ3RoID09PSAwKSByZXR1cm4gW2N1cnJlbnRdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByZXZpb3VzW3ByZXZpb3VzLmxlbmd0aCAtIDFdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzW3ByZXZpb3VzLmxlbmd0aCAtIDFdICs9IGAgJHtjdXJyZW50fWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcHJldmlvdXMucHVzaChcIiBcIiArIGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHByZXZpb3VzLnB1c2goXCIgXCIsIGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICAgICAgICBuZXdDb250ZW50LnB1c2goLi4ud29yZHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3Q29udGVudC5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaWxlIChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnRbMF0pIHtcbiAgICAgICAgICAgIGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudC5zaGlmdCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaWxlIChuZXdDb250ZW50WzBdKSB7XG4gICAgICAgICAgICBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnQucHVzaChuZXdDb250ZW50LnNoaWZ0KCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICBpZiAoIXRoaXMuY2FuY2VsRW1vdGVSZW5kZXIpIHJldHVybjtcbiAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyKCk7XG4gICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlciA9IG51bGw7XG4gIH1cblxufSgpO1xuXG5mdW5jdGlvbiBEKGUsIHQsIG4sIHIsIG8sIGksIHMsIHUsIGwsIGMpIHtcbiAgaWYgKG51bGwgPT0gbiB8fCAwID09PSBuLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gIHZhciBkID0gbi5tYXAoZnVuY3Rpb24gKGUsIG4pIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCh1LCBPYmplY3QuYXNzaWduKHtcbiAgICAgIG9uQ2xpY2s6IG8sXG4gICAgICBvbkhvdmVyOiByLFxuICAgICAgc2VsZWN0ZWQ6IHQgPT09IG4sXG4gICAgICBpbmRleDogblxuICAgIH0sIGwoZSwgbikpKTtcbiAgfSk7XG4gIHJldHVybiBbUihpLCBzLCBlLCBjKSwgZF07XG59XG5cbmZ1bmN0aW9uIFIoZSwgdCwgbiwgcikge1xuICB2YXIgYSA9IG4ubGVuZ3RoID4gMCA/IGUuZm9ybWF0KHtcbiAgICBwcmVmaXg6IHIobilcbiAgfSkgOiB0O1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgYS51bnNoaWZ0KFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdHJvbmdcIiwge30sIFwiW0xpZ2h0Y29yZF0gXCIpKTtcbiAgfSBlbHNlIHtcbiAgICBhID0gXCJbTElHSFRDT1JEXSBcIiArIGE7XG4gIH1cblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChBdXRvY29tcGxldGVNb2R1bGUuZGVmYXVsdC5UaXRsZSwge1xuICAgIHRpdGxlOiBhXG4gIH0sIGEpO1xufVxuXG5SLmRpc3BsYXlOYW1lID0gXCJyZW5kZXJIZWFkZXJcIjtcbmxldCBFbW9qaUZpbHRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZClbMF07XG5sZXQgaXNFbW9qaURpc2FibGVkID0gRW1vamlGaWx0ZXJNb2R1bGUgJiYgRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQ7XG5sZXQgaXNVc2FibGUgPSBmYWxzZTtcbmxldCBoYXNQYXRjaGVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHNldEVtb2ppVXNhYmxlKHVzYWJsZSkge1xuICBpc1VzYWJsZSA9IHVzYWJsZTtcbiAgaWYgKGhhc1BhdGNoZWQpIHJldHVybjtcbiAgaWYgKCFFbW9qaUZpbHRlck1vZHVsZSkgRW1vamlGaWx0ZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQpWzBdO1xuICBpZiAoIUVtb2ppRmlsdGVyTW9kdWxlKSByZXR1cm47XG4gIGlmICghaXNFbW9qaURpc2FibGVkKSBpc0Vtb2ppRGlzYWJsZWQgPSBFbW9qaUZpbHRlck1vZHVsZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZDtcbiAgaGFzUGF0Y2hlZCA9IHRydWU7XG5cbiAgRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQgPSBmdW5jdGlvbiAoZW1vamkpIHtcbiAgICBpZiAoaXNVc2FibGUpIHtcbiAgICAgIGlmIChlbW9qaS5zdXJyb2dhdGVzIHx8IGVtb2ppLmRpdmVyc2l0eSkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzRW1vamlEaXNhYmxlZC5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cyk7XG4gIH07XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/emojiModule.js\n");
/***/ }),
@@ -323,7 +323,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _0gl
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var node_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node-fetch */ \"node-fetch\");\n/* harmony import */ var node_fetch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_fetch__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! electron */ \"electron\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! crypto */ \"crypto\");\n/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(crypto__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _v2__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./v2 */ \"./src/modules/v2.js\");\n/* harmony import */ var _ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../ui/tooltipWrap */ \"./src/ui/tooltipWrap.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils */ \"./src/modules/utils.js\");\n\n\n\n\n\n\nconst debug = true;\nconst cache = {};\nconst cache2 = {};\n/*\r\nconst PinnedModule = BDModules.get(e => e.default && e.default.getPinnedMessages)[0].default\r\nconst ChannelModule = BDModules.get(e => e.default && e.default.getChannelId)[0].default\r\nconst fetchMessagesModule = BDModules.get(e => e.default && e.default.fetchMessages)[0].default\r\nconst fetchMessagesModule2 = BDModules.get(e => e.default && e.default.fetchMessages)[1].default\r\nconst getMessagesModule = BDModules.get(e => e.default && e.default.getMessages)[0].default*/\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class PluginCertifier {\n constructor() {}\n\n patch(attachment, id) {\n process.nextTick(() => {\n processAttachment(attachment, id);\n });\n }\n\n start() {\n /*const dispatcher = window.Lightcord.DiscordModules.dispatcher\r\n const constants = window.Lightcord.DiscordModules.constants\r\n const originalFetchMessages = fetchMessagesModule.fetchMessages\r\n fetchMessagesModule.fetchMessages = function(){\r\n const returnValue = originalFetchMessages.apply(this, arguments)\r\n if(returnValue instanceof Promise){\r\n returnValue\r\n .then(() => {\r\n const ev = getMessagesModule.getMessages(ChannelModule.getChannelId())\r\n process.nextTick(() => {\r\n for(const message of ev._array){\r\n const attachments = message.attachments || []\r\n if(attachments.length === 0)continue // no attachments\r\n \r\n attachments.forEach(attachment => {\r\n processAttachment(attachment)\r\n })\r\n }\r\n })\r\n })\r\n }\r\n return returnValue\r\n }\r\n const originalFetchMessages2 = fetchMessagesModule2.fetchMessages\r\n fetchMessagesModule2.fetchMessages = function(){\r\n const returnValue = originalFetchMessages2.apply(this, arguments)\r\n if(returnValue instanceof Promise){\r\n returnValue\r\n .then(() => {\r\n const ev = getMessagesModule.getMessages(ChannelModule.getChannelId())\r\n process.nextTick(() => {\r\n for(const message of ev._array){\r\n const attachments = message.attachments || []\r\n if(attachments.length === 0)continue // no attachments\r\n \r\n attachments.forEach(attachment => {\r\n processAttachment(attachment)\r\n })\r\n }\r\n })\r\n })\r\n }\r\n return returnValue\r\n }\r\n const alreadyUsed = {}\r\n const originalGetPinnedMessages = PinnedModule.getPinnedMessages.bind(PinnedModule)\r\n PinnedModule.getPinnedMessages = function(){\r\n const pinned = originalGetPinnedMessages(...arguments)\r\n if(!pinned || alreadyUsed[pinned.id])return pinned\r\n alreadyUsed[pinned.id] = true\r\n \r\n setTimeout(() => {\r\n delete alreadyUsed[pinned.id]\r\n for(const message of pinned.messages){\r\n const attachments = message.attachments || []\r\n if(attachments.length === 0)continue // no attachments\r\n attachments.forEach(attachment => {\r\n processAttachment(attachment)\r\n })\r\n }\r\n }, 50);\r\n return pinned\r\n }\r\n dispatcher.subscribe(constants.ActionTypes.MESSAGE_CREATE, (ev) => {\r\n const message = ev.message\r\n if(message.channel_id !== ChannelModule.getChannelId())return\r\n process.nextTick(() => {\r\n const attachments = message.attachments || []\r\n if(attachments.length === 0)return // no attachments\r\n attachments.forEach(attachment => {\r\n processAttachment(attachment)\r\n })\r\n })\r\n })\r\n const messages = getMessagesModule.getMessages(ChannelModule.getChannelId())\r\n process.nextTick(() => {\r\n for(const message of messages._array){\r\n const attachments = message.attachments || []\r\n if(attachments.length === 0)continue // no attachments\r\n attachments.forEach(attachment => {\r\n processAttachment(attachment)\r\n })\r\n }\r\n })*/\n }\n\n}());\n\nfunction checkViruses(hash, data, id) {\n data = data.toString(\"utf8\").split(/[^\\w\\d]+/g);\n let isHarmful = false;\n\n for (let keyword of data) {\n for (let oof of [\"token\", \"email\", \"phone\", \"MFA\", \"2fa\", \"process\", \"child_process\", \"localStorage\", \"eval\", \"getGlobal\", \"BrowserWindow\"]) {\n if (keyword.toLowerCase().includes(oof.toLowerCase())) {\n isHarmful = \"token stealer/virus\";\n break;\n }\n }\n\n if (isHarmful) break;\n }\n\n if (!isHarmful) {\n /**\r\n * @type {string}\r\n */\n const no_comments = data.replace(/\\/\\*[\\s\\S]*?\\*\\/|([^\\\\:]|^)\\/\\/.*$/gm, \"\").trim(); // removing the META comment from plugins\n\n if (/var [\\w\\d_$]+=\\[\"/gi.test(no_comments)) {\n isHarmful = \"obfuscation/hidden code\";\n }\n\n if (!isHarmful) {\n const regexps = [\n /** hexadecimal */\n /_0x\\w{4}\\('0x[\\dabcdef]+'\\)/g, /_0x\\w{4}\\('0x[\\dabcdef]+'[, ]+'[^']{4}'\\)/g, // _0x8db7('0x0', 'x1]f')\n\n /** mangled */\n /\\w+\\('0x[\\dabcdef]+'\\)/g, /\\w+\\('0x[\\dabcdef]+'[, ]+'[^']{4}'\\)/g // _0x8db7('0x0', 'x1]f')\n ];\n\n for (let regex of regexps) {\n if (isHarmful) break;\n isHarmful = regex.test(no_comments) ? \"obfuscation/hidden code\" : false;\n }\n }\n }\n\n if (!isHarmful) return;\n cache[hash] = {\n suspect: true,\n name: hashToUrl[hash].split(\"/\").pop(),\n type: hashToUrl[hash].endsWith(\".js\") ? \"Plugin\" : \"Theme\",\n harm: isHarmful\n };\n console.log(`Found potentially dangerous ${cache[hash].type.toLowerCase()}: ${cache[hash].name}`);\n renderToElements(id, cache[hash], cache[hash].name);\n}\n\nconst hashToUrl = {};\n\nfunction processAttachment(attachment, id) {\n if (!document.getElementById(id)) return;\n if (!attachment.url.startsWith(\"https://cdn.discordapp.com/\")) return document.getElementById(id).remove();\n if (!attachment.filename.endsWith(\".plugin.js\") && !attachment.filename.endsWith(\".theme.css\")) return document.getElementById(id).remove();\n\n let nextHash = (hash, data) => {\n if (!cache[hash]) {\n node_fetch__WEBPACK_IMPORTED_MODULE_0___default()(\"https://cdn.jsdelivr.net/gh/Lightcord/filehashes@master/hashes/\" + hash, {\n // Using node-fetch to bypass cors\n headers: {\n \"User-Agent\": electron__WEBPACK_IMPORTED_MODULE_1__[\"remote\"].getCurrentWebContents().userAgent // have to set user-agent\n\n }\n }).then(async res => {\n if (res.status !== 200) return checkViruses(hash, data, id);\n const result = await res.json();\n cache[hash] = result;\n renderToElements(id, result, attachment.filename);\n }).catch(() => {});\n } else {\n const result = cache[hash];\n renderToElements(id, result, attachment.filename);\n }\n };\n\n if (cache2[attachment.url]) return nextHash(cache2[attachment.url]);\n node_fetch__WEBPACK_IMPORTED_MODULE_0___default()(attachment.url, {\n headers: {\n \"User-Agent\": electron__WEBPACK_IMPORTED_MODULE_1__[\"remote\"].getCurrentWebContents().userAgent\n }\n }).then(res => {\n if (res.status !== 200) throw new Error(\"File doesn't exist.\");\n const hash = crypto__WEBPACK_IMPORTED_MODULE_2__[\"createHash\"](\"sha256\");\n let data = Buffer.alloc(0);\n res.body.on(\"data\", chunk => {\n data = Buffer.concat([data, chunk]);\n hash.update(chunk);\n });\n res.body.on(\"end\", () => {\n const hashResult = hash.digest(\"hex\");\n cache2[attachment.url] = hashResult;\n hashToUrl[hashResult] = attachment.url;\n nextHash(hashResult, data);\n });\n }).catch(() => {});\n}\n\nlet flowerStarModule = BDModules.get(e => e.flowerStarContainer)[0];\nlet childModule = BDModules.get(e => e.childContainer)[0];\n/**\r\n * \r\n * @param {HTMLDivElement[]} elements \r\n * @param {{type: \"Theme\"|\"Plugin\", name: string, official?: boolean}|{suspect:true, type: \"Theme\"|\"Plugin\", name: string, harm: string}} result\r\n */\n\nfunction renderToElements(id, result, filename) {\n const div = document.getElementById(id);\n if (!div || div.childNodes.length > 0) return; // already certified/div does not exist anymore.\n // TODO: implements suspect plugins.\n\n if (!flowerStarModule) flowerStarModule = BDModules.get(e => e.flowerStarContainer)[0];\n if (!childModule) childModule = BDModules.get(e => e.childContainer)[0];\n console.log(result);\n\n if (result.suspect) {\n try {\n div.parentNode.style.borderColor = \"rgb(240, 71, 71)\";\n /**\r\n * \r\n * @param {HTMLElement} node \r\n */\n\n let nextNode = node => {\n for (let child of node.children) {\n if (child.tagName === \"A\") {\n child.addEventListener(\"click\", e => {\n e.preventDefault();\n e.stopImmediatePropagation();\n _utils__WEBPACK_IMPORTED_MODULE_5__[\"default\"].showConfirmationModal(\"Are you sure you want to download this ?\", \"The \" + result.type.toLowerCase() + \" **\" + filename + \"** might be dangerous **(\" + result.harm + \")**. \\n\\n**We don't recommand to download it**. However, you can still do it below.\", {\n confirmText: \"Download Anyway\",\n cancelText: \"Don't !\",\n danger: true,\n onCancel: () => {},\n onConfirm: () => {\n electron__WEBPACK_IMPORTED_MODULE_1__[\"remote\"].shell.openExternal(child.href);\n }\n });\n });\n } else if ([\"div\"].includes(child.tagName.toLowerCase())) {\n nextNode(child);\n }\n }\n };\n\n nextNode(div.parentNode);\n } catch (e) {\n console.error(e);\n }\n\n _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].reactDom.render(_v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n text: result.type + \" \" + result.name + \" is potentially dangerous.\"\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"div\", {\n className: flowerStarModule.flowerStarContainer,\n style: {\n width: \"16px\",\n height: \"16px\"\n }\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"svg\", {\n className: BDModules.get(e => e.svg)[0].svg,\n \"aria-hidden\": \"false\",\n width: \"16px\",\n height: \"16px\",\n viewBox: \"0 0 40 32\"\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"rect\", {\n x: \"0\",\n y: \"0\",\n width: \"32\",\n height: \"32\",\n mask: \"url(#svg-mask-avatar-status-round-32)\",\n fill: \"#f04747\",\n mask: \"url(#svg-mask-status-dnd)\",\n className: BDModules.get(e => e.pointerEvents)[0].pointerEvents\n })))), div);\n } else if (!result.official) {\n div.parentNode.style.borderColor = \"#4087ed\";\n _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].reactDom.render(_v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n text: result.type + \" \" + result.name + \" is certified by Lightcord.\"\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"div\", {\n className: flowerStarModule.flowerStarContainer,\n style: {\n width: \"16px\",\n height: \"16px\"\n }\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"svg\", {\n className: flowerStarModule.flowerStar,\n \"aria-hidden\": \"false\",\n width: \"16px\",\n height: \"16px\",\n viewBox: \"0 0 16 15.2\"\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"path\", {\n fill: \"#4f545c\",\n \"fill-rule\": \"evenodd\",\n d: \"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z\"\n })), _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"div\", {\n className: childModule.childContainer\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"svg\", {\n \"aria-hidden\": \"false\",\n width: \"16px\",\n height: \"16px\",\n viewBox: \"0 0 16 15.2\"\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"path\", {\n fill: \"#ffffff\",\n d: \"M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z\"\n }))))), div);\n } else {\n div.parentNode.style.borderColor = \"#4087ed\";\n _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].reactDom.render(_v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n text: result.type + \" \" + result.name + \" was made by the developers of Lightcord.\",\n style: \"brand\"\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"div\", {\n className: flowerStarModule.flowerStarContainer,\n style: {\n width: \"16px\",\n height: \"16px\"\n }\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"svg\", {\n className: flowerStarModule.flowerStar,\n \"aria-hidden\": \"false\",\n width: \"16px\",\n height: \"16px\",\n viewBox: \"0 0 16 15.2\",\n stroke: \"#36393f\",\n style: {\n color: \"#4087ed\"\n }\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"path\", {\n fill: \"currentColor\",\n \"fill-rule\": \"evenodd\",\n d: \"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z\"\n })), _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"div\", {\n className: childModule.childContainer\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"svg\", {\n \"aria-hidden\": \"false\",\n width: \"16px\",\n height: \"16px\",\n viewBox: \"0 0 16 15.2\"\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"path\", {\n fill: \"#ffffff\",\n d: \"M10.7,5.28a2.9,2.9,0,0,0-2.11.86.11.11,0,0,0,0,.16l1.05.94a.11.11,0,0,0,.15,0,1.27,1.27,0,0,1,.9-.33c.65,0,.65.73.65.73a.64.64,0,0,1-.65.65,1.73,1.73,0,0,1-1.18-.54c-.31-.26-.36-.32-.73-.66S7.06,5.28,5.65,5.28A2.26,2.26,0,0,0,3.37,7.56,2.59,2.59,0,0,0,3.82,9a2.18,2.18,0,0,0,1.83.89,2.94,2.94,0,0,0,2.1-.81.11.11,0,0,0,0-.16L6.74,8A.11.11,0,0,0,6.6,8a1.58,1.58,0,0,1-.94.29h0A.71.71,0,0,1,5,7.56H5a.63.63,0,0,1,.65-.64c.71,0,1.42.75,1.94,1.27.75.76,1.66,1.79,3.11,1.74A2.28,2.28,0,0,0,13,7.64a2.59,2.59,0,0,0-.45-1.47A2.14,2.14,0,0,0,10.7,5.28Z\"\n }))))), div);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9wbHVnaW5DZXJ0aWZpZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyLmpzPzQyODMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5vZGVGZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiO1xuaW1wb3J0ICogYXMgZWxlY3Ryb24gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcbmltcG9ydCB0b29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuY29uc3QgZGVidWcgPSB0cnVlO1xuY29uc3QgY2FjaGUgPSB7fTtcbmNvbnN0IGNhY2hlMiA9IHt9O1xuLypcclxuY29uc3QgUGlubmVkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0UGlubmVkTWVzc2FnZXMpWzBdLmRlZmF1bHRcclxuY29uc3QgQ2hhbm5lbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldENoYW5uZWxJZClbMF0uZGVmYXVsdFxyXG5jb25zdCBmZXRjaE1lc3NhZ2VzTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZmV0Y2hNZXNzYWdlcylbMF0uZGVmYXVsdFxyXG5jb25zdCBmZXRjaE1lc3NhZ2VzTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmZldGNoTWVzc2FnZXMpWzFdLmRlZmF1bHRcclxuY29uc3QgZ2V0TWVzc2FnZXNNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRNZXNzYWdlcylbMF0uZGVmYXVsdCovXG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBQbHVnaW5DZXJ0aWZpZXIge1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgcGF0Y2goYXR0YWNobWVudCwgaWQpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgIHByb2Nlc3NBdHRhY2htZW50KGF0dGFjaG1lbnQsIGlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXJ0KCkge1xuICAgIC8qY29uc3QgZGlzcGF0Y2hlciA9IHdpbmRvdy5MaWdodGNvcmQuRGlzY29yZE1vZHVsZXMuZGlzcGF0Y2hlclxyXG4gICAgY29uc3QgY29uc3RhbnRzID0gd2luZG93LkxpZ2h0Y29yZC5EaXNjb3JkTW9kdWxlcy5jb25zdGFudHNcclxuICAgICAgY29uc3Qgb3JpZ2luYWxGZXRjaE1lc3NhZ2VzID0gZmV0Y2hNZXNzYWdlc01vZHVsZS5mZXRjaE1lc3NhZ2VzXHJcbiAgICBmZXRjaE1lc3NhZ2VzTW9kdWxlLmZldGNoTWVzc2FnZXMgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gb3JpZ2luYWxGZXRjaE1lc3NhZ2VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcclxuICAgICAgICBpZihyZXR1cm5WYWx1ZSBpbnN0YW5jZW9mIFByb21pc2Upe1xyXG4gICAgICAgICAgICByZXR1cm5WYWx1ZVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBldiA9IGdldE1lc3NhZ2VzTW9kdWxlLmdldE1lc3NhZ2VzKENoYW5uZWxNb2R1bGUuZ2V0Q2hhbm5lbElkKCkpXHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgbWVzc2FnZSBvZiBldi5fYXJyYXkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50cyA9IG1lc3NhZ2UuYXR0YWNobWVudHMgfHwgW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoYXR0YWNobWVudHMubGVuZ3RoID09PSAwKWNvbnRpbnVlIC8vIG5vIGF0dGFjaG1lbnRzXHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLmZvckVhY2goYXR0YWNobWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZVxyXG4gICAgfVxyXG4gICAgICBjb25zdCBvcmlnaW5hbEZldGNoTWVzc2FnZXMyID0gZmV0Y2hNZXNzYWdlc01vZHVsZTIuZmV0Y2hNZXNzYWdlc1xyXG4gICAgZmV0Y2hNZXNzYWdlc01vZHVsZTIuZmV0Y2hNZXNzYWdlcyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBvcmlnaW5hbEZldGNoTWVzc2FnZXMyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcclxuICAgICAgICBpZihyZXR1cm5WYWx1ZSBpbnN0YW5jZW9mIFByb21pc2Upe1xyXG4gICAgICAgICAgICByZXR1cm5WYWx1ZVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBldiA9IGdldE1lc3NhZ2VzTW9kdWxlLmdldE1lc3NhZ2VzKENoYW5uZWxNb2R1bGUuZ2V0Q2hhbm5lbElkKCkpXHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgbWVzc2FnZSBvZiBldi5fYXJyYXkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50cyA9IG1lc3NhZ2UuYXR0YWNobWVudHMgfHwgW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoYXR0YWNobWVudHMubGVuZ3RoID09PSAwKWNvbnRpbnVlIC8vIG5vIGF0dGFjaG1lbnRzXHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLmZvckVhY2goYXR0YWNobWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZVxyXG4gICAgfVxyXG4gICAgICBjb25zdCBhbHJlYWR5VXNlZCA9IHt9XHJcbiAgICBjb25zdCBvcmlnaW5hbEdldFBpbm5lZE1lc3NhZ2VzID0gUGlubmVkTW9kdWxlLmdldFBpbm5lZE1lc3NhZ2VzLmJpbmQoUGlubmVkTW9kdWxlKVxyXG4gICAgUGlubmVkTW9kdWxlLmdldFBpbm5lZE1lc3NhZ2VzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBjb25zdCBwaW5uZWQgPSBvcmlnaW5hbEdldFBpbm5lZE1lc3NhZ2VzKC4uLmFyZ3VtZW50cylcclxuICAgICAgICBpZighcGlubmVkIHx8IGFscmVhZHlVc2VkW3Bpbm5lZC5pZF0pcmV0dXJuIHBpbm5lZFxyXG4gICAgICAgIGFscmVhZHlVc2VkW3Bpbm5lZC5pZF0gPSB0cnVlXHJcbiAgICAgICAgXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhbHJlYWR5VXNlZFtwaW5uZWQuaWRdXHJcbiAgICAgICAgICAgIGZvcihjb25zdCBtZXNzYWdlIG9mIHBpbm5lZC5tZXNzYWdlcyl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50cyA9IG1lc3NhZ2UuYXR0YWNobWVudHMgfHwgW11cclxuICAgICAgICAgICAgICAgIGlmKGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCljb250aW51ZSAvLyBubyBhdHRhY2htZW50c1xyXG4gICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHMuZm9yRWFjaChhdHRhY2htZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50KVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDUwKTtcclxuICAgICAgICAgIHJldHVybiBwaW5uZWRcclxuICAgIH1cclxuICAgICAgZGlzcGF0Y2hlci5zdWJzY3JpYmUoY29uc3RhbnRzLkFjdGlvblR5cGVzLk1FU1NBR0VfQ1JFQVRFLCAoZXYpID0+IHtcclxuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXYubWVzc2FnZVxyXG4gICAgICAgIGlmKG1lc3NhZ2UuY2hhbm5lbF9pZCAhPT0gQ2hhbm5lbE1vZHVsZS5nZXRDaGFubmVsSWQoKSlyZXR1cm5cclxuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBtZXNzYWdlLmF0dGFjaG1lbnRzIHx8IFtdXHJcbiAgICAgICAgICAgIGlmKGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMClyZXR1cm4gLy8gbm8gYXR0YWNobWVudHNcclxuICAgICAgICAgICAgICBhdHRhY2htZW50cy5mb3JFYWNoKGF0dGFjaG1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0F0dGFjaG1lbnQoYXR0YWNobWVudClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfSlcclxuICAgICAgY29uc3QgbWVzc2FnZXMgPSBnZXRNZXNzYWdlc01vZHVsZS5nZXRNZXNzYWdlcyhDaGFubmVsTW9kdWxlLmdldENoYW5uZWxJZCgpKVxyXG4gICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgZm9yKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXMuX2FycmF5KXtcclxuICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBtZXNzYWdlLmF0dGFjaG1lbnRzIHx8IFtdXHJcbiAgICAgICAgICAgIGlmKGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCljb250aW51ZSAvLyBubyBhdHRhY2htZW50c1xyXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRzLmZvckVhY2goYXR0YWNobWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH0pKi9cbiAgfVxuXG59KCk7XG5cbmZ1bmN0aW9uIGNoZWNrVmlydXNlcyhoYXNoLCBkYXRhLCBpZCkge1xuICBkYXRhID0gZGF0YS50b1N0cmluZyhcInV0ZjhcIikuc3BsaXQoL1teXFx3XFxkXSsvZyk7XG4gIGxldCBpc0hhcm1mdWwgPSBmYWxzZTtcblxuICBmb3IgKGxldCBrZXl3b3JkIG9mIGRhdGEpIHtcbiAgICBmb3IgKGxldCBvb2Ygb2YgW1widG9rZW5cIiwgXCJlbWFpbFwiLCBcInBob25lXCIsIFwiTUZBXCIsIFwiMmZhXCIsIFwicHJvY2Vzc1wiLCBcImNoaWxkX3Byb2Nlc3NcIiwgXCJsb2NhbFN0b3JhZ2VcIiwgXCJldmFsXCIsIFwiZ2V0R2xvYmFsXCIsIFwiQnJvd3NlcldpbmRvd1wiXSkge1xuICAgICAgaWYgKGtleXdvcmQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhvb2YudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgaXNIYXJtZnVsID0gXCJ0b2tlbiBzdGVhbGVyL3ZpcnVzXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0hhcm1mdWwpIGJyZWFrO1xuICB9XG5cbiAgaWYgKCFpc0hhcm1mdWwpIHtcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cbiAgICBjb25zdCBub19jb21tZW50cyA9IGRhdGEucmVwbGFjZSgvXFwvXFwqW1xcc1xcU10qP1xcKlxcL3woW15cXFxcOl18XilcXC9cXC8uKiQvZ20sIFwiXCIpLnRyaW0oKTsgLy8gcmVtb3ZpbmcgdGhlIE1FVEEgY29tbWVudCBmcm9tIHBsdWdpbnNcblxuICAgIGlmICgvdmFyIFtcXHdcXGRfJF0rPVxcW1wiL2dpLnRlc3Qobm9fY29tbWVudHMpKSB7XG4gICAgICBpc0hhcm1mdWwgPSBcIm9iZnVzY2F0aW9uL2hpZGRlbiBjb2RlXCI7XG4gICAgfVxuXG4gICAgaWYgKCFpc0hhcm1mdWwpIHtcbiAgICAgIGNvbnN0IHJlZ2V4cHMgPSBbXG4gICAgICAvKiogaGV4YWRlY2ltYWwgKi9cbiAgICAgIC9fMHhcXHd7NH1cXCgnMHhbXFxkYWJjZGVmXSsnXFwpL2csIC9fMHhcXHd7NH1cXCgnMHhbXFxkYWJjZGVmXSsnWywgXSsnW14nXXs0fSdcXCkvZywgLy8gXzB4OGRiNygnMHgwJywgJ3gxXWYnKVxuXG4gICAgICAvKiogbWFuZ2xlZCAqL1xuICAgICAgL1xcdytcXCgnMHhbXFxkYWJjZGVmXSsnXFwpL2csIC9cXHcrXFwoJzB4W1xcZGFiY2RlZl0rJ1ssIF0rJ1teJ117NH0nXFwpL2cgLy8gXzB4OGRiNygnMHgwJywgJ3gxXWYnKVxuICAgICAgXTtcblxuICAgICAgZm9yIChsZXQgcmVnZXggb2YgcmVnZXhwcykge1xuICAgICAgICBpZiAoaXNIYXJtZnVsKSBicmVhaztcbiAgICAgICAgaXNIYXJtZnVsID0gcmVnZXgudGVzdChub19jb21tZW50cykgPyBcIm9iZnVzY2F0aW9uL2hpZGRlbiBjb2RlXCIgOiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWlzSGFybWZ1bCkgcmV0dXJuO1xuICBjYWNoZVtoYXNoXSA9IHtcbiAgICBzdXNwZWN0OiB0cnVlLFxuICAgIG5hbWU6IGhhc2hUb1VybFtoYXNoXS5zcGxpdChcIi9cIikucG9wKCksXG4gICAgdHlwZTogaGFzaFRvVXJsW2hhc2hdLmVuZHNXaXRoKFwiLmpzXCIpID8gXCJQbHVnaW5cIiA6IFwiVGhlbWVcIixcbiAgICBoYXJtOiBpc0hhcm1mdWxcbiAgfTtcbiAgY29uc29sZS5sb2coYEZvdW5kIHBvdGVudGlhbGx5IGRhbmdlcm91cyAke2NhY2hlW2hhc2hdLnR5cGUudG9Mb3dlckNhc2UoKX06ICR7Y2FjaGVbaGFzaF0ubmFtZX1gKTtcbiAgcmVuZGVyVG9FbGVtZW50cyhpZCwgY2FjaGVbaGFzaF0sIGNhY2hlW2hhc2hdLm5hbWUpO1xufVxuXG5jb25zdCBoYXNoVG9VcmwgPSB7fTtcblxuZnVuY3Rpb24gcHJvY2Vzc0F0dGFjaG1lbnQoYXR0YWNobWVudCwgaWQpIHtcbiAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkpIHJldHVybjtcbiAgaWYgKCFhdHRhY2htZW50LnVybC5zdGFydHNXaXRoKFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vXCIpKSByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICBpZiAoIWF0dGFjaG1lbnQuZmlsZW5hbWUuZW5kc1dpdGgoXCIucGx1Z2luLmpzXCIpICYmICFhdHRhY2htZW50LmZpbGVuYW1lLmVuZHNXaXRoKFwiLnRoZW1lLmNzc1wiKSkgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcblxuICBsZXQgbmV4dEhhc2ggPSAoaGFzaCwgZGF0YSkgPT4ge1xuICAgIGlmICghY2FjaGVbaGFzaF0pIHtcbiAgICAgIG5vZGVGZXRjaChcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC9MaWdodGNvcmQvZmlsZWhhc2hlc0BtYXN0ZXIvaGFzaGVzL1wiICsgaGFzaCwge1xuICAgICAgICAvLyBVc2luZyBub2RlLWZldGNoIHRvIGJ5cGFzcyBjb3JzXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIlVzZXItQWdlbnRcIjogZWxlY3Ryb24ucmVtb3RlLmdldEN1cnJlbnRXZWJDb250ZW50cygpLnVzZXJBZ2VudCAvLyBoYXZlIHRvIHNldCB1c2VyLWFnZW50XG5cbiAgICAgICAgfVxuICAgICAgfSkudGhlbihhc3luYyByZXMgPT4ge1xuICAgICAgICBpZiAocmVzLnN0YXR1cyAhPT0gMjAwKSByZXR1cm4gY2hlY2tWaXJ1c2VzKGhhc2gsIGRhdGEsIGlkKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgICAgY2FjaGVbaGFzaF0gPSByZXN1bHQ7XG4gICAgICAgIHJlbmRlclRvRWxlbWVudHMoaWQsIHJlc3VsdCwgYXR0YWNobWVudC5maWxlbmFtZSk7XG4gICAgICB9KS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNhY2hlW2hhc2hdO1xuICAgICAgcmVuZGVyVG9FbGVtZW50cyhpZCwgcmVzdWx0LCBhdHRhY2htZW50LmZpbGVuYW1lKTtcbiAgICB9XG4gIH07XG5cbiAgaWYgKGNhY2hlMlthdHRhY2htZW50LnVybF0pIHJldHVybiBuZXh0SGFzaChjYWNoZTJbYXR0YWNobWVudC51cmxdKTtcbiAgbm9kZUZldGNoKGF0dGFjaG1lbnQudXJsLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgXCJVc2VyLUFnZW50XCI6IGVsZWN0cm9uLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS51c2VyQWdlbnRcbiAgICB9XG4gIH0pLnRoZW4ocmVzID0+IHtcbiAgICBpZiAocmVzLnN0YXR1cyAhPT0gMjAwKSB0aHJvdyBuZXcgRXJyb3IoXCJGaWxlIGRvZXNuJ3QgZXhpc3QuXCIpO1xuICAgIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKTtcbiAgICBsZXQgZGF0YSA9IEJ1ZmZlci5hbGxvYygwKTtcbiAgICByZXMuYm9keS5vbihcImRhdGFcIiwgY2h1bmsgPT4ge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5jb25jYXQoW2RhdGEsIGNodW5rXSk7XG4gICAgICBoYXNoLnVwZGF0ZShjaHVuayk7XG4gICAgfSk7XG4gICAgcmVzLmJvZHkub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaGFzaFJlc3VsdCA9IGhhc2guZGlnZXN0KFwiaGV4XCIpO1xuICAgICAgY2FjaGUyW2F0dGFjaG1lbnQudXJsXSA9IGhhc2hSZXN1bHQ7XG4gICAgICBoYXNoVG9VcmxbaGFzaFJlc3VsdF0gPSBhdHRhY2htZW50LnVybDtcbiAgICAgIG5leHRIYXNoKGhhc2hSZXN1bHQsIGRhdGEpO1xuICAgIH0pO1xuICB9KS5jYXRjaCgoKSA9PiB7fSk7XG59XG5cbmxldCBmbG93ZXJTdGFyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxvd2VyU3RhckNvbnRhaW5lcilbMF07XG5sZXQgY2hpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGlsZENvbnRhaW5lcilbMF07XG4vKipcclxuICogXHJcbiAqIEBwYXJhbSB7SFRNTERpdkVsZW1lbnRbXX0gZWxlbWVudHMgXHJcbiAqIEBwYXJhbSB7e3R5cGU6IFwiVGhlbWVcInxcIlBsdWdpblwiLCBuYW1lOiBzdHJpbmcsIG9mZmljaWFsPzogYm9vbGVhbn18e3N1c3BlY3Q6dHJ1ZSwgdHlwZTogXCJUaGVtZVwifFwiUGx1Z2luXCIsIG5hbWU6IHN0cmluZywgaGFybTogc3RyaW5nfX0gcmVzdWx0XHJcbiAqL1xuXG5mdW5jdGlvbiByZW5kZXJUb0VsZW1lbnRzKGlkLCByZXN1bHQsIGZpbGVuYW1lKSB7XG4gIGNvbnN0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFkaXYgfHwgZGl2LmNoaWxkTm9kZXMubGVuZ3RoID4gMCkgcmV0dXJuOyAvLyBhbHJlYWR5IGNlcnRpZmllZC9kaXYgZG9lcyBub3QgZXhpc3QgYW55bW9yZS5cbiAgLy8gVE9ETzogaW1wbGVtZW50cyBzdXNwZWN0IHBsdWdpbnMuXG5cbiAgaWYgKCFmbG93ZXJTdGFyTW9kdWxlKSBmbG93ZXJTdGFyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxvd2VyU3RhckNvbnRhaW5lcilbMF07XG4gIGlmICghY2hpbGRNb2R1bGUpIGNoaWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2hpbGRDb250YWluZXIpWzBdO1xuICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuXG4gIGlmIChyZXN1bHQuc3VzcGVjdCkge1xuICAgIHRyeSB7XG4gICAgICBkaXYucGFyZW50Tm9kZS5zdHlsZS5ib3JkZXJDb2xvciA9IFwicmdiKDI0MCwgNzEsIDcxKVwiO1xuICAgICAgLyoqXHJcbiAgICAgICAqIFxyXG4gICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIFxyXG4gICAgICAgKi9cblxuICAgICAgbGV0IG5leHROb2RlID0gbm9kZSA9PiB7XG4gICAgICAgIGZvciAobGV0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoY2hpbGQudGFnTmFtZSA9PT0gXCJBXCIpIHtcbiAgICAgICAgICAgIGNoaWxkLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBlID0+IHtcbiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyA/XCIsIFwiVGhlIFwiICsgcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKSArIFwiICoqXCIgKyBmaWxlbmFtZSArIFwiKiogbWlnaHQgYmUgZGFuZ2Vyb3VzICoqKFwiICsgcmVzdWx0Lmhhcm0gKyBcIikqKi4gXFxuXFxuKipXZSBkb24ndCByZWNvbW1hbmQgdG8gZG93bmxvYWQgaXQqKi4gSG93ZXZlciwgeW91IGNhbiBzdGlsbCBkbyBpdCBiZWxvdy5cIiwge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIkRvd25sb2FkIEFueXdheVwiLFxuICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiRG9uJ3QgIVwiLFxuICAgICAgICAgICAgICAgIGRhbmdlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge30sXG4gICAgICAgICAgICAgICAgb25Db25maXJtOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBlbGVjdHJvbi5yZW1vdGUuc2hlbGwub3BlbkV4dGVybmFsKGNoaWxkLmhyZWYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFtcImRpdlwiXS5pbmNsdWRlcyhjaGlsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICBuZXh0Tm9kZShjaGlsZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBuZXh0Tm9kZShkaXYucGFyZW50Tm9kZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG5cbiAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHtcbiAgICAgIHRleHQ6IHJlc3VsdC50eXBlICsgXCIgXCIgKyByZXN1bHQubmFtZSArIFwiIGlzIHBvdGVudGlhbGx5IGRhbmdlcm91cy5cIlxuICAgIH0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lcixcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIHdpZHRoOiBcIjE2cHhcIixcbiAgICAgICAgaGVpZ2h0OiBcIjE2cHhcIlxuICAgICAgfVxuICAgIH0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gICAgICBjbGFzc05hbWU6IEJETW9kdWxlcy5nZXQoZSA9PiBlLnN2ZylbMF0uc3ZnLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiBcImZhbHNlXCIsXG4gICAgICB3aWR0aDogXCIxNnB4XCIsXG4gICAgICBoZWlnaHQ6IFwiMTZweFwiLFxuICAgICAgdmlld0JveDogXCIwIDAgNDAgMzJcIlxuICAgIH0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgICAgeDogXCIwXCIsXG4gICAgICB5OiBcIjBcIixcbiAgICAgIHdpZHRoOiBcIjMyXCIsXG4gICAgICBoZWlnaHQ6IFwiMzJcIixcbiAgICAgIG1hc2s6IFwidXJsKCNzdmctbWFzay1hdmF0YXItc3RhdHVzLXJvdW5kLTMyKVwiLFxuICAgICAgZmlsbDogXCIjZjA0NzQ3XCIsXG4gICAgICBtYXNrOiBcInVybCgjc3ZnLW1hc2stc3RhdHVzLWRuZClcIixcbiAgICAgIGNsYXNzTmFtZTogQkRNb2R1bGVzLmdldChlID0+IGUucG9pbnRlckV2ZW50cylbMF0ucG9pbnRlckV2ZW50c1xuICAgIH0pKSkpLCBkaXYpO1xuICB9IGVsc2UgaWYgKCFyZXN1bHQub2ZmaWNpYWwpIHtcbiAgICBkaXYucGFyZW50Tm9kZS5zdHlsZS5ib3JkZXJDb2xvciA9IFwiIzQwODdlZFwiO1xuICAgIEJEVjIucmVhY3REb20ucmVuZGVyKEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge1xuICAgICAgdGV4dDogcmVzdWx0LnR5cGUgKyBcIiBcIiArIHJlc3VsdC5uYW1lICsgXCIgaXMgY2VydGlmaWVkIGJ5IExpZ2h0Y29yZC5cIlxuICAgIH0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lcixcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIHdpZHRoOiBcIjE2cHhcIixcbiAgICAgICAgaGVpZ2h0OiBcIjE2cHhcIlxuICAgICAgfVxuICAgIH0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gICAgICBjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhcixcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJmYWxzZVwiLFxuICAgICAgd2lkdGg6IFwiMTZweFwiLFxuICAgICAgaGVpZ2h0OiBcIjE2cHhcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE1LjJcIlxuICAgIH0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgZmlsbDogXCIjNGY1NDVjXCIsXG4gICAgICBcImZpbGwtcnVsZVwiOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwibTE2IDcuNmMwIC43OS0xLjI4IDEuMzgtMS41MiAyLjA5cy40NCAyIDAgMi41OS0xLjg0LjM1LTIuNDYuOC0uNzkgMS44NC0xLjU0IDIuMDktMS42Ny0uOC0yLjQ3LS44LTEuNzUgMS0yLjQ3LjgtLjkyLTEuNjQtMS41NC0yLjA5LTItLjE4LTIuNDYtLjguMjMtMS44NCAwLTIuNTktMS41NC0xLjMtMS41NC0yLjA5IDEuMjgtMS4zOCAxLjUyLTIuMDktLjQ0LTIgMC0yLjU5IDEuODUtLjM1IDIuNDgtLjguNzgtMS44NCAxLjUzLTIuMTIgMS42Ny44MyAyLjQ3LjgzIDEuNzUtMSAyLjQ3LS44LjkxIDEuNjQgMS41MyAyLjA5IDIgLjE4IDIuNDYuOC0uMjMgMS44NCAwIDIuNTkgMS41NCAxLjMgMS41NCAyLjA5elwiXG4gICAgfSkpLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBjaGlsZE1vZHVsZS5jaGlsZENvbnRhaW5lclxuICAgIH0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gICAgICBcImFyaWEtaGlkZGVuXCI6IFwiZmFsc2VcIixcbiAgICAgIHdpZHRoOiBcIjE2cHhcIixcbiAgICAgIGhlaWdodDogXCIxNnB4XCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNS4yXCJcbiAgICB9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgIGZpbGw6IFwiI2ZmZmZmZlwiLFxuICAgICAgZDogXCJNNy40LDExLjE3LDQsOC42Miw1LDcuMjZsMiwxLjUzTDEwLjY0LDRsMS4zNiwxWlwiXG4gICAgfSkpKSkpLCBkaXYpO1xuICB9IGVsc2Uge1xuICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjNDA4N2VkXCI7XG4gICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7XG4gICAgICB0ZXh0OiByZXN1bHQudHlwZSArIFwiIFwiICsgcmVzdWx0Lm5hbWUgKyBcIiB3YXMgbWFkZSBieSB0aGUgZGV2ZWxvcGVycyBvZiBMaWdodGNvcmQuXCIsXG4gICAgICBzdHlsZTogXCJicmFuZFwiXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgd2lkdGg6IFwiMTZweFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTZweFwiXG4gICAgICB9XG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiBcImZhbHNlXCIsXG4gICAgICB3aWR0aDogXCIxNnB4XCIsXG4gICAgICBoZWlnaHQ6IFwiMTZweFwiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTYgMTUuMlwiLFxuICAgICAgc3Ryb2tlOiBcIiMzNjM5M2ZcIixcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGNvbG9yOiBcIiM0MDg3ZWRcIlxuICAgICAgfVxuICAgIH0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgIFwiZmlsbC1ydWxlXCI6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJtMTYgNy42YzAgLjc5LTEuMjggMS4zOC0xLjUyIDIuMDlzLjQ0IDIgMCAyLjU5LTEuODQuMzUtMi40Ni44LS43OSAxLjg0LTEuNTQgMi4wOS0xLjY3LS44LTIuNDctLjgtMS43NSAxLTIuNDcuOC0uOTItMS42NC0xLjU0LTIuMDktMi0uMTgtMi40Ni0uOC4yMy0xLjg0IDAtMi41OS0xLjU0LTEuMy0xLjU0LTIuMDkgMS4yOC0xLjM4IDEuNTItMi4wOS0uNDQtMiAwLTIuNTkgMS44NS0uMzUgMi40OC0uOC43OC0xLjg0IDEuNTMtMi4xMiAxLjY3LjgzIDIuNDcuODMgMS43NS0xIDIuNDctLjguOTEgMS42NCAxLjUzIDIuMDkgMiAuMTggMi40Ni44LS4yMyAxLjg0IDAgMi41OSAxLjU0IDEuMyAxLjU0IDIuMDl6XCJcbiAgICB9KSksIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNoaWxkTW9kdWxlLmNoaWxkQ29udGFpbmVyXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJmYWxzZVwiLFxuICAgICAgd2lkdGg6IFwiMTZweFwiLFxuICAgICAgaGVpZ2h0OiBcIjE2cHhcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE1LjJcIlxuICAgIH0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgZmlsbDogXCIjZmZmZmZmXCIsXG4gICAgICBkOiBcIk0xMC43LDUuMjhhMi45LDIuOSwwLDAsMC0yLjExLjg2LjExLjExLDAsMCwwLDAsLjE2bDEuMDUuOTRhLjExLjExLDAsMCwwLC4xNSwwLDEuMjcsMS4yNywwLDAsMSwuOS0uMzNjLjY1LDAsLjY1LjczLjY1LjczYS42NC42NCwwLDAsMS0uNjUuNjUsMS43MywxLjczLDAsMCwxLTEuMTgtLjU0Yy0uMzEtLjI2LS4zNi0uMzItLjczLS42NlM3LjA2LDUuMjgsNS42NSw1LjI4QTIuMjYsMi4yNiwwLDAsMCwzLjM3LDcuNTYsMi41OSwyLjU5LDAsMCwwLDMuODIsOWEyLjE4LDIuMTgsMCwwLDAsMS44My44OSwyLjk0LDIuOTQsMCwwLDAsMi4xLS44MS4xMS4xMSwwLDAsMCwwLS4xNkw2Ljc0LDhBLjExLjExLDAsMCwwLDYuNiw4YTEuNTgsMS41OCwwLDAsMS0uOTQuMjloMEEuNzEuNzEsMCwwLDEsNSw3LjU2SDVhLjYzLjYzLDAsMCwxLC42NS0uNjRjLjcxLDAsMS40Mi43NSwxLjk0LDEuMjcuNzUuNzYsMS42NiwxLjc5LDMuMTEsMS43NEEyLjI4LDIuMjgsMCwwLDAsMTMsNy42NGEyLjU5LDIuNTksMCwwLDAtLjQ1LTEuNDdBMi4xNCwyLjE0LDAsMCwwLDEwLjcsNS4yOFpcIlxuICAgIH0pKSkpKSwgZGl2KTtcbiAgfVxufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/pluginCertifier.js\n");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var node_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node-fetch */ \"node-fetch\");\n/* harmony import */ var node_fetch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_fetch__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! electron */ \"electron\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! crypto */ \"crypto\");\n/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(crypto__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _v2__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./v2 */ \"./src/modules/v2.js\");\n/* harmony import */ var _ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../ui/tooltipWrap */ \"./src/ui/tooltipWrap.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils */ \"./src/modules/utils.js\");\n\n\n\n\n\n\nconst debug = true;\nconst cache = {};\nconst cache2 = {};\n/*\r\nconst PinnedModule = BDModules.get(e => e.default && e.default.getPinnedMessages)[0].default\r\nconst ChannelModule = BDModules.get(e => e.default && e.default.getChannelId)[0].default\r\nconst fetchMessagesModule = BDModules.get(e => e.default && e.default.fetchMessages)[0].default\r\nconst fetchMessagesModule2 = BDModules.get(e => e.default && e.default.fetchMessages)[1].default\r\nconst getMessagesModule = BDModules.get(e => e.default && e.default.getMessages)[0].default*/\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class PluginCertifier {\n constructor() {}\n\n patch(attachment, id) {\n process.nextTick(() => {\n processAttachment(attachment, id);\n });\n }\n\n start() {\n /*const dispatcher = window.Lightcord.DiscordModules.dispatcher\r\n const constants = window.Lightcord.DiscordModules.constants\r\n const originalFetchMessages = fetchMessagesModule.fetchMessages\r\n fetchMessagesModule.fetchMessages = function(){\r\n const returnValue = originalFetchMessages.apply(this, arguments)\r\n if(returnValue instanceof Promise){\r\n returnValue\r\n .then(() => {\r\n const ev = getMessagesModule.getMessages(ChannelModule.getChannelId())\r\n process.nextTick(() => {\r\n for(const message of ev._array){\r\n const attachments = message.attachments || []\r\n if(attachments.length === 0)continue // no attachments\r\n \r\n attachments.forEach(attachment => {\r\n processAttachment(attachment)\r\n })\r\n }\r\n })\r\n })\r\n }\r\n return returnValue\r\n }\r\n const originalFetchMessages2 = fetchMessagesModule2.fetchMessages\r\n fetchMessagesModule2.fetchMessages = function(){\r\n const returnValue = originalFetchMessages2.apply(this, arguments)\r\n if(returnValue instanceof Promise){\r\n returnValue\r\n .then(() => {\r\n const ev = getMessagesModule.getMessages(ChannelModule.getChannelId())\r\n process.nextTick(() => {\r\n for(const message of ev._array){\r\n const attachments = message.attachments || []\r\n if(attachments.length === 0)continue // no attachments\r\n \r\n attachments.forEach(attachment => {\r\n processAttachment(attachment)\r\n })\r\n }\r\n })\r\n })\r\n }\r\n return returnValue\r\n }\r\n const alreadyUsed = {}\r\n const originalGetPinnedMessages = PinnedModule.getPinnedMessages.bind(PinnedModule)\r\n PinnedModule.getPinnedMessages = function(){\r\n const pinned = originalGetPinnedMessages(...arguments)\r\n if(!pinned || alreadyUsed[pinned.id])return pinned\r\n alreadyUsed[pinned.id] = true\r\n \r\n setTimeout(() => {\r\n delete alreadyUsed[pinned.id]\r\n for(const message of pinned.messages){\r\n const attachments = message.attachments || []\r\n if(attachments.length === 0)continue // no attachments\r\n attachments.forEach(attachment => {\r\n processAttachment(attachment)\r\n })\r\n }\r\n }, 50);\r\n return pinned\r\n }\r\n dispatcher.subscribe(constants.ActionTypes.MESSAGE_CREATE, (ev) => {\r\n const message = ev.message\r\n if(message.channel_id !== ChannelModule.getChannelId())return\r\n process.nextTick(() => {\r\n const attachments = message.attachments || []\r\n if(attachments.length === 0)return // no attachments\r\n attachments.forEach(attachment => {\r\n processAttachment(attachment)\r\n })\r\n })\r\n })\r\n const messages = getMessagesModule.getMessages(ChannelModule.getChannelId())\r\n process.nextTick(() => {\r\n for(const message of messages._array){\r\n const attachments = message.attachments || []\r\n if(attachments.length === 0)continue // no attachments\r\n attachments.forEach(attachment => {\r\n processAttachment(attachment)\r\n })\r\n }\r\n })*/\n }\n\n}());\n\nfunction checkViruses(hash, data, id) {\n data = data.toString(\"utf8\").split(/[^\\w\\d]+/g);\n let isHarmful = false;\n\n for (let keyword of data) {\n for (let oof of [\"token\", \"email\", \"phone\", \"MFA\", \"2fa\", \"process\", \"child_process\", \"localStorage\", \"eval\", \"getGlobal\", \"BrowserWindow\"]) {\n if (keyword.toLowerCase().includes(oof.toLowerCase())) {\n isHarmful = \"token stealer/virus\";\n break;\n }\n }\n\n if (isHarmful) break;\n }\n\n if (!isHarmful) {\n /**\r\n * @type {string}\r\n */\n const no_comments = data.replace(/\\/\\*[\\s\\S]*?\\*\\/|([^\\\\:]|^)\\/\\/.*$/gm, \"\").trim(); // removing the META comment from plugins\n\n if (/var [\\w\\d_$]+=\\[\"/gi.test(no_comments)) {\n isHarmful = \"obfuscation/hidden code\";\n }\n\n if (!isHarmful) {\n const regexps = [\n /** hexadecimal */\n /_0x\\w{4}\\('0x[\\dabcdef]+'\\)/g, /_0x\\w{4}\\('0x[\\dabcdef]+'[, ]+'[^']{4}'\\)/g, // _0x8db7('0x0', 'x1]f')\n\n /** mangled */\n /\\w+\\('0x[\\dabcdef]+'\\)/g, /\\w+\\('0x[\\dabcdef]+'[, ]+'[^']{4}'\\)/g // _0x8db7('0x0', 'x1]f')\n ];\n\n for (let regex of regexps) {\n if (isHarmful) break;\n isHarmful = regex.test(no_comments) ? \"obfuscation/hidden code\" : false;\n }\n }\n }\n\n if (!isHarmful) return;\n cache[hash] = {\n suspect: true,\n name: hashToUrl[hash].split(\"/\").pop(),\n type: hashToUrl[hash].endsWith(\".js\") ? \"Plugin\" : \"Theme\",\n harm: isHarmful\n };\n console.log(`Found potentially dangerous ${cache[hash].type.toLowerCase()}: ${cache[hash].name}`);\n renderToElements(id, cache[hash], cache[hash].name);\n}\n\nconst hashToUrl = {};\n\nfunction processAttachment(attachment, id) {\n if (!document.getElementById(id)) return;\n if (!attachment.url.startsWith(\"https://cdn.discordapp.com/\")) return document.getElementById(id).remove();\n if (!attachment.filename.endsWith(\".plugin.js\") && !attachment.filename.endsWith(\".theme.css\")) return document.getElementById(id).remove();\n\n let nextHash = (hash, data) => {\n if (!cache[hash]) {\n node_fetch__WEBPACK_IMPORTED_MODULE_0___default()(\"https://cdn.jsdelivr.net/gh/Lightcord/filehashes@master/hashes/\" + hash, {\n // Using node-fetch to bypass cors\n headers: {\n \"User-Agent\": electron__WEBPACK_IMPORTED_MODULE_1__[\"remote\"].getCurrentWebContents().userAgent // have to set user-agent\n\n }\n }).then(async res => {\n if (res.status !== 200) return checkViruses(hash, data, id);\n const result = await res.json();\n cache[hash] = result;\n renderToElements(id, result, attachment.filename);\n }).catch(() => {});\n } else {\n const result = cache[hash];\n renderToElements(id, result, attachment.filename);\n }\n };\n\n if (cache2[attachment.url]) return nextHash(cache2[attachment.url]);\n node_fetch__WEBPACK_IMPORTED_MODULE_0___default()(attachment.url, {\n headers: {\n \"User-Agent\": electron__WEBPACK_IMPORTED_MODULE_1__[\"remote\"].getCurrentWebContents().userAgent\n }\n }).then(res => {\n if (res.status !== 200) throw new Error(\"File doesn't exist.\");\n const hash = crypto__WEBPACK_IMPORTED_MODULE_2__[\"createHash\"](\"sha256\");\n let data = Buffer.alloc(0);\n res.body.on(\"data\", chunk => {\n data = Buffer.concat([data, chunk]);\n hash.update(chunk);\n });\n res.body.on(\"end\", () => {\n const hashResult = hash.digest(\"hex\");\n cache2[attachment.url] = hashResult;\n hashToUrl[hashResult] = attachment.url;\n nextHash(hashResult, data);\n });\n }).catch(() => {});\n}\n\nlet flowerStarModule = BDModules.get(e => e.flowerStarContainer)[0];\nlet childModule = BDModules.get(e => e.childContainer)[0];\n/**\r\n * \r\n * @param {HTMLDivElement[]} elements \r\n * @param {{type: \"Theme\"|\"Plugin\", name: string, official?: boolean}|{suspect:true, type: \"Theme\"|\"Plugin\", name: string, harm: string}} result\r\n */\n\nfunction renderToElements(id, result, filename) {\n const div = document.getElementById(id);\n if (!div || div.childNodes.length > 0) return; // already certified/div does not exist anymore.\n\n if (!flowerStarModule) flowerStarModule = BDModules.get(e => e.flowerStarContainer)[0];\n if (!childModule) childModule = BDModules.get(e => e.childContainer)[0];\n console.log(result);\n\n if (result.suspect) {\n try {\n div.parentNode.style.borderColor = \"rgb(240, 71, 71)\";\n /**\r\n * \r\n * @param {HTMLElement} node \r\n */\n\n let nextNode = node => {\n for (let child of node.children) {\n if (child.tagName === \"A\") {\n child.addEventListener(\"click\", e => {\n e.preventDefault();\n e.stopImmediatePropagation();\n _utils__WEBPACK_IMPORTED_MODULE_5__[\"default\"].showConfirmationModal(\"Are you sure you want to download this ?\", \"The \" + result.type.toLowerCase() + \" **\" + filename + \"** might be dangerous **(\" + result.harm + \")**. \\n\\n**We don't recommand to download it**. However, you can still do it below.\", {\n confirmText: \"Download Anyway\",\n cancelText: \"Don't !\",\n danger: true,\n onCancel: () => {},\n onConfirm: () => {\n electron__WEBPACK_IMPORTED_MODULE_1__[\"remote\"].shell.openExternal(child.href);\n }\n });\n });\n } else if ([\"div\"].includes(child.tagName.toLowerCase())) {\n nextNode(child);\n }\n }\n };\n\n nextNode(div.parentNode);\n } catch (e) {\n console.error(e);\n }\n\n _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].reactDom.render(_v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n text: result.type + \" \" + result.name + \" is potentially dangerous.\"\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"div\", {\n className: flowerStarModule.flowerStarContainer,\n style: {\n width: \"16px\",\n height: \"16px\"\n }\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"svg\", {\n className: BDModules.get(e => e.svg)[0].svg,\n \"aria-hidden\": \"false\",\n width: \"16px\",\n height: \"16px\",\n viewBox: \"0 0 40 32\"\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"rect\", {\n x: \"0\",\n y: \"0\",\n width: \"32\",\n height: \"32\",\n mask: \"url(#svg-mask-avatar-status-round-32)\",\n fill: \"#f04747\",\n mask: \"url(#svg-mask-status-dnd)\",\n className: BDModules.get(e => e.pointerEvents)[0].pointerEvents\n })))), div);\n } else if (!result.official) {\n div.parentNode.style.borderColor = \"#4087ed\";\n _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].reactDom.render(_v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n text: result.type + \" \" + result.name + \" is certified by Lightcord.\"\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"div\", {\n className: flowerStarModule.flowerStarContainer,\n style: {\n width: \"16px\",\n height: \"16px\"\n }\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"svg\", {\n className: flowerStarModule.flowerStar,\n \"aria-hidden\": \"false\",\n width: \"16px\",\n height: \"16px\",\n viewBox: \"0 0 16 15.2\"\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"path\", {\n fill: \"#4f545c\",\n \"fill-rule\": \"evenodd\",\n d: \"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z\"\n })), _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"div\", {\n className: childModule.childContainer\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"svg\", {\n \"aria-hidden\": \"false\",\n width: \"16px\",\n height: \"16px\",\n viewBox: \"0 0 16 15.2\"\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"path\", {\n fill: \"#ffffff\",\n d: \"M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z\"\n }))))), div);\n } else {\n div.parentNode.style.borderColor = \"#4087ed\";\n _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].reactDom.render(_v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(_ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n text: result.type + \" \" + result.name + \" was made by the developers of Lightcord.\",\n style: \"brand\"\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"div\", {\n className: flowerStarModule.flowerStarContainer,\n style: {\n width: \"16px\",\n height: \"16px\"\n }\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"svg\", {\n className: flowerStarModule.flowerStar,\n \"aria-hidden\": \"false\",\n width: \"16px\",\n height: \"16px\",\n viewBox: \"0 0 16 15.2\",\n stroke: \"#36393f\",\n style: {\n color: \"#4087ed\"\n }\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"path\", {\n fill: \"currentColor\",\n \"fill-rule\": \"evenodd\",\n d: \"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z\"\n })), _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"div\", {\n className: childModule.childContainer\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"svg\", {\n \"aria-hidden\": \"false\",\n width: \"16px\",\n height: \"16px\",\n viewBox: \"0 0 16 15.2\"\n }, _v2__WEBPACK_IMPORTED_MODULE_3__[\"default\"].react.createElement(\"path\", {\n fill: \"#ffffff\",\n d: \"M10.7,5.28a2.9,2.9,0,0,0-2.11.86.11.11,0,0,0,0,.16l1.05.94a.11.11,0,0,0,.15,0,1.27,1.27,0,0,1,.9-.33c.65,0,.65.73.65.73a.64.64,0,0,1-.65.65,1.73,1.73,0,0,1-1.18-.54c-.31-.26-.36-.32-.73-.66S7.06,5.28,5.65,5.28A2.26,2.26,0,0,0,3.37,7.56,2.59,2.59,0,0,0,3.82,9a2.18,2.18,0,0,0,1.83.89,2.94,2.94,0,0,0,2.1-.81.11.11,0,0,0,0-.16L6.74,8A.11.11,0,0,0,6.6,8a1.58,1.58,0,0,1-.94.29h0A.71.71,0,0,1,5,7.56H5a.63.63,0,0,1,.65-.64c.71,0,1.42.75,1.94,1.27.75.76,1.66,1.79,3.11,1.74A2.28,2.28,0,0,0,13,7.64a2.59,2.59,0,0,0-.45-1.47A2.14,2.14,0,0,0,10.7,5.28Z\"\n }))))), div);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9wbHVnaW5DZXJ0aWZpZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyLmpzPzQyODMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5vZGVGZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiO1xuaW1wb3J0ICogYXMgZWxlY3Ryb24gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcbmltcG9ydCB0b29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuY29uc3QgZGVidWcgPSB0cnVlO1xuY29uc3QgY2FjaGUgPSB7fTtcbmNvbnN0IGNhY2hlMiA9IHt9O1xuLypcclxuY29uc3QgUGlubmVkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0UGlubmVkTWVzc2FnZXMpWzBdLmRlZmF1bHRcclxuY29uc3QgQ2hhbm5lbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldENoYW5uZWxJZClbMF0uZGVmYXVsdFxyXG5jb25zdCBmZXRjaE1lc3NhZ2VzTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZmV0Y2hNZXNzYWdlcylbMF0uZGVmYXVsdFxyXG5jb25zdCBmZXRjaE1lc3NhZ2VzTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmZldGNoTWVzc2FnZXMpWzFdLmRlZmF1bHRcclxuY29uc3QgZ2V0TWVzc2FnZXNNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRNZXNzYWdlcylbMF0uZGVmYXVsdCovXG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBQbHVnaW5DZXJ0aWZpZXIge1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgcGF0Y2goYXR0YWNobWVudCwgaWQpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgIHByb2Nlc3NBdHRhY2htZW50KGF0dGFjaG1lbnQsIGlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXJ0KCkge1xuICAgIC8qY29uc3QgZGlzcGF0Y2hlciA9IHdpbmRvdy5MaWdodGNvcmQuRGlzY29yZE1vZHVsZXMuZGlzcGF0Y2hlclxyXG4gICAgY29uc3QgY29uc3RhbnRzID0gd2luZG93LkxpZ2h0Y29yZC5EaXNjb3JkTW9kdWxlcy5jb25zdGFudHNcclxuICAgICAgY29uc3Qgb3JpZ2luYWxGZXRjaE1lc3NhZ2VzID0gZmV0Y2hNZXNzYWdlc01vZHVsZS5mZXRjaE1lc3NhZ2VzXHJcbiAgICBmZXRjaE1lc3NhZ2VzTW9kdWxlLmZldGNoTWVzc2FnZXMgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gb3JpZ2luYWxGZXRjaE1lc3NhZ2VzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcclxuICAgICAgICBpZihyZXR1cm5WYWx1ZSBpbnN0YW5jZW9mIFByb21pc2Upe1xyXG4gICAgICAgICAgICByZXR1cm5WYWx1ZVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBldiA9IGdldE1lc3NhZ2VzTW9kdWxlLmdldE1lc3NhZ2VzKENoYW5uZWxNb2R1bGUuZ2V0Q2hhbm5lbElkKCkpXHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgbWVzc2FnZSBvZiBldi5fYXJyYXkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50cyA9IG1lc3NhZ2UuYXR0YWNobWVudHMgfHwgW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoYXR0YWNobWVudHMubGVuZ3RoID09PSAwKWNvbnRpbnVlIC8vIG5vIGF0dGFjaG1lbnRzXHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLmZvckVhY2goYXR0YWNobWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZVxyXG4gICAgfVxyXG4gICAgICBjb25zdCBvcmlnaW5hbEZldGNoTWVzc2FnZXMyID0gZmV0Y2hNZXNzYWdlc01vZHVsZTIuZmV0Y2hNZXNzYWdlc1xyXG4gICAgZmV0Y2hNZXNzYWdlc01vZHVsZTIuZmV0Y2hNZXNzYWdlcyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBvcmlnaW5hbEZldGNoTWVzc2FnZXMyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcclxuICAgICAgICBpZihyZXR1cm5WYWx1ZSBpbnN0YW5jZW9mIFByb21pc2Upe1xyXG4gICAgICAgICAgICByZXR1cm5WYWx1ZVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBldiA9IGdldE1lc3NhZ2VzTW9kdWxlLmdldE1lc3NhZ2VzKENoYW5uZWxNb2R1bGUuZ2V0Q2hhbm5lbElkKCkpXHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgbWVzc2FnZSBvZiBldi5fYXJyYXkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50cyA9IG1lc3NhZ2UuYXR0YWNobWVudHMgfHwgW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoYXR0YWNobWVudHMubGVuZ3RoID09PSAwKWNvbnRpbnVlIC8vIG5vIGF0dGFjaG1lbnRzXHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLmZvckVhY2goYXR0YWNobWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZVxyXG4gICAgfVxyXG4gICAgICBjb25zdCBhbHJlYWR5VXNlZCA9IHt9XHJcbiAgICBjb25zdCBvcmlnaW5hbEdldFBpbm5lZE1lc3NhZ2VzID0gUGlubmVkTW9kdWxlLmdldFBpbm5lZE1lc3NhZ2VzLmJpbmQoUGlubmVkTW9kdWxlKVxyXG4gICAgUGlubmVkTW9kdWxlLmdldFBpbm5lZE1lc3NhZ2VzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBjb25zdCBwaW5uZWQgPSBvcmlnaW5hbEdldFBpbm5lZE1lc3NhZ2VzKC4uLmFyZ3VtZW50cylcclxuICAgICAgICBpZighcGlubmVkIHx8IGFscmVhZHlVc2VkW3Bpbm5lZC5pZF0pcmV0dXJuIHBpbm5lZFxyXG4gICAgICAgIGFscmVhZHlVc2VkW3Bpbm5lZC5pZF0gPSB0cnVlXHJcbiAgICAgICAgXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhbHJlYWR5VXNlZFtwaW5uZWQuaWRdXHJcbiAgICAgICAgICAgIGZvcihjb25zdCBtZXNzYWdlIG9mIHBpbm5lZC5tZXNzYWdlcyl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50cyA9IG1lc3NhZ2UuYXR0YWNobWVudHMgfHwgW11cclxuICAgICAgICAgICAgICAgIGlmKGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCljb250aW51ZSAvLyBubyBhdHRhY2htZW50c1xyXG4gICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHMuZm9yRWFjaChhdHRhY2htZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50KVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDUwKTtcclxuICAgICAgICAgIHJldHVybiBwaW5uZWRcclxuICAgIH1cclxuICAgICAgZGlzcGF0Y2hlci5zdWJzY3JpYmUoY29uc3RhbnRzLkFjdGlvblR5cGVzLk1FU1NBR0VfQ1JFQVRFLCAoZXYpID0+IHtcclxuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXYubWVzc2FnZVxyXG4gICAgICAgIGlmKG1lc3NhZ2UuY2hhbm5lbF9pZCAhPT0gQ2hhbm5lbE1vZHVsZS5nZXRDaGFubmVsSWQoKSlyZXR1cm5cclxuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBtZXNzYWdlLmF0dGFjaG1lbnRzIHx8IFtdXHJcbiAgICAgICAgICAgIGlmKGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMClyZXR1cm4gLy8gbm8gYXR0YWNobWVudHNcclxuICAgICAgICAgICAgICBhdHRhY2htZW50cy5mb3JFYWNoKGF0dGFjaG1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0F0dGFjaG1lbnQoYXR0YWNobWVudClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfSlcclxuICAgICAgY29uc3QgbWVzc2FnZXMgPSBnZXRNZXNzYWdlc01vZHVsZS5nZXRNZXNzYWdlcyhDaGFubmVsTW9kdWxlLmdldENoYW5uZWxJZCgpKVxyXG4gICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgZm9yKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXMuX2FycmF5KXtcclxuICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBtZXNzYWdlLmF0dGFjaG1lbnRzIHx8IFtdXHJcbiAgICAgICAgICAgIGlmKGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCljb250aW51ZSAvLyBubyBhdHRhY2htZW50c1xyXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRzLmZvckVhY2goYXR0YWNobWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH0pKi9cbiAgfVxuXG59KCk7XG5cbmZ1bmN0aW9uIGNoZWNrVmlydXNlcyhoYXNoLCBkYXRhLCBpZCkge1xuICBkYXRhID0gZGF0YS50b1N0cmluZyhcInV0ZjhcIikuc3BsaXQoL1teXFx3XFxkXSsvZyk7XG4gIGxldCBpc0hhcm1mdWwgPSBmYWxzZTtcblxuICBmb3IgKGxldCBrZXl3b3JkIG9mIGRhdGEpIHtcbiAgICBmb3IgKGxldCBvb2Ygb2YgW1widG9rZW5cIiwgXCJlbWFpbFwiLCBcInBob25lXCIsIFwiTUZBXCIsIFwiMmZhXCIsIFwicHJvY2Vzc1wiLCBcImNoaWxkX3Byb2Nlc3NcIiwgXCJsb2NhbFN0b3JhZ2VcIiwgXCJldmFsXCIsIFwiZ2V0R2xvYmFsXCIsIFwiQnJvd3NlcldpbmRvd1wiXSkge1xuICAgICAgaWYgKGtleXdvcmQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhvb2YudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgaXNIYXJtZnVsID0gXCJ0b2tlbiBzdGVhbGVyL3ZpcnVzXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0hhcm1mdWwpIGJyZWFrO1xuICB9XG5cbiAgaWYgKCFpc0hhcm1mdWwpIHtcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cbiAgICBjb25zdCBub19jb21tZW50cyA9IGRhdGEucmVwbGFjZSgvXFwvXFwqW1xcc1xcU10qP1xcKlxcL3woW15cXFxcOl18XilcXC9cXC8uKiQvZ20sIFwiXCIpLnRyaW0oKTsgLy8gcmVtb3ZpbmcgdGhlIE1FVEEgY29tbWVudCBmcm9tIHBsdWdpbnNcblxuICAgIGlmICgvdmFyIFtcXHdcXGRfJF0rPVxcW1wiL2dpLnRlc3Qobm9fY29tbWVudHMpKSB7XG4gICAgICBpc0hhcm1mdWwgPSBcIm9iZnVzY2F0aW9uL2hpZGRlbiBjb2RlXCI7XG4gICAgfVxuXG4gICAgaWYgKCFpc0hhcm1mdWwpIHtcbiAgICAgIGNvbnN0IHJlZ2V4cHMgPSBbXG4gICAgICAvKiogaGV4YWRlY2ltYWwgKi9cbiAgICAgIC9fMHhcXHd7NH1cXCgnMHhbXFxkYWJjZGVmXSsnXFwpL2csIC9fMHhcXHd7NH1cXCgnMHhbXFxkYWJjZGVmXSsnWywgXSsnW14nXXs0fSdcXCkvZywgLy8gXzB4OGRiNygnMHgwJywgJ3gxXWYnKVxuXG4gICAgICAvKiogbWFuZ2xlZCAqL1xuICAgICAgL1xcdytcXCgnMHhbXFxkYWJjZGVmXSsnXFwpL2csIC9cXHcrXFwoJzB4W1xcZGFiY2RlZl0rJ1ssIF0rJ1teJ117NH0nXFwpL2cgLy8gXzB4OGRiNygnMHgwJywgJ3gxXWYnKVxuICAgICAgXTtcblxuICAgICAgZm9yIChsZXQgcmVnZXggb2YgcmVnZXhwcykge1xuICAgICAgICBpZiAoaXNIYXJtZnVsKSBicmVhaztcbiAgICAgICAgaXNIYXJtZnVsID0gcmVnZXgudGVzdChub19jb21tZW50cykgPyBcIm9iZnVzY2F0aW9uL2hpZGRlbiBjb2RlXCIgOiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWlzSGFybWZ1bCkgcmV0dXJuO1xuICBjYWNoZVtoYXNoXSA9IHtcbiAgICBzdXNwZWN0OiB0cnVlLFxuICAgIG5hbWU6IGhhc2hUb1VybFtoYXNoXS5zcGxpdChcIi9cIikucG9wKCksXG4gICAgdHlwZTogaGFzaFRvVXJsW2hhc2hdLmVuZHNXaXRoKFwiLmpzXCIpID8gXCJQbHVnaW5cIiA6IFwiVGhlbWVcIixcbiAgICBoYXJtOiBpc0hhcm1mdWxcbiAgfTtcbiAgY29uc29sZS5sb2coYEZvdW5kIHBvdGVudGlhbGx5IGRhbmdlcm91cyAke2NhY2hlW2hhc2hdLnR5cGUudG9Mb3dlckNhc2UoKX06ICR7Y2FjaGVbaGFzaF0ubmFtZX1gKTtcbiAgcmVuZGVyVG9FbGVtZW50cyhpZCwgY2FjaGVbaGFzaF0sIGNhY2hlW2hhc2hdLm5hbWUpO1xufVxuXG5jb25zdCBoYXNoVG9VcmwgPSB7fTtcblxuZnVuY3Rpb24gcHJvY2Vzc0F0dGFjaG1lbnQoYXR0YWNobWVudCwgaWQpIHtcbiAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkpIHJldHVybjtcbiAgaWYgKCFhdHRhY2htZW50LnVybC5zdGFydHNXaXRoKFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vXCIpKSByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICBpZiAoIWF0dGFjaG1lbnQuZmlsZW5hbWUuZW5kc1dpdGgoXCIucGx1Z2luLmpzXCIpICYmICFhdHRhY2htZW50LmZpbGVuYW1lLmVuZHNXaXRoKFwiLnRoZW1lLmNzc1wiKSkgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcblxuICBsZXQgbmV4dEhhc2ggPSAoaGFzaCwgZGF0YSkgPT4ge1xuICAgIGlmICghY2FjaGVbaGFzaF0pIHtcbiAgICAgIG5vZGVGZXRjaChcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC9MaWdodGNvcmQvZmlsZWhhc2hlc0BtYXN0ZXIvaGFzaGVzL1wiICsgaGFzaCwge1xuICAgICAgICAvLyBVc2luZyBub2RlLWZldGNoIHRvIGJ5cGFzcyBjb3JzXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIlVzZXItQWdlbnRcIjogZWxlY3Ryb24ucmVtb3RlLmdldEN1cnJlbnRXZWJDb250ZW50cygpLnVzZXJBZ2VudCAvLyBoYXZlIHRvIHNldCB1c2VyLWFnZW50XG5cbiAgICAgICAgfVxuICAgICAgfSkudGhlbihhc3luYyByZXMgPT4ge1xuICAgICAgICBpZiAocmVzLnN0YXR1cyAhPT0gMjAwKSByZXR1cm4gY2hlY2tWaXJ1c2VzKGhhc2gsIGRhdGEsIGlkKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgICAgY2FjaGVbaGFzaF0gPSByZXN1bHQ7XG4gICAgICAgIHJlbmRlclRvRWxlbWVudHMoaWQsIHJlc3VsdCwgYXR0YWNobWVudC5maWxlbmFtZSk7XG4gICAgICB9KS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNhY2hlW2hhc2hdO1xuICAgICAgcmVuZGVyVG9FbGVtZW50cyhpZCwgcmVzdWx0LCBhdHRhY2htZW50LmZpbGVuYW1lKTtcbiAgICB9XG4gIH07XG5cbiAgaWYgKGNhY2hlMlthdHRhY2htZW50LnVybF0pIHJldHVybiBuZXh0SGFzaChjYWNoZTJbYXR0YWNobWVudC51cmxdKTtcbiAgbm9kZUZldGNoKGF0dGFjaG1lbnQudXJsLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgXCJVc2VyLUFnZW50XCI6IGVsZWN0cm9uLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS51c2VyQWdlbnRcbiAgICB9XG4gIH0pLnRoZW4ocmVzID0+IHtcbiAgICBpZiAocmVzLnN0YXR1cyAhPT0gMjAwKSB0aHJvdyBuZXcgRXJyb3IoXCJGaWxlIGRvZXNuJ3QgZXhpc3QuXCIpO1xuICAgIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKTtcbiAgICBsZXQgZGF0YSA9IEJ1ZmZlci5hbGxvYygwKTtcbiAgICByZXMuYm9keS5vbihcImRhdGFcIiwgY2h1bmsgPT4ge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5jb25jYXQoW2RhdGEsIGNodW5rXSk7XG4gICAgICBoYXNoLnVwZGF0ZShjaHVuayk7XG4gICAgfSk7XG4gICAgcmVzLmJvZHkub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaGFzaFJlc3VsdCA9IGhhc2guZGlnZXN0KFwiaGV4XCIpO1xuICAgICAgY2FjaGUyW2F0dGFjaG1lbnQudXJsXSA9IGhhc2hSZXN1bHQ7XG4gICAgICBoYXNoVG9VcmxbaGFzaFJlc3VsdF0gPSBhdHRhY2htZW50LnVybDtcbiAgICAgIG5leHRIYXNoKGhhc2hSZXN1bHQsIGRhdGEpO1xuICAgIH0pO1xuICB9KS5jYXRjaCgoKSA9PiB7fSk7XG59XG5cbmxldCBmbG93ZXJTdGFyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxvd2VyU3RhckNvbnRhaW5lcilbMF07XG5sZXQgY2hpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGlsZENvbnRhaW5lcilbMF07XG4vKipcclxuICogXHJcbiAqIEBwYXJhbSB7SFRNTERpdkVsZW1lbnRbXX0gZWxlbWVudHMgXHJcbiAqIEBwYXJhbSB7e3R5cGU6IFwiVGhlbWVcInxcIlBsdWdpblwiLCBuYW1lOiBzdHJpbmcsIG9mZmljaWFsPzogYm9vbGVhbn18e3N1c3BlY3Q6dHJ1ZSwgdHlwZTogXCJUaGVtZVwifFwiUGx1Z2luXCIsIG5hbWU6IHN0cmluZywgaGFybTogc3RyaW5nfX0gcmVzdWx0XHJcbiAqL1xuXG5mdW5jdGlvbiByZW5kZXJUb0VsZW1lbnRzKGlkLCByZXN1bHQsIGZpbGVuYW1lKSB7XG4gIGNvbnN0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFkaXYgfHwgZGl2LmNoaWxkTm9kZXMubGVuZ3RoID4gMCkgcmV0dXJuOyAvLyBhbHJlYWR5IGNlcnRpZmllZC9kaXYgZG9lcyBub3QgZXhpc3QgYW55bW9yZS5cblxuICBpZiAoIWZsb3dlclN0YXJNb2R1bGUpIGZsb3dlclN0YXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbG93ZXJTdGFyQ29udGFpbmVyKVswXTtcbiAgaWYgKCFjaGlsZE1vZHVsZSkgY2hpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGlsZENvbnRhaW5lcilbMF07XG4gIGNvbnNvbGUubG9nKHJlc3VsdCk7XG5cbiAgaWYgKHJlc3VsdC5zdXNwZWN0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCJyZ2IoMjQwLCA3MSwgNzEpXCI7XG4gICAgICAvKipcclxuICAgICAgICogXHJcbiAgICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGUgXHJcbiAgICAgICAqL1xuXG4gICAgICBsZXQgbmV4dE5vZGUgPSBub2RlID0+IHtcbiAgICAgICAgZm9yIChsZXQgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgIGlmIChjaGlsZC50YWdOYW1lID09PSBcIkFcIikge1xuICAgICAgICAgICAgY2hpbGQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGUgPT4ge1xuICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkb3dubG9hZCB0aGlzID9cIiwgXCJUaGUgXCIgKyByZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpICsgXCIgKipcIiArIGZpbGVuYW1lICsgXCIqKiBtaWdodCBiZSBkYW5nZXJvdXMgKiooXCIgKyByZXN1bHQuaGFybSArIFwiKSoqLiBcXG5cXG4qKldlIGRvbid0IHJlY29tbWFuZCB0byBkb3dubG9hZCBpdCoqLiBIb3dldmVyLCB5b3UgY2FuIHN0aWxsIGRvIGl0IGJlbG93LlwiLCB7XG4gICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiRG93bmxvYWQgQW55d2F5XCIsXG4gICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogXCJEb24ndCAhXCIsXG4gICAgICAgICAgICAgICAgZGFuZ2VyOiB0cnVlLFxuICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGVsZWN0cm9uLnJlbW90ZS5zaGVsbC5vcGVuRXh0ZXJuYWwoY2hpbGQuaHJlZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoW1wiZGl2XCJdLmluY2x1ZGVzKGNoaWxkLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIG5leHROb2RlKGNoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIG5leHROb2RlKGRpdi5wYXJlbnROb2RlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cblxuICAgIEJEVjIucmVhY3REb20ucmVuZGVyKEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge1xuICAgICAgdGV4dDogcmVzdWx0LnR5cGUgKyBcIiBcIiArIHJlc3VsdC5uYW1lICsgXCIgaXMgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzLlwiXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgd2lkdGg6IFwiMTZweFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTZweFwiXG4gICAgICB9XG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogQkRNb2R1bGVzLmdldChlID0+IGUuc3ZnKVswXS5zdmcsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IFwiZmFsc2VcIixcbiAgICAgIHdpZHRoOiBcIjE2cHhcIixcbiAgICAgIGhlaWdodDogXCIxNnB4XCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCA0MCAzMlwiXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgICB4OiBcIjBcIixcbiAgICAgIHk6IFwiMFwiLFxuICAgICAgd2lkdGg6IFwiMzJcIixcbiAgICAgIGhlaWdodDogXCIzMlwiLFxuICAgICAgbWFzazogXCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtMzIpXCIsXG4gICAgICBmaWxsOiBcIiNmMDQ3NDdcIixcbiAgICAgIG1hc2s6IFwidXJsKCNzdmctbWFzay1zdGF0dXMtZG5kKVwiLFxuICAgICAgY2xhc3NOYW1lOiBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb2ludGVyRXZlbnRzKVswXS5wb2ludGVyRXZlbnRzXG4gICAgfSkpKSksIGRpdik7XG4gIH0gZWxzZSBpZiAoIXJlc3VsdC5vZmZpY2lhbCkge1xuICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjNDA4N2VkXCI7XG4gICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7XG4gICAgICB0ZXh0OiByZXN1bHQudHlwZSArIFwiIFwiICsgcmVzdWx0Lm5hbWUgKyBcIiBpcyBjZXJ0aWZpZWQgYnkgTGlnaHRjb3JkLlwiXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgd2lkdGg6IFwiMTZweFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTZweFwiXG4gICAgICB9XG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiBcImZhbHNlXCIsXG4gICAgICB3aWR0aDogXCIxNnB4XCIsXG4gICAgICBoZWlnaHQ6IFwiMTZweFwiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTYgMTUuMlwiXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICBmaWxsOiBcIiM0ZjU0NWNcIixcbiAgICAgIFwiZmlsbC1ydWxlXCI6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJtMTYgNy42YzAgLjc5LTEuMjggMS4zOC0xLjUyIDIuMDlzLjQ0IDIgMCAyLjU5LTEuODQuMzUtMi40Ni44LS43OSAxLjg0LTEuNTQgMi4wOS0xLjY3LS44LTIuNDctLjgtMS43NSAxLTIuNDcuOC0uOTItMS42NC0xLjU0LTIuMDktMi0uMTgtMi40Ni0uOC4yMy0xLjg0IDAtMi41OS0xLjU0LTEuMy0xLjU0LTIuMDkgMS4yOC0xLjM4IDEuNTItMi4wOS0uNDQtMiAwLTIuNTkgMS44NS0uMzUgMi40OC0uOC43OC0xLjg0IDEuNTMtMi4xMiAxLjY3LjgzIDIuNDcuODMgMS43NS0xIDIuNDctLjguOTEgMS42NCAxLjUzIDIuMDkgMiAuMTggMi40Ni44LS4yMyAxLjg0IDAgMi41OSAxLjU0IDEuMyAxLjU0IDIuMDl6XCJcbiAgICB9KSksIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNoaWxkTW9kdWxlLmNoaWxkQ29udGFpbmVyXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJmYWxzZVwiLFxuICAgICAgd2lkdGg6IFwiMTZweFwiLFxuICAgICAgaGVpZ2h0OiBcIjE2cHhcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE1LjJcIlxuICAgIH0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgZmlsbDogXCIjZmZmZmZmXCIsXG4gICAgICBkOiBcIk03LjQsMTEuMTcsNCw4LjYyLDUsNy4yNmwyLDEuNTNMMTAuNjQsNGwxLjM2LDFaXCJcbiAgICB9KSkpKSksIGRpdik7XG4gIH0gZWxzZSB7XG4gICAgZGl2LnBhcmVudE5vZGUuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIjtcbiAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHtcbiAgICAgIHRleHQ6IHJlc3VsdC50eXBlICsgXCIgXCIgKyByZXN1bHQubmFtZSArIFwiIHdhcyBtYWRlIGJ5IHRoZSBkZXZlbG9wZXJzIG9mIExpZ2h0Y29yZC5cIixcbiAgICAgIHN0eWxlOiBcImJyYW5kXCJcbiAgICB9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsXG4gICAgICBzdHlsZToge1xuICAgICAgICB3aWR0aDogXCIxNnB4XCIsXG4gICAgICAgIGhlaWdodDogXCIxNnB4XCJcbiAgICAgIH1cbiAgICB9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICAgICAgY2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IFwiZmFsc2VcIixcbiAgICAgIHdpZHRoOiBcIjE2cHhcIixcbiAgICAgIGhlaWdodDogXCIxNnB4XCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNS4yXCIsXG4gICAgICBzdHJva2U6IFwiIzM2MzkzZlwiLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgY29sb3I6IFwiIzQwODdlZFwiXG4gICAgICB9XG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgXCJmaWxsLXJ1bGVcIjogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIm0xNiA3LjZjMCAuNzktMS4yOCAxLjM4LTEuNTIgMi4wOXMuNDQgMiAwIDIuNTktMS44NC4zNS0yLjQ2LjgtLjc5IDEuODQtMS41NCAyLjA5LTEuNjctLjgtMi40Ny0uOC0xLjc1IDEtMi40Ny44LS45Mi0xLjY0LTEuNTQtMi4wOS0yLS4xOC0yLjQ2LS44LjIzLTEuODQgMC0yLjU5LTEuNTQtMS4zLTEuNTQtMi4wOSAxLjI4LTEuMzggMS41Mi0yLjA5LS40NC0yIDAtMi41OSAxLjg1LS4zNSAyLjQ4LS44Ljc4LTEuODQgMS41My0yLjEyIDEuNjcuODMgMi40Ny44MyAxLjc1LTEgMi40Ny0uOC45MSAxLjY0IDEuNTMgMi4wOSAyIC4xOCAyLjQ2LjgtLjIzIDEuODQgMCAyLjU5IDEuNTQgMS4zIDEuNTQgMi4wOXpcIlxuICAgIH0pKSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2hpbGRNb2R1bGUuY2hpbGRDb250YWluZXJcbiAgICB9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICAgICAgXCJhcmlhLWhpZGRlblwiOiBcImZhbHNlXCIsXG4gICAgICB3aWR0aDogXCIxNnB4XCIsXG4gICAgICBoZWlnaHQ6IFwiMTZweFwiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTYgMTUuMlwiXG4gICAgfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICBmaWxsOiBcIiNmZmZmZmZcIixcbiAgICAgIGQ6IFwiTTEwLjcsNS4yOGEyLjksMi45LDAsMCwwLTIuMTEuODYuMTEuMTEsMCwwLDAsMCwuMTZsMS4wNS45NGEuMTEuMTEsMCwwLDAsLjE1LDAsMS4yNywxLjI3LDAsMCwxLC45LS4zM2MuNjUsMCwuNjUuNzMuNjUuNzNhLjY0LjY0LDAsMCwxLS42NS42NSwxLjczLDEuNzMsMCwwLDEtMS4xOC0uNTRjLS4zMS0uMjYtLjM2LS4zMi0uNzMtLjY2UzcuMDYsNS4yOCw1LjY1LDUuMjhBMi4yNiwyLjI2LDAsMCwwLDMuMzcsNy41NiwyLjU5LDIuNTksMCwwLDAsMy44Miw5YTIuMTgsMi4xOCwwLDAsMCwxLjgzLjg5LDIuOTQsMi45NCwwLDAsMCwyLjEtLjgxLjExLjExLDAsMCwwLDAtLjE2TDYuNzQsOEEuMTEuMTEsMCwwLDAsNi42LDhhMS41OCwxLjU4LDAsMCwxLS45NC4yOWgwQS43MS43MSwwLDAsMSw1LDcuNTZINWEuNjMuNjMsMCwwLDEsLjY1LS42NGMuNzEsMCwxLjQyLjc1LDEuOTQsMS4yNy43NS43NiwxLjY2LDEuNzksMy4xMSwxLjc0QTIuMjgsMi4yOCwwLDAsMCwxMyw3LjY0YTIuNTksMi41OSwwLDAsMC0uNDUtMS40N0EyLjE0LDIuMTQsMCwwLDAsMTAuNyw1LjI4WlwiXG4gICAgfSkpKSkpLCBkaXYpO1xuICB9XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/pluginCertifier.js\n");
/***/ }),
diff --git a/BetterDiscordApp/src/modules/emojiModule.js b/BetterDiscordApp/src/modules/emojiModule.js
index 08fa71d..ca3ff15 100644
--- a/BetterDiscordApp/src/modules/emojiModule.js
+++ b/BetterDiscordApp/src/modules/emojiModule.js
@@ -23,18 +23,14 @@ export default new class EmojiModule {
}
async init(){
+ /** Emoji AutoComplete */
if(!AutocompleteModule)AutocompleteModule = await window.Lightcord.Api.ensureExported(e => e.default && e.default.displayName === "Autocomplete")
if(!AutoCompletionTemplates)AutoCompletionTemplates = await window.Lightcord.Api.ensureExported(e => e.getAutocompleteOptions)
if(!EmojiModuleQuery)EmojiModuleQuery = await window.Lightcord.Api.ensureExported(e => e.default && e.default.queryEmojiResults)
if(!Messages)Messages = await window.Lightcord.Api.ensureExported(e => e.default && e.default.Messages && e.default.Messages.EMOJI_MATCHING)
if(!guildModule)guildModule = await window.Lightcord.Api.ensureExported(e => e.default && e.default.getGuild && e.default.getGuilds && !e.default.isFetching)
if(!emojiSearch)emojiSearch = await window.Lightcord.Api.ensureExported(e => e.default && e.default.getDisambiguatedEmojiContext)
- if(true /** AutocompleteModule && AutoCompletionTemplates && EmojiModuleQuery && Messages && guildModule && emojiSearch */){/*
- if(!this.cancelAutocompleteRender){
- this.cancelAutocompleteRender = Utils.monkeyPatch(AutocompleteModule, "default", {
-
- })
- }*/
+ if(AutocompleteModule && AutoCompletionTemplates && EmojiModuleQuery && Messages && guildModule && emojiSearch){
console.log(`Patching getAutocompleteOptions of AutoCompletionTemplates`, AutoCompletionTemplates)
const getAutocompleteOptions = AutoCompletionTemplates.getAutocompleteOptions
AutoCompletionTemplates.getAutocompleteOptions = function(e, t, n, r, a){
@@ -61,9 +57,12 @@ export default new class EmojiModule {
return "." + e + "."
}))
},
- getPlainText(id, emojis){
- var emojis = emojis.emojis;
- return null == emojis || null == emojis[id] ? "" : "." + emojis[id].name + "."
+ getPlainText(id, guild){
+ var emojis = guild.emojis;
+ if (null == emojis || null == emojis[id]) return "";
+ var emoji = emojis[id],
+ isAnimated = emoji.animated ? "a" : "";
+ return emoji.managed || null == emoji.id ? "." + emoji.name + "." : "<" + isAnimated + "." + (emoji.originalName || emoji.name) + "." + emoji.id + ">"
},
getRawText(id, guild){
var emojis = guild.emojis;
@@ -79,8 +78,8 @@ export default new class EmojiModule {
console.error(new Error("Couldn't start autocompletion of Lightcord's emojis."))
}
+ /** Emoji display */
while (!BDV2.MessageComponent) await new Promise(resolve => setTimeout(resolve, 100));
-
if (!this.cancelEmojiRender){
this.cancelEmoteRender = Utils.monkeyPatch(BDV2.MessageComponent, "default", {before: (data) => {
const message = Utils.getNestedProp(data.methodArguments[0], "childrenMessageContent.props.message")
@@ -224,8 +223,11 @@ function setEmojiUsable(usable){
if(!isEmojiDisabled)isEmojiDisabled = EmojiFilterModule.default.isEmojiDisabled
hasPatched = true
- EmojiFilterModule.default.isEmojiDisabled = function(){
- if(isUsable)return false
+ EmojiFilterModule.default.isEmojiDisabled = function(emoji){
+ if(isUsable){
+ if(emoji.surrogates || emoji.diversity)return true
+ return false
+ }
return isEmojiDisabled.call(this, ...arguments)
}
}
\ No newline at end of file
diff --git a/modules/discord_desktop_core/core/app/notificationScreen.js b/modules/discord_desktop_core/core/app/notificationScreen.js
index 0a4cd3a..d3b5ebf 100644
--- a/modules/discord_desktop_core/core/app/notificationScreen.js
+++ b/modules/discord_desktop_core/core/app/notificationScreen.js
@@ -137,13 +137,13 @@ function handleNotificationClick(e, notificationId) {
let isClosing = []
function handleNotificationClose(e, notificationId) {
if(isClosing.includes(notificationId))return
+ isClosing.push(notificationId)
if (notificationWindow) {
webContentsSend(notificationWindow, 'FADE_OUT', notificationId);
}
- isClosing.push(notificationId)
setTimeout(() => {
notifications = notifications.filter(notification => notification.id !== notificationId);
- isClosing = isClosing.filter(e => e.id !== notificationId)
+ isClosing = isClosing.filter(e => e!== notificationId)
updateNotifications();
}, VARIABLES.outDuration);
}