User:Jack who built the house/convenientDiscussions.js

!function(modules) { var installedModules = {}; function __webpack_require__(moduleId) { if (installedModules[moduleId]) return installedModules[moduleId].exports; var module = installedModules[moduleId] = { i: moduleId, l: !1, exports: {} };       return modules[moduleId].call(module.exports, module, module.exports, __webpack_require__), module.l = !0, module.exports; }   __webpack_require__.m = modules, __webpack_require__.c = installedModules, __webpack_require__.d = function(exports, name, getter) { __webpack_require__.o(exports, name) || Object.defineProperty(exports, name, {           enumerable: !0,            get: getter        }); }, __webpack_require__.r = function(exports) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(exports, Symbol.toStringTag, {           value: "Module"        }), Object.defineProperty(exports, "__esModule", {            value: !0        }); }, __webpack_require__.t = function(value, mode) { if (1 & mode && (value = __webpack_require__(value)), 8 & mode) return value; if (4 & mode && "object" == typeof value && value && value.__esModule) return value; var ns = Object.create(null); if (__webpack_require__.r(ns), Object.defineProperty(ns, "default", { enumerable: !0, value: value }), 2 & mode && "string" != typeof value) for (var key in value) __webpack_require__.d(ns, key, function(key) {           return value[key];        }.bind(null, key)); return ns; }, __webpack_require__.n = function(module) { var getter = module && module.__esModule ? function { return module.default; } : function { return module; };       return __webpack_require__.d(getter, "a", getter), getter; }, __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }, __webpack_require__.p = "", __webpack_require__(__webpack_require__.s = 29); }([ function(module, exports) {   module.exports = function(receiver, privateMap) {        var descriptor = privateMap.get(receiver);        if (!descriptor) throw new TypeError("attempted to get private field on non-instance");        return descriptor.get ? descriptor.get.call(receiver) : descriptor.value;    }; }, function(module, exports) {    function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {        try {            var info = gen[key](arg), value = info.value;        } catch (error) {            return void reject(error);        }        info.done ? resolve(value) : Promise.resolve(value).then(_next, _throw);    }    module.exports = function(fn) {        return function {            var self = this, args = arguments;            return new Promise((function(resolve, reject) {                var gen = fn.apply(self, args);                function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); }               function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); }               _next(void 0); }));       };    }; }, function(module, exports) { module.exports = function(receiver, privateMap, value) { var descriptor = privateMap.get(receiver); if (!descriptor) throw new TypeError("attempted to set private field on non-instance"); if (descriptor.set) descriptor.set.call(receiver, value); else { if (!descriptor.writable) throw new TypeError("attempted to set read only private field"); descriptor.value = value; }       return value; }; }, function(module, exports, __webpack_require__) { "use strict"; var memo, isOldIE = function { return void 0 === memo && (memo = Boolean(window && document && document.all && !window.atob)), memo; }, getTarget = function { var memo = {}; return function(target) { if (void 0 === memo[target]) { var styleTarget = document.querySelector(target); if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) try { styleTarget = styleTarget.contentDocument.head; } catch (e) { styleTarget = null; }               memo[target] = styleTarget; }           return memo[target]; };   }, stylesInDom = []; function getIndexByIdentifier(identifier) { for (var result = -1, i = 0; i < stylesInDom.length; i++) if (stylesInDom[i].identifier === identifier) { result = i;           break; }       return result; }   function modulesToDom(list, options) { for (var idCountMap = {}, identifiers = [], i = 0; i < list.length; i++) { var item = list[i], id = options.base ? item[0] + options.base : item[0], count = idCountMap[id] || 0, identifier = "".concat(id, " ").concat(count); idCountMap[id] = count + 1; var index = getIndexByIdentifier(identifier), obj = { css: item[1], media: item[2], sourceMap: item[3] };           -1 !== index ? (stylesInDom[index].references++, stylesInDom[index].updater(obj)) : stylesInDom.push({               identifier: identifier,                updater: addStyle(obj, options),                references: 1            }), identifiers.push(identifier); }       return identifiers; }   function insertStyleElement(options) { var style = document.createElement("style"), attributes = options.attributes || {}; if (void 0 === attributes.nonce) { var nonce = __webpack_require__.nc; nonce && (attributes.nonce = nonce); }       if (Object.keys(attributes).forEach((function(key) {            style.setAttribute(key, attributes[key]);        })), "function" == typeof options.insert) options.insert(style); else { var target = getTarget(options.insert || "head"); if (!target) throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); target.appendChild(style); }       return style; }   var textStore, replaceText = (textStore = [], function(index, replacement) {        return textStore[index] = replacement, textStore.filter(Boolean).join("\n");    }); function applyToSingletonTag(style, index, remove, obj) { var css = remove ? "" : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; if (style.styleSheet) style.styleSheet.cssText = replaceText(index, css); else { var cssNode = document.createTextNode(css), childNodes = style.childNodes; childNodes[index] && style.removeChild(childNodes[index]), childNodes.length ? style.insertBefore(cssNode, childNodes[index]) : style.appendChild(cssNode); }   }    function applyToTag(style, options, obj) { var css = obj.css, media = obj.media, sourceMap = obj.sourceMap; if (media ? style.setAttribute("media", media) : style.removeAttribute("media"),        sourceMap && btoa && (css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */")),         style.styleSheet) style.styleSheet.cssText = css; else { for (style.firstChild; ) style.removeChild(style.firstChild); style.appendChild(document.createTextNode(css)); }   }    var singleton = null, singletonCounter = 0; function addStyle(obj, options) { var style, update, remove; if (options.singleton) { var styleIndex = singletonCounter++; style = singleton || (singleton = insertStyleElement(options)), update = applyToSingletonTag.bind(null, style, styleIndex, !1), remove = applyToSingletonTag.bind(null, style, styleIndex, !0); } else style = insertStyleElement(options), update = applyToTag.bind(null, style, options), remove = function { !function(style) { if (null === style.parentNode) return !1; style.parentNode.removeChild(style); }(style); };       return update(obj), function(newObj) { if (newObj) { if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) return; update(obj = newObj); } else remove; };   }    module.exports = function(list, options) { (options = options || {}).singleton || "boolean" == typeof options.singleton || (options.singleton = isOldIE); var lastIdentifiers = modulesToDom(list = list || [], options); return function(newList) { if (newList = newList || [], "[object Array]" === Object.prototype.toString.call(newList)) { for (var i = 0; i < lastIdentifiers.length; i++) { var index = getIndexByIdentifier(lastIdentifiers[i]); stylesInDom[index].references--; }               for (var newLastIdentifiers = modulesToDom(newList, options), _i = 0; _i < lastIdentifiers.length; _i++) { var _index = getIndexByIdentifier(lastIdentifiers[_i]); 0 === stylesInDom[_index].references && (stylesInDom[_index].updater, stylesInDom.splice(_index, 1)); }               lastIdentifiers = newLastIdentifiers; }       };    }; }, function(module, exports, __webpack_require__) { "use strict"; module.exports = function(useSourceMap) { var list = []; return list.toString = function { return this.map((function(item) { var content = function(item, useSourceMap) { var content = item[1] || "", cssMapping = item[3]; if (!cssMapping) return content; if (useSourceMap && "function" == typeof btoa) { var sourceMapping = (sourceMap = cssMapping, base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))),                        data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64),                         "/*# ".concat(data, " */")), sourceURLs = cssMapping.sources.map((function(source) { return "/*# sourceURL=".concat(cssMapping.sourceRoot || "").concat(source, " */"); }));                       return [ content ].concat(sourceURLs).concat([ sourceMapping ]).join("\n"); }                   var sourceMap, base64, data; return [ content ].join("\n"); }(item, useSourceMap); return item[2] ? "@media ".concat(item[2], " {").concat(content, "}") : content; })).join(""); }, list.i = function(modules, mediaQuery, dedupe) { "string" == typeof modules && (modules = [ [ null, modules, "" ] ]); var alreadyImportedModules = {}; if (dedupe) for (var i = 0; i < this.length; i++) { var id = this[i][0]; null != id && (alreadyImportedModules[id] = !0); }           for (var _i = 0; _i < modules.length; _i++) { var item = [].concat(modules[_i]); dedupe && alreadyImportedModules[item[0]] || (mediaQuery && (item[2] ? item[2] = "".concat(mediaQuery, " and ").concat(item[2]) : item[2] = mediaQuery),                list.push(item)); }       }, list; }; }, function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_RESULT__, LZString = function { var f = String.fromCharCode, keyStrBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", keyStrUriSafe = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$", baseReverseDic = {}; function getBaseValue(alphabet, character) { if (!baseReverseDic[alphabet]) { baseReverseDic[alphabet] = {}; for (var i = 0; i < alphabet.length; i++) baseReverseDic[alphabet][alphabet.charAt(i)] = i;           } return baseReverseDic[alphabet][character]; }       var LZString = { compressToBase64: function(input) { if (null == input) return ""; var res = LZString._compress(input, 6, (function(a) { return keyStrBase64.charAt(a); }));               switch (res.length % 4) { default: case 0: return res;

case 1: return res + "===";

case 2: return res + "==";

case 3: return res + "="; }           },            decompressFromBase64: function(input) { return null == input ? "" : "" == input ? null : LZString._decompress(input.length, 32, (function(index) { return getBaseValue(keyStrBase64, input.charAt(index)); }));           },            compressToUTF16: function(input) { return null == input ? "" : LZString._compress(input, 15, (function(a) { return f(a + 32); })) + " ";           },            decompressFromUTF16: function(compressed) { return null == compressed ? "" : "" == compressed ? null : LZString._decompress(compressed.length, 16384, (function(index) { return compressed.charCodeAt(index) - 32; }));           },            compressToUint8Array: function(uncompressed) { for (var compressed = LZString.compress(uncompressed), buf = new Uint8Array(2 * compressed.length), i = 0, TotalLen = compressed.length; i < TotalLen; i++) { var current_value = compressed.charCodeAt(i); buf[2 * i] = current_value >>> 8, buf[2 * i + 1] = current_value % 256; }               return buf; },           decompressFromUint8Array: function(compressed) { if (null == compressed) return LZString.decompress(compressed); for (var buf = new Array(compressed.length / 2), i = 0, TotalLen = buf.length; i < TotalLen; i++) buf[i] = 256 * compressed[2 * i] + compressed[2 * i + 1]; var result = []; return buf.forEach((function(c) { result.push(f(c)); })), LZString.decompress(result.join("")); },           compressToEncodedURIComponent: function(input) { return null == input ? "" : LZString._compress(input, 6, (function(a) { return keyStrUriSafe.charAt(a); }));           },            decompressFromEncodedURIComponent: function(input) { return null == input ? "" : "" == input ? null : (input = input.replace(/ /g, "+"),                LZString._decompress(input.length, 32, (function(index) {                    return getBaseValue(keyStrUriSafe, input.charAt(index));                }))); },           compress: function(uncompressed) { return LZString._compress(uncompressed, 16, (function(a) { return f(a); }));           },            _compress: function(uncompressed, bitsPerChar, getCharFromInt) { if (null == uncompressed) return ""; var i, value, ii, context_dictionary = {}, context_dictionaryToCreate = {}, context_c = "", context_wc = "", context_w = "", context_enlargeIn = 2, context_dictSize = 3, context_numBits = 2, context_data = [], context_data_val = 0, context_data_position = 0; for (ii = 0; ii < uncompressed.length; ii += 1) if (context_c = uncompressed.charAt(ii),                Object.prototype.hasOwnProperty.call(context_dictionary, context_c) || (context_dictionary[context_c] = context_dictSize++, context_dictionaryToCreate[context_c] = !0), context_wc = context_w + context_c,                Object.prototype.hasOwnProperty.call(context_dictionary, context_wc)) context_w = context_wc; else { if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate, context_w)) { if (context_w.charCodeAt(0) < 256) { for (i = 0; i < context_numBits; i++) context_data_val <<= 1, context_data_position == bitsPerChar - 1 ? (context_data_position = 0,                            context_data.push(getCharFromInt(context_data_val)), context_data_val = 0) : context_data_position++; for (value = context_w.charCodeAt(0), i = 0; i < 8; i++) context_data_val = context_data_val << 1 | 1 & value, context_data_position == bitsPerChar - 1 ? (context_data_position = 0, context_data.push(getCharFromInt(context_data_val)),                            context_data_val = 0) : context_data_position++, value >>= 1; } else { for (value = 1, i = 0; i < context_numBits; i++) context_data_val = context_data_val << 1 | value, context_data_position == bitsPerChar - 1 ? (context_data_position = 0, context_data.push(getCharFromInt(context_data_val)),                            context_data_val = 0) : context_data_position++, value = 0; for (value = context_w.charCodeAt(0), i = 0; i < 16; i++) context_data_val = context_data_val << 1 | 1 & value, context_data_position == bitsPerChar - 1 ? (context_data_position = 0, context_data.push(getCharFromInt(context_data_val)),                            context_data_val = 0) : context_data_position++, value >>= 1; }                       0 == --context_enlargeIn && (context_enlargeIn = Math.pow(2, context_numBits), context_numBits++), delete context_dictionaryToCreate[context_w]; } else for (value = context_dictionary[context_w], i = 0; i < context_numBits; i++) context_data_val = context_data_val << 1 | 1 & value, context_data_position == bitsPerChar - 1 ? (context_data_position = 0, context_data.push(getCharFromInt(context_data_val)),                    context_data_val = 0) : context_data_position++, value >>= 1; 0 == --context_enlargeIn && (context_enlargeIn = Math.pow(2, context_numBits), context_numBits++), context_dictionary[context_wc] = context_dictSize++, context_w = String(context_c); }               if ("" !== context_w) { if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate, context_w)) { if (context_w.charCodeAt(0) < 256) { for (i = 0; i < context_numBits; i++) context_data_val <<= 1, context_data_position == bitsPerChar - 1 ? (context_data_position = 0,                            context_data.push(getCharFromInt(context_data_val)), context_data_val = 0) : context_data_position++; for (value = context_w.charCodeAt(0), i = 0; i < 8; i++) context_data_val = context_data_val << 1 | 1 & value, context_data_position == bitsPerChar - 1 ? (context_data_position = 0, context_data.push(getCharFromInt(context_data_val)),                            context_data_val = 0) : context_data_position++, value >>= 1; } else { for (value = 1, i = 0; i < context_numBits; i++) context_data_val = context_data_val << 1 | value, context_data_position == bitsPerChar - 1 ? (context_data_position = 0, context_data.push(getCharFromInt(context_data_val)),                            context_data_val = 0) : context_data_position++, value = 0; for (value = context_w.charCodeAt(0), i = 0; i < 16; i++) context_data_val = context_data_val << 1 | 1 & value, context_data_position == bitsPerChar - 1 ? (context_data_position = 0, context_data.push(getCharFromInt(context_data_val)),                            context_data_val = 0) : context_data_position++, value >>= 1; }                       0 == --context_enlargeIn && (context_enlargeIn = Math.pow(2, context_numBits), context_numBits++), delete context_dictionaryToCreate[context_w]; } else for (value = context_dictionary[context_w], i = 0; i < context_numBits; i++) context_data_val = context_data_val << 1 | 1 & value, context_data_position == bitsPerChar - 1 ? (context_data_position = 0, context_data.push(getCharFromInt(context_data_val)),                    context_data_val = 0) : context_data_position++, value >>= 1; 0 == --context_enlargeIn && (context_enlargeIn = Math.pow(2, context_numBits), context_numBits++); }               for (value = 2, i = 0; i < context_numBits; i++) context_data_val = context_data_val << 1 | 1 & value, context_data_position == bitsPerChar - 1 ? (context_data_position = 0, context_data.push(getCharFromInt(context_data_val)),                context_data_val = 0) : context_data_position++, value >>= 1; for { if (context_data_val <<= 1, context_data_position == bitsPerChar - 1) { context_data.push(getCharFromInt(context_data_val)); break; }                   context_data_position++; }               return context_data.join(""); },           decompress: function(compressed) { return null == compressed ? "" : "" == compressed ? null : LZString._decompress(compressed.length, 32768, (function(index) { return compressed.charCodeAt(index); }));           },            _decompress: function(length, resetValue, getNextValue) { var i, w, bits, resb, maxpower, power, c, dictionary = [], enlargeIn = 4, dictSize = 4, numBits = 3, entry = "", result = [], data = { val: getNextValue(0), position: resetValue, index: 1 };               for (i = 0; i < 3; i += 1) dictionary[i] = i;                for (bits = 0, maxpower = Math.pow(2, 2), power = 1; power != maxpower; ) resb = data.val & data.position, data.position >>= 1, 0 == data.position && (data.position = resetValue, data.val = getNextValue(data.index++)), bits |= (resb > 0 ? 1 : 0) * power, power <<= 1; switch (bits) { case 0: for (bits = 0, maxpower = Math.pow(2, 8), power = 1; power != maxpower; ) resb = data.val & data.position, data.position >>= 1, 0 == data.position && (data.position = resetValue, data.val = getNextValue(data.index++)), bits |= (resb > 0 ? 1 : 0) * power, power <<= 1; c = f(bits); break;

case 1: for (bits = 0, maxpower = Math.pow(2, 16), power = 1; power != maxpower; ) resb = data.val & data.position, data.position >>= 1, 0 == data.position && (data.position = resetValue, data.val = getNextValue(data.index++)), bits |= (resb > 0 ? 1 : 0) * power, power <<= 1; c = f(bits); break;

case 2: return ""; }               for (dictionary[3] = c, w = c, result.push(c); ;) { if (data.index > length) return ""; for (bits = 0, maxpower = Math.pow(2, numBits), power = 1; power != maxpower; ) resb = data.val & data.position, data.position >>= 1, 0 == data.position && (data.position = resetValue, data.val = getNextValue(data.index++)), bits |= (resb > 0 ? 1 : 0) * power, power <<= 1; switch (c = bits) { case 0: for (bits = 0, maxpower = Math.pow(2, 8), power = 1; power != maxpower; ) resb = data.val & data.position, data.position >>= 1, 0 == data.position && (data.position = resetValue, data.val = getNextValue(data.index++)), bits |= (resb > 0 ? 1 : 0) * power, power <<= 1; dictionary[dictSize++] = f(bits), c = dictSize - 1, enlargeIn--; break;

case 1: for (bits = 0, maxpower = Math.pow(2, 16), power = 1; power != maxpower; ) resb = data.val & data.position, data.position >>= 1, 0 == data.position && (data.position = resetValue, data.val = getNextValue(data.index++)), bits |= (resb > 0 ? 1 : 0) * power, power <<= 1; dictionary[dictSize++] = f(bits), c = dictSize - 1, enlargeIn--; break;

case 2: return result.join(""); }                   if (0 == enlargeIn && (enlargeIn = Math.pow(2, numBits), numBits++), dictionary[c]) entry = dictionary[c]; else { if (c !== dictSize) return null; entry = w + w.charAt(0); }                   result.push(entry), dictionary[dictSize++] = w + entry.charAt(0), w = entry, 0 == --enlargeIn && (enlargeIn = Math.pow(2, numBits),                     numBits++); }           }        };        return LZString; };   void 0 === (__WEBPACK_AMD_DEFINE_RESULT__ = function {        return LZString;    }.call(exports, __webpack_require__, exports, module)) || (module.exports = __WEBPACK_AMD_DEFINE_RESULT__); }, function(module, exports, __webpack_require__) { "use strict"; var KEBAB_REGEX = /[A-Z]/g; exports.create = function(config) { var assign = (config = config || {}).assign || Object.assign; var renderer = assign({           raw: "",            pfx: "_",            client: "object" == typeof window,            assign: assign,            stringify: JSON.stringify,            kebab: function(prop) {                return prop.replace(KEBAB_REGEX, "-$&").toLowerCase;            },            decl: function(key, value) {                return (key = renderer.kebab(key)) + ":" + value + ";";            },            hash: function(obj) {                return function(str) {                    for (var hash = 5381, i = str.length; i; ) hash = 33 * hash ^ str.charCodeAt(--i);                    return "_" + (hash >>> 0).toString(36);                }(renderer.stringify(obj));            },            selector: function(parent, selector) {                return parent + (":" === selector[0] ? "" : " ") + selector;           },            putRaw: function(rawCssRule) {                renderer.raw += rawCssRule;            }        }, config); return renderer.client && (renderer.sh || document.head.appendChild(renderer.sh = document.createElement("style")),        renderer.putRaw = function(rawCssRule) {            var sheet = renderer.sh.sheet;            try {                sheet.insertRule(rawCssRule, sheet.cssRules.length);            } catch (error) {}        }), renderer.put = function(selector, decls, atrule) { var prop, value, str = "", postponed = []; for (prop in decls) (value = decls[prop]) instanceof Object && !(value instanceof Array) ? postponed.push(prop) : str += renderer.decl(prop, value, selector, atrule); str && (str = selector + "{" + str + "}", renderer.putRaw(atrule ? atrule + "{" + str + "}" : str)); for (var i = 0; i < postponed.length; i++) "@" === (prop = postponed[i])[0] && "@font-face" !== prop ? renderer.putAt(selector, decls[prop], prop) : renderer.put(renderer.selector(selector, prop), decls[prop], atrule); }, renderer.putAt = renderer.put, renderer; }; }, function(module, exports, __webpack_require__) { var api = __webpack_require__(3), content = __webpack_require__(12); "string" == typeof (content = content.__esModule ? content.default : content) && (content = [ [ module.i, content, "" ] ]); var options = { insert: "head", singleton: !1 };   api(content, options); module.exports = content.locals || {}; }, function(module, exports, __webpack_require__) { "use strict"; module.exports = function(string, quoteStyle) { var getHtmlTranslationTable = __webpack_require__(10), tmpStr = "", entity = "", symbol = ""; tmpStr = string.toString; var hashMap = getHtmlTranslationTable("HTML_ENTITIES", quoteStyle); if (!1 === hashMap) return !1; for (symbol in delete hashMap["&"], hashMap["&"] = "&amp;", hashMap) entity = hashMap[symbol], tmpStr = tmpStr.split(entity).join(symbol); return tmpStr = tmpStr.split("&#039;").join("'"); }; }, function(module, exports, __webpack_require__) { module.exports = function { return __webpack_require__(11)('!function(modules) {\n   var installedModules = {};\n    function __webpack_require__(moduleId) {\n        if (installedModules[moduleId]) return installedModules[moduleId].exports;\n        var module = installedModules[moduleId] = {\n            i: moduleId,\n            l: !1,\n            exports: {}\n        };\n        return modules[moduleId].call(module.exports, module, module.exports, __webpack_require__), \n        module.l = !0, module.exports;\n    }\n    __webpack_require__.m = modules, __webpack_require__.c = installedModules, __webpack_require__.d = function(exports, name, getter) {\n        __webpack_require__.o(exports, name) || Object.defineProperty(exports, name, {\n            enumerable: !0,\n            get: getter\n        });\n    }, __webpack_require__.r = function(exports) {\n        "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(exports, Symbol.toStringTag, {\n            value: "Module"\n        }), Object.defineProperty(exports, "__esModule", {\n            value: !0\n        });\n    }, __webpack_require__.t = function(value, mode) {\n        if (1 & mode && (value = __webpack_require__(value)), 8 & mode) return value;\n        if (4 & mode && "object" == typeof value && value && value.__esModule) return value;\n        var ns = Object.create(null);\n        if (__webpack_require__.r(ns), Object.defineProperty(ns, "default", {\n            enumerable: !0,\n            value: value\n        }), 2 & mode && "string" != typeof value) for (var key in value) __webpack_require__.d(ns, key, function(key) {\n            return value[key];\n        }.bind(null, key));\n        return ns;\n    }, __webpack_require__.n = function(module) {\n        var getter = module && module.__esModule ? function {\n           return module.default;\n        } : function {\n            return module;\n        };\n        return __webpack_require__.d(getter, "a", getter), getter;\n    }, __webpack_require__.o = function(object, property) {\n        return Object.prototype.hasOwnProperty.call(object, property);\n    }, __webpack_require__.p = "", __webpack_require__(__webpack_require__.s = 29);\n}([ function(module, __webpack_exports__, __webpack_require__) {\n    "use strict";\n    const context = "undefined" == typeof window ? self : window;\n    context.convenientDiscussions = context.convenientDiscussions || {}, "object" != typeof context.convenientDiscussions && (context.convenientDiscussions = {}), \n    __webpack_exports__.a = context.convenientDiscussions;\n}, function(module, __webpack_exports__, __webpack_require__) {\n    "use strict";\n    __webpack_require__.d(__webpack_exports__, "e", (function {\n        return isInline;\n    })), __webpack_require__.d(__webpack_exports__, "a", (function {\n        return defined;\n    })), __webpack_require__.d(__webpack_exports__, "c", (function {\n        return flat;\n    })), __webpack_require__.d(__webpack_exports__, "g", (function {\n        return underlinesToSpaces;\n    })), __webpack_require__.d(__webpack_exports__, "f", (function {\n        return spacesToUnderlines;\n    })), __webpack_require__.d(__webpack_exports__, "b", (function {\n        return firstCharToUpperCase;\n    })), __webpack_require__.d(__webpack_exports__, "d", (function {\n        return getMessages;\n    }));\n    __webpack_require__(3);\n    var _cd__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(0);\n    function isInline(node, countTextNodesAsInline) {\n        return !(!countTextNodesAsInline || node.nodeType !== Node.TEXT_NODE) || (node.nodeType !== Node.ELEMENT_NODE ? null : !!_cd__WEBPACK_IMPORTED_MODULE_1__.a.g.POPULAR_INLINE_ELEMENTS.includes(node.tagName) || !_cd__WEBPACK_IMPORTED_MODULE_1__.a.g.POPULAR_NOT_INLINE_ELEMENTS.includes(node.tagName) && ("undefined" != typeof window ? (console.warn("Expensive operation: isInline called for the element:", node), \n       "inline" === window.getComputedStyle(node).display) : null));\n    }\n    function defined(el) {\n        return void 0 !== el;\n    }\n    function flat(arr) {\n        return [].concat(...arr);\n    }\n    function underlinesToSpaces(s) {\n        return s.replace(/_/g, " ");\n    }\n    function spacesToUnderlines(s) {\n        return s.replace(/ /g, "_");\n    }\n    function firstCharToUpperCase(s) {\n        return s.length ? s[0].toUpperCase + s.slice(1) : "";\n    }\n    function getMessages(messages) {\n        return messages.map(mw.msg);\n    }\n}, function(module, exports) {\n    module.exports = function(receiver, privateMap) {\n        var descriptor = privateMap.get(receiver);\n        if (!descriptor) throw new TypeError("attempted to get private field on non-instance");\n        return descriptor.get ? descriptor.get.call(receiver) : descriptor.value;\n   };\n}, function(module, __webpack_exports__, __webpack_require__) {\n    "use strict";\n    __webpack_require__.d(__webpack_exports__, "a", (function {\n        return CdError;\n    }));\n    class CdError extends Error {\n        constructor(data) {\n            let message;\n            data ? (message = data.type, data.code && (message += "/".concat(data.code)), data.apiData && data.apiData.error && data.apiData.error.code && (message += "/".concat(data.apiData.error.code))) : message = "", \n           super(message), this.name = "CdError", this.data = data;\n        }\n    }\n}, function(module, __webpack_exports__, __webpack_require__) {\n    "use strict";\n    __webpack_require__.d(__webpack_exports__, "b", (function {\n        return parseTimestamp;\n    })), __webpack_require__.d(__webpack_exports__, "a", (function {\n        return generateCommentAnchor;\n    })), __webpack_require__.d(__webpack_exports__, "c", (function {\n        return registerCommentAnchor;\n    })), __webpack_require__.d(__webpack_exports__, "d", (function {\n        return resetCommentAnchors;\n    }));\n    var _cd__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0), _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1);\n    let parseTimestampRegexp, parseTimestampRegexpNoTimezone;\n    function parseTimestamp(timestamp, timezoneOffset) {\n        parseTimestampRegexp || (parseTimestampRegexp = new RegExp("^([^]*)(".concat(_cd__WEBPACK_IMPORTED_MODULE_0__.a.g.TIMESTAMP_REGEXP.source, ")"))), \n        parseTimestampRegexpNoTimezone || (parseTimestampRegexpNoTimezone = new RegExp("^([^]*)(".concat(_cd__WEBPACK_IMPORTED_MODULE_0__.a.g.TIMESTAMP_REGEXP_NO_TIMEZONE.source, ")")));\n        const regexp = void 0 === timezoneOffset ? parseTimestampRegexp : parseTimestampRegexpNoTimezone, match = timestamp.match(regexp);\n       if (!match) return null;\n        let date = _cd__WEBPACK_IMPORTED_MODULE_0__.a.g.TIMESTAMP_PARSER(match, _cd__WEBPACK_IMPORTED_MODULE_0__.a.g.TIMESTAMP_MATCHING_GROUPS, _cd__WEBPACK_IMPORTED_MODULE_0__.a.g.DIGITS, _cd__WEBPACK_IMPORTED_MODULE_0__.a.g.LOCAL_TIMEZONE_OFFSET);\n        return timezoneOffset && (date = new Date(date.getTime - timezoneOffset * _cd__WEBPACK_IMPORTED_MODULE_0__.a.g.MILLISECONDS_IN_A_MINUTE)), \n        {\n            date: date,\n            match: match\n        };\n    }\n    function zeroPad(number, length) {\n        return ("0000" + number).slice(-length);\n    }\n    function generateCommentAnchor(date, author, resolveCollisions = !1) {\n        let year = date.getUTCFullYear, month = date.getUTCMonth, day = date.getUTCDate, hours = date.getUTCHours, minutes = date.getUTCMinutes, anchor = zeroPad(year, 4) + zeroPad(month + 1, 2) + zeroPad(day, 2) + zeroPad(hours, 2) + zeroPad(minutes, 2) + (author ? "_" + Object(_util__WEBPACK_IMPORTED_MODULE_1__.f)(author) : "");\n       if (resolveCollisions && commentAnchors.includes(anchor)) {\n            let anchorNum = 2;\n            const base = anchor;\n            do {\n                anchor = "".concat(base, "_").concat(anchorNum), anchorNum++;\n            } while (commentAnchors.includes(anchor));\n        }\n        return anchor;\n    }\n    let commentAnchors = [];\n    function registerCommentAnchor(anchor) {\n        anchor && commentAnchors.push(anchor);\n    }\n    function resetCommentAnchors {\n        commentAnchors = [];\n    }\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    function __export(m) {\n        for (var p in m) exports.hasOwnProperty(p) || (exports[p] = m[p]);\n    }\n    var __importStar = this && this.__importStar || function(mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (null != mod) for (var k in mod) Object.hasOwnProperty.call(mod, k) && (result[k] = mod[k]);\n        return result.default = mod, result;\n    };\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    });\n    var Parser_1 = __webpack_require__(12);\n    exports.Parser = Parser_1.Parser;\n    var domhandler_1 = __webpack_require__(16);\n    exports.DomHandler = domhandler_1.DomHandler, exports.DefaultHandler = domhandler_1.DomHandler, \n    exports.parseDOM = function(data, options) {\n        var handler = new domhandler_1.DomHandler(void 0, options);\n        return new Parser_1.Parser(handler, options).end(data), handler.dom;\n    }, exports.createDomStream = function(cb, options, elementCb) {\n        var handler = new domhandler_1.DomHandler(cb, options, elementCb);\n        return new Parser_1.Parser(handler, options);\n    };\n    var Tokenizer_1 = __webpack_require__(13);\n    exports.Tokenizer = Tokenizer_1.default;\n    var ElementType = __importStar(__webpack_require__(11));\n    exports.ElementType = ElementType, exports.EVENTS = {\n        attribute: 2,\n        cdatastart: 0,\n        cdataend: 0,\n        text: 1,\n        processinginstruction: 2,\n        comment: 1,\n        commentend: 0,\n        closetag: 1,\n        opentag: 2,\n        opentagname: 1,\n        error: 1,\n        end: 0\n    }, __export(__webpack_require__(17)), __export(__webpack_require__(41)), __export(__webpack_require__(42));\n    var DomUtils = __importStar(__webpack_require__(18));\n    exports.DomUtils = DomUtils;\n    var FeedHandler_1 = __webpack_require__(17);\n    exports.RssHandler = FeedHandler_1.FeedHandler;\n}, function(module, __webpack_exports__, __webpack_require__) {\n    "use strict";\n    __webpack_require__.d(__webpack_exports__, "c", (function {\n        return TreeWalker;\n    })), __webpack_require__.d(__webpack_exports__, "b", (function {\n        return ElementsTreeWalker;\n    })), __webpack_require__.d(__webpack_exports__, "a", (function {\n        return ElementsAndTextTreeWalker;\n    }));\n    var _cd__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);\n    class TreeWalker {\n        constructor(root, acceptNode, onlyElementNodes = !1, startNode = root) {\n            this.acceptNode = acceptNode, this.root = root, this.currentNode = startNode, onlyElementNodes ? (this.firstChildProperty = "firstElementChild", \n           this.lastChildProperty = "lastElementChild", this.previousSiblingProperty = "previousElementSibling", \n            this.nextSiblingProperty = "nextElementSibling") : (this.firstChildProperty = "firstChild", \n            this.lastChildProperty = "lastChild", this.previousSiblingProperty = "previousSibling", \n            this.nextSiblingProperty = "nextSibling");\n        }\n        tryMove(property) {\n            let node = this.currentNode;\n            if (node === this.root && !property.includes("Child")) return null;\n            do {\n                node = node[property];\n            } while (node && this.acceptNode && !this.acceptNode(node));\n            return node && (this.currentNode = node), node || null;\n        }\n        parentNode {\n            return this.tryMove("parentNode");\n        }\n        firstChild {\n            return this.tryMove(this.firstChildProperty);\n        }\n        lastChild {\n            return this.tryMove(this.lastChildProperty);\n        }\n        previousSibling {\n            return this.tryMove(this.previousSiblingProperty);\n        }\n        nextSibling {\n            return this.tryMove(this.nextSiblingProperty);\n        }\n        nextNode {\n            let node = this.currentNode;\n            do {\n                if (node[this.firstChildProperty]) node = node[this.firstChildProperty]; else {\n                    for (node && !node[this.nextSiblingProperty] && node.parentNode !== this.root; ) node = node.parentNode;\n                    node && (node = node[this.nextSiblingProperty]);\n                }\n            } while (node && this.acceptNode && !this.acceptNode(node));\n            return node && (this.currentNode = node), node;\n        }\n        previousNode {\n            let node = this.currentNode;\n            if (node !== this.root) {\n                do {\n                    if (node[this.previousSiblingProperty]) for (node = node[this.previousSiblingProperty]; node[this.lastChildProperty]; ) node = node[this.lastChildProperty]; else node = node.parentNode;\n                } while (node && this.acceptNode && !this.acceptNode(node));\n                return node && (this.currentNode = node), node;\n            }\n        }\n    }\n    class ElementsTreeWalker extends TreeWalker {\n        constructor(startNode) {\n            super(_cd__WEBPACK_IMPORTED_MODULE_0__.a.g.rootElement, node => ![ "STYLE", "LINK" ].includes(node.tagName), !0), \n            startNode && (this.currentNode = startNode);\n        }\n    }\n    class ElementsAndTextTreeWalker extends TreeWalker {\n        constructor(startNode) {\n            super(_cd__WEBPACK_IMPORTED_MODULE_0__.a.g.rootElement, node => node.nodeType === Node.TEXT_NODE || node.nodeType === Node.ELEMENT_NODE && ![ "STYLE", "LINK" ].includes(node.tagName)), \n            startNode && (this.currentNode = startNode);\n        }\n    }\n}, function(module, exports) {\n    module.exports = function(receiver, privateMap, value) {\n        var descriptor = privateMap.get(receiver);\n        if (!descriptor) throw new TypeError("attempted to set private field on non-instance");\n        if (descriptor.set) descriptor.set.call(receiver, value); else {\n            if (!descriptor.writable) throw new TypeError("attempted to set read only private field");\n            descriptor.value = value;\n        }\n        return value;\n    };\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    });\n    var domelementtype_1 = __webpack_require__(11);\n    exports.isTag = function(node) {\n        return domelementtype_1.isTag(node);\n    }, exports.isCDATA = function(node) {\n        return "cdata" === node.type;\n    }, exports.isText = function(node) {\n        return "text" === node.type;\n    }, exports.isComment = function(node) {\n        return "comment" === node.type;\n    }, exports.hasChildren = function(node) {\n        return Object.prototype.hasOwnProperty.call(node, "children");\n    };\n}, function(module) {\n    module.exports = JSON.parse(\'{"Aacute":"\\xc1","aacute":"\\xe1","Abreve":"\\u0102","abreve":"\\u0103","ac":"\\u223e","acd":"\\u223f","acE":"\\u223e\\u0333","Acirc":"\\xc2","acirc":"\\xe2","acute":"\\xb4","Acy":"\\u0410","acy":"\\u0430","AElig":"\\xc6","aelig":"\\xe6","af":"\\u2061","Afr":"\\ud835\\udd04","afr":"\\ud835\\udd1e","Agrave":"\\xc0","agrave":"\\xe0","alefsym":"\\u2135","aleph":"\\u2135","Alpha":"\\u0391","alpha":"\\u03b1","Amacr":"\\u0100","amacr":"\\u0101","amalg":"\\u2a3f","amp":"&","AMP":"&","andand":"\\u2a55","And":"\\u2a53","and":"\\u2227","andd":"\\u2a5c","andslope":"\\u2a58","andv":"\\u2a5a","ang":"\\u2220","ange":"\\u29a4","angle":"\\u2220","angmsdaa":"\\u29a8","angmsdab":"\\u29a9","angmsdac":"\\u29aa","angmsdad":"\\u29ab","angmsdae":"\\u29ac","angmsdaf":"\\u29ad","angmsdag":"\\u29ae","angmsdah":"\\u29af","angmsd":"\\u2221","angrt":"\\u221f","angrtvb":"\\u22be","angrtvbd":"\\u299d","angsph":"\\u2222","angst":"\\xc5","angzarr":"\\u237c","Aogon":"\\u0104","aogon":"\\u0105","Aopf":"\\ud835\\udd38","aopf":"\\ud835\\udd52","apacir":"\\u2a6f","ap":"\\u2248","apE":"\\u2a70","ape":"\\u224a","apid":"\\u224b","apos":"\\\'","ApplyFunction":"\\u2061","approx":"\\u2248","approxeq":"\\u224a","Aring":"\\xc5","aring":"\\xe5","Ascr":"\\ud835\\udc9c","ascr":"\\ud835\\udcb6","Assign":"\\u2254","ast":"*","asymp":"\\u2248","asympeq":"\\u224d","Atilde":"\\xc3","atilde":"\\xe3","Auml":"\\xc4","auml":"\\xe4","awconint":"\\u2233","awint":"\\u2a11","backcong":"\\u224c","backepsilon":"\\u03f6","backprime":"\\u2035","backsim":"\\u223d","backsimeq":"\\u22cd","Backslash":"\\u2216","Barv":"\\u2ae7","barvee":"\\u22bd","barwed":"\\u2305","Barwed":"\\u2306","barwedge":"\\u2305","bbrk":"\\u23b5","bbrktbrk":"\\u23b6","bcong":"\\u224c","Bcy":"\\u0411","bcy":"\\u0431","bdquo":"\\u201e","becaus":"\\u2235","because":"\\u2235","Because":"\\u2235","bemptyv":"\\u29b0","bepsi":"\\u03f6","bernou":"\\u212c","Bernoullis":"\\u212c","Beta":"\\u0392","beta":"\\u03b2","beth":"\\u2136","between":"\\u226c","Bfr":"\\ud835\\udd05","bfr":"\\ud835\\udd1f","bigcap":"\\u22c2","bigcirc":"\\u25ef","bigcup":"\\u22c3","bigodot":"\\u2a00","bigoplus":"\\u2a01","bigotimes":"\\u2a02","bigsqcup":"\\u2a06","bigstar":"\\u2605","bigtriangledown":"\\u25bd","bigtriangleup":"\\u25b3","biguplus":"\\u2a04","bigvee":"\\u22c1","bigwedge":"\\u22c0","bkarow":"\\u290d","blacklozenge":"\\u29eb","blacksquare":"\\u25aa","blacktriangle":"\\u25b4","blacktriangledown":"\\u25be","blacktriangleleft":"\\u25c2","blacktriangleright":"\\u25b8","blank":"\\u2423","blk12":"\\u2592","blk14":"\\u2591","blk34":"\\u2593","block":"\\u2588","bne":"=\\u20e5","bnequiv":"\\u2261\\u20e5","bNot":"\\u2aed","bnot":"\\u2310","Bopf":"\\ud835\\udd39","bopf":"\\ud835\\udd53","bot":"\\u22a5","bottom":"\\u22a5","bowtie":"\\u22c8","boxbox":"\\u29c9","boxdl":"\\u2510","boxdL":"\\u2555","boxDl":"\\u2556","boxDL":"\\u2557","boxdr":"\\u250c","boxdR":"\\u2552","boxDr":"\\u2553","boxDR":"\\u2554","boxh":"\\u2500","boxH":"\\u2550","boxhd":"\\u252c","boxHd":"\\u2564","boxhD":"\\u2565","boxHD":"\\u2566","boxhu":"\\u2534","boxHu":"\\u2567","boxhU":"\\u2568","boxHU":"\\u2569","boxminus":"\\u229f","boxplus":"\\u229e","boxtimes":"\\u22a0","boxul":"\\u2518","boxuL":"\\u255b","boxUl":"\\u255c","boxUL":"\\u255d","boxur":"\\u2514","boxuR":"\\u2558","boxUr":"\\u2559","boxUR":"\\u255a","boxv":"\\u2502","boxV":"\\u2551","boxvh":"\\u253c","boxvH":"\\u256a","boxVh":"\\u256b","boxVH":"\\u256c","boxvl":"\\u2524","boxvL":"\\u2561","boxVl":"\\u2562","boxVL":"\\u2563","boxvr":"\\u251c","boxvR":"\\u255e","boxVr":"\\u255f","boxVR":"\\u2560","bprime":"\\u2035","breve":"\\u02d8","Breve":"\\u02d8","brvbar":"\\xa6","bscr":"\\ud835\\udcb7","Bscr":"\\u212c","bsemi":"\\u204f","bsim":"\\u223d","bsime":"\\u22cd","bsolb":"\\u29c5","bsol":"\\\\\\\\","bsolhsub":"\\u27c8","bull":"\\u2022","bullet":"\\u2022","bump":"\\u224e","bumpE":"\\u2aae","bumpe":"\\u224f","Bumpeq":"\\u224e","bumpeq":"\\u224f","Cacute":"\\u0106","cacute":"\\u0107","capand":"\\u2a44","capbrcup":"\\u2a49","capcap":"\\u2a4b","cap":"\\u2229","Cap":"\\u22d2","capcup":"\\u2a47","capdot":"\\u2a40","CapitalDifferentialD":"\\u2145","caps":"\\u2229\\ufe00","caret":"\\u2041","caron":"\\u02c7","Cayleys":"\\u212d","ccaps":"\\u2a4d","Ccaron":"\\u010c","ccaron":"\\u010d","Ccedil":"\\xc7","ccedil":"\\xe7","Ccirc":"\\u0108","ccirc":"\\u0109","Cconint":"\\u2230","ccups":"\\u2a4c","ccupssm":"\\u2a50","Cdot":"\\u010a","cdot":"\\u010b","cedil":"\\xb8","Cedilla":"\\xb8","cemptyv":"\\u29b2","cent":"\\xa2","centerdot":"\\xb7","CenterDot":"\\xb7","cfr":"\\ud835\\udd20","Cfr":"\\u212d","CHcy":"\\u0427","chcy":"\\u0447","check":"\\u2713","checkmark":"\\u2713","Chi":"\\u03a7","chi":"\\u03c7","circ":"\\u02c6","circeq":"\\u2257","circlearrowleft":"\\u21ba","circlearrowright":"\\u21bb","circledast":"\\u229b","circledcirc":"\\u229a","circleddash":"\\u229d","CircleDot":"\\u2299","circledR":"\\xae","circledS":"\\u24c8","CircleMinus":"\\u2296","CirclePlus":"\\u2295","CircleTimes":"\\u2297","cir":"\\u25cb","cirE":"\\u29c3","cire":"\\u2257","cirfnint":"\\u2a10","cirmid":"\\u2aef","cirscir":"\\u29c2","ClockwiseContourIntegral":"\\u2232","CloseCurlyDoubleQuote":"\\u201d","CloseCurlyQuote":"\\u2019","clubs":"\\u2663","clubsuit":"\\u2663","colon":":","Colon":"\\u2237","Colone":"\\u2a74","colone":"\\u2254","coloneq":"\\u2254","comma":",","commat":"@","comp":"\\u2201","compfn":"\\u2218","complement":"\\u2201","complexes":"\\u2102","cong":"\\u2245","congdot":"\\u2a6d","Congruent":"\\u2261","conint":"\\u222e","Conint":"\\u222f","ContourIntegral":"\\u222e","copf":"\\ud835\\udd54","Copf":"\\u2102","coprod":"\\u2210","Coproduct":"\\u2210","copy":"\\xa9","COPY":"\\xa9","copysr":"\\u2117","CounterClockwiseContourIntegral":"\\u2233","crarr":"\\u21b5","cross":"\\u2717","Cross":"\\u2a2f","Cscr":"\\ud835\\udc9e","cscr":"\\ud835\\udcb8","csub":"\\u2acf","csube":"\\u2ad1","csup":"\\u2ad0","csupe":"\\u2ad2","ctdot":"\\u22ef","cudarrl":"\\u2938","cudarrr":"\\u2935","cuepr":"\\u22de","cuesc":"\\u22df","cularr":"\\u21b6","cularrp":"\\u293d","cupbrcap":"\\u2a48","cupcap":"\\u2a46","CupCap":"\\u224d","cup":"\\u222a","Cup":"\\u22d3","cupcup":"\\u2a4a","cupdot":"\\u228d","cupor":"\\u2a45","cups":"\\u222a\\ufe00","curarr":"\\u21b7","curarrm":"\\u293c","curlyeqprec":"\\u22de","curlyeqsucc":"\\u22df","curlyvee":"\\u22ce","curlywedge":"\\u22cf","curren":"\\xa4","curvearrowleft":"\\u21b6","curvearrowright":"\\u21b7","cuvee":"\\u22ce","cuwed":"\\u22cf","cwconint":"\\u2232","cwint":"\\u2231","cylcty":"\\u232d","dagger":"\\u2020","Dagger":"\\u2021","daleth":"\\u2138","darr":"\\u2193","Darr":"\\u21a1","dArr":"\\u21d3","dash":"\\u2010","Dashv":"\\u2ae4","dashv":"\\u22a3","dbkarow":"\\u290f","dblac":"\\u02dd","Dcaron":"\\u010e","dcaron":"\\u010f","Dcy":"\\u0414","dcy":"\\u0434","ddagger":"\\u2021","ddarr":"\\u21ca","DD":"\\u2145","dd":"\\u2146","DDotrahd":"\\u2911","ddotseq":"\\u2a77","deg":"\\xb0","Del":"\\u2207","Delta":"\\u0394","delta":"\\u03b4","demptyv":"\\u29b1","dfisht":"\\u297f","Dfr":"\\ud835\\udd07","dfr":"\\ud835\\udd21","dHar":"\\u2965","dharl":"\\u21c3","dharr":"\\u21c2","DiacriticalAcute":"\\xb4","DiacriticalDot":"\\u02d9","DiacriticalDoubleAcute":"\\u02dd","DiacriticalGrave":"`","DiacriticalTilde":"\\u02dc","diam":"\\u22c4","diamond":"\\u22c4","Diamond":"\\u22c4","diamondsuit":"\\u2666","diams":"\\u2666","die":"\\xa8","DifferentialD":"\\u2146","digamma":"\\u03dd","disin":"\\u22f2","div":"\\xf7","divide":"\\xf7","divideontimes":"\\u22c7","divonx":"\\u22c7","DJcy":"\\u0402","djcy":"\\u0452","dlcorn":"\\u231e","dlcrop":"\\u230d","dollar":"$","Dopf":"\\ud835\\udd3b","dopf":"\\ud835\\udd55","Dot":"\\xa8","dot":"\\u02d9","DotDot":"\\u20dc","doteq":"\\u2250","doteqdot":"\\u2251","DotEqual":"\\u2250","dotminus":"\\u2238","dotplus":"\\u2214","dotsquare":"\\u22a1","doublebarwedge":"\\u2306","DoubleContourIntegral":"\\u222f","DoubleDot":"\\xa8","DoubleDownArrow":"\\u21d3","DoubleLeftArrow":"\\u21d0","DoubleLeftRightArrow":"\\u21d4","DoubleLeftTee":"\\u2ae4","DoubleLongLeftArrow":"\\u27f8","DoubleLongLeftRightArrow":"\\u27fa","DoubleLongRightArrow":"\\u27f9","DoubleRightArrow":"\\u21d2","DoubleRightTee":"\\u22a8","DoubleUpArrow":"\\u21d1","DoubleUpDownArrow":"\\u21d5","DoubleVerticalBar":"\\u2225","DownArrowBar":"\\u2913","downarrow":"\\u2193","DownArrow":"\\u2193","Downarrow":"\\u21d3","DownArrowUpArrow":"\\u21f5","DownBreve":"\\u0311","downdownarrows":"\\u21ca","downharpoonleft":"\\u21c3","downharpoonright":"\\u21c2","DownLeftRightVector":"\\u2950","DownLeftTeeVector":"\\u295e","DownLeftVectorBar":"\\u2956","DownLeftVector":"\\u21bd","DownRightTeeVector":"\\u295f","DownRightVectorBar":"\\u2957","DownRightVector":"\\u21c1","DownTeeArrow":"\\u21a7","DownTee":"\\u22a4","drbkarow":"\\u2910","drcorn":"\\u231f","drcrop":"\\u230c","Dscr":"\\ud835\\udc9f","dscr":"\\ud835\\udcb9","DScy":"\\u0405","dscy":"\\u0455","dsol":"\\u29f6","Dstrok":"\\u0110","dstrok":"\\u0111","dtdot":"\\u22f1","dtri":"\\u25bf","dtrif":"\\u25be","duarr":"\\u21f5","duhar":"\\u296f","dwangle":"\\u29a6","DZcy":"\\u040f","dzcy":"\\u045f","dzigrarr":"\\u27ff","Eacute":"\\xc9","eacute":"\\xe9","easter":"\\u2a6e","Ecaron":"\\u011a","ecaron":"\\u011b","Ecirc":"\\xca","ecirc":"\\xea","ecir":"\\u2256","ecolon":"\\u2255","Ecy":"\\u042d","ecy":"\\u044d","eDDot":"\\u2a77","Edot":"\\u0116","edot":"\\u0117","eDot":"\\u2251","ee":"\\u2147","efDot":"\\u2252","Efr":"\\ud835\\udd08","efr":"\\ud835\\udd22","eg":"\\u2a9a","Egrave":"\\xc8","egrave":"\\xe8","egs":"\\u2a96","egsdot":"\\u2a98","el":"\\u2a99","Element":"\\u2208","elinters":"\\u23e7","ell":"\\u2113","els":"\\u2a95","elsdot":"\\u2a97","Emacr":"\\u0112","emacr":"\\u0113","empty":"\\u2205","emptyset":"\\u2205","EmptySmallSquare":"\\u25fb","emptyv":"\\u2205","EmptyVerySmallSquare":"\\u25ab","emsp13":"\\u2004","emsp14":"\\u2005","emsp":"\\u2003","ENG":"\\u014a","eng":"\\u014b","ensp":"\\u2002","Eogon":"\\u0118","eogon":"\\u0119","Eopf":"\\ud835\\udd3c","eopf":"\\ud835\\udd56","epar":"\\u22d5","eparsl":"\\u29e3","eplus":"\\u2a71","epsi":"\\u03b5","Epsilon":"\\u0395","epsilon":"\\u03b5","epsiv":"\\u03f5","eqcirc":"\\u2256","eqcolon":"\\u2255","eqsim":"\\u2242","eqslantgtr":"\\u2a96","eqslantless":"\\u2a95","Equal":"\\u2a75","equals":"=","EqualTilde":"\\u2242","equest":"\\u225f","Equilibrium":"\\u21cc","equiv":"\\u2261","equivDD":"\\u2a78","eqvparsl":"\\u29e5","erarr":"\\u2971","erDot":"\\u2253","escr":"\\u212f","Escr":"\\u2130","esdot":"\\u2250","Esim":"\\u2a73","esim":"\\u2242","Eta":"\\u0397","eta":"\\u03b7","ETH":"\\xd0","eth":"\\xf0","Euml":"\\xcb","euml":"\\xeb","euro":"\\u20ac","excl":"!","exist":"\\u2203","Exists":"\\u2203","expectation":"\\u2130","exponentiale":"\\u2147","ExponentialE":"\\u2147","fallingdotseq":"\\u2252","Fcy":"\\u0424","fcy":"\\u0444","female":"\\u2640","ffilig":"\\ufb03","fflig":"\\ufb00","ffllig":"\\ufb04","Ffr":"\\ud835\\udd09","ffr":"\\ud835\\udd23","filig":"\\ufb01","FilledSmallSquare":"\\u25fc","FilledVerySmallSquare":"\\u25aa","fjlig":"fj","flat":"\\u266d","fllig":"\\ufb02","fltns":"\\u25b1","fnof":"\\u0192","Fopf":"\\ud835\\udd3d","fopf":"\\ud835\\udd57","forall":"\\u2200","ForAll":"\\u2200","fork":"\\u22d4","forkv":"\\u2ad9","Fouriertrf":"\\u2131","fpartint":"\\u2a0d","frac12":"\\xbd","frac13":"\\u2153","frac14":"\\xbc","frac15":"\\u2155","frac16":"\\u2159","frac18":"\\u215b","frac23":"\\u2154","frac25":"\\u2156","frac34":"\\xbe","frac35":"\\u2157","frac38":"\\u215c","frac45":"\\u2158","frac56":"\\u215a","frac58":"\\u215d","frac78":"\\u215e","frasl":"\\u2044","frown":"\\u2322","fscr":"\\ud835\\udcbb","Fscr":"\\u2131","gacute":"\\u01f5","Gamma":"\\u0393","gamma":"\\u03b3","Gammad":"\\u03dc","gammad":"\\u03dd","gap":"\\u2a86","Gbreve":"\\u011e","gbreve":"\\u011f","Gcedil":"\\u0122","Gcirc":"\\u011c","gcirc":"\\u011d","Gcy":"\\u0413","gcy":"\\u0433","Gdot":"\\u0120","gdot":"\\u0121","ge":"\\u2265","gE":"\\u2267","gEl":"\\u2a8c","gel":"\\u22db","geq":"\\u2265","geqq":"\\u2267","geqslant":"\\u2a7e","gescc":"\\u2aa9","ges":"\\u2a7e","gesdot":"\\u2a80","gesdoto":"\\u2a82","gesdotol":"\\u2a84","gesl":"\\u22db\\ufe00","gesles":"\\u2a94","Gfr":"\\ud835\\udd0a","gfr":"\\ud835\\udd24","gg":"\\u226b","Gg":"\\u22d9","ggg":"\\u22d9","gimel":"\\u2137","GJcy":"\\u0403","gjcy":"\\u0453","gla":"\\u2aa5","gl":"\\u2277","glE":"\\u2a92","glj":"\\u2aa4","gnap":"\\u2a8a","gnapprox":"\\u2a8a","gne":"\\u2a88","gnE":"\\u2269","gneq":"\\u2a88","gneqq":"\\u2269","gnsim":"\\u22e7","Gopf":"\\ud835\\udd3e","gopf":"\\ud835\\udd58","grave":"`","GreaterEqual":"\\u2265","GreaterEqualLess":"\\u22db","GreaterFullEqual":"\\u2267","GreaterGreater":"\\u2aa2","GreaterLess":"\\u2277","GreaterSlantEqual":"\\u2a7e","GreaterTilde":"\\u2273","Gscr":"\\ud835\\udca2","gscr":"\\u210a","gsim":"\\u2273","gsime":"\\u2a8e","gsiml":"\\u2a90","gtcc":"\\u2aa7","gtcir":"\\u2a7a","gt":">","GT":">","Gt":"\\u226b","gtdot":"\\u22d7","gtlPar":"\\u2995","gtquest":"\\u2a7c","gtrapprox":"\\u2a86","gtrarr":"\\u2978","gtrdot":"\\u22d7","gtreqless":"\\u22db","gtreqqless":"\\u2a8c","gtrless":"\\u2277","gtrsim":"\\u2273","gvertneqq":"\\u2269\\ufe00","gvnE":"\\u2269\\ufe00","Hacek":"\\u02c7","hairsp":"\\u200a","half":"\\xbd","hamilt":"\\u210b","HARDcy":"\\u042a","hardcy":"\\u044a","harrcir":"\\u2948","harr":"\\u2194","hArr":"\\u21d4","harrw":"\\u21ad","Hat":"^","hbar":"\\u210f","Hcirc":"\\u0124","hcirc":"\\u0125","hearts":"\\u2665","heartsuit":"\\u2665","hellip":"\\u2026","hercon":"\\u22b9","hfr":"\\ud835\\udd25","Hfr":"\\u210c","HilbertSpace":"\\u210b","hksearow":"\\u2925","hkswarow":"\\u2926","hoarr":"\\u21ff","homtht":"\\u223b","hookleftarrow":"\\u21a9","hookrightarrow":"\\u21aa","hopf":"\\ud835\\udd59","Hopf":"\\u210d","horbar":"\\u2015","HorizontalLine":"\\u2500","hscr":"\\ud835\\udcbd","Hscr":"\\u210b","hslash":"\\u210f","Hstrok":"\\u0126","hstrok":"\\u0127","HumpDownHump":"\\u224e","HumpEqual":"\\u224f","hybull":"\\u2043","hyphen":"\\u2010","Iacute":"\\xcd","iacute":"\\xed","ic":"\\u2063","Icirc":"\\xce","icirc":"\\xee","Icy":"\\u0418","icy":"\\u0438","Idot":"\\u0130","IEcy":"\\u0415","iecy":"\\u0435","iexcl":"\\xa1","iff":"\\u21d4","ifr":"\\ud835\\udd26","Ifr":"\\u2111","Igrave":"\\xcc","igrave":"\\xec","ii":"\\u2148","iiiint":"\\u2a0c","iiint":"\\u222d","iinfin":"\\u29dc","iiota":"\\u2129","IJlig":"\\u0132","ijlig":"\\u0133","Imacr":"\\u012a","imacr":"\\u012b","image":"\\u2111","ImaginaryI":"\\u2148","imagline":"\\u2110","imagpart":"\\u2111","imath":"\\u0131","Im":"\\u2111","imof":"\\u22b7","imped":"\\u01b5","Implies":"\\u21d2","incare":"\\u2105","in":"\\u2208","infin":"\\u221e","infintie":"\\u29dd","inodot":"\\u0131","intcal":"\\u22ba","int":"\\u222b","Int":"\\u222c","integers":"\\u2124","Integral":"\\u222b","intercal":"\\u22ba","Intersection":"\\u22c2","intlarhk":"\\u2a17","intprod":"\\u2a3c","InvisibleComma":"\\u2063","InvisibleTimes":"\\u2062","IOcy":"\\u0401","iocy":"\\u0451","Iogon":"\\u012e","iogon":"\\u012f","Iopf":"\\ud835\\udd40","iopf":"\\ud835\\udd5a","Iota":"\\u0399","iota":"\\u03b9","iprod":"\\u2a3c","iquest":"\\xbf","iscr":"\\ud835\\udcbe","Iscr":"\\u2110","isin":"\\u2208","isindot":"\\u22f5","isinE":"\\u22f9","isins":"\\u22f4","isinsv":"\\u22f3","isinv":"\\u2208","it":"\\u2062","Itilde":"\\u0128","itilde":"\\u0129","Iukcy":"\\u0406","iukcy":"\\u0456","Iuml":"\\xcf","iuml":"\\xef","Jcirc":"\\u0134","jcirc":"\\u0135","Jcy":"\\u0419","jcy":"\\u0439","Jfr":"\\ud835\\udd0d","jfr":"\\ud835\\udd27","jmath":"\\u0237","Jopf":"\\ud835\\udd41","jopf":"\\ud835\\udd5b","Jscr":"\\ud835\\udca5","jscr":"\\ud835\\udcbf","Jsercy":"\\u0408","jsercy":"\\u0458","Jukcy":"\\u0404","jukcy":"\\u0454","Kappa":"\\u039a","kappa":"\\u03ba","kappav":"\\u03f0","Kcedil":"\\u0136","kcedil":"\\u0137","Kcy":"\\u041a","kcy":"\\u043a","Kfr":"\\ud835\\udd0e","kfr":"\\ud835\\udd28","kgreen":"\\u0138","KHcy":"\\u0425","khcy":"\\u0445","KJcy":"\\u040c","kjcy":"\\u045c","Kopf":"\\ud835\\udd42","kopf":"\\ud835\\udd5c","Kscr":"\\ud835\\udca6","kscr":"\\ud835\\udcc0","lAarr":"\\u21da","Lacute":"\\u0139","lacute":"\\u013a","laemptyv":"\\u29b4","lagran":"\\u2112","Lambda":"\\u039b","lambda":"\\u03bb","lang":"\\u27e8","Lang":"\\u27ea","langd":"\\u2991","langle":"\\u27e8","lap":"\\u2a85","Laplacetrf":"\\u2112","laquo":"\\xab","larrb":"\\u21e4","larrbfs":"\\u291f","larr":"\\u2190","Larr":"\\u219e","lArr":"\\u21d0","larrfs":"\\u291d","larrhk":"\\u21a9","larrlp":"\\u21ab","larrpl":"\\u2939","larrsim":"\\u2973","larrtl":"\\u21a2","latail":"\\u2919","lAtail":"\\u291b","lat":"\\u2aab","late":"\\u2aad","lates":"\\u2aad\\ufe00","lbarr":"\\u290c","lBarr":"\\u290e","lbbrk":"\\u2772","lbrace":"{","lbrack":"[","lbrke":"\\u298b","lbrksld":"\\u298f","lbrkslu":"\\u298d","Lcaron":"\\u013d","lcaron":"\\u013e","Lcedil":"\\u013b","lcedil":"\\u013c","lceil":"\\u2308","lcub":"{","Lcy":"\\u041b","lcy":"\\u043b","ldca":"\\u2936","ldquo":"\\u201c","ldquor":"\\u201e","ldrdhar":"\\u2967","ldrushar":"\\u294b","ldsh":"\\u21b2","le":"\\u2264","lE":"\\u2266","LeftAngleBracket":"\\u27e8","LeftArrowBar":"\\u21e4","leftarrow":"\\u2190","LeftArrow":"\\u2190","Leftarrow":"\\u21d0","LeftArrowRightArrow":"\\u21c6","leftarrowtail":"\\u21a2","LeftCeiling":"\\u2308","LeftDoubleBracket":"\\u27e6","LeftDownTeeVector":"\\u2961","LeftDownVectorBar":"\\u2959","LeftDownVector":"\\u21c3","LeftFloor":"\\u230a","leftharpoondown":"\\u21bd","leftharpoonup":"\\u21bc","leftleftarrows":"\\u21c7","leftrightarrow":"\\u2194","LeftRightArrow":"\\u2194","Leftrightarrow":"\\u21d4","leftrightarrows":"\\u21c6","leftrightharpoons":"\\u21cb","leftrightsquigarrow":"\\u21ad","LeftRightVector":"\\u294e","LeftTeeArrow":"\\u21a4","LeftTee":"\\u22a3","LeftTeeVector":"\\u295a","leftthreetimes":"\\u22cb","LeftTriangleBar":"\\u29cf","LeftTriangle":"\\u22b2","LeftTriangleEqual":"\\u22b4","LeftUpDownVector":"\\u2951","LeftUpTeeVector":"\\u2960","LeftUpVectorBar":"\\u2958","LeftUpVector":"\\u21bf","LeftVectorBar":"\\u2952","LeftVector":"\\u21bc","lEg":"\\u2a8b","leg":"\\u22da","leq":"\\u2264","leqq":"\\u2266","leqslant":"\\u2a7d","lescc":"\\u2aa8","les":"\\u2a7d","lesdot":"\\u2a7f","lesdoto":"\\u2a81","lesdotor":"\\u2a83","lesg":"\\u22da\\ufe00","lesges":"\\u2a93","lessapprox":"\\u2a85","lessdot":"\\u22d6","lesseqgtr":"\\u22da","lesseqqgtr":"\\u2a8b","LessEqualGreater":"\\u22da","LessFullEqual":"\\u2266","LessGreater":"\\u2276","lessgtr":"\\u2276","LessLess":"\\u2aa1","lesssim":"\\u2272","LessSlantEqual":"\\u2a7d","LessTilde":"\\u2272","lfisht":"\\u297c","lfloor":"\\u230a","Lfr":"\\ud835\\udd0f","lfr":"\\ud835\\udd29","lg":"\\u2276","lgE":"\\u2a91","lHar":"\\u2962","lhard":"\\u21bd","lharu":"\\u21bc","lharul":"\\u296a","lhblk":"\\u2584","LJcy":"\\u0409","ljcy":"\\u0459","llarr":"\\u21c7","ll":"\\u226a","Ll":"\\u22d8","llcorner":"\\u231e","Lleftarrow":"\\u21da","llhard":"\\u296b","lltri":"\\u25fa","Lmidot":"\\u013f","lmidot":"\\u0140","lmoustache":"\\u23b0","lmoust":"\\u23b0","lnap":"\\u2a89","lnapprox":"\\u2a89","lne":"\\u2a87","lnE":"\\u2268","lneq":"\\u2a87","lneqq":"\\u2268","lnsim":"\\u22e6","loang":"\\u27ec","loarr":"\\u21fd","lobrk":"\\u27e6","longleftarrow":"\\u27f5","LongLeftArrow":"\\u27f5","Longleftarrow":"\\u27f8","longleftrightarrow":"\\u27f7","LongLeftRightArrow":"\\u27f7","Longleftrightarrow":"\\u27fa","longmapsto":"\\u27fc","longrightarrow":"\\u27f6","LongRightArrow":"\\u27f6","Longrightarrow":"\\u27f9","looparrowleft":"\\u21ab","looparrowright":"\\u21ac","lopar":"\\u2985","Lopf":"\\ud835\\udd43","lopf":"\\ud835\\udd5d","loplus":"\\u2a2d","lotimes":"\\u2a34","lowast":"\\u2217","lowbar":"_","LowerLeftArrow":"\\u2199","LowerRightArrow":"\\u2198","loz":"\\u25ca","lozenge":"\\u25ca","lozf":"\\u29eb","lpar":"(","lparlt":"\\u2993","lrarr":"\\u21c6","lrcorner":"\\u231f","lrhar":"\\u21cb","lrhard":"\\u296d","lrm":"\\u200e","lrtri":"\\u22bf","lsaquo":"\\u2039","lscr":"\\ud835\\udcc1","Lscr":"\\u2112","lsh":"\\u21b0","Lsh":"\\u21b0","lsim":"\\u2272","lsime":"\\u2a8d","lsimg":"\\u2a8f","lsqb":"[","lsquo":"\\u2018","lsquor":"\\u201a","Lstrok":"\\u0141","lstrok":"\\u0142","ltcc":"\\u2aa6","ltcir":"\\u2a79","lt":"<","LT":"<","Lt":"\\u226a","ltdot":"\\u22d6","lthree":"\\u22cb","ltimes":"\\u22c9","ltlarr":"\\u2976","ltquest":"\\u2a7b","ltri":"\\u25c3","ltrie":"\\u22b4","ltrif":"\\u25c2","ltrPar":"\\u2996","lurdshar":"\\u294a","luruhar":"\\u2966","lvertneqq":"\\u2268\\ufe00","lvnE":"\\u2268\\ufe00","macr":"\\xaf","male":"\\u2642","malt":"\\u2720","maltese":"\\u2720","Map":"\\u2905","map":"\\u21a6","mapsto":"\\u21a6","mapstodown":"\\u21a7","mapstoleft":"\\u21a4","mapstoup":"\\u21a5","marker":"\\u25ae","mcomma":"\\u2a29","Mcy":"\\u041c","mcy":"\\u043c","mdash":"\\u2014","mDDot":"\\u223a","measuredangle":"\\u2221","MediumSpace":"\\u205f","Mellintrf":"\\u2133","Mfr":"\\ud835\\udd10","mfr":"\\ud835\\udd2a","mho":"\\u2127","micro":"\\xb5","midast":"*","midcir":"\\u2af0","mid":"\\u2223","middot":"\\xb7","minusb":"\\u229f","minus":"\\u2212","minusd":"\\u2238","minusdu":"\\u2a2a","MinusPlus":"\\u2213","mlcp":"\\u2adb","mldr":"\\u2026","mnplus":"\\u2213","models":"\\u22a7","Mopf":"\\ud835\\udd44","mopf":"\\ud835\\udd5e","mp":"\\u2213","mscr":"\\ud835\\udcc2","Mscr":"\\u2133","mstpos":"\\u223e","Mu":"\\u039c","mu":"\\u03bc","multimap":"\\u22b8","mumap":"\\u22b8","nabla":"\\u2207","Nacute":"\\u0143","nacute":"\\u0144","nang":"\\u2220\\u20d2","nap":"\\u2249","napE":"\\u2a70\\u0338","napid":"\\u224b\\u0338","napos":"\\u0149","napprox":"\\u2249","natural":"\\u266e","naturals":"\\u2115","natur":"\\u266e","nbsp":"\\xa0","nbump":"\\u224e\\u0338","nbumpe":"\\u224f\\u0338","ncap":"\\u2a43","Ncaron":"\\u0147","ncaron":"\\u0148","Ncedil":"\\u0145","ncedil":"\\u0146","ncong":"\\u2247","ncongdot":"\\u2a6d\\u0338","ncup":"\\u2a42","Ncy":"\\u041d","ncy":"\\u043d","ndash":"\\u2013","nearhk":"\\u2924","nearr":"\\u2197","neArr":"\\u21d7","nearrow":"\\u2197","ne":"\\u2260","nedot":"\\u2250\\u0338","NegativeMediumSpace":"\\u200b","NegativeThickSpace":"\\u200b","NegativeThinSpace":"\\u200b","NegativeVeryThinSpace":"\\u200b","nequiv":"\\u2262","nesear":"\\u2928","nesim":"\\u2242\\u0338","NestedGreaterGreater":"\\u226b","NestedLessLess":"\\u226a","NewLine":"\\\\n","nexist":"\\u2204","nexists":"\\u2204","Nfr":"\\ud835\\udd11","nfr":"\\ud835\\udd2b","ngE":"\\u2267\\u0338","nge":"\\u2271","ngeq":"\\u2271","ngeqq":"\\u2267\\u0338","ngeqslant":"\\u2a7e\\u0338","nges":"\\u2a7e\\u0338","nGg":"\\u22d9\\u0338","ngsim":"\\u2275","nGt":"\\u226b\\u20d2","ngt":"\\u226f","ngtr":"\\u226f","nGtv":"\\u226b\\u0338","nharr":"\\u21ae","nhArr":"\\u21ce","nhpar":"\\u2af2","ni":"\\u220b","nis":"\\u22fc","nisd":"\\u22fa","niv":"\\u220b","NJcy":"\\u040a","njcy":"\\u045a","nlarr":"\\u219a","nlArr":"\\u21cd","nldr":"\\u2025","nlE":"\\u2266\\u0338","nle":"\\u2270","nleftarrow":"\\u219a","nLeftarrow":"\\u21cd","nleftrightarrow":"\\u21ae","nLeftrightarrow":"\\u21ce","nleq":"\\u2270","nleqq":"\\u2266\\u0338","nleqslant":"\\u2a7d\\u0338","nles":"\\u2a7d\\u0338","nless":"\\u226e","nLl":"\\u22d8\\u0338","nlsim":"\\u2274","nLt":"\\u226a\\u20d2","nlt":"\\u226e","nltri":"\\u22ea","nltrie":"\\u22ec","nLtv":"\\u226a\\u0338","nmid":"\\u2224","NoBreak":"\\u2060","NonBreakingSpace":"\\xa0","nopf":"\\ud835\\udd5f","Nopf":"\\u2115","Not":"\\u2aec","not":"\\xac","NotCongruent":"\\u2262","NotCupCap":"\\u226d","NotDoubleVerticalBar":"\\u2226","NotElement":"\\u2209","NotEqual":"\\u2260","NotEqualTilde":"\\u2242\\u0338","NotExists":"\\u2204","NotGreater":"\\u226f","NotGreaterEqual":"\\u2271","NotGreaterFullEqual":"\\u2267\\u0338","NotGreaterGreater":"\\u226b\\u0338","NotGreaterLess":"\\u2279","NotGreaterSlantEqual":"\\u2a7e\\u0338","NotGreaterTilde":"\\u2275","NotHumpDownHump":"\\u224e\\u0338","NotHumpEqual":"\\u224f\\u0338","notin":"\\u2209","notindot":"\\u22f5\\u0338","notinE":"\\u22f9\\u0338","notinva":"\\u2209","notinvb":"\\u22f7","notinvc":"\\u22f6","NotLeftTriangleBar":"\\u29cf\\u0338","NotLeftTriangle":"\\u22ea","NotLeftTriangleEqual":"\\u22ec","NotLess":"\\u226e","NotLessEqual":"\\u2270","NotLessGreater":"\\u2278","NotLessLess":"\\u226a\\u0338","NotLessSlantEqual":"\\u2a7d\\u0338","NotLessTilde":"\\u2274","NotNestedGreaterGreater":"\\u2aa2\\u0338","NotNestedLessLess":"\\u2aa1\\u0338","notni":"\\u220c","notniva":"\\u220c","notnivb":"\\u22fe","notnivc":"\\u22fd","NotPrecedes":"\\u2280","NotPrecedesEqual":"\\u2aaf\\u0338","NotPrecedesSlantEqual":"\\u22e0","NotReverseElement":"\\u220c","NotRightTriangleBar":"\\u29d0\\u0338","NotRightTriangle":"\\u22eb","NotRightTriangleEqual":"\\u22ed","NotSquareSubset":"\\u228f\\u0338","NotSquareSubsetEqual":"\\u22e2","NotSquareSuperset":"\\u2290\\u0338","NotSquareSupersetEqual":"\\u22e3","NotSubset":"\\u2282\\u20d2","NotSubsetEqual":"\\u2288","NotSucceeds":"\\u2281","NotSucceedsEqual":"\\u2ab0\\u0338","NotSucceedsSlantEqual":"\\u22e1","NotSucceedsTilde":"\\u227f\\u0338","NotSuperset":"\\u2283\\u20d2","NotSupersetEqual":"\\u2289","NotTilde":"\\u2241","NotTildeEqual":"\\u2244","NotTildeFullEqual":"\\u2247","NotTildeTilde":"\\u2249","NotVerticalBar":"\\u2224","nparallel":"\\u2226","npar":"\\u2226","nparsl":"\\u2afd\\u20e5","npart":"\\u2202\\u0338","npolint":"\\u2a14","npr":"\\u2280","nprcue":"\\u22e0","nprec":"\\u2280","npreceq":"\\u2aaf\\u0338","npre":"\\u2aaf\\u0338","nrarrc":"\\u2933\\u0338","nrarr":"\\u219b","nrArr":"\\u21cf","nrarrw":"\\u219d\\u0338","nrightarrow":"\\u219b","nRightarrow":"\\u21cf","nrtri":"\\u22eb","nrtrie":"\\u22ed","nsc":"\\u2281","nsccue":"\\u22e1","nsce":"\\u2ab0\\u0338","Nscr":"\\ud835\\udca9","nscr":"\\ud835\\udcc3","nshortmid":"\\u2224","nshortparallel":"\\u2226","nsim":"\\u2241","nsime":"\\u2244","nsimeq":"\\u2244","nsmid":"\\u2224","nspar":"\\u2226","nsqsube":"\\u22e2","nsqsupe":"\\u22e3","nsub":"\\u2284","nsubE":"\\u2ac5\\u0338","nsube":"\\u2288","nsubset":"\\u2282\\u20d2","nsubseteq":"\\u2288","nsubseteqq":"\\u2ac5\\u0338","nsucc":"\\u2281","nsucceq":"\\u2ab0\\u0338","nsup":"\\u2285","nsupE":"\\u2ac6\\u0338","nsupe":"\\u2289","nsupset":"\\u2283\\u20d2","nsupseteq":"\\u2289","nsupseteqq":"\\u2ac6\\u0338","ntgl":"\\u2279","Ntilde":"\\xd1","ntilde":"\\xf1","ntlg":"\\u2278","ntriangleleft":"\\u22ea","ntrianglelefteq":"\\u22ec","ntriangleright":"\\u22eb","ntrianglerighteq":"\\u22ed","Nu":"\\u039d","nu":"\\u03bd","num":"#","numero":"\\u2116","numsp":"\\u2007","nvap":"\\u224d\\u20d2","nvdash":"\\u22ac","nvDash":"\\u22ad","nVdash":"\\u22ae","nVDash":"\\u22af","nvge":"\\u2265\\u20d2","nvgt":">\\u20d2","nvHarr":"\\u2904","nvinfin":"\\u29de","nvlArr":"\\u2902","nvle":"\\u2264\\u20d2","nvlt":"<\\u20d2","nvltrie":"\\u22b4\\u20d2","nvrArr":"\\u2903","nvrtrie":"\\u22b5\\u20d2","nvsim":"\\u223c\\u20d2","nwarhk":"\\u2923","nwarr":"\\u2196","nwArr":"\\u21d6","nwarrow":"\\u2196","nwnear":"\\u2927","Oacute":"\\xd3","oacute":"\\xf3","oast":"\\u229b","Ocirc":"\\xd4","ocirc":"\\xf4","ocir":"\\u229a","Ocy":"\\u041e","ocy":"\\u043e","odash":"\\u229d","Odblac":"\\u0150","odblac":"\\u0151","odiv":"\\u2a38","odot":"\\u2299","odsold":"\\u29bc","OElig":"\\u0152","oelig":"\\u0153","ofcir":"\\u29bf","Ofr":"\\ud835\\udd12","ofr":"\\ud835\\udd2c","ogon":"\\u02db","Ograve":"\\xd2","ograve":"\\xf2","ogt":"\\u29c1","ohbar":"\\u29b5","ohm":"\\u03a9","oint":"\\u222e","olarr":"\\u21ba","olcir":"\\u29be","olcross":"\\u29bb","oline":"\\u203e","olt":"\\u29c0","Omacr":"\\u014c","omacr":"\\u014d","Omega":"\\u03a9","omega":"\\u03c9","Omicron":"\\u039f","omicron":"\\u03bf","omid":"\\u29b6","ominus":"\\u2296","Oopf":"\\ud835\\udd46","oopf":"\\ud835\\udd60","opar":"\\u29b7","OpenCurlyDoubleQuote":"\\u201c","OpenCurlyQuote":"\\u2018","operp":"\\u29b9","oplus":"\\u2295","orarr":"\\u21bb","Or":"\\u2a54","or":"\\u2228","ord":"\\u2a5d","order":"\\u2134","orderof":"\\u2134","ordf":"\\xaa","ordm":"\\xba","origof":"\\u22b6","oror":"\\u2a56","orslope":"\\u2a57","orv":"\\u2a5b","oS":"\\u24c8","Oscr":"\\ud835\\udcaa","oscr":"\\u2134","Oslash":"\\xd8","oslash":"\\xf8","osol":"\\u2298","Otilde":"\\xd5","otilde":"\\xf5","otimesas":"\\u2a36","Otimes":"\\u2a37","otimes":"\\u2297","Ouml":"\\xd6","ouml":"\\xf6","ovbar":"\\u233d","OverBar":"\\u203e","OverBrace":"\\u23de","OverBracket":"\\u23b4","OverParenthesis":"\\u23dc","para":"\\xb6","parallel":"\\u2225","par":"\\u2225","parsim":"\\u2af3","parsl":"\\u2afd","part":"\\u2202","PartialD":"\\u2202","Pcy":"\\u041f","pcy":"\\u043f","percnt":"%","period":".","permil":"\\u2030","perp":"\\u22a5","pertenk":"\\u2031","Pfr":"\\ud835\\udd13","pfr":"\\ud835\\udd2d","Phi":"\\u03a6","phi":"\\u03c6","phiv":"\\u03d5","phmmat":"\\u2133","phone":"\\u260e","Pi":"\\u03a0","pi":"\\u03c0","pitchfork":"\\u22d4","piv":"\\u03d6","planck":"\\u210f","planckh":"\\u210e","plankv":"\\u210f","plusacir":"\\u2a23","plusb":"\\u229e","pluscir":"\\u2a22","plus":"+","plusdo":"\\u2214","plusdu":"\\u2a25","pluse":"\\u2a72","PlusMinus":"\\xb1","plusmn":"\\xb1","plussim":"\\u2a26","plustwo":"\\u2a27","pm":"\\xb1","Poincareplane":"\\u210c","pointint":"\\u2a15","popf":"\\ud835\\udd61","Popf":"\\u2119","pound":"\\xa3","prap":"\\u2ab7","Pr":"\\u2abb","pr":"\\u227a","prcue":"\\u227c","precapprox":"\\u2ab7","prec":"\\u227a","preccurlyeq":"\\u227c","Precedes":"\\u227a","PrecedesEqual":"\\u2aaf","PrecedesSlantEqual":"\\u227c","PrecedesTilde":"\\u227e","preceq":"\\u2aaf","precnapprox":"\\u2ab9","precneqq":"\\u2ab5","precnsim":"\\u22e8","pre":"\\u2aaf","prE":"\\u2ab3","precsim":"\\u227e","prime":"\\u2032","Prime":"\\u2033","primes":"\\u2119","prnap":"\\u2ab9","prnE":"\\u2ab5","prnsim":"\\u22e8","prod":"\\u220f","Product":"\\u220f","profalar":"\\u232e","profline":"\\u2312","profsurf":"\\u2313","prop":"\\u221d","Proportional":"\\u221d","Proportion":"\\u2237","propto":"\\u221d","prsim":"\\u227e","prurel":"\\u22b0","Pscr":"\\ud835\\udcab","pscr":"\\ud835\\udcc5","Psi":"\\u03a8","psi":"\\u03c8","puncsp":"\\u2008","Qfr":"\\ud835\\udd14","qfr":"\\ud835\\udd2e","qint":"\\u2a0c","qopf":"\\ud835\\udd62","Qopf":"\\u211a","qprime":"\\u2057","Qscr":"\\ud835\\udcac","qscr":"\\ud835\\udcc6","quaternions":"\\u210d","quatint":"\\u2a16","quest":"?","questeq":"\\u225f","quot":"\\\\"","QUOT":"\\\\"","rAarr":"\\u21db","race":"\\u223d\\u0331","Racute":"\\u0154","racute":"\\u0155","radic":"\\u221a","raemptyv":"\\u29b3","rang":"\\u27e9","Rang":"\\u27eb","rangd":"\\u2992","range":"\\u29a5","rangle":"\\u27e9","raquo":"\\xbb","rarrap":"\\u2975","rarrb":"\\u21e5","rarrbfs":"\\u2920","rarrc":"\\u2933","rarr":"\\u2192","Rarr":"\\u21a0","rArr":"\\u21d2","rarrfs":"\\u291e","rarrhk":"\\u21aa","rarrlp":"\\u21ac","rarrpl":"\\u2945","rarrsim":"\\u2974","Rarrtl":"\\u2916","rarrtl":"\\u21a3","rarrw":"\\u219d","ratail":"\\u291a","rAtail":"\\u291c","ratio":"\\u2236","rationals":"\\u211a","rbarr":"\\u290d","rBarr":"\\u290f","RBarr":"\\u2910","rbbrk":"\\u2773","rbrace":"}","rbrack":"]","rbrke":"\\u298c","rbrksld":"\\u298e","rbrkslu":"\\u2990","Rcaron":"\\u0158","rcaron":"\\u0159","Rcedil":"\\u0156","rcedil":"\\u0157","rceil":"\\u2309","rcub":"}","Rcy":"\\u0420","rcy":"\\u0440","rdca":"\\u2937","rdldhar":"\\u2969","rdquo":"\\u201d","rdquor":"\\u201d","rdsh":"\\u21b3","real":"\\u211c","realine":"\\u211b","realpart":"\\u211c","reals":"\\u211d","Re":"\\u211c","rect":"\\u25ad","reg":"\\xae","REG":"\\xae","ReverseElement":"\\u220b","ReverseEquilibrium":"\\u21cb","ReverseUpEquilibrium":"\\u296f","rfisht":"\\u297d","rfloor":"\\u230b","rfr":"\\ud835\\udd2f","Rfr":"\\u211c","rHar":"\\u2964","rhard":"\\u21c1","rharu":"\\u21c0","rharul":"\\u296c","Rho":"\\u03a1","rho":"\\u03c1","rhov":"\\u03f1","RightAngleBracket":"\\u27e9","RightArrowBar":"\\u21e5","rightarrow":"\\u2192","RightArrow":"\\u2192","Rightarrow":"\\u21d2","RightArrowLeftArrow":"\\u21c4","rightarrowtail":"\\u21a3","RightCeiling":"\\u2309","RightDoubleBracket":"\\u27e7","RightDownTeeVector":"\\u295d","RightDownVectorBar":"\\u2955","RightDownVector":"\\u21c2","RightFloor":"\\u230b","rightharpoondown":"\\u21c1","rightharpoonup":"\\u21c0","rightleftarrows":"\\u21c4","rightleftharpoons":"\\u21cc","rightrightarrows":"\\u21c9","rightsquigarrow":"\\u219d","RightTeeArrow":"\\u21a6","RightTee":"\\u22a2","RightTeeVector":"\\u295b","rightthreetimes":"\\u22cc","RightTriangleBar":"\\u29d0","RightTriangle":"\\u22b3","RightTriangleEqual":"\\u22b5","RightUpDownVector":"\\u294f","RightUpTeeVector":"\\u295c","RightUpVectorBar":"\\u2954","RightUpVector":"\\u21be","RightVectorBar":"\\u2953","RightVector":"\\u21c0","ring":"\\u02da","risingdotseq":"\\u2253","rlarr":"\\u21c4","rlhar":"\\u21cc","rlm":"\\u200f","rmoustache":"\\u23b1","rmoust":"\\u23b1","rnmid":"\\u2aee","roang":"\\u27ed","roarr":"\\u21fe","robrk":"\\u27e7","ropar":"\\u2986","ropf":"\\ud835\\udd63","Ropf":"\\u211d","roplus":"\\u2a2e","rotimes":"\\u2a35","RoundImplies":"\\u2970","rpar":")","rpargt":"\\u2994","rppolint":"\\u2a12","rrarr":"\\u21c9","Rrightarrow":"\\u21db","rsaquo":"\\u203a","rscr":"\\ud835\\udcc7","Rscr":"\\u211b","rsh":"\\u21b1","Rsh":"\\u21b1","rsqb":"]","rsquo":"\\u2019","rsquor":"\\u2019","rthree":"\\u22cc","rtimes":"\\u22ca","rtri":"\\u25b9","rtrie":"\\u22b5","rtrif":"\\u25b8","rtriltri":"\\u29ce","RuleDelayed":"\\u29f4","ruluhar":"\\u2968","rx":"\\u211e","Sacute":"\\u015a","sacute":"\\u015b","sbquo":"\\u201a","scap":"\\u2ab8","Scaron":"\\u0160","scaron":"\\u0161","Sc":"\\u2abc","sc":"\\u227b","sccue":"\\u227d","sce":"\\u2ab0","scE":"\\u2ab4","Scedil":"\\u015e","scedil":"\\u015f","Scirc":"\\u015c","scirc":"\\u015d","scnap":"\\u2aba","scnE":"\\u2ab6","scnsim":"\\u22e9","scpolint":"\\u2a13","scsim":"\\u227f","Scy":"\\u0421","scy":"\\u0441","sdotb":"\\u22a1","sdot":"\\u22c5","sdote":"\\u2a66","searhk":"\\u2925","searr":"\\u2198","seArr":"\\u21d8","searrow":"\\u2198","sect":"\\xa7","semi":";","seswar":"\\u2929","setminus":"\\u2216","setmn":"\\u2216","sext":"\\u2736","Sfr":"\\ud835\\udd16","sfr":"\\ud835\\udd30","sfrown":"\\u2322","sharp":"\\u266f","SHCHcy":"\\u0429","shchcy":"\\u0449","SHcy":"\\u0428","shcy":"\\u0448","ShortDownArrow":"\\u2193","ShortLeftArrow":"\\u2190","shortmid":"\\u2223","shortparallel":"\\u2225","ShortRightArrow":"\\u2192","ShortUpArrow":"\\u2191","shy":"\\xad","Sigma":"\\u03a3","sigma":"\\u03c3","sigmaf":"\\u03c2","sigmav":"\\u03c2","sim":"\\u223c","simdot":"\\u2a6a","sime":"\\u2243","simeq":"\\u2243","simg":"\\u2a9e","simgE":"\\u2aa0","siml":"\\u2a9d","simlE":"\\u2a9f","simne":"\\u2246","simplus":"\\u2a24","simrarr":"\\u2972","slarr":"\\u2190","SmallCircle":"\\u2218","smallsetminus":"\\u2216","smashp":"\\u2a33","smeparsl":"\\u29e4","smid":"\\u2223","smile":"\\u2323","smt":"\\u2aaa","smte":"\\u2aac","smtes":"\\u2aac\\ufe00","SOFTcy":"\\u042c","softcy":"\\u044c","solbar":"\\u233f","solb":"\\u29c4","sol":"/","Sopf":"\\ud835\\udd4a","sopf":"\\ud835\\udd64","spades":"\\u2660","spadesuit":"\\u2660","spar":"\\u2225","sqcap":"\\u2293","sqcaps":"\\u2293\\ufe00","sqcup":"\\u2294","sqcups":"\\u2294\\ufe00","Sqrt":"\\u221a","sqsub":"\\u228f","sqsube":"\\u2291","sqsubset":"\\u228f","sqsubseteq":"\\u2291","sqsup":"\\u2290","sqsupe":"\\u2292","sqsupset":"\\u2290","sqsupseteq":"\\u2292","square":"\\u25a1","Square":"\\u25a1","SquareIntersection":"\\u2293","SquareSubset":"\\u228f","SquareSubsetEqual":"\\u2291","SquareSuperset":"\\u2290","SquareSupersetEqual":"\\u2292","SquareUnion":"\\u2294","squarf":"\\u25aa","squ":"\\u25a1","squf":"\\u25aa","srarr":"\\u2192","Sscr":"\\ud835\\udcae","sscr":"\\ud835\\udcc8","ssetmn":"\\u2216","ssmile":"\\u2323","sstarf":"\\u22c6","Star":"\\u22c6","star":"\\u2606","starf":"\\u2605","straightepsilon":"\\u03f5","straightphi":"\\u03d5","strns":"\\xaf","sub":"\\u2282","Sub":"\\u22d0","subdot":"\\u2abd","subE":"\\u2ac5","sube":"\\u2286","subedot":"\\u2ac3","submult":"\\u2ac1","subnE":"\\u2acb","subne":"\\u228a","subplus":"\\u2abf","subrarr":"\\u2979","subset":"\\u2282","Subset":"\\u22d0","subseteq":"\\u2286","subseteqq":"\\u2ac5","SubsetEqual":"\\u2286","subsetneq":"\\u228a","subsetneqq":"\\u2acb","subsim":"\\u2ac7","subsub":"\\u2ad5","subsup":"\\u2ad3","succapprox":"\\u2ab8","succ":"\\u227b","succcurlyeq":"\\u227d","Succeeds":"\\u227b","SucceedsEqual":"\\u2ab0","SucceedsSlantEqual":"\\u227d","SucceedsTilde":"\\u227f","succeq":"\\u2ab0","succnapprox":"\\u2aba","succneqq":"\\u2ab6","succnsim":"\\u22e9","succsim":"\\u227f","SuchThat":"\\u220b","sum":"\\u2211","Sum":"\\u2211","sung":"\\u266a","sup1":"\\xb9","sup2":"\\xb2","sup3":"\\xb3","sup":"\\u2283","Sup":"\\u22d1","supdot":"\\u2abe","supdsub":"\\u2ad8","supE":"\\u2ac6","supe":"\\u2287","supedot":"\\u2ac4","Superset":"\\u2283","SupersetEqual":"\\u2287","suphsol":"\\u27c9","suphsub":"\\u2ad7","suplarr":"\\u297b","supmult":"\\u2ac2","supnE":"\\u2acc","supne":"\\u228b","supplus":"\\u2ac0","supset":"\\u2283","Supset":"\\u22d1","supseteq":"\\u2287","supseteqq":"\\u2ac6","supsetneq":"\\u228b","supsetneqq":"\\u2acc","supsim":"\\u2ac8","supsub":"\\u2ad4","supsup":"\\u2ad6","swarhk":"\\u2926","swarr":"\\u2199","swArr":"\\u21d9","swarrow":"\\u2199","swnwar":"\\u292a","szlig":"\\xdf","Tab":"\\\\t","target":"\\u2316","Tau":"\\u03a4","tau":"\\u03c4","tbrk":"\\u23b4","Tcaron":"\\u0164","tcaron":"\\u0165","Tcedil":"\\u0162","tcedil":"\\u0163","Tcy":"\\u0422","tcy":"\\u0442","tdot":"\\u20db","telrec":"\\u2315","Tfr":"\\ud835\\udd17","tfr":"\\ud835\\udd31","there4":"\\u2234","therefore":"\\u2234","Therefore":"\\u2234","Theta":"\\u0398","theta":"\\u03b8","thetasym":"\\u03d1","thetav":"\\u03d1","thickapprox":"\\u2248","thicksim":"\\u223c","ThickSpace":"\\u205f\\u200a","ThinSpace":"\\u2009","thinsp":"\\u2009","thkap":"\\u2248","thksim":"\\u223c","THORN":"\\xde","thorn":"\\xfe","tilde":"\\u02dc","Tilde":"\\u223c","TildeEqual":"\\u2243","TildeFullEqual":"\\u2245","TildeTilde":"\\u2248","timesbar":"\\u2a31","timesb":"\\u22a0","times":"\\xd7","timesd":"\\u2a30","tint":"\\u222d","toea":"\\u2928","topbot":"\\u2336","topcir":"\\u2af1","top":"\\u22a4","Topf":"\\ud835\\udd4b","topf":"\\ud835\\udd65","topfork":"\\u2ada","tosa":"\\u2929","tprime":"\\u2034","trade":"\\u2122","TRADE":"\\u2122","triangle":"\\u25b5","triangledown":"\\u25bf","triangleleft":"\\u25c3","trianglelefteq":"\\u22b4","triangleq":"\\u225c","triangleright":"\\u25b9","trianglerighteq":"\\u22b5","tridot":"\\u25ec","trie":"\\u225c","triminus":"\\u2a3a","TripleDot":"\\u20db","triplus":"\\u2a39","trisb":"\\u29cd","tritime":"\\u2a3b","trpezium":"\\u23e2","Tscr":"\\ud835\\udcaf","tscr":"\\ud835\\udcc9","TScy":"\\u0426","tscy":"\\u0446","TSHcy":"\\u040b","tshcy":"\\u045b","Tstrok":"\\u0166","tstrok":"\\u0167","twixt":"\\u226c","twoheadleftarrow":"\\u219e","twoheadrightarrow":"\\u21a0","Uacute":"\\xda","uacute":"\\xfa","uarr":"\\u2191","Uarr":"\\u219f","uArr":"\\u21d1","Uarrocir":"\\u2949","Ubrcy":"\\u040e","ubrcy":"\\u045e","Ubreve":"\\u016c","ubreve":"\\u016d","Ucirc":"\\xdb","ucirc":"\\xfb","Ucy":"\\u0423","ucy":"\\u0443","udarr":"\\u21c5","Udblac":"\\u0170","udblac":"\\u0171","udhar":"\\u296e","ufisht":"\\u297e","Ufr":"\\ud835\\udd18","ufr":"\\ud835\\udd32","Ugrave":"\\xd9","ugrave":"\\xf9","uHar":"\\u2963","uharl":"\\u21bf","uharr":"\\u21be","uhblk":"\\u2580","ulcorn":"\\u231c","ulcorner":"\\u231c","ulcrop":"\\u230f","ultri":"\\u25f8","Umacr":"\\u016a","umacr":"\\u016b","uml":"\\xa8","UnderBar":"_","UnderBrace":"\\u23df","UnderBracket":"\\u23b5","UnderParenthesis":"\\u23dd","Union":"\\u22c3","UnionPlus":"\\u228e","Uogon":"\\u0172","uogon":"\\u0173","Uopf":"\\ud835\\udd4c","uopf":"\\ud835\\udd66","UpArrowBar":"\\u2912","uparrow":"\\u2191","UpArrow":"\\u2191","Uparrow":"\\u21d1","UpArrowDownArrow":"\\u21c5","updownarrow":"\\u2195","UpDownArrow":"\\u2195","Updownarrow":"\\u21d5","UpEquilibrium":"\\u296e","upharpoonleft":"\\u21bf","upharpoonright":"\\u21be","uplus":"\\u228e","UpperLeftArrow":"\\u2196","UpperRightArrow":"\\u2197","upsi":"\\u03c5","Upsi":"\\u03d2","upsih":"\\u03d2","Upsilon":"\\u03a5","upsilon":"\\u03c5","UpTeeArrow":"\\u21a5","UpTee":"\\u22a5","upuparrows":"\\u21c8","urcorn":"\\u231d","urcorner":"\\u231d","urcrop":"\\u230e","Uring":"\\u016e","uring":"\\u016f","urtri":"\\u25f9","Uscr":"\\ud835\\udcb0","uscr":"\\ud835\\udcca","utdot":"\\u22f0","Utilde":"\\u0168","utilde":"\\u0169","utri":"\\u25b5","utrif":"\\u25b4","uuarr":"\\u21c8","Uuml":"\\xdc","uuml":"\\xfc","uwangle":"\\u29a7","vangrt":"\\u299c","varepsilon":"\\u03f5","varkappa":"\\u03f0","varnothing":"\\u2205","varphi":"\\u03d5","varpi":"\\u03d6","varpropto":"\\u221d","varr":"\\u2195","vArr":"\\u21d5","varrho":"\\u03f1","varsigma":"\\u03c2","varsubsetneq":"\\u228a\\ufe00","varsubsetneqq":"\\u2acb\\ufe00","varsupsetneq":"\\u228b\\ufe00","varsupsetneqq":"\\u2acc\\ufe00","vartheta":"\\u03d1","vartriangleleft":"\\u22b2","vartriangleright":"\\u22b3","vBar":"\\u2ae8","Vbar":"\\u2aeb","vBarv":"\\u2ae9","Vcy":"\\u0412","vcy":"\\u0432","vdash":"\\u22a2","vDash":"\\u22a8","Vdash":"\\u22a9","VDash":"\\u22ab","Vdashl":"\\u2ae6","veebar":"\\u22bb","vee":"\\u2228","Vee":"\\u22c1","veeeq":"\\u225a","vellip":"\\u22ee","verbar":"|","Verbar":"\\u2016","vert":"|","Vert":"\\u2016","VerticalBar":"\\u2223","VerticalLine":"|","VerticalSeparator":"\\u2758","VerticalTilde":"\\u2240","VeryThinSpace":"\\u200a","Vfr":"\\ud835\\udd19","vfr":"\\ud835\\udd33","vltri":"\\u22b2","vnsub":"\\u2282\\u20d2","vnsup":"\\u2283\\u20d2","Vopf":"\\ud835\\udd4d","vopf":"\\ud835\\udd67","vprop":"\\u221d","vrtri":"\\u22b3","Vscr":"\\ud835\\udcb1","vscr":"\\ud835\\udccb","vsubnE":"\\u2acb\\ufe00","vsubne":"\\u228a\\ufe00","vsupnE":"\\u2acc\\ufe00","vsupne":"\\u228b\\ufe00","Vvdash":"\\u22aa","vzigzag":"\\u299a","Wcirc":"\\u0174","wcirc":"\\u0175","wedbar":"\\u2a5f","wedge":"\\u2227","Wedge":"\\u22c0","wedgeq":"\\u2259","weierp":"\\u2118","Wfr":"\\ud835\\udd1a","wfr":"\\ud835\\udd34","Wopf":"\\ud835\\udd4e","wopf":"\\ud835\\udd68","wp":"\\u2118","wr":"\\u2240","wreath":"\\u2240","Wscr":"\\ud835\\udcb2","wscr":"\\ud835\\udccc","xcap":"\\u22c2","xcirc":"\\u25ef","xcup":"\\u22c3","xdtri":"\\u25bd","Xfr":"\\ud835\\udd1b","xfr":"\\ud835\\udd35","xharr":"\\u27f7","xhArr":"\\u27fa","Xi":"\\u039e","xi":"\\u03be","xlarr":"\\u27f5","xlArr":"\\u27f8","xmap":"\\u27fc","xnis":"\\u22fb","xodot":"\\u2a00","Xopf":"\\ud835\\udd4f","xopf":"\\ud835\\udd69","xoplus":"\\u2a01","xotime":"\\u2a02","xrarr":"\\u27f6","xrArr":"\\u27f9","Xscr":"\\ud835\\udcb3","xscr":"\\ud835\\udccd","xsqcup":"\\u2a06","xuplus":"\\u2a04","xutri":"\\u25b3","xvee":"\\u22c1","xwedge":"\\u22c0","Yacute":"\\xdd","yacute":"\\xfd","YAcy":"\\u042f","yacy":"\\u044f","Ycirc":"\\u0176","ycirc":"\\u0177","Ycy":"\\u042b","ycy":"\\u044b","yen":"\\xa5","Yfr":"\\ud835\\udd1c","yfr":"\\ud835\\udd36","YIcy":"\\u0407","yicy":"\\u0457","Yopf":"\\ud835\\udd50","yopf":"\\ud835\\udd6a","Yscr":"\\ud835\\udcb4","yscr":"\\ud835\\udcce","YUcy":"\\u042e","yucy":"\\u044e","yuml":"\\xff","Yuml":"\\u0178","Zacute":"\\u0179","zacute":"\\u017a","Zcaron":"\\u017d","zcaron":"\\u017e","Zcy":"\\u0417","zcy":"\\u0437","Zdot":"\\u017b","zdot":"\\u017c","zeetrf":"\\u2128","ZeroWidthSpace":"\\u200b","Zeta":"\\u0396","zeta":"\\u03b6","zfr":"\\ud835\\udd37","Zfr":"\\u2128","ZHcy":"\\u0416","zhcy":"\\u0436","zigrarr":"\\u21dd","zopf":"\\ud835\\udd6b","Zopf":"\\u2124","Zscr":"\\ud835\\udcb5","zscr":"\\ud835\\udccf","zwj":"\\u200d","zwnj":"\\u200c"}\');\n}, function(module) {\n    module.exports = JSON.parse(\'{"amp":"&","apos":"\\\'","gt":">","lt":"<","quot":"\\\\""}\');\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    }), exports.isTag = function(elem) {\n        return "tag" === elem.type || "script" === elem.type || "style" === elem.type;\n    }, exports.Text = "text", exports.Directive = "directive", exports.Comment = "comment", \n    exports.Script = "script", exports.Style = "style", exports.Tag = "tag", exports.CDATA = "cdata", \n    exports.Doctype = "doctype";\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    var extendStatics, __extends = this && this.__extends || (extendStatics = function(d, b) {\n        return (extendStatics = Object.setPrototypeOf || {\n            __proto__: []\n        } instanceof Array && function(d, b) {\n            d.__proto__ = b;\n        } || function(d, b) {\n            for (var p in b) b.hasOwnProperty(p) && (d[p] = b[p]);\n        })(d, b);\n    }, function(d, b) {\n        function __ {\n            this.constructor = d;\n        }\n        extendStatics(d, b), d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, \n       new __);\n    }), __importDefault = this && this.__importDefault || function(mod) {\n        return mod && mod.__esModule ? mod : {\n            default: mod\n        };\n    };\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    });\n    var Tokenizer_1 = __importDefault(__webpack_require__(13)), events_1 = __webpack_require__(31), formTags = new Set([ "input", "option", "optgroup", "select", "button", "datalist", "textarea" ]), pTag = new Set([ "p" ]), openImpliesClose = {\n        tr: new Set([ "tr", "th", "td" ]),\n        th: new Set([ "th" ]),\n        td: new Set([ "thead", "th", "td" ]),\n        body: new Set([ "head", "link", "script" ]),\n        li: new Set([ "li" ]),\n        p: pTag,\n        h1: pTag,\n        h2: pTag,\n        h3: pTag,\n        h4: pTag,\n        h5: pTag,\n        h6: pTag,\n        select: formTags,\n        input: formTags,\n        output: formTags,\n        button: formTags,\n        datalist: formTags,\n        textarea: formTags,\n        option: new Set([ "option" ]),\n        optgroup: new Set([ "optgroup", "option" ]),\n        dd: new Set([ "dt", "dd" ]),\n        dt: new Set([ "dt", "dd" ]),\n        address: pTag,\n        article: pTag,\n        aside: pTag,\n        blockquote: pTag,\n        details: pTag,\n        div: pTag,\n        dl: pTag,\n        fieldset: pTag,\n        figcaption: pTag,\n        figure: pTag,\n        footer: pTag,\n        form: pTag,\n        header: pTag,\n        hr: pTag,\n        main: pTag,\n        nav: pTag,\n        ol: pTag,\n        pre: pTag,\n        section: pTag,\n        table: pTag,\n        ul: pTag,\n        rt: new Set([ "rt", "rp" ]),\n        rp: new Set([ "rt", "rp" ]),\n        tbody: new Set([ "thead", "tbody" ]),\n        tfoot: new Set([ "thead", "tbody" ])\n    }, voidElements = new Set([ "area", "base", "basefont", "br", "col", "command", "embed", "frame", "hr", "img", "input", "isindex", "keygen", "link", "meta", "param", "source", "track", "wbr" ]), foreignContextElements = new Set([ "math", "svg" ]), htmlIntegrationElements = new Set([ "mi", "mo", "mn", "ms", "mtext", "annotation-xml", "foreignObject", "desc", "title" ]), reNameEnd = /\\s|\\//, Parser = function(_super) {\n        function Parser(cbs, options) {\n            var _this = _super.call(this) || this;\n            return _this._tagname = "", _this._attribname = "", _this._attribvalue = "", _this._attribs = null, \n            _this._stack = [], _this._foreignContext = [], _this.startIndex = 0, _this.endIndex = null, \n            _this.parseChunk = Parser.prototype.write, _this.done = Parser.prototype.end, _this._options = options || {}, \n            _this._cbs = cbs || {}, _this._tagname = "", _this._attribname = "", _this._attribvalue = "", \n            _this._attribs = null, _this._stack = [], _this._foreignContext = [], _this.startIndex = 0, \n            _this.endIndex = null, _this._lowerCaseTagNames = "lowerCaseTags" in _this._options ? !!_this._options.lowerCaseTags : !_this._options.xmlMode, \n           _this._lowerCaseAttributeNames = "lowerCaseAttributeNames" in _this._options ? !!_this._options.lowerCaseAttributeNames : !_this._options.xmlMode, \n           _this._tokenizer = new (_this._options.Tokenizer || Tokenizer_1.default)(_this._options, _this), \n            _this._cbs.onparserinit && _this._cbs.onparserinit(_this), _this;\n        }\n        return __extends(Parser, _super), Parser.prototype._updatePosition = function(initialOffset) {\n            null === this.endIndex ? this._tokenizer._sectionStart <= initialOffset ? this.startIndex = 0 : this.startIndex = this._tokenizer._sectionStart - initialOffset : this.startIndex = this.endIndex + 1, \n           this.endIndex = this._tokenizer.getAbsoluteIndex;\n        }, Parser.prototype.ontext = function(data) {\n            this._updatePosition(1), this.endIndex--, this._cbs.ontext && this._cbs.ontext(data);\n        }, Parser.prototype.onopentagname = function(name) {\n            if (this._lowerCaseTagNames && (name = name.toLowerCase), this._tagname = name, \n            !this._options.xmlMode && Object.prototype.hasOwnProperty.call(openImpliesClose, name)) for (var el = void 0; openImpliesClose[name].has(el = this._stack[this._stack.length - 1]); this.onclosetag(el)) ;\n            !this._options.xmlMode && voidElements.has(name) || (this._stack.push(name), foreignContextElements.has(name) ? this._foreignContext.push(!0) : htmlIntegrationElements.has(name) && this._foreignContext.push(!1)), \n            this._cbs.onopentagname && this._cbs.onopentagname(name), this._cbs.onopentag && (this._attribs = {});\n        }, Parser.prototype.onopentagend = function {\n            this._updatePosition(1), this._attribs && (this._cbs.onopentag && this._cbs.onopentag(this._tagname, this._attribs), \n            this._attribs = null), !this._options.xmlMode && this._cbs.onclosetag && voidElements.has(this._tagname) && this._cbs.onclosetag(this._tagname), \n            this._tagname = "";\n        }, Parser.prototype.onclosetag = function(name) {\n            if (this._updatePosition(1), this._lowerCaseTagNames && (name = name.toLowerCase), \n            (foreignContextElements.has(name) || htmlIntegrationElements.has(name)) && this._foreignContext.pop, \n            !this._stack.length || !this._options.xmlMode && voidElements.has(name)) this._options.xmlMode || "br" !== name && "p" !== name || (this.onopentagname(name), \n            this._closeCurrentTag); else {\n                var pos = this._stack.lastIndexOf(name);\n                if (-1 !== pos) if (this._cbs.onclosetag) for (pos = this._stack.length - pos; pos--; ) this._cbs.onclosetag(this._stack.pop); else this._stack.length = pos; else "p" !== name || this._options.xmlMode || (this.onopentagname(name), \n                this._closeCurrentTag);\n            }\n        }, Parser.prototype.onselfclosingtag = function {\n            this._options.xmlMode || this._options.recognizeSelfClosing || this._foreignContext[this._foreignContext.length - 1] ? this._closeCurrentTag : this.onopentagend;\n       }, Parser.prototype._closeCurrentTag = function {\n            var name = this._tagname;\n            this.onopentagend, this._stack[this._stack.length - 1] === name && (this._cbs.onclosetag && this._cbs.onclosetag(name), \n            this._stack.pop);\n        }, Parser.prototype.onattribname = function(name) {\n            this._lowerCaseAttributeNames && (name = name.toLowerCase), this._attribname = name;\n        }, Parser.prototype.onattribdata = function(value) {\n            this._attribvalue += value;\n        }, Parser.prototype.onattribend = function {\n            this._cbs.onattribute && this._cbs.onattribute(this._attribname, this._attribvalue), \n            this._attribs && !Object.prototype.hasOwnProperty.call(this._attribs, this._attribname) && (this._attribs[this._attribname] = this._attribvalue), \n            this._attribname = "", this._attribvalue = "";\n        }, Parser.prototype._getInstructionName = function(value) {\n            var idx = value.search(reNameEnd), name = idx < 0 ? value : value.substr(0, idx);\n           return this._lowerCaseTagNames && (name = name.toLowerCase), name;\n        }, Parser.prototype.ondeclaration = function(value) {\n            if (this._cbs.onprocessinginstruction) {\n                var name_1 = this._getInstructionName(value);\n                this._cbs.onprocessinginstruction("!" + name_1, "!" + value);\n            }\n        }, Parser.prototype.onprocessinginstruction = function(value) {\n            if (this._cbs.onprocessinginstruction) {\n                var name_2 = this._getInstructionName(value);\n                this._cbs.onprocessinginstruction("?" + name_2, "?" + value);\n            }\n        }, Parser.prototype.oncomment = function(value) {\n            this._updatePosition(4), this._cbs.oncomment && this._cbs.oncomment(value), this._cbs.oncommentend && this._cbs.oncommentend;\n        }, Parser.prototype.oncdata = function(value) {\n            this._updatePosition(1), this._options.xmlMode || this._options.recognizeCDATA ? (this._cbs.oncdatastart && this._cbs.oncdatastart, \n           this._cbs.ontext && this._cbs.ontext(value), this._cbs.oncdataend && this._cbs.oncdataend) : this.oncomment("[CDATA[" + value + "]]");\n        }, Parser.prototype.onerror = function(err) {\n            this._cbs.onerror && this._cbs.onerror(err);\n        }, Parser.prototype.onend = function {\n            if (this._cbs.onclosetag) for (var i = this._stack.length; i > 0; this._cbs.onclosetag(this._stack[--i])) ;\n            this._cbs.onend && this._cbs.onend;\n        }, Parser.prototype.reset = function {\n            this._cbs.onreset && this._cbs.onreset, this._tokenizer.reset, this._tagname = "", \n            this._attribname = "", this._attribs = null, this._stack = [], this._cbs.onparserinit && this._cbs.onparserinit(this);\n        }, Parser.prototype.parseComplete = function(data) {\n            this.reset, this.end(data);\n        }, Parser.prototype.write = function(chunk) {\n            this._tokenizer.write(chunk);\n        }, Parser.prototype.end = function(chunk) {\n            this._tokenizer.end(chunk);\n        }, Parser.prototype.pause = function {\n            this._tokenizer.pause;\n        }, Parser.prototype.resume = function {\n            this._tokenizer.resume;\n        }, Parser;\n    }(events_1.EventEmitter);\n    exports.Parser = Parser;\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    var __importDefault = this && this.__importDefault || function(mod) {\n        return mod && mod.__esModule ? mod : {\n           default: mod\n        };\n    };\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    });\n    var decode_codepoint_1 = __importDefault(__webpack_require__(14)), entities_json_1 = __importDefault(__webpack_require__(9)), legacy_json_1 = __importDefault(__webpack_require__(15)), xml_json_1 = __importDefault(__webpack_require__(10));\n    function whitespace(c) {\n        return " " === c || "\\n" === c || "\\t" === c || "\\f" === c || "\\r" === c;\n    }\n    function ifElseState(upper, SUCCESS, FAILURE) {\n        var lower = upper.toLowerCase;\n        return upper === lower ? function(t, c) {\n           c === lower ? t._state = SUCCESS : (t._state = FAILURE, t._index--);\n       } : function(t, c) {\n            c === lower || c === upper ? t._state = SUCCESS : (t._state = FAILURE, t._index--);\n       };\n    }\n    function consumeSpecialNameChar(upper, NEXT_STATE) {\n        var lower = upper.toLowerCase;\n        return function(t, c) {\n            c === lower || c === upper ? t._state = NEXT_STATE : (t._state = 3, t._index--);\n       };\n    }\n    var stateBeforeCdata1 = ifElseState("C", 23, 16), stateBeforeCdata2 = ifElseState("D", 24, 16), stateBeforeCdata3 = ifElseState("A", 25, 16), stateBeforeCdata4 = ifElseState("T", 26, 16), stateBeforeCdata5 = ifElseState("A", 27, 16), stateBeforeScript1 = consumeSpecialNameChar("R", 34), stateBeforeScript2 = consumeSpecialNameChar("I", 35), stateBeforeScript3 = consumeSpecialNameChar("P", 36), stateBeforeScript4 = consumeSpecialNameChar("T", 37), stateAfterScript1 = ifElseState("R", 39, 1), stateAfterScript2 = ifElseState("I", 40, 1), stateAfterScript3 = ifElseState("P", 41, 1), stateAfterScript4 = ifElseState("T", 42, 1), stateBeforeStyle1 = consumeSpecialNameChar("Y", 44), stateBeforeStyle2 = consumeSpecialNameChar("L", 45), stateBeforeStyle3 = consumeSpecialNameChar("E", 46), stateAfterStyle1 = ifElseState("Y", 48, 1), stateAfterStyle2 = ifElseState("L", 49, 1), stateAfterStyle3 = ifElseState("E", 50, 1), stateBeforeEntity = ifElseState("#", 52, 53), stateBeforeNumericEntity = ifElseState("X", 55, 54), Tokenizer = function {\n        function Tokenizer(options, cbs) {\n            this._state = 1, this._buffer = "", this._sectionStart = 0, this._index = 0, this._bufferOffset = 0, \n            this._baseState = 1, this._special = 1, this._running = !0, this._ended = !1, this._cbs = cbs, \n            this._xmlMode = !(!options || !options.xmlMode), this._decodeEntities = !(!options || !options.decodeEntities);\n        }\n        return Tokenizer.prototype.reset = function {\n            this._state = 1, this._buffer = "", this._sectionStart = 0, this._index = 0, this._bufferOffset = 0, \n            this._baseState = 1, this._special = 1, this._running = !0, this._ended = !1;\n        }, Tokenizer.prototype._stateText = function(c) {\n            "<" === c ? (this._index > this._sectionStart && this._cbs.ontext(this._getSection), \n           this._state = 2, this._sectionStart = this._index) : this._decodeEntities && 1 === this._special && "&" === c && (this._index > this._sectionStart && this._cbs.ontext(this._getSection), \n            this._baseState = 1, this._state = 51, this._sectionStart = this._index);\n        }, Tokenizer.prototype._stateBeforeTagName = function(c) {\n            "/" === c ? this._state = 5 : "<" === c ? (this._cbs.ontext(this._getSection), \n           this._sectionStart = this._index) : ">" === c || 1 !== this._special || whitespace(c) ? this._state = 1 : "!" === c ? (this._state = 15, \n           this._sectionStart = this._index + 1) : "?" === c ? (this._state = 17, this._sectionStart = this._index + 1) : (this._state = this._xmlMode || "s" !== c && "S" !== c ? 3 : 31, \n           this._sectionStart = this._index);\n        }, Tokenizer.prototype._stateInTagName = function(c) {\n            ("/" === c || ">" === c || whitespace(c)) && (this._emitToken("onopentagname"), \n            this._state = 8, this._index--);\n        }, Tokenizer.prototype._stateBeforeClosingTagName = function(c) {\n            whitespace(c) || (">" === c ? this._state = 1 : 1 !== this._special ? "s" === c || "S" === c ? this._state = 32 : (this._state = 1, \n            this._index--) : (this._state = 6, this._sectionStart = this._index));\n        }, Tokenizer.prototype._stateInClosingTagName = function(c) {\n            (">" === c || whitespace(c)) && (this._emitToken("onclosetag"), this._state = 7, \n            this._index--);\n        }, Tokenizer.prototype._stateAfterClosingTagName = function(c) {\n            ">" === c && (this._state = 1, this._sectionStart = this._index + 1);\n        }, Tokenizer.prototype._stateBeforeAttributeName = function(c) {\n            ">" === c ? (this._cbs.onopentagend, this._state = 1, this._sectionStart = this._index + 1) : "/" === c ? this._state = 4 : whitespace(c) || (this._state = 9, \n           this._sectionStart = this._index);\n        }, Tokenizer.prototype._stateInSelfClosingTag = function(c) {\n            ">" === c ? (this._cbs.onselfclosingtag, this._state = 1, this._sectionStart = this._index + 1) : whitespace(c) || (this._state = 8, \n           this._index--);\n        }, Tokenizer.prototype._stateInAttributeName = function(c) {\n            ("=" === c || "/" === c || ">" === c || whitespace(c)) && (this._cbs.onattribname(this._getSection), \n            this._sectionStart = -1, this._state = 10, this._index--);\n        }, Tokenizer.prototype._stateAfterAttributeName = function(c) {\n            "=" === c ? this._state = 11 : "/" === c || ">" === c ? (this._cbs.onattribend, \n           this._state = 8, this._index--) : whitespace(c) || (this._cbs.onattribend, this._state = 9, \n            this._sectionStart = this._index);\n        }, Tokenizer.prototype._stateBeforeAttributeValue = function(c) {\n            \'"\' === c ? (this._state = 12, this._sectionStart = this._index + 1) : "\'" === c ? (this._state = 13, \n            this._sectionStart = this._index + 1) : whitespace(c) || (this._state = 14, this._sectionStart = this._index, \n            this._index--);\n        }, Tokenizer.prototype._stateInAttributeValueDoubleQuotes = function(c) {\n            \'"\' === c ? (this._emitToken("onattribdata"), this._cbs.onattribend, this._state = 8) : this._decodeEntities && "&" === c && (this._emitToken("onattribdata"), \n           this._baseState = this._state, this._state = 51, this._sectionStart = this._index);\n        }, Tokenizer.prototype._stateInAttributeValueSingleQuotes = function(c) {\n            "\'" === c ? (this._emitToken("onattribdata"), this._cbs.onattribend, this._state = 8) : this._decodeEntities && "&" === c && (this._emitToken("onattribdata"), \n           this._baseState = this._state, this._state = 51, this._sectionStart = this._index);\n        }, Tokenizer.prototype._stateInAttributeValueNoQuotes = function(c) {\n            whitespace(c) || ">" === c ? (this._emitToken("onattribdata"), this._cbs.onattribend, \n           this._state = 8, this._index--) : this._decodeEntities && "&" === c && (this._emitToken("onattribdata"), \n            this._baseState = this._state, this._state = 51, this._sectionStart = this._index);\n        }, Tokenizer.prototype._stateBeforeDeclaration = function(c) {\n            this._state = "[" === c ? 22 : "-" === c ? 18 : 16;\n       }, Tokenizer.prototype._stateInDeclaration = function(c) {\n            ">" === c && (this._cbs.ondeclaration(this._getSection), this._state = 1, this._sectionStart = this._index + 1);\n        }, Tokenizer.prototype._stateInProcessingInstruction = function(c) {\n            ">" === c && (this._cbs.onprocessinginstruction(this._getSection), this._state = 1, \n            this._sectionStart = this._index + 1);\n        }, Tokenizer.prototype._stateBeforeComment = function(c) {\n            "-" === c ? (this._state = 19, this._sectionStart = this._index + 1) : this._state = 16;\n       }, Tokenizer.prototype._stateInComment = function(c) {\n            "-" === c && (this._state = 20);\n        }, Tokenizer.prototype._stateAfterComment1 = function(c) {\n            this._state = "-" === c ? 21 : 19;\n       }, Tokenizer.prototype._stateAfterComment2 = function(c) {\n            ">" === c ? (this._cbs.oncomment(this._buffer.substring(this._sectionStart, this._index - 2)), \n           this._state = 1, this._sectionStart = this._index + 1) : "-" !== c && (this._state = 19);\n        }, Tokenizer.prototype._stateBeforeCdata6 = function(c) {\n            "[" === c ? (this._state = 28, this._sectionStart = this._index + 1) : (this._state = 16, \n           this._index--);\n        }, Tokenizer.prototype._stateInCdata = function(c) {\n            "]" === c && (this._state = 29);\n        }, Tokenizer.prototype._stateAfterCdata1 = function(c) {\n            this._state = "]" === c ? 30 : 28;\n       }, Tokenizer.prototype._stateAfterCdata2 = function(c) {\n            ">" === c ? (this._cbs.oncdata(this._buffer.substring(this._sectionStart, this._index - 2)), \n           this._state = 1, this._sectionStart = this._index + 1) : "]" !== c && (this._state = 28);\n        }, Tokenizer.prototype._stateBeforeSpecial = function(c) {\n            "c" === c || "C" === c ? this._state = 33 : "t" === c || "T" === c ? this._state = 43 : (this._state = 3, \n           this._index--);\n        }, Tokenizer.prototype._stateBeforeSpecialEnd = function(c) {\n            2 !== this._special || "c" !== c && "C" !== c ? 3 !== this._special || "t" !== c && "T" !== c ? this._state = 1 : this._state = 47 : this._state = 38;\n       }, Tokenizer.prototype._stateBeforeScript5 = function(c) {\n            ("/" === c || ">" === c || whitespace(c)) && (this._special = 2), this._state = 3, \n            this._index--;\n        }, Tokenizer.prototype._stateAfterScript5 = function(c) {\n            ">" === c || whitespace(c) ? (this._special = 1, this._state = 6, this._sectionStart = this._index - 6, \n           this._index--) : this._state = 1;\n        }, Tokenizer.prototype._stateBeforeStyle4 = function(c) {\n            ("/" === c || ">" === c || whitespace(c)) && (this._special = 3), this._state = 3, \n            this._index--;\n        }, Tokenizer.prototype._stateAfterStyle4 = function(c) {\n            ">" === c || whitespace(c) ? (this._special = 1, this._state = 6, this._sectionStart = this._index - 5, \n           this._index--) : this._state = 1;\n        }, Tokenizer.prototype._parseNamedEntityStrict = function {\n            if (this._sectionStart + 1 < this._index) {\n                var entity = this._buffer.substring(this._sectionStart + 1, this._index), map = this._xmlMode ? xml_json_1.default : entities_json_1.default;\n               Object.prototype.hasOwnProperty.call(map, entity) && (this._emitPartial(map[entity]), \n                this._sectionStart = this._index + 1);\n            }\n        }, Tokenizer.prototype._parseLegacyEntity = function {\n            var start = this._sectionStart + 1, limit = this._index - start;\n            for (limit > 6 && (limit = 6); limit >= 2; ) {\n                var entity = this._buffer.substr(start, limit);\n                if (Object.prototype.hasOwnProperty.call(legacy_json_1.default, entity)) return this._emitPartial(legacy_json_1.default[entity]), \n                void (this._sectionStart += limit + 1);\n                limit--;\n            }\n        }, Tokenizer.prototype._stateInNamedEntity = function(c) {\n            ";" === c ? (this._parseNamedEntityStrict, this._sectionStart + 1 < this._index && !this._xmlMode && this._parseLegacyEntity, \n           this._state = this._baseState) : (c < "a" || c > "z") && (c < "A" || c > "Z") && (c < "0" || c > "9") && (this._xmlMode || this._sectionStart + 1 === this._index || (1 !== this._baseState ? "=" !== c && this._parseNamedEntityStrict : this._parseLegacyEntity), \n           this._state = this._baseState, this._index--);\n        }, Tokenizer.prototype._decodeNumericEntity = function(offset, base) {\n            var sectionStart = this._sectionStart + offset;\n            if (sectionStart !== this._index) {\n                var entity = this._buffer.substring(sectionStart, this._index), parsed = parseInt(entity, base);\n                this._emitPartial(decode_codepoint_1.default(parsed)), this._sectionStart = this._index;\n            } else this._sectionStart--;\n            this._state = this._baseState;\n        }, Tokenizer.prototype._stateInNumericEntity = function(c) {\n            ";" === c ? (this._decodeNumericEntity(2, 10), this._sectionStart++) : (c < "0" || c > "9") && (this._xmlMode ? this._state = this._baseState : this._decodeNumericEntity(2, 10), \n           this._index--);\n        }, Tokenizer.prototype._stateInHexEntity = function(c) {\n            ";" === c ? (this._decodeNumericEntity(3, 16), this._sectionStart++) : (c < "a" || c > "f") && (c < "A" || c > "F") && (c < "0" || c > "9") && (this._xmlMode ? this._state = this._baseState : this._decodeNumericEntity(3, 16), \n           this._index--);\n        }, Tokenizer.prototype._cleanup = function {\n            this._sectionStart < 0 ? (this._buffer = "", this._bufferOffset += this._index, \n           this._index = 0) : this._running && (1 === this._state ? (this._sectionStart !== this._index && this._cbs.ontext(this._buffer.substr(this._sectionStart)), \n            this._buffer = "", this._bufferOffset += this._index, this._index = 0) : this._sectionStart === this._index ? (this._buffer = "", \n            this._bufferOffset += this._index, this._index = 0) : (this._buffer = this._buffer.substr(this._sectionStart), \n            this._index -= this._sectionStart, this._bufferOffset += this._sectionStart), this._sectionStart = 0);\n        }, Tokenizer.prototype.write = function(chunk) {\n            this._ended && this._cbs.onerror(Error(".write after done!")), this._buffer += chunk, \n            this._parse;\n        }, Tokenizer.prototype._parse = function {\n            for (this._index < this._buffer.length && this._running; ) {\n                var c = this._buffer.charAt(this._index);\n                1 === this._state ? this._stateText(c) : 12 === this._state ? this._stateInAttributeValueDoubleQuotes(c) : 9 === this._state ? this._stateInAttributeName(c) : 19 === this._state ? this._stateInComment(c) : 8 === this._state ? this._stateBeforeAttributeName(c) : 3 === this._state ? this._stateInTagName(c) : 6 === this._state ? this._stateInClosingTagName(c) : 2 === this._state ? this._stateBeforeTagName(c) : 10 === this._state ? this._stateAfterAttributeName(c) : 13 === this._state ? this._stateInAttributeValueSingleQuotes(c) : 11 === this._state ? this._stateBeforeAttributeValue(c) : 5 === this._state ? this._stateBeforeClosingTagName(c) : 7 === this._state ? this._stateAfterClosingTagName(c) : 31 === this._state ? this._stateBeforeSpecial(c) : 20 === this._state ? this._stateAfterComment1(c) : 14 === this._state ? this._stateInAttributeValueNoQuotes(c) : 4 === this._state ? this._stateInSelfClosingTag(c) : 16 === this._state ? this._stateInDeclaration(c) : 15 === this._state ? this._stateBeforeDeclaration(c) : 21 === this._state ? this._stateAfterComment2(c) : 18 === this._state ? this._stateBeforeComment(c) : 32 === this._state ? this._stateBeforeSpecialEnd(c) : 38 === this._state ? stateAfterScript1(this, c) : 39 === this._state ? stateAfterScript2(this, c) : 40 === this._state ? stateAfterScript3(this, c) : 33 === this._state ? stateBeforeScript1(this, c) : 34 === this._state ? stateBeforeScript2(this, c) : 35 === this._state ? stateBeforeScript3(this, c) : 36 === this._state ? stateBeforeScript4(this, c) : 37 === this._state ? this._stateBeforeScript5(c) : 41 === this._state ? stateAfterScript4(this, c) : 42 === this._state ? this._stateAfterScript5(c) : 43 === this._state ? stateBeforeStyle1(this, c) : 28 === this._state ? this._stateInCdata(c) : 44 === this._state ? stateBeforeStyle2(this, c) : 45 === this._state ? stateBeforeStyle3(this, c) : 46 === this._state ? this._stateBeforeStyle4(c) : 47 === this._state ? stateAfterStyle1(this, c) : 48 === this._state ? stateAfterStyle2(this, c) : 49 === this._state ? stateAfterStyle3(this, c) : 50 === this._state ? this._stateAfterStyle4(c) : 17 === this._state ? this._stateInProcessingInstruction(c) : 53 === this._state ? this._stateInNamedEntity(c) : 22 === this._state ? stateBeforeCdata1(this, c) : 51 === this._state ? stateBeforeEntity(this, c) : 23 === this._state ? stateBeforeCdata2(this, c) : 24 === this._state ? stateBeforeCdata3(this, c) : 29 === this._state ? this._stateAfterCdata1(c) : 30 === this._state ? this._stateAfterCdata2(c) : 25 === this._state ? stateBeforeCdata4(this, c) : 26 === this._state ? stateBeforeCdata5(this, c) : 27 === this._state ? this._stateBeforeCdata6(c) : 55 === this._state ? this._stateInHexEntity(c) : 54 === this._state ? this._stateInNumericEntity(c) : 52 === this._state ? stateBeforeNumericEntity(this, c) : this._cbs.onerror(Error("unknown _state"), this._state), \n               this._index++;\n            }\n            this._cleanup;\n        }, Tokenizer.prototype.pause = function {\n            this._running = !1;\n        }, Tokenizer.prototype.resume = function {\n            this._running = !0, this._index < this._buffer.length && this._parse, this._ended && this._finish;\n        }, Tokenizer.prototype.end = function(chunk) {\n            this._ended && this._cbs.onerror(Error(".end after done!")), chunk && this.write(chunk), \n            this._ended = !0, this._running && this._finish;\n        }, Tokenizer.prototype._finish = function {\n            this._sectionStart < this._index && this._handleTrailingData, this._cbs.onend;\n        }, Tokenizer.prototype._handleTrailingData = function {\n            var data = this._buffer.substr(this._sectionStart);\n            28 === this._state || 29 === this._state || 30 === this._state ? this._cbs.oncdata(data) : 19 === this._state || 20 === this._state || 21 === this._state ? this._cbs.oncomment(data) : 53 !== this._state || this._xmlMode ? 54 !== this._state || this._xmlMode ? 55 !== this._state || this._xmlMode ? 3 !== this._state && 8 !== this._state && 11 !== this._state && 10 !== this._state && 9 !== this._state && 13 !== this._state && 12 !== this._state && 14 !== this._state && 6 !== this._state && this._cbs.ontext(data) : (this._decodeNumericEntity(3, 16), \n           this._sectionStart < this._index && (this._state = this._baseState, this._handleTrailingData)) : (this._decodeNumericEntity(2, 10), \n            this._sectionStart < this._index && (this._state = this._baseState, this._handleTrailingData)) : (this._parseLegacyEntity, \n            this._sectionStart < this._index && (this._state = this._baseState, this._handleTrailingData));\n        }, Tokenizer.prototype.getAbsoluteIndex = function {\n            return this._bufferOffset + this._index;\n        }, Tokenizer.prototype._getSection = function {\n            return this._buffer.substring(this._sectionStart, this._index);\n        }, Tokenizer.prototype._emitToken = function(name) {\n            this._cbs[name](this._getSection), this._sectionStart = -1;\n        }, Tokenizer.prototype._emitPartial = function(value) {\n            1 !== this._baseState ? this._cbs.onattribdata(value) : this._cbs.ontext(value);\n       }, Tokenizer;\n    };\n    exports.default = Tokenizer;\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    var __importDefault = this && this.__importDefault || function(mod) {\n        return mod && mod.__esModule ? mod : {\n           default: mod\n        };\n    };\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    });\n    var decode_json_1 = __importDefault(__webpack_require__(30));\n    exports.default = function(codePoint) {\n        if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) return "\\ufffd";\n        codePoint in decode_json_1.default && (codePoint = decode_json_1.default[codePoint]);\n        var output = "";\n        return codePoint > 65535 && (codePoint -= 65536, output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296), \n        codePoint = 56320 | 1023 & codePoint), output += String.fromCharCode(codePoint);\n    };\n}, function(module) {\n    module.exports = JSON.parse(\'{"Aacute":"\\xc1","aacute":"\\xe1","Acirc":"\\xc2","acirc":"\\xe2","acute":"\\xb4","AElig":"\\xc6","aelig":"\\xe6","Agrave":"\\xc0","agrave":"\\xe0","amp":"&","AMP":"&","Aring":"\\xc5","aring":"\\xe5","Atilde":"\\xc3","atilde":"\\xe3","Auml":"\\xc4","auml":"\\xe4","brvbar":"\\xa6","Ccedil":"\\xc7","ccedil":"\\xe7","cedil":"\\xb8","cent":"\\xa2","copy":"\\xa9","COPY":"\\xa9","curren":"\\xa4","deg":"\\xb0","divide":"\\xf7","Eacute":"\\xc9","eacute":"\\xe9","Ecirc":"\\xca","ecirc":"\\xea","Egrave":"\\xc8","egrave":"\\xe8","ETH":"\\xd0","eth":"\\xf0","Euml":"\\xcb","euml":"\\xeb","frac12":"\\xbd","frac14":"\\xbc","frac34":"\\xbe","gt":">","GT":">","Iacute":"\\xcd","iacute":"\\xed","Icirc":"\\xce","icirc":"\\xee","iexcl":"\\xa1","Igrave":"\\xcc","igrave":"\\xec","iquest":"\\xbf","Iuml":"\\xcf","iuml":"\\xef","laquo":"\\xab","lt":"<","LT":"<","macr":"\\xaf","micro":"\\xb5","middot":"\\xb7","nbsp":"\\xa0","not":"\\xac","Ntilde":"\\xd1","ntilde":"\\xf1","Oacute":"\\xd3","oacute":"\\xf3","Ocirc":"\\xd4","ocirc":"\\xf4","Ograve":"\\xd2","ograve":"\\xf2","ordf":"\\xaa","ordm":"\\xba","Oslash":"\\xd8","oslash":"\\xf8","Otilde":"\\xd5","otilde":"\\xf5","Ouml":"\\xd6","ouml":"\\xf6","para":"\\xb6","plusmn":"\\xb1","pound":"\\xa3","quot":"\\\\"","QUOT":"\\\\"","raquo":"\\xbb","reg":"\\xae","REG":"\\xae","sect":"\\xa7","shy":"\\xad","sup1":"\\xb9","sup2":"\\xb2","sup3":"\\xb3","szlig":"\\xdf","THORN":"\\xde","thorn":"\\xfe","times":"\\xd7","Uacute":"\\xda","uacute":"\\xfa","Ucirc":"\\xdb","ucirc":"\\xfb","Ugrave":"\\xd9","ugrave":"\\xf9","uml":"\\xa8","Uuml":"\\xdc","uuml":"\\xfc","Yacute":"\\xdd","yacute":"\\xfd","yen":"\\xa5","yuml":"\\xff"}\');\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    });\n    var node_1 = __webpack_require__(32);\n    exports.Node = node_1.Node, exports.Element = node_1.Element, exports.DataNode = node_1.DataNode, \n    exports.NodeWithChildren = node_1.NodeWithChildren;\n    var reWhitespace = /\\s+/g, defaultOpts = {\n        normalizeWhitespace: !1,\n        withStartIndices: !1,\n        withEndIndices: !1\n    }, DomHandler = function {\n        function DomHandler(callback, options, elementCB) {\n            this.dom = [], this._done = !1, this._tagStack = [], this._lastNode = null, this._parser = null, \n            "function" == typeof options && (elementCB = options, options = defaultOpts), "object" == typeof callback && (options = callback, \n            callback = void 0), this._callback = callback || null, this._options = options || defaultOpts, \n            this._elementCB = elementCB || null;\n        }\n        return DomHandler.prototype.onparserinit = function(parser) {\n            this._parser = parser;\n        }, DomHandler.prototype.onreset = function {\n            this.dom = [], this._done = !1, this._tagStack = [], this._lastNode = null, this._parser = this._parser || null;\n        }, DomHandler.prototype.onend = function {\n            this._done || (this._done = !0, this._parser = null, this.handleCallback(null));\n        }, DomHandler.prototype.onerror = function(error) {\n            this.handleCallback(error);\n        }, DomHandler.prototype.onclosetag = function {\n            this._lastNode = null;\n            var elem = this._tagStack.pop;\n            elem && this._parser && (this._options.withEndIndices && (elem.endIndex = this._parser.endIndex), \n            this._elementCB && this._elementCB(elem));\n        }, DomHandler.prototype.onopentag = function(name, attribs) {\n            var element = new node_1.Element(name, attribs);\n            this.addNode(element), this._tagStack.push(element);\n        }, DomHandler.prototype.ontext = function(data) {\n            var normalize = this._options.normalizeWhitespace, _lastNode = this._lastNode;\n            if (_lastNode && "text" === _lastNode.type) normalize ? _lastNode.data = (_lastNode.data + data).replace(reWhitespace, " ") : _lastNode.data += data; else {\n               normalize && (data = data.replace(reWhitespace, " "));\n                var node = new node_1.DataNode("text", data);\n                this.addNode(node), this._lastNode = node;\n            }\n        }, DomHandler.prototype.oncomment = function(data) {\n            if (this._lastNode && "comment" === this._lastNode.type) this._lastNode.data += data; else {\n                var node = new node_1.DataNode("comment", data);\n                this.addNode(node), this._lastNode = node;\n            }\n        }, DomHandler.prototype.oncommentend = function {\n            this._lastNode = null;\n        }, DomHandler.prototype.oncdatastart = function {\n            var text = new node_1.DataNode("text", ""), node = new node_1.NodeWithChildren("cdata", [ text ]);\n            this.addNode(node), text.parent = node, this._lastNode = text;\n        }, DomHandler.prototype.oncdataend = function {\n            this._lastNode = null;\n        }, DomHandler.prototype.onprocessinginstruction = function(name, data) {\n            var node = new node_1.ProcessingInstruction(name, data);\n            this.addNode(node);\n        }, DomHandler.prototype.handleCallback = function(error) {\n            if ("function" == typeof this._callback) this._callback(error, this.dom); else if (error) throw error;\n        }, DomHandler.prototype.addNode = function(node) {\n            var parent = this._tagStack[this._tagStack.length - 1], siblings = parent ? parent.children : this.dom, previousSibling = siblings[siblings.length - 1];\n           this._parser && (this._options.withStartIndices && (node.startIndex = this._parser.startIndex), \n            this._options.withEndIndices && (node.endIndex = this._parser.endIndex)), siblings.push(node), \n            previousSibling && (node.prev = previousSibling, previousSibling.next = node), parent && (node.parent = parent), \n            this._lastNode = null;\n        }, DomHandler.prototype.addDataNode = function(node) {\n            this.addNode(node), this._lastNode = node;\n        }, DomHandler;\n    };\n    exports.DomHandler = DomHandler, exports.default = DomHandler;\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    var extendStatics, __extends = this && this.__extends || (extendStatics = function(d, b) {\n        return (extendStatics = Object.setPrototypeOf || {\n            __proto__: []\n        } instanceof Array && function(d, b) {\n            d.__proto__ = b;\n        } || function(d, b) {\n            for (var p in b) b.hasOwnProperty(p) && (d[p] = b[p]);\n        })(d, b);\n    }, function(d, b) {\n        function __ {\n            this.constructor = d;\n        }\n        extendStatics(d, b), d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, \n       new __);\n    }), __importDefault = this && this.__importDefault || function(mod) {\n        return mod && mod.__esModule ? mod : {\n            default: mod\n        };\n    }, __importStar = this && this.__importStar || function(mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (null != mod) for (var k in mod) Object.hasOwnProperty.call(mod, k) && (result[k] = mod[k]);\n        return result.default = mod, result;\n    };\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    });\n    var domhandler_1 = __importDefault(__webpack_require__(16)), DomUtils = __importStar(__webpack_require__(18)), Parser_1 = __webpack_require__(12), FeedHandler = function(_super) {\n        function FeedHandler(callback, options) {\n            return "object" == typeof callback && null !== callback && (options = callback = void 0), \n            _super.call(this, callback, options) || this;\n        }\n        return __extends(FeedHandler, _super), FeedHandler.prototype.onend = function {\n            var feed = {}, feedRoot = getOneElement(isValidFeed, this.dom);\n            if (feedRoot) if ("feed" === feedRoot.name) {\n                var childs = feedRoot.children;\n                feed.type = "atom", addConditionally(feed, "id", "id", childs), addConditionally(feed, "title", "title", childs);\n                var href = getAttribute("href", getOneElement("link", childs));\n                href && (feed.link = href), addConditionally(feed, "description", "subtitle", childs), \n                (updated = fetch("updated", childs)) && (feed.updated = new Date(updated)), addConditionally(feed, "author", "email", childs, !0), \n                feed.items = getElements("entry", childs).map((function(item) {\n                    var entry = {}, children = item.children;\n                    addConditionally(entry, "id", "id", children), addConditionally(entry, "title", "title", children);\n                    var href = getAttribute("href", getOneElement("link", children));\n                    href && (entry.link = href);\n                    var description = fetch("summary", children) || fetch("content", children);\n                    description && (entry.description = description);\n                    var pubDate = fetch("updated", children);\n                    return pubDate && (entry.pubDate = new Date(pubDate)), entry;\n                }));\n            } else {\n                var updated;\n                childs = getOneElement("channel", feedRoot.children).children;\n                feed.type = feedRoot.name.substr(0, 3), feed.id = "", addConditionally(feed, "title", "title", childs), \n                addConditionally(feed, "link", "link", childs), addConditionally(feed, "description", "description", childs), \n                (updated = fetch("lastBuildDate", childs)) && (feed.updated = new Date(updated)), \n                addConditionally(feed, "author", "managingEditor", childs, !0), feed.items = getElements("item", feedRoot.children).map((function(item) {\n                    var entry = {}, children = item.children;\n                    addConditionally(entry, "id", "guid", children), addConditionally(entry, "title", "title", children), \n                    addConditionally(entry, "link", "link", children), addConditionally(entry, "description", "description", children);\n                    var pubDate = fetch("pubDate", children);\n                    return pubDate && (entry.pubDate = new Date(pubDate)), entry;\n                }));\n            }\n            this.feed = feed, this.handleCallback(feedRoot ? null : Error("couldn\'t find root of feed"));\n       }, FeedHandler;\n    }(domhandler_1.default);\n    function getElements(what, where) {\n        return DomUtils.getElementsByTagName(what, where, !0);\n    }\n    function getOneElement(what, where) {\n        return DomUtils.getElementsByTagName(what, where, !0, 1)[0];\n    }\n    function fetch(what, where, recurse) {\n        return void 0 === recurse && (recurse = !1), DomUtils.getText(DomUtils.getElementsByTagName(what, where, recurse, 1)).trim;\n    }\n    function getAttribute(name, elem) {\n        return elem ? elem.attribs[name] : null;\n    }\n    function addConditionally(obj, prop, what, where, recurse) {\n        void 0 === recurse && (recurse = !1);\n        var tmp = fetch(what, where, recurse);\n        tmp && (obj[prop] = tmp);\n    }\n    function isValidFeed(value) {\n        return "rss" === value || "feed" === value || "rdf:RDF" === value;\n    }\n    exports.FeedHandler = FeedHandler;\n    var defaultOptions = {\n        xmlMode: !0\n    };\n    exports.parseFeed = function(feed, options) {\n        void 0 === options && (options = defaultOptions);\n        var handler = new FeedHandler(options);\n        return new Parser_1.Parser(handler, options).end(feed), handler.feed;\n    };\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    function __export(m) {\n        for (var p in m) exports.hasOwnProperty(p) || (exports[p] = m[p]);\n    }\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    }), __export(__webpack_require__(33)), __export(__webpack_require__(37)), __export(__webpack_require__(38)), \n    __export(__webpack_require__(21)), __export(__webpack_require__(39)), __export(__webpack_require__(40)), \n    __export(__webpack_require__(8));\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    var __importDefault = this && this.__importDefault || function(mod) {\n        return mod && mod.__esModule ? mod : {\n           default: mod\n        };\n    };\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    });\n    var entities_json_1 = __importDefault(__webpack_require__(9)), legacy_json_1 = __importDefault(__webpack_require__(15)), xml_json_1 = __importDefault(__webpack_require__(10)), decode_codepoint_1 = __importDefault(__webpack_require__(14));\n    function getStrictDecoder(map) {\n        var keys = Object.keys(map).join("|"), replace = getReplacer(map), re = new RegExp("&(?:" + (keys += "|#[xX][\\\\da-fA-F]+|#\\\\d+") + ");", "g");\n        return function(str) {\n            return String(str).replace(re, replace);\n        };\n    }\n    exports.decodeXML = getStrictDecoder(xml_json_1.default), exports.decodeHTMLStrict = getStrictDecoder(entities_json_1.default);\n    var sorter = function(a, b) {\n        return a < b ? 1 : -1;\n   };\n    function getReplacer(map) {\n        return function(str) {\n            return "#" === str.charAt(1) ? "X" === str.charAt(2) || "x" === str.charAt(2) ? decode_codepoint_1.default(parseInt(str.substr(3), 16)) : decode_codepoint_1.default(parseInt(str.substr(2), 10)) : map[str.slice(1, -1)];\n       };\n    }\n    exports.decodeHTML = function {\n        for (var legacy = Object.keys(legacy_json_1.default).sort(sorter), keys = Object.keys(entities_json_1.default).sort(sorter), i = 0, j = 0; i < keys.length; i++) legacy[j] === keys[i] ? (keys[i] += ";?", \n       j++) : keys[i] += ";";\n        var re = new RegExp("&(?:" + keys.join("|") + "|#[xX][\\\\da-fA-F]+;?|#\\\\d+;?)", "g"), replace = getReplacer(entities_json_1.default);\n        function replacer(str) {\n            return ";" !== str.substr(-1) && (str += ";"), replace(str);\n        }\n        return function(str) {\n            return String(str).replace(re, replacer);\n        };\n    };\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    var __importDefault = this && this.__importDefault || function(mod) {\n        return mod && mod.__esModule ? mod : {\n           default: mod\n        };\n    };\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    });\n    var inverseXML = getInverseObj(__importDefault(__webpack_require__(10)).default), xmlReplacer = getInverseReplacer(inverseXML);\n    exports.encodeXML = getInverse(inverseXML, xmlReplacer);\n    var inverseHTML = getInverseObj(__importDefault(__webpack_require__(9)).default), htmlReplacer = getInverseReplacer(inverseHTML);\n    function getInverseObj(obj) {\n        return Object.keys(obj).sort.reduce((function(inverse, name) {\n            return inverse[obj[name]] = "&" + name + ";", inverse;\n        }), {});\n    }\n    function getInverseReplacer(inverse) {\n        var single = [], multiple = [];\n        return Object.keys(inverse).forEach((function(k) {\n            return 1 === k.length ? single.push("\\\\" + k) : multiple.push(k);\n       })), multiple.unshift("[" + single.join("") + "]"), new RegExp(multiple.join("|"), "g");\n    }\n    exports.encodeHTML = getInverse(inverseHTML, htmlReplacer);\n    var reNonASCII = /[^\\0-\\x7F]/g, reAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n    function singleCharReplacer(c) {\n        return "&#x" + c.charCodeAt(0).toString(16).toUpperCase + ";";\n    }\n    function astralReplacer(c, _) {\n        return "&#x" + (1024 * (c.charCodeAt(0) - 55296) + c.charCodeAt(1) - 56320 + 65536).toString(16).toUpperCase + ";";\n    }\n    function getInverse(inverse, re) {\n        return function(data) {\n            return data.replace(re, (function(name) {\n                return inverse[name];\n            })).replace(reAstralSymbols, astralReplacer).replace(reNonASCII, singleCharReplacer);\n        };\n    }\n    var reXmlChars = getInverseReplacer(inverseXML);\n    exports.escape = function(data) {\n        return data.replace(reXmlChars, singleCharReplacer).replace(reAstralSymbols, astralReplacer).replace(reNonASCII, singleCharReplacer);\n    };\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    });\n    var tagtypes_1 = __webpack_require__(8);\n    function find(test, elems, recurse, limit) {\n        for (var result = [], i = 0; i < elems.length; i++) {\n            var elem = elems[i];\n            if (test(elem) && (result.push(elem), --limit <= 0)) break;\n            if (recurse && tagtypes_1.hasChildren(elem) && elem.children.length > 0) {\n                var children = find(test, elem.children, recurse, limit);\n                if (result = result.concat(children), (limit -= children.length) <= 0) break;\n            }\n        }\n        return result;\n    }\n    exports.filter = function(test, element, recurse, limit) {\n        return void 0 === recurse && (recurse = !0), void 0 === limit && (limit = 1 / 0), \n        Array.isArray(element) || (element = [ element ]), find(test, element, recurse, limit);\n    }, exports.find = find, exports.findOneChild = function(test, elems) {\n        for (var i = 0; i < elems.length; i++) if (test(elems[i])) return elems[i];\n        return null;\n    }, exports.findOne = function findOne(test, elems, recurse) {\n        void 0 === recurse && (recurse = !0);\n        for (var elem = null, i = 0; i < elems.length && !elem; i++) {\n            var checked = elems[i];\n            tagtypes_1.isTag(checked) && (test(checked) ? elem = checked : recurse && checked.children.length > 0 && (elem = findOne(test, checked.children)));\n       }\n        return elem;\n    }, exports.existsOne = function existsOne(test, elems) {\n        for (var i = 0; i < elems.length; i++) {\n            var checked = elems[i];\n            if (tagtypes_1.isTag(checked) && (test(checked) || checked.children.length > 0 && existsOne(test, checked.children))) return !0;\n        }\n        return !1;\n    }, exports.findAll = function(test, rootElems) {\n        for (var result = [], stack = rootElems.slice; stack.length; ) {\n            var elem = stack.shift;\n            elem && tagtypes_1.isTag(elem) && (elem.children && elem.children.length > 0 && stack.unshift.apply(stack, elem.children), \n            test(elem) && result.push(elem));\n        }\n        return result;\n    };\n}, function(module, __webpack_exports__, __webpack_require__) {\n    "use strict";\n    __webpack_exports__.a = {\n        LETTER_PATTERN: "A-Za-z\\\\u00AA\\\\u00B5\\\\u00BA\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B4\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0AF9\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58-\\\\u0C5A\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D5F-\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F5\\\\u13F8-\\\\u13FD\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16F1-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2183\\\\u2184\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005\\\\u3006\\\\u3031-\\\\u3035\\\\u303B\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FD5\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6E5\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA7AD\\\\uA7B0-\\\\uA7B7\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA8FD\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB65\\\\uAB70-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC",\n        COMMENT_UNDERLAY_FOCUSED_COLOR: "#eaf3ff",\n        COMMENT_UNDERLAY_TARGET_COLOR: "#ffedb8",\n        COMMENT_UNDERLAY_NEW_COLOR: "#e8ffd1",\n        COMMENT_UNDERLAY_OWN_COLOR: "#f7ebff",\n        COMMENT_UNDERLAY_SIDE_MARGIN: 5,\n        HIGHLIGHT_NEW_COMMENTS_INTERVAL: 15,\n        CHECK_FOR_NEW_COMMENTS_INTERVAL: 15,\n        BACKGROUND_CHECK_FOR_NEW_COMMENTS_INTERVAL: 60,\n        SECONDS_IN_A_DAY: 86400,\n        MILLISECONDS_IN_A_MINUTE: 6e4,\n        POPULAR_NOT_INLINE_ELEMENTS: [ "BLOCKQUOTE", "DD", "DIV", "DL", "FORM", "H2", "H3", "H4", "H5", "H6", "HR", "INPUT", "LI", "OL", "P", "PRE", "TABLE", "TBODY", "TR", "TH", "TD", "UL" ],\n        POPULAR_INLINE_ELEMENTS: [ "A", "ABBR", "B", "BIG", "BR", "CITE", "CODE", "EM", "FONT", "I", "IMG", "KBD", "S", "SMALL", "SPAN", "STRIKE", "STRONG", "SUB", "SUP", "TT", "U", "VAR" ],\n        UNHIGHLIGHTABLE_ELEMENTS_CLASSES: [ "mw-empty-elt", "tleft", "tright", "floatleft", "floatright" ],\n        BAD_COMMENT_BEGINNINGS: [ /^\x3c!--[^]*?--\x3e *\\n*/, /^(?:+| ) *\\n*/, /^\\{\\|.*?\\|\\} *\\n*(?=[*:#])/ ],\n        FLOATING_ELEMENTS_SELECTORS: [ ".cd-floating", ".tright", ".floatright", \'*[style*="float:right"]\', \'*[style*="float: right"]\', \'*[style*="float:left"]\', \'*[style*="float: left"]\' ],\n        SIGN_CODE: "".concat("")\n    };\n}, function(module, __webpack_exports__, __webpack_require__) {\n    "use strict";\n    __webpack_exports__.a = {\n        init {\n            this.timerTotal = {}, this.timerStartTimestamps = {}, this.timerRunCount = {}, this.timerAllRunsTotal = {}, \n            this.initCounters, this.array = [], this.object = {};\n        },\n        initCounters {\n            this.counters = "undefined" == typeof Proxy ? {} : new Proxy({}, {\n               get: (obj, prop) => prop in obj ? obj[prop] : 0\n            });\n        },\n        startTimer(label) {\n            this.timerStartTimestamps[label] = Date.now;\n        },\n        stopTimer(label) {\n            if (void 0 === this.timerStartTimestamps[label]) return;\n            void 0 === this.timerTotal[label] && (this.timerTotal[label] = 0);\n            const thisTime = Date.now - this.timerStartTimestamps[label];\n            this.timerTotal[label] += thisTime, delete this.timerStartTimestamps[label], void 0 === this.timerAllRunsTotal[label] && (this.timerAllRunsTotal[label] = 0, \n            this.timerRunCount[label] = 0), this.timerAllRunsTotal[label] += thisTime, this.timerRunCount[label]++;\n        },\n        resetTimer(label) {\n            void 0 !== this.timerStartTimestamps[label] && this.stopTimer(label), delete this.timerTotal[label];\n        },\n        fullResetTimer(label) {\n            this.resetTimer(label), delete this.timerAllRunsTotal[label], delete this.timerRunCount[label];\n        },\n        logAndResetTimer(label) {\n            void 0 !== this.timerStartTimestamps[label] && this.stopTimer(label), void 0 !== this.timerTotal[label] && (console.debug("".concat(label, ": ").concat(this.timerTotal[label])), \n            this.resetTimer(label));\n        },\n        logAndResetEverything(sort) {\n            const timerLabels = Object.keys(this.timerTotal);\n            sort && timerLabels.sort, timerLabels.forEach(label => {\n                this.logAndResetTimer(label);\n            });\n            const counterLabels = Object.keys(this.counters);\n            sort && counterLabels.sort, counterLabels.forEach(label => {\n                console.debug("counter ".concat(label, ": ").concat(this.counters[label]));\n            }), this.initCounters, this.array.length && (console.debug("array: ", this.array), \n            this.array = []), Object.keys(this.object).length && (console.debug("object: ", this.object), \n            this.object = {});\n        },\n        averageTimerTime(label) {\n            if (!this.timerAllRunsTotal[label]) return void console.error("No data for timer ".concat(label));\n            const average = this.timerAllRunsTotal[label] / this.timerRunCount[label];\n            console.debug("".concat(label, ": ").concat(average.toFixed(1), " average for ").concat(this.timerRunCount[label], " runs"));\n        },\n        incrementCounter(label) {\n            this.counters[label]++;\n        }\n    };\n}, function(module, __webpack_exports__, __webpack_require__) {\n    "use strict";\n    __webpack_require__.d(__webpack_exports__, "a", (function {\n        return CommentSkeleton;\n    }));\n    var _babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2), _babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(_babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_0__), _babel_runtime_helpers_classPrivateFieldSet__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7), _babel_runtime_helpers_classPrivateFieldSet__WEBPACK_IMPORTED_MODULE_1___default = __webpack_require__.n(_babel_runtime_helpers_classPrivateFieldSet__WEBPACK_IMPORTED_MODULE_1__), _CdError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3), _cd__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(0);\n    class CommentSkeleton {\n        constructor(parser, signature) {\n            _parser.set(this, {\n                writable: !0,\n                value: void 0\n            }), _cachedSection.set(this, {\n                writable: !0,\n                value: void 0\n            }), _babel_runtime_helpers_classPrivateFieldSet__WEBPACK_IMPORTED_MODULE_1___default(this, _parser, parser);\n            let parts = _babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_0___default(this, _parser).collectParts(signature.element);\n            parts = _babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_0___default(this, _parser).removeNestedParts(parts), \n            parts = _babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_0___default(this, _parser).encloseInlineParts(parts, signature.element), \n            parts = _babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_0___default(this, _parser).filterParts(parts), \n            parts.reverse, parts = _babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_0___default(this, _parser).replaceListsWithItems(parts, signature.element), \n            this.id = _cd__WEBPACK_IMPORTED_MODULE_3__.a.comments.length, this.date = signature.date || null, \n            this.timestamp = signature.timestampText, this.authorName = signature.authorName, \n            this.own = this.authorName === _cd__WEBPACK_IMPORTED_MODULE_3__.a.g.CURRENT_USER_NAME, \n            this.anchor = signature.anchor, this.unsigned = signature.unsigned, this.parts = parts, \n            this.elements = this.parts.map(part => part.node);\n            if (this.highlightables = this.elements.filter(el => !/^H[1-6]$/.test(el.tagName) && !_cd__WEBPACK_IMPORTED_MODULE_3__.a.g.UNHIGHLIGHTABLE_ELEMENTS_CLASSES.some(name => el.classList.contains(name)) && !/float: *(?:left|right)/.test(el.getAttribute("style"))), \n            !this.highlightables.length) throw new _CdError__WEBPACK_IMPORTED_MODULE_2__.a;\n            if (this.addAttributes, this.setLevels, this.parts[0].isHeading ? (this.followsHeading = !0, \n           0 !== this.level && (this.parts.splice(0, 1), this.elements.splice(0, 1))) : this.followsHeading = !0, \n            this.parts[0].isHeading) {\n                this.isOpeningSection = !0;\n                const headingLevelMatch = this.parts[0].node.tagName.match(/^H([1-6])$/);\n                this.openingSectionOfLevel = headingLevelMatch && Number(headingLevelMatch[1]);\n            } else this.isOpeningSection = !1;\n        }\n        addAttributes {\n            this.anchor && !this.elements[0].getAttribute("id") && this.elements[0].setAttribute("id", this.anchor), \n            this.elements[0].classList.add("cd-commentPart-first"), this.elements[this.elements.length - 1].classList.add("cd-commentPart-last"), \n            this.elements.forEach(el => {\n                el.classList.add("cd-commentPart"), el.setAttribute("data-comment-id", String(this.id));\n            });\n        }\n        setLevels {\n            const levelElements = {};\n            levelElements.top = _babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_0___default(this, _parser).getLevelsUpTree(this.highlightables[0]), \n            levelElements.bottom = this.highlightables.length > 1 ? _babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_0___default(this, _parser).getLevelsUpTree(this.highlightables[this.highlightables.length - 1]) : levelElements.top, \n           this.level = Math.min(levelElements.top.length, levelElements.bottom.length);\n            for (let i = 0; i < this.level; i++) levelElements.top[i] && levelElements.top[i].classList.add("cd-commentLevel", "cd-commentLevel-".concat(i + 1)), \n            levelElements.bottom[i] && levelElements.bottom[i] !== levelElements.top[i] && levelElements.bottom[i].classList.add("cd-commentLevel", "cd-commentLevel-".concat(i + 1));\n        }\n        getSection {\n            return _cd__WEBPACK_IMPORTED_MODULE_3__.a.sections.slice.reverse.find(section => section.comments.includes(this)) || null;\n        }\n        get section {\n            return void 0 === _babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_0___default(this, _cachedSection) && _babel_runtime_helpers_classPrivateFieldSet__WEBPACK_IMPORTED_MODULE_1___default(this, _cachedSection, this.getSection), \n            _babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_0___default(this, _cachedSection);\n        }\n        get sourcePage {\n            return this.section ? this.section.sourcePage : _cd__WEBPACK_IMPORTED_MODULE_3__.a.g.CURRENT_PAGE;\n       }\n    }\n    var _parser = new WeakMap, _cachedSection = new WeakMap;\n}, function(module, __webpack_exports__, __webpack_require__) {\n    "use strict";\n    __webpack_require__.d(__webpack_exports__, "a", (function {\n        return SectionSkeleton;\n    }));\n    var _babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2), _babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(_babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_0__), _babel_runtime_helpers_classPrivateFieldSet__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7), _babel_runtime_helpers_classPrivateFieldSet__WEBPACK_IMPORTED_MODULE_1___default = __webpack_require__.n(_babel_runtime_helpers_classPrivateFieldSet__WEBPACK_IMPORTED_MODULE_1__), _CdError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3), _cd__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(0), _treeWalker__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6);\n    class SectionSkeleton {\n        constructor(parser, headingElement) {\n            if (_parser.set(this, {\n                writable: !0,\n                value: void 0\n            }), _babel_runtime_helpers_classPrivateFieldSet__WEBPACK_IMPORTED_MODULE_1___default(this, _parser, parser), \n            this.headlineElement = _babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_0___default(this, _parser).context.getElementByClassName(headingElement, "mw-headline"), \n            !this.headlineElement) throw new _CdError__WEBPACK_IMPORTED_MODULE_2__.a;\n            this.anchor = this.headlineElement.getAttribute("id");\n            const classesToFilter = [ "mw-headline-number", ..._cd__WEBPACK_IMPORTED_MODULE_3__.a.config.foreignElementsInHeadlinesClasses ], nodes = Array.from(this.headlineElement.childNodes).filter(node => node.nodeType !== Node.ELEMENT_NODE || !Array.from(node.classList).some(name => classesToFilter.includes(name)));\n            this.headline = nodes.map(node => node.textContent).join("").trim;\n            const levelMatch = headingElement.tagName.match(/^H([2-6])$/);\n            this.level = levelMatch && Number(levelMatch[1]);\n            const treeWalker = new _treeWalker__WEBPACK_IMPORTED_MODULE_4__.c(_cd__WEBPACK_IMPORTED_MODULE_3__.a.g.rootElement, node => ![ "STYLE", "LINK" ].includes(node.tagName) && !node.classList.contains("cd-sectionButtonContainer"), !0, headingElement), elements = [ headingElement ], levelRegexp = new RegExp("^H[1-".concat(this.level, "]$"));\n            let firstCommentPart, lastCommentPart, hasSubsections = !1;\n            for (treeWalker.nextSibling && !levelRegexp.test(treeWalker.currentNode.tagName); ) void 0 === this.lastElementInFirstChunk && /^H[3-6]$/.test(treeWalker.currentNode.tagName) && (hasSubsections = !0, \n            this.lastElementInFirstChunk = elements[elements.length - 1]), elements.push(treeWalker.currentNode);\n            if (this.lastElementInFirstChunk = this.lastElementInFirstChunk || elements[elements.length - 1], \n            !elements.length) throw new _CdError__WEBPACK_IMPORTED_MODULE_2__.a;\n            if (elements[1]) {\n                for (treeWalker.currentNode = elements[elements.length - 1]; treeWalker.lastChild; ) ;\n                const lastNode = treeWalker.currentNode;\n                treeWalker.currentNode = elements[1];\n                do {\n                    treeWalker.currentNode.classList.contains("cd-commentPart") && (firstCommentPart = treeWalker.currentNode);\n                } while (!firstCommentPart && treeWalker.currentNode !== lastNode && treeWalker.nextNode);\n                treeWalker.currentNode = lastNode;\n                do {\n                    treeWalker.currentNode.classList.contains("cd-commentPart") && (lastCommentPart = treeWalker.currentNode);\n                } while (!lastCommentPart && treeWalker.currentNode !== elements[1] && treeWalker.previousNode);\n            }\n            if (firstCommentPart) {\n                const firstCommentPartId = Number(firstCommentPart.getAttribute("data-comment-id")), lastCommentPartId = Number(lastCommentPart.getAttribute("data-comment-id"));\n                if (this.comments = _cd__WEBPACK_IMPORTED_MODULE_3__.a.comments.slice(firstCommentPartId, lastCommentPartId + 1), \n                hasSubsections) {\n                    const endIndex = this.comments.findIndex(comment => !(_babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_0___default(this, _parser).context.follows(this.lastElementInFirstChunk, comment.elements[0]) || this.lastElementInFirstChunk.contains(comment.elements[0])));\n                    this.commentsInFirstChunk = this.comments.slice(0, endIndex || 0);\n                }\n            }\n            this.id = _cd__WEBPACK_IMPORTED_MODULE_3__.a.sections.length, this.comments = this.comments || [], \n            this.commentsInFirstChunk = this.commentsInFirstChunk || this.comments, this.elements = elements;\n        }\n    }\n    var _parser = new WeakMap;\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    module.exports = function(string, quoteStyle) {\n        var getHtmlTranslationTable = __webpack_require__(44), tmpStr = "", entity = "", symbol = "";\n        tmpStr = string.toString;\n        var hashMap = getHtmlTranslationTable("HTML_ENTITIES", quoteStyle);\n        if (!1 === hashMap) return !1;\n        for (symbol in delete hashMap["&"], hashMap["&"] = "&amp;", hashMap) entity = hashMap[symbol], \n        tmpStr = tmpStr.split(entity).join(symbol);\n        return tmpStr = tmpStr.split("&#039;").join("\'");\n    };\n}, function(module, __webpack_exports__, __webpack_require__) {\n    "use strict";\n    __webpack_require__.d(__webpack_exports__, "a", (function {\n        return Parser;\n    }));\n    var _cd__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0), _treeWalker__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6), _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1), _timestamp__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4);\n    function getUserNameFromLink(element) {\n        const href = element.getAttribute("href");\n        if (!href) return null;\n        const pageName = function(url) {\n            if ("undefined" == typeof mw || "/wiki/$1" === mw.config.get("wgArticlePath") && "/w/index.php" === mw.config.get("wgScript")) {\n                url = url.replace(/^(?:https?:)?\\/\\/[^/]+/, "").replace(/^\\/wiki\\//, "").replace(/^\\/w\\/index.php\\?title=/, "").replace(/&action=edit.*/, "").replace(/#.*/, "").replace(/_/g, " ");\n                try {\n                    url = decodeURIComponent(url);\n                } catch (e) {\n                    return null;\n                }\n                return url;\n            }\n            {\n                const uri = new mw.Uri(url), match = uri.path.match(_cd__WEBPACK_IMPORTED_MODULE_0__.a.g.ARTICLE_PATH_REGEXP);\n                if (match) try {\n                    return decodeURIComponent(match[1]);\n                } catch (e) {\n                    return null;\n                }\n                return uri.query.title ? uri.query.title : null;\n           }\n        }(href);\n        if (!pageName) return null;\n        let userName;\n        const match = pageName.match(_cd__WEBPACK_IMPORTED_MODULE_0__.a.g.USER_NAMESPACES_REGEXP);\n        return match ? userName = match[1] : pageName.startsWith(_cd__WEBPACK_IMPORTED_MODULE_0__.a.g.CONTRIBS_PAGE + "/") && (userName = pageName.replace(_cd__WEBPACK_IMPORTED_MODULE_0__.a.g.CONTRIBS_PAGE_LINK_REGEXP, "")), \n       userName && Object(_util__WEBPACK_IMPORTED_MODULE_2__.b)(Object(_util__WEBPACK_IMPORTED_MODULE_2__.g)(userName.replace(/\\/.*/, ""))).trim;\n    }\n    class Parser {\n        constructor(context) {\n            this.context = context;\n        }\n        createComment(signature) {\n            return new this.context.CommentClass(this, signature);\n        }\n        createSection(headingElement, watchedSectionsRequest) {\n            return new this.context.SectionClass(this, headingElement, watchedSectionsRequest);\n        }\n        findTimestamps {\n            const blocksToExclude = [ ...Array.from(_cd__WEBPACK_IMPORTED_MODULE_0__.a.g.rootElement.getElementsByTagName("blockquote")), ...Object(_util__WEBPACK_IMPORTED_MODULE_2__.c)(_cd__WEBPACK_IMPORTED_MODULE_0__.a.config.elementsToExcludeClasses.map(className => Array.from(_cd__WEBPACK_IMPORTED_MODULE_0__.a.g.rootElement.getElementsByClassName(className)))) ];\n            return this.context.getAllTextNodes.map(node => {\n                const text = node.textContent, {date: date, match: match} = Object(_timestamp__WEBPACK_IMPORTED_MODULE_3__.b)(text) || {};\n                if (date && !blocksToExclude.some(block => block.contains(node))) return {\n                    node: node,\n                    date: date,\n                    match: match\n                };\n            }).filter(_util__WEBPACK_IMPORTED_MODULE_2__.a).map(finding => {\n                const {node: node, match: match, date: date} = finding, element = this.context.document.createElement("span");\n                element.classList.add("cd-timestamp");\n                const textNode = this.context.document.createTextNode(match[2]);\n                element.appendChild(textNode);\n                const remainedText = node.textContent.slice(match.index + match[0].length);\n                let afterNode;\n                return remainedText && (afterNode = this.context.document.createTextNode(remainedText)), \n                node.textContent = node.textContent.slice(0, match.index + match[1].length), node.parentNode.insertBefore(element, node.nextSibling), \n                afterNode && node.parentNode.insertBefore(afterNode, element.nextSibling), {\n                    element: element,\n                    date: date\n                };\n            });\n        }\n        findSignatures(timestamps) {\n            const signatures = timestamps.map(timestamp => {\n                const date = timestamp.date, timestampElement = timestamp.element, timestampText = timestamp.element.textContent;\n                let unsignedElement, closestNotInlineAncestor;\n                for (let el = timestamp.element; !closestNotInlineAncestor; el = el.parentNode) Object(_util__WEBPACK_IMPORTED_MODULE_2__.e)(el) ? el.classList.contains(_cd__WEBPACK_IMPORTED_MODULE_0__.a.config.unsignedClass) && (unsignedElement = el) : closestNotInlineAncestor = el;\n               const unsigned = Boolean(unsignedElement);\n                if (closestNotInlineAncestor) {\n                    const cniaChildren = Array.from(closestNotInlineAncestor[this.context.childElementsProperty]), treeWalker = new _treeWalker__WEBPACK_IMPORTED_MODULE_1__.b(timestamp.element);\n                    let found = !1;\n                    for (!found && treeWalker.nextNode && closestNotInlineAncestor.contains(treeWalker.currentNode) && (!cniaChildren.includes(treeWalker.currentNode) || Object(_util__WEBPACK_IMPORTED_MODULE_2__.e)(treeWalker.currentNode)); ) treeWalker.currentNode.classList.contains("cd-timestamp") && (found = !0);\n                    if (found) return;\n                }\n                const startElement = unsignedElement || timestamp.element, treeWalker = new _treeWalker__WEBPACK_IMPORTED_MODULE_1__.a(startElement);\n                let authorName, firstSignatureElement, length = 0;\n                const signatureNodes = [];\n                unsignedElement ? firstSignatureElement = startElement : (signatureNodes.push(startElement), \n               treeWalker.previousSibling);\n                do {\n                    const node = treeWalker.currentNode;\n                    if (length += node.textContent.length, node.nodeType === Node.ELEMENT_NODE) {\n                        if (node.classList.contains("cd-timestamp")) break;\n                        let hasAuthorLinks = !1;\n                        if ("A" === node.tagName) {\n                            const userName = getUserNameFromLink(node);\n                            userName && (authorName || (authorName = userName), authorName === userName && (hasAuthorLinks = !0));\n                        } else {\n                            Array.from(node.getElementsByTagName("a")).some(link => {\n                                const userName = getUserNameFromLink(link);\n                                if (userName && (authorName || (authorName = userName), authorName === userName)) return hasAuthorLinks = !0, \n                                !0;\n                            });\n                        }\n                        hasAuthorLinks && (firstSignatureElement = node);\n                    }\n                    signatureNodes.push(node);\n                } while (treeWalker.previousSibling && length < _cd__WEBPACK_IMPORTED_MODULE_0__.a.config.signatureScanLimit);\n                const firstSignatureElementIndex = signatureNodes.indexOf(firstSignatureElement);\n                signatureNodes.splice(-1 === firstSignatureElementIndex ? 1 : firstSignatureElementIndex + 1);\n               const anchor = Object(_timestamp__WEBPACK_IMPORTED_MODULE_3__.a)(timestamp.date, authorName, !0);\n                Object(_timestamp__WEBPACK_IMPORTED_MODULE_3__.c)(anchor);\n                const signatureContainer = startElement.parentNode, startElementNextSibling = startElement.nextSibling, element = this.context.document.createElement("span");\n                if (element.classList.add("cd-signature"), signatureNodes.reverse.forEach(node => {\n                    element.appendChild(node);\n                }), signatureContainer.insertBefore(element, startElementNextSibling), authorName) return {\n                    element: element,\n                    timestampElement: timestampElement,\n                    timestampText: timestampText,\n                    date: date,\n                    authorName: authorName,\n                    anchor: anchor,\n                    unsigned: unsigned\n                };\n            }).filter(_util__WEBPACK_IMPORTED_MODULE_2__.a);\n            return _cd__WEBPACK_IMPORTED_MODULE_0__.a.config.unsignedClass && Array.from(_cd__WEBPACK_IMPORTED_MODULE_0__.a.g.rootElement.getElementsByClassName(_cd__WEBPACK_IMPORTED_MODULE_0__.a.config.unsignedClass)).forEach(element => {\n                if (!this.context.getElementByClassName(element, "cd-timestamp")) {\n                    Array.from(element.getElementsByTagName("a")).some(link => {\n                        const authorName = getUserNameFromLink(link);\n                        if (authorName) {\n                            element.classList.add("cd-signature");\n                            const unsigned = !0;\n                            return signatures.push({\n                                element: element,\n                                authorName: authorName,\n                                unsigned: unsigned\n                            }), !0;\n                        }\n                    });\n                }\n            }), signatures.sort((sig1, sig2) => this.context.follows(sig1.element, sig2.element) ? 1 : -1), \n           signatures;\n        }\n        collectParts(signatureElement) {\n            const treeWalker = new _treeWalker__WEBPACK_IMPORTED_MODULE_1__.a(signatureElement);\n            let firstForeignComponentAfter, parts = [];\n            for (!firstForeignComponentAfter; ) {\n                for (!treeWalker.currentNode.nextSibling && treeWalker.parentNode; ) ;\n                if (!treeWalker.nextSibling) break;\n                Object(_util__WEBPACK_IMPORTED_MODULE_2__.e)(treeWalker.currentNode, !0) || (firstForeignComponentAfter = treeWalker.currentNode);\n            }\n            if (firstForeignComponentAfter && signatureElement.parentNode.contains(firstForeignComponentAfter)) {\n                for (treeWalker.currentNode = signatureElement; treeWalker.nextSibling && Object(_util__WEBPACK_IMPORTED_MODULE_2__.e)(treeWalker.currentNode, !0); ) parts.push({\n                    node: treeWalker.currentNode,\n                    isTextNode: treeWalker.currentNode.nodeType === Node.TEXT_NODE,\n                    isHeading: !1,\n                    hasCurrentSignature: !1,\n                    hasForeignComponents: !1,\n                    lastStep: "start"\n                });\n                parts.reverse, treeWalker.currentNode = signatureElement;\n            } else treeWalker.currentNode = signatureElement.parentNode;\n            parts.push({\n                node: treeWalker.currentNode,\n                isTextNode: !1,\n                isHeading: !1,\n                hasCurrentSignature: !0,\n                hasForeignComponents: !1,\n                lastStep: "start"\n            });\n            const timezoneRegexp = new RegExp(_cd__WEBPACK_IMPORTED_MODULE_0__.a.g.TIMEZONE_REGEXP.source + "\\\\s*$");\n            for (let i = 0; i < 500; i++) {\n                let lastStep;\n                const previousPart = parts[parts.length - 1];\n                if (!previousPart.isTextNode && !previousPart.hasCurrentSignature) {\n                    const text = previousPart.node.textContent;\n                    if (timezoneRegexp.test(text) || _cd__WEBPACK_IMPORTED_MODULE_0__.a.config.signatureEndingRegexp && _cd__WEBPACK_IMPORTED_MODULE_0__.a.config.signatureEndingRegexp.test(text)) {\n                        previousPart.hasForeignComponents = !0;\n                        break;\n                    }\n                }\n                if (!previousPart.hasCurrentSignature && previousPart.hasForeignComponents) {\n                    let previousNode, dived = !1;\n                    for ((previousNode = treeWalker.currentNode) && treeWalker.lastChild; ) {\n                        if (Object(_util__WEBPACK_IMPORTED_MODULE_2__.e)(treeWalker.currentNode, !0)) {\n                            treeWalker.currentNode = previousNode;\n                            break;\n                        }\n                        dived = !0;\n                    }\n                    if (!dived) break;\n                    lastStep = "dive";\n                } else if (treeWalker.previousSibling) lastStep = "back"; else {\n                    if (!treeWalker.parentNode) break;\n                    lastStep = "up";\n                }\n                const node = treeWalker.currentNode, isTextNode = node.nodeType === Node.TEXT_NODE;\n                if ("back" === lastStep && [ "OL", "UL" ].includes(previousPart.node.tagName) && !([ "DL", "OL", "UL" ].includes(node.tagName) || isTextNode && node.previousSibling && [ "DL", "OL", "UL" ].includes(node.previousSibling.tagName)) && previousPart.node[this.context.childElementsProperty].length && previousPart.node[this.context.childElementsProperty][0].contains(signatureElement)) break;\n                let isHeading = null, hasCurrentSignature = null, hasForeignComponents = null;\n                if (!isTextNode) {\n                    if (node.classList.contains("cd-commentPart") || "toc" === node.getAttribute("id") || "TD" === node.tagName || "HR" === node.tagName && node.previousElementSibling && this.context.getElementByClassName(node.previousElementSibling, "cd-signature") || _cd__WEBPACK_IMPORTED_MODULE_0__.a.config.customForeignComponentChecker && _cd__WEBPACK_IMPORTED_MODULE_0__.a.config.customForeignComponentChecker(node, this.context)) break;\n                    isHeading = /^H[1-6]$/.test(node.tagName), hasCurrentSignature = node.contains(signatureElement), \n                    hasForeignComponents = node.getElementsByClassName("cd-signature", Number(hasCurrentSignature) + 1).length - Number(hasCurrentSignature) > 0 || firstForeignComponentAfter && node.contains(firstForeignComponentAfter);\n                }\n                if (parts.push({\n                    node: node,\n                    isTextNode: isTextNode,\n                    isHeading: isHeading,\n                    hasCurrentSignature: hasCurrentSignature,\n                    hasForeignComponents: hasForeignComponents,\n                    lastStep: lastStep\n                }), isHeading) break;\n            }\n            return parts;\n        }\n        removeNestedParts(parts) {\n            for (let i = parts.length - 1; i >= 0; i--) {\n                const part = parts[i];\n                if ("up" === part.lastStep && !part.hasForeignComponents) {\n                    let nextDiveElementIndex = 0;\n                    for (let j = i - 1; j > 0; j--) if ("dive" === parts[j].lastStep) {\n                        nextDiveElementIndex = j;\n                        break;\n                    }\n                    parts.splice(nextDiveElementIndex, i - nextDiveElementIndex), i = nextDiveElementIndex;\n                }\n            }\n            return parts;\n        }\n        encloseInlineParts(parts, signatureElement) {\n            const sequencesToBeEnclosed = [];\n            let start = null, encloseThis = !1;\n            for (let i = 0; i <= parts.length; i++) {\n                const part = parts[i];\n                if (!part || null !== start && ![ "back", "start" ].includes(part.lastStep) || part.hasForeignComponents || part.isHeading) {\n                    if (null !== start) {\n                        if (encloseThis) {\n                            const end = i - 1;\n                            sequencesToBeEnclosed.push({\n                                start: start,\n                                end: end\n                            });\n                        }\n                        start = null, encloseThis = !1;\n                    }\n                } else {\n                    if (null === start) {\n                        if (Object(_util__WEBPACK_IMPORTED_MODULE_2__.e)(part.node.parentNode)) {\n                            for (let j = i + 1; j < parts.length; j++) "up" !== parts[j].lastStep || (i = j - 1);\n                            break;\n                        }\n                        start = i;\n                    }\n                    !encloseThis && (part.isTextNode && part.node.textContent.trim || Object(_util__WEBPACK_IMPORTED_MODULE_2__.e)(part.node)) && (encloseThis = !0);\n                }\n            }\n            for (let i = sequencesToBeEnclosed.length - 1; i >= 0; i--) {\n                const sequence = sequencesToBeEnclosed[i], wrapper = this.context.document.createElement("div"), nextSibling = parts[sequence.start].node.nextSibling, parent = parts[sequence.start].node.parentNode;\n                for (let j = sequence.end; j >= sequence.start; j--) wrapper.appendChild(parts[j].node);\n                parent.insertBefore(wrapper, nextSibling);\n                const newNode = {\n                    node: wrapper,\n                    isTextNode: !1,\n                    isHeading: !1,\n                    hasCurrentSignature: wrapper.contains(signatureElement),\n                    hasForeignComponents: !1,\n                    lastStep: "replaced"\n                };\n                parts.splice(sequence.start, sequence.end - sequence.start + 1, newNode);\n            }\n            return parts;\n        }\n        filterParts(parts) {\n            for (let i = (parts = parts.filter(part => !part.hasForeignComponents && !part.isTextNode)).length - 1; i > 0; i--) {\n                const part = parts[i];\n                if ("P" !== part.node.tagName || part.node.textContent.trim) break;\n                parts.splice(i, 1);\n            }\n            return parts;\n        }\n        replaceListsWithItems(parts, signatureElement) {\n            const lastPart = parts[parts.length - 1];\n            for (let i = parts.length - 1; i >= 0; i--) {\n                const part = parts[i];\n                if ([ "UL", "DL", "OL", "LI", "DD" ].includes(part.node.tagName) && ("up" === part.lastStep && (!parts[i - 1] || "back" !== parts[i - 1].lastStep) || ("DD" === lastPart.node.tagName || "DD" === lastPart.node.parentNode.tagName || "DL" === lastPart.node.tagName) && !parts.slice(i + 1).some(part => "P" === part.node.tagName))) {\n                    const partTextNoSpaces = part.node.textContent.replace(/\\s+/g, "");\n                    let children, current = [ part.node ];\n                    do {\n                        children = current.reduce((arr, element) => arr.concat(Array.from(element[this.context.childElementsProperty])), []);\n                    } while (children.length && children.every(child => [ "UL", "DL", "OL", "LI", "DD" ].includes(child.tagName)) && children.map(child => child.textContent).join("").replace(/\\s+/g, "") === partTextNoSpaces && (current = children));\n                    if (current.length > 1) {\n                        const newParts = current.map(el => ({\n                            node: el,\n                            isTextNode: !1,\n                            hasCurrentSignature: el.contains(signatureElement),\n                            hasForeignComponents: !1,\n                            lastStep: "replaced"\n                        }));\n                        parts.splice(i, 1, ...newParts);\n                    } else current[0] !== part.node && Object.assign(part, {\n                        node: current[0],\n                        lastStep: "replaced"\n                    });\n                }\n            }\n            return parts;\n        }\n        getLevelsUpTree(initialElement) {\n            const levelElements = [], treeWalker = new _treeWalker__WEBPACK_IMPORTED_MODULE_1__.b(initialElement);\n            for (treeWalker.parentNode; ) {\n                const el = treeWalker.currentNode;\n                if ([ "UL", "DL", "OL" ].includes(el.tagName)) {\n                    if (el.classList.contains("cd-commentLevel")) {\n                        const match = el.getAttribute("class").match(/cd-commentLevel-(\\d+)/);\n                        return match && levelElements.unshift(...Array(Number(match[1]))), levelElements;\n                    }\n                    levelElements.unshift(el);\n                }\n            }\n            return levelElements;\n        }\n        findHeadings {\n            const headings = [ ..._cd__WEBPACK_IMPORTED_MODULE_0__.a.g.rootElement.getElementsByTagName("h2"), ..._cd__WEBPACK_IMPORTED_MODULE_0__.a.g.rootElement.getElementsByTagName("h3"), ..._cd__WEBPACK_IMPORTED_MODULE_0__.a.g.rootElement.getElementsByTagName("h4"), ..._cd__WEBPACK_IMPORTED_MODULE_0__.a.g.rootElement.getElementsByTagName("h5"), ..._cd__WEBPACK_IMPORTED_MODULE_0__.a.g.rootElement.getElementsByTagName("h6") ];\n            return headings.sort((heading1, heading2) => this.context.follows(heading1, heading2) ? 1 : -1), \n           headings;\n        }\n    }\n}, function(module, __webpack_exports__, __webpack_require__) {\n    "use strict";\n    __webpack_require__.d(__webpack_exports__, "a", (function {\n        return getAllTextNodes;\n    }));\n    var lib = __webpack_require__(5), cd = __webpack_require__(0), html_entity_decode = __webpack_require__(26), html_entity_decode_default = __webpack_require__.n(html_entity_decode);\n    __webpack_require__(7), __webpack_require__(2), __webpack_require__(1);\n    new WeakMap, __webpack_require__(4);\n    function decodeHtmlEntities(s) {\n        if (-1 === s.indexOf("&")) return s;\n        {\n            let result = s;\n            return -1 !== result.indexOf("&#38;amp;") && (result = result.replace(/&#38;amp;/g, "&amp;amp;")), \n            result = -1 === result.indexOf("&#") ? result : result.replace(/&#(\\d+);/g, (s, m1) => String.fromCharCode(m1)), \n            -1 === result.indexOf("&") ? result : html_entity_decode_default(result);\n       }\n    }\n    function walkThroughSubtree(base, callback, checkSelf) {\n        if (checkSelf && callback(base)) return !0;\n        for (let n = base.firstChild; n; n = n.nextSibling) if (walkThroughSubtree(n, callback, !0)) return !0;\n    }\n    function getAllTextNodes {\n        let nodes = [];\n        return walkThroughSubtree(cd.a.g.rootElement, node => {\n            node.nodeType === Node.TEXT_NODE && nodes.push(node);\n        }), nodes;\n    }\n    self.Node = {\n        TEXT_NODE: 3,\n        ELEMENT_NODE: 1\n    };\n    const dummyDom = Object(lib.parseDOM)("a"), Element = dummyDom[0].constructor, DataNode = dummyDom[0].childNodes[0].constructor, NodeConstructor = Object.getPrototypeOf(DataNode);\n    Object.defineProperty(Element.prototype, "childElements", {\n        get: function {\n            return this.childNodes.filter(node => node.nodeType === Node.ELEMENT_NODE);\n        }\n    }), Object.defineProperty(Element.prototype, "previousElementSibling", {\n        get: function {\n            for (let n = this.previousSibling; n; n = n.previousSibling) if (n.nodeType === Node.ELEMENT_NODE) return n;\n            return null;\n        }\n    }), Object.defineProperty(Element.prototype, "nextElementSibling", {\n        get: function {\n            for (let n = this.nextSibling; n; n = n.nextSibling) if (n.nodeType === Node.ELEMENT_NODE) return n;\n            return null;\n        }\n    }), Object.defineProperty(Element.prototype, "firstElementChild", {\n        get: function {\n            let n;\n            for (n = this.firstChild; n && n.nodeType !== Node.ELEMENT_NODE; n = n.nextSibling) ;\n            return n || null;\n        }\n    }), Object.defineProperty(Element.prototype, "lastElementChild", {\n        get: function {\n            let n;\n            for (n = this.lastChild; n && n.nodeType !== Node.ELEMENT_NODE; n = n.previousSibling) ;\n            return n || null;\n        }\n    }), Object.defineProperty(Element.prototype, "textContent", {\n        get: function {\n            cd.a.debug.startTimer("textContent");\n            let returnValue = "";\n            return this.childNodes.forEach(node => {\n                returnValue += node.textContent;\n            }), cd.a.debug.stopTimer("textContent"), returnValue;\n        }\n    }), Object.defineProperty(Element.prototype, "outerHTML", {\n        get: function {\n            return lib.DomUtils.getOuterHTML(this);\n        }\n    }), Element.prototype.getAttribute = function(name) {\n        let value = this.attribs[name];\n        return value && "string" == typeof value && -1 !== value.indexOf("&") && (value = value.replace(/&amp;/g, "&").replace(/&quot;/g, \'"\')), \n        value;\n    }, Element.prototype.setAttribute = function(name, value) {\n        value && "string" == typeof value && (-1 !== value.indexOf("&") && (value = value.replace(/&/g, "&amp;")), \n        -1 !== value.indexOf(\'"\') && (value = value.replace(/"/g, "&quot;"))), this.attribs[name] = value || "";\n    }, Element.prototype.appendChild = function(node) {\n        cd.a.debug.startTimer("appendChild"), node.parentNode && node.remove, lib.DomUtils.appendChild(this, node), \n        cd.a.debug.stopTimer("appendChild");\n    }, Element.prototype.insertBefore = function(node, referenceNode) {\n        cd.a.debug.startTimer("insertBefore"), referenceNode ? (node.parentNode && node.remove, \n       lib.DomUtils.prepend(referenceNode, node)) : this.appendChild(node), cd.a.debug.stopTimer("insertBefore");\n    }, Element.prototype.removeChild = function(node) {\n        node.parentNode === this && lib.DomUtils.removeElement(node);\n    }, Element.prototype.contains = function(node) {\n        if (cd.a.debug.startTimer("contains"), node === this) return !0;\n        if (!this.childNodes.length) return !1;\n        for (let n = node; n; n = n.parentNode) if (n === this) return !0;\n        return cd.a.debug.stopTimer("contains"), !1;\n    }, Element.prototype.follows = function(node) {\n        if (cd.a.debug.startTimer("follows"), this.startIndex && node.startIndex) return this.startIndex > node.startIndex;\n        if (this === node) return !1;\n        const thisTree = [], nodeTree = [];\n        let sharedParent, thisSharedParentChild, nodeSharedParentChild;\n        for (let current = this; current; current = current.parentNode) {\n            if (current === node) return !0;\n            thisTree.unshift(current);\n        }\n        for (let current = node; current; current = current.parentNode) if (nodeTree.unshift(current), \n        thisTree.includes(current)) {\n            sharedParent = current, thisSharedParentChild = thisTree[thisTree.indexOf(current) + 1], \n            nodeSharedParentChild = nodeTree[1];\n            break;\n        }\n        const returnValue = !sharedParent || sharedParent.childNodes.indexOf(thisSharedParentChild) > sharedParent.childNodes.indexOf(nodeSharedParentChild);\n        return cd.a.debug.stopTimer("follows"), returnValue;\n    }, Object.defineProperty(Element.prototype, "tagName", {\n        get: function {\n            return this.name.toUpperCase;\n        }\n    }), Object.defineProperty(Element.prototype, "classList", {\n        get: function {\n            return this._classList || (this._classList = {\n                list: [],\n                movedFromClassAttr: !1,\n                moveFromClassAttr(classAttr) {\n                    this.list = (classAttr || "").split(" "), this.movedFromClassAttr = !0;\n                },\n                add: (...names) => {\n                    names.forEach(name => {\n                        cd.a.debug.startTimer("addClass");\n                        let classAttr = this.getAttribute("class") || "";\n                        classAttr && (classAttr += " "), classAttr += name, this.setAttribute("class", classAttr), \n                        this._classList.movedFromClassAttr ? this._classList.list.push(name) : this._classList.moveFromClassAttr(classAttr), \n                       cd.a.debug.stopTimer("addClass");\n                    });\n                },\n                contains: name => {\n                    cd.a.debug.startTimer("containsClass");\n                    const classAttr = this.getAttribute("class");\n                    if (!classAttr) return cd.a.debug.stopTimer("containsClass"), !1;\n                    this._classList.movedFromClassAttr || this._classList.moveFromClassAttr(classAttr);\n                    const returnValue = Boolean(this._classList.list.length) && -1 !== this._classList.list.indexOf(name);\n                    return cd.a.debug.stopTimer("containsClass"), returnValue;\n                }\n            }), this._classList;\n        }\n    }), Element.prototype.getElementsByClassName = function(name, limit, our) {\n        cd.a.debug.startTimer("getElementsByClassName");\n        let nodes = [];\n        return walkThroughSubtree(this, node => {\n            if (node.nodeType === Node.ELEMENT_NODE) return !(node.nodeType !== Node.ELEMENT_NODE || !node.classList.contains(name, our) || (nodes.push(node), \n            !limit || nodes.length !== limit)) || void 0;\n        }), cd.a.debug.stopTimer("getElementsByClassName"), nodes;\n    }, Element.prototype.getElementsByTagName = function(name) {\n        cd.a.debug.startTimer("getElementsByTagName");\n        const returnValue = lib.DomUtils.getElementsByTagName(name, this);\n        return cd.a.debug.stopTimer("getElementsByTagName"), returnValue;\n    }, Object.defineProperty(DataNode.prototype, "textContent", {\n        get: function {\n            return decodeHtmlEntities(this.data);\n        },\n        set: function(value) {\n            this.data = value;\n        }\n    }), NodeConstructor.prototype.remove = function {\n        lib.DomUtils.removeElement(this), this.prev = null, this.next = null;\n    };\n    class Document extends Element {\n        constructor(dom) {\n            super("body", {});\n            for (const el of dom) this.appendChild(el);\n        }\n        createElement(name) {\n            return new Element(name, {});\n        }\n        createTextNode(content) {\n            return new DataNode("text", content);\n        }\n    }\n    Document.prototype.getElementsByClassName = Element.prototype.getElementsByClassName, \n    self.Document = Document;\n}, function(module, __webpack_exports__, __webpack_require__) {\n    "use strict";\n    __webpack_require__.r(__webpack_exports__);\n    var _CdError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3), _CommentSkeleton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(24), _Parser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27), _SectionSkeleton__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25), _cd__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(0), _debug__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(23), _staticGlobals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(22), _treeWalker__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(6), _htmlparser2Extended__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(28), _htmlparser2Extended__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(5), _htmlparser2Extended__WEBPACK_IMPORTED_MODULE_9___default = __webpack_require__.n(_htmlparser2Extended__WEBPACK_IMPORTED_MODULE_9__), _timestamp__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(4);\n    self.cd = _cd__WEBPACK_IMPORTED_MODULE_4__.a, _cd__WEBPACK_IMPORTED_MODULE_4__.a.g = _staticGlobals__WEBPACK_IMPORTED_MODULE_6__.a, \n    _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug = _debug__WEBPACK_IMPORTED_MODULE_5__.a, \n    _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.init;\n    const context = {\n        CommentClass: _CommentSkeleton__WEBPACK_IMPORTED_MODULE_1__.a,\n        SectionClass: _SectionSkeleton__WEBPACK_IMPORTED_MODULE_3__.a,\n        childElementsProperty: "childElements",\n        follows: (el1, el2) => el1.follows(el2),\n        getAllTextNodes: _htmlparser2Extended__WEBPACK_IMPORTED_MODULE_8__.a,\n        getElementByClassName: (node, className) => node.getElementsByClassName(className, 1)[0] || null\n    };\n    let alarmTimeout;\n    function setAlarm(interval) {\n        clearTimeout(alarmTimeout), alarmTimeout = setTimeout( => {\n            postMessage({\n                type: "wakeUp"\n            });\n        }, interval);\n    }\n    function parse {\n        _cd__WEBPACK_IMPORTED_MODULE_4__.a.comments = [], _cd__WEBPACK_IMPORTED_MODULE_4__.a.sections = [], \n        Object(_timestamp__WEBPACK_IMPORTED_MODULE_10__.d), _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.startTimer("processing comments");\n        const parser = new _Parser__WEBPACK_IMPORTED_MODULE_2__.a(context);\n        _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.startTimer("find timestamps");\n        const timestamps = parser.findTimestamps;\n        _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.stopTimer("find timestamps"), _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.startTimer("find signatures");\n        const signatures = parser.findSignatures(timestamps);\n        _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.stopTimer("find signatures"), signatures.forEach(signature => {\n            try {\n                const comment = parser.createComment(signature);\n                void 0 !== comment.id && _cd__WEBPACK_IMPORTED_MODULE_4__.a.comments.push(comment);\n            } catch (e) {\n                e instanceof _CdError__WEBPACK_IMPORTED_MODULE_0__.a || console.error(e);\n            }\n        }), _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.stopTimer("processing comments"), _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.startTimer("processing sections"), \n        parser.findHeadings.forEach(heading => {\n            try {\n                const section = parser.createSection(heading);\n                void 0 !== section.id && _cd__WEBPACK_IMPORTED_MODULE_4__.a.sections.push(section);\n            } catch (e) {\n                e instanceof _CdError__WEBPACK_IMPORTED_MODULE_0__.a || console.error(e);\n            }\n        }), _cd__WEBPACK_IMPORTED_MODULE_4__.a.comments.forEach(comment => {\n            if (comment.own && _cd__WEBPACK_IMPORTED_MODULE_4__.a.comments[comment.id + 1]) {\n                if (_cd__WEBPACK_IMPORTED_MODULE_4__.a.g.specialElements.pageHasOutdents) {\n                    const treeWalker = new _treeWalker__WEBPACK_IMPORTED_MODULE_7__.b(comment.elements[comment.elements.length - 1]);\n                    let found;\n                    for (!found && treeWalker.nextNode && !treeWalker.currentNode.classList.contains("cd-commentPart"); ) found = treeWalker.currentNode.classList.contains("outdent-template");\n                    found && (_cd__WEBPACK_IMPORTED_MODULE_4__.a.comments[comment.id + 1].toMe = !0);\n                }\n                _cd__WEBPACK_IMPORTED_MODULE_4__.a.comments[comment.id + 1].toMe || _cd__WEBPACK_IMPORTED_MODULE_4__.a.comments.slice(comment.id + 1).some(otherComment => {\n                    if (!(otherComment.section === comment.section && otherComment.level > comment.level)) return !0;\n                    otherComment.level !== comment.level + 1 && otherComment.id !== comment.id + 1 || (otherComment.toMe = !0);\n                });\n            }\n            comment.section && (comment.sectionHeadline = comment.section.headline, comment.sectionAnchor = comment.section.anchor, \n            delete comment.section), delete comment.elements, delete comment.parts, delete comment.highlightables, \n            delete comment.addAttributes, delete comment.setLevels, delete comment.getSection;\n        }), _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.stopTimer("processing sections"), _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.startTimer("post message from the worker"), \n        postMessage({\n            type: "parse",\n            comments: _cd__WEBPACK_IMPORTED_MODULE_4__.a.comments\n        }), _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.stopTimer("post message from the worker"), \n        _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.stopTimer("worker operations"), console.debug("sent message from the worker", Date.now), \n        _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.logAndResetEverything;\n    }\n    function onMessageFromWindow(e) {\n        console.debug("received message from the main thread", Date.now);\n        const message = e.data;\n        if ("setAlarm" === message.type && setAlarm(message.interval), "removeAlarm" === message.type && clearTimeout(alarmTimeout), \n        "parse" === message.type) {\n            _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.startTimer("worker operations"), Object.assign(_cd__WEBPACK_IMPORTED_MODULE_4__.a.g, message.g), \n            _cd__WEBPACK_IMPORTED_MODULE_4__.a.config = message.config;\n            let checker = _cd__WEBPACK_IMPORTED_MODULE_4__.a.config.customForeignComponentChecker;\n            !checker || /^ *function +/.test(checker) || /^.+=>/.test(checker) || (checker = "function " + checker), \n            _cd__WEBPACK_IMPORTED_MODULE_4__.a.config.customForeignComponentChecker = eval(checker), \n            _cd__WEBPACK_IMPORTED_MODULE_4__.a.g.TIMESTAMP_PARSER = eval(_cd__WEBPACK_IMPORTED_MODULE_4__.a.g.TIMESTAMP_PARSER), \n            _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.startTimer("parse html");\n            const dom = Object(_htmlparser2Extended__WEBPACK_IMPORTED_MODULE_9__.parseDOM)(message.text, {\n                withStartIndices: !0,\n                withEndIndices: !0\n            });\n            _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.stopTimer("parse html"), _cd__WEBPACK_IMPORTED_MODULE_4__.a.g.rootElement = new Document(dom), \n            context.document = _cd__WEBPACK_IMPORTED_MODULE_4__.a.g.rootElement, _cd__WEBPACK_IMPORTED_MODULE_4__.a.g.specialElements = {\n                pageHasOutdents: Boolean(_cd__WEBPACK_IMPORTED_MODULE_4__.a.g.rootElement.getElementsByClassName("outdent-template", 1).length)\n            }, parse;\n        }\n    }\n    onmessage = onMessageFromWindow;\n}, function(module) {\n    module.exports = JSON.parse(\'{"0":65533,"128":8364,"130":8218,"131":402,"132":8222,"133":8230,"134":8224,"135":8225,"136":710,"137":8240,"138":352,"139":8249,"140":338,"142":381,"145":8216,"146":8217,"147":8220,"148":8221,"149":8226,"150":8211,"151":8212,"152":732,"153":8482,"154":353,"155":8250,"156":339,"158":382,"159":376}\');\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    var ReflectOwnKeys, R = "object" == typeof Reflect ? Reflect : null, ReflectApply = R && "function" == typeof R.apply ? R.apply : function(target, receiver, args) {\n       return Function.prototype.apply.call(target, receiver, args);\n    };\n    ReflectOwnKeys = R && "function" == typeof R.ownKeys ? R.ownKeys : Object.getOwnPropertySymbols ? function(target) {\n       return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));\n    } : function(target) {\n        return Object.getOwnPropertyNames(target);\n    };\n    var NumberIsNaN = Number.isNaN || function(value) {\n        return value != value;\n    };\n    function EventEmitter {\n        EventEmitter.init.call(this);\n    }\n    module.exports = EventEmitter, EventEmitter.EventEmitter = EventEmitter, EventEmitter.prototype._events = void 0, \n    EventEmitter.prototype._eventsCount = 0, EventEmitter.prototype._maxListeners = void 0;\n    var defaultMaxListeners = 10;\n    function checkListener(listener) {\n        if ("function" != typeof listener) throw new TypeError(\'The "listener" argument must be of type Function. Received type \' + typeof listener);\n    }\n    function _getMaxListeners(that) {\n        return void 0 === that._maxListeners ? EventEmitter.defaultMaxListeners : that._maxListeners;\n   }\n    function _addListener(target, type, listener, prepend) {\n        var m, events, existing, warning;\n        if (checkListener(listener), void 0 === (events = target._events) ? (events = target._events = Object.create(null), \n        target._eventsCount = 0) : (void 0 !== events.newListener && (target.emit("newListener", type, listener.listener ? listener.listener : listener), \n       events = target._events), existing = events[type]), void 0 === existing) existing = events[type] = listener, \n        ++target._eventsCount; else if ("function" == typeof existing ? existing = events[type] = prepend ? [ listener, existing ] : [ existing, listener ] : prepend ? existing.unshift(listener) : existing.push(listener), \n        (m = _getMaxListeners(target)) > 0 && existing.length > m && !existing.warned) {\n            existing.warned = !0;\n            var w = new Error("Possible EventEmitter memory leak detected. " + existing.length + " " + String(type) + " listeners added. Use emitter.setMaxListeners to increase limit");\n            w.name = "MaxListenersExceededWarning", w.emitter = target, w.type = type, w.count = existing.length, \n            warning = w, console && console.warn && console.warn(warning);\n        }\n        return target;\n    }\n    function onceWrapper {\n        if (!this.fired) return this.target.removeListener(this.type, this.wrapFn), this.fired = !0, \n        0 === arguments.length ? this.listener.call(this.target) : this.listener.apply(this.target, arguments);\n   }\n    function _onceWrap(target, type, listener) {\n        var state = {\n            fired: !1,\n            wrapFn: void 0,\n            target: target,\n            type: type,\n            listener: listener\n        }, wrapped = onceWrapper.bind(state);\n        return wrapped.listener = listener, state.wrapFn = wrapped, wrapped;\n    }\n    function _listeners(target, type, unwrap) {\n        var events = target._events;\n        if (void 0 === events) return [];\n        var evlistener = events[type];\n        return void 0 === evlistener ? [] : "function" == typeof evlistener ? unwrap ? [ evlistener.listener || evlistener ] : [ evlistener ] : unwrap ? function(arr) {\n           for (var ret = new Array(arr.length), i = 0; i < ret.length; ++i) ret[i] = arr[i].listener || arr[i];\n            return ret;\n        }(evlistener) : arrayClone(evlistener, evlistener.length);\n    }\n    function listenerCount(type) {\n        var events = this._events;\n        if (void 0 !== events) {\n            var evlistener = events[type];\n            if ("function" == typeof evlistener) return 1;\n            if (void 0 !== evlistener) return evlistener.length;\n        }\n        return 0;\n    }\n    function arrayClone(arr, n) {\n        for (var copy = new Array(n), i = 0; i < n; ++i) copy[i] = arr[i];\n        return copy;\n    }\n    Object.defineProperty(EventEmitter, "defaultMaxListeners", {\n        enumerable: !0,\n        get: function {\n            return defaultMaxListeners;\n        },\n        set: function(arg) {\n            if ("number" != typeof arg || arg < 0 || NumberIsNaN(arg)) throw new RangeError(\'The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received \' + arg + ".");\n           defaultMaxListeners = arg;\n        }\n    }), EventEmitter.init = function {\n        void 0 !== this._events && this._events !== Object.getPrototypeOf(this)._events || (this._events = Object.create(null), \n        this._eventsCount = 0), this._maxListeners = this._maxListeners || void 0;\n    }, EventEmitter.prototype.setMaxListeners = function(n) {\n        if ("number" != typeof n || n < 0 || NumberIsNaN(n)) throw new RangeError(\'The value of "n" is out of range. It must be a non-negative number. Received \' + n + ".");\n        return this._maxListeners = n, this;\n    }, EventEmitter.prototype.getMaxListeners = function {\n        return _getMaxListeners(this);\n    }, EventEmitter.prototype.emit = function(type) {\n        for (var args = [], i = 1; i < arguments.length; i++) args.push(arguments[i]);\n        var doError = "error" === type, events = this._events;\n        if (void 0 !== events) doError = doError && void 0 === events.error; else if (!doError) return !1;\n        if (doError) {\n            var er;\n            if (args.length > 0 && (er = args[0]), er instanceof Error) throw er;\n            var err = new Error("Unhandled error." + (er ? " (" + er.message + ")" : ""));\n           throw err.context = er, err;\n        }\n        var handler = events[type];\n        if (void 0 === handler) return !1;\n        if ("function" == typeof handler) ReflectApply(handler, this, args); else {\n            var len = handler.length, listeners = arrayClone(handler, len);\n            for (i = 0; i < len; ++i) ReflectApply(listeners[i], this, args);\n        }\n        return !0;\n    }, EventEmitter.prototype.addListener = function(type, listener) {\n        return _addListener(this, type, listener, !1);\n    }, EventEmitter.prototype.on = EventEmitter.prototype.addListener, EventEmitter.prototype.prependListener = function(type, listener) {\n        return _addListener(this, type, listener, !0);\n    }, EventEmitter.prototype.once = function(type, listener) {\n        return checkListener(listener), this.on(type, _onceWrap(this, type, listener)), \n        this;\n    }, EventEmitter.prototype.prependOnceListener = function(type, listener) {\n        return checkListener(listener), this.prependListener(type, _onceWrap(this, type, listener)), \n        this;\n    }, EventEmitter.prototype.removeListener = function(type, listener) {\n        var list, events, position, i, originalListener;\n        if (checkListener(listener), void 0 === (events = this._events)) return this;\n        if (void 0 === (list = events[type])) return this;\n        if (list === listener || list.listener === listener) 0 == --this._eventsCount ? this._events = Object.create(null) : (delete events[type], \n       events.removeListener && this.emit("removeListener", type, list.listener || listener)); else if ("function" != typeof list) {\n            for (position = -1, i = list.length - 1; i >= 0; i--) if (list[i] === listener || list[i].listener === listener) {\n                originalListener = list[i].listener, position = i;\n                break;\n            }\n            if (position < 0) return this;\n            0 === position ? list.shift : function(list, index) {\n               for (index + 1 < list.length; index++) list[index] = list[index + 1];\n                list.pop;\n            }(list, position), 1 === list.length && (events[type] = list[0]), void 0 !== events.removeListener && this.emit("removeListener", type, originalListener || listener);\n        }\n        return this;\n    }, EventEmitter.prototype.off = EventEmitter.prototype.removeListener, EventEmitter.prototype.removeAllListeners = function(type) {\n        var listeners, events, i;\n        if (void 0 === (events = this._events)) return this;\n        if (void 0 === events.removeListener) return 0 === arguments.length ? (this._events = Object.create(null), \n       this._eventsCount = 0) : void 0 !== events[type] && (0 == --this._eventsCount ? this._events = Object.create(null) : delete events[type]), \n        this;\n        if (0 === arguments.length) {\n            var key, keys = Object.keys(events);\n            for (i = 0; i < keys.length; ++i) "removeListener" !== (key = keys[i]) && this.removeAllListeners(key);\n            return this.removeAllListeners("removeListener"), this._events = Object.create(null), \n            this._eventsCount = 0, this;\n        }\n        if ("function" == typeof (listeners = events[type])) this.removeListener(type, listeners); else if (void 0 !== listeners) for (i = listeners.length - 1; i >= 0; i--) this.removeListener(type, listeners[i]);\n        return this;\n    }, EventEmitter.prototype.listeners = function(type) {\n        return _listeners(this, type, !0);\n    }, EventEmitter.prototype.rawListeners = function(type) {\n        return _listeners(this, type, !1);\n    }, EventEmitter.listenerCount = function(emitter, type) {\n        return "function" == typeof emitter.listenerCount ? emitter.listenerCount(type) : listenerCount.call(emitter, type);\n   }, EventEmitter.prototype.listenerCount = listenerCount, EventEmitter.prototype.eventNames = function {\n        return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n   };\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    var extendStatics, __extends = this && this.__extends || (extendStatics = function(d, b) {\n        return (extendStatics = Object.setPrototypeOf || {\n            __proto__: []\n        } instanceof Array && function(d, b) {\n            d.__proto__ = b;\n        } || function(d, b) {\n            for (var p in b) b.hasOwnProperty(p) && (d[p] = b[p]);\n        })(d, b);\n    }, function(d, b) {\n        function __ {\n            this.constructor = d;\n        }\n        extendStatics(d, b), d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, \n        new __);\n    });\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    });\n    var nodeTypes = new Map([ [ "tag", 1 ], [ "script", 1 ], [ "style", 1 ], [ "directive", 1 ], [ "text", 3 ], [ "cdata", 4 ], [ "comment", 8 ] ]), Node = function {\n        function Node(type) {\n            this.type = type, this.parent = null, this.prev = null, this.next = null, this.startIndex = null, \n            this.endIndex = null;\n        }\n        return Object.defineProperty(Node.prototype, "nodeType", {\n            get: function {\n                return nodeTypes.get(this.type) || 1;\n            },\n            enumerable: !0,\n            configurable: !0\n        }), Object.defineProperty(Node.prototype, "parentNode", {\n            get: function {\n                return this.parent || null;\n            },\n            set: function(parent) {\n                this.parent = parent;\n            },\n            enumerable: !0,\n            configurable: !0\n        }), Object.defineProperty(Node.prototype, "previousSibling", {\n            get: function {\n                return this.prev || null;\n            },\n            set: function(prev) {\n                this.prev = prev;\n            },\n            enumerable: !0,\n            configurable: !0\n        }), Object.defineProperty(Node.prototype, "nextSibling", {\n            get: function {\n                return this.next || null;\n            },\n            set: function(next) {\n                this.next = next;\n            },\n            enumerable: !0,\n            configurable: !0\n        }), Node;\n    };\n    exports.Node = Node;\n    var DataNode = function(_super) {\n        function DataNode(type, data) {\n            var _this = _super.call(this, type) || this;\n            return _this.data = data, _this;\n        }\n        return __extends(DataNode, _super), Object.defineProperty(DataNode.prototype, "nodeValue", {\n            get: function {\n                return this.data;\n            },\n            set: function(data) {\n                this.data = data;\n            },\n            enumerable: !0,\n            configurable: !0\n        }), DataNode;\n    }(Node);\n    exports.DataNode = DataNode;\n    var ProcessingInstruction = function(_super) {\n        function ProcessingInstruction(name, data) {\n            var _this = _super.call(this, "directive", data) || this;\n            return _this.name = name, _this;\n        }\n        return __extends(ProcessingInstruction, _super), ProcessingInstruction;\n    }(DataNode);\n    exports.ProcessingInstruction = ProcessingInstruction;\n    var NodeWithChildren = function(_super) {\n        function NodeWithChildren(type, children) {\n            var _this = _super.call(this, type) || this;\n            return _this.children = children, _this;\n        }\n        return __extends(NodeWithChildren, _super), Object.defineProperty(NodeWithChildren.prototype, "firstChild", {\n            get: function {\n                return this.children[0] || null;\n            },\n            enumerable: !0,\n            configurable: !0\n        }), Object.defineProperty(NodeWithChildren.prototype, "lastChild", {\n            get: function {\n                return this.children[this.children.length - 1] || null;\n            },\n            enumerable: !0,\n            configurable: !0\n        }), Object.defineProperty(NodeWithChildren.prototype, "childNodes", {\n            get: function {\n                return this.children;\n            },\n            set: function(children) {\n                this.children = children;\n            },\n            enumerable: !0,\n            configurable: !0\n        }), NodeWithChildren;\n    }(Node);\n    exports.NodeWithChildren = NodeWithChildren;\n    var Element = function(_super) {\n        function Element(name, attribs) {\n            var _this = _super.call(this, "script" === name ? "script" : "style" === name ? "style" : "tag", []) || this;\n           return _this.name = name, _this.attribs = attribs, _this.attribs = attribs, _this;\n        }\n        return __extends(Element, _super), Object.defineProperty(Element.prototype, "tagName", {\n            get: function {\n                return this.name;\n            },\n            set: function(name) {\n                this.name = name;\n            },\n            enumerable: !0,\n            configurable: !0\n        }), Element;\n    }(NodeWithChildren);\n    exports.Element = Element;\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    var __importDefault = this && this.__importDefault || function(mod) {\n        return mod && mod.__esModule ? mod : {\n            default: mod\n        };\n    };\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    });\n    var tagtypes_1 = __webpack_require__(8), dom_serializer_1 = __importDefault(__webpack_require__(34));\n    exports.getOuterHTML = dom_serializer_1.default, exports.getInnerHTML = function(node, options) {\n        return tagtypes_1.hasChildren(node) ? node.children.map((function(node) {\n           return exports.getOuterHTML(node, options);\n        })).join("") : "";\n    }, exports.getText = function getText(node) {\n        return Array.isArray(node) ? node.map(getText).join("") : tagtypes_1.isTag(node) ? "br" === node.name ? "\\n" : getText(node.children) : tagtypes_1.isCDATA(node) ? getText(node.children) : tagtypes_1.isText(node) ? node.data : "";\n   };\n}, function(module, exports, __webpack_require__) {\n    var ElementType = __webpack_require__(11), entities = __webpack_require__(35), foreignNames = __webpack_require__(36);\n    foreignNames.elementNames.__proto__ = null, foreignNames.attributeNames.__proto__ = null;\n    var unencodedElements = {\n        __proto__: null,\n        style: !0,\n        script: !0,\n        xmp: !0,\n        iframe: !0,\n        noembed: !0,\n        noframes: !0,\n        plaintext: !0,\n        noscript: !0\n    };\n    var singleTag = {\n        __proto__: null,\n        area: !0,\n        base: !0,\n        basefont: !0,\n        br: !0,\n        col: !0,\n        command: !0,\n        embed: !0,\n        frame: !0,\n        hr: !0,\n        img: !0,\n        input: !0,\n        isindex: !0,\n        keygen: !0,\n        link: !0,\n        meta: !0,\n        param: !0,\n        source: !0,\n        track: !0,\n        wbr: !0\n    }, render = module.exports = function(dom, opts) {\n        Array.isArray(dom) || dom.cheerio || (dom = [ dom ]), opts = opts || {};\n        for (var output = "", i = 0; i < dom.length; i++) {\n            var elem = dom[i];\n            "root" === elem.type ? output += render(elem.children, opts) : ElementType.isTag(elem) ? output += renderTag(elem, opts) : elem.type === ElementType.Directive ? output += renderDirective(elem) : elem.type === ElementType.Comment ? output += renderComment(elem) : elem.type === ElementType.CDATA ? output += renderCdata(elem) : output += renderText(elem, opts);\n       }\n        return output;\n    }, foreignModeIntegrationPoints = [ "mi", "mo", "mn", "ms", "mtext", "annotation-xml", "foreignObject", "desc", "title" ];\n    function renderTag(elem, opts) {\n        "foreign" === opts.xmlMode && (elem.name = foreignNames.elementNames[elem.name] || elem.name, \n        elem.parent && foreignModeIntegrationPoints.indexOf(elem.parent.name) >= 0 && (opts = Object.assign({}, opts, {\n            xmlMode: !1\n        }))), !opts.xmlMode && [ "svg", "math" ].indexOf(elem.name) >= 0 && (opts = Object.assign({}, opts, {\n            xmlMode: "foreign"\n        }));\n        var tag = "<" + elem.name, attribs = function(attributes, opts) {\n            if (attributes) {\n                var value, output = "";\n                for (var key in attributes) value = attributes[key], output && (output += " "), \n                "foreign" === opts.xmlMode && (key = foreignNames.attributeNames[key] || key), output += key, \n                (null !== value && "" !== value || opts.xmlMode) && (output += \'="\' + (opts.decodeEntities ? entities.encodeXML(value) : value.replace(/\\"/g, "&quot;")) + \'"\');\n               return output;\n            }\n        }(elem.attribs, opts);\n        return attribs && (tag += " " + attribs), !opts.xmlMode || elem.children && 0 !== elem.children.length ? (tag += ">", \n       elem.children && (tag += render(elem.children, opts)), singleTag[elem.name] && !opts.xmlMode || (tag += "")) : tag += "/>", \n        tag;\n    }\n    function renderDirective(elem) {\n        return "<" + elem.data + ">";\n    }\n    function renderText(elem, opts) {\n        var data = elem.data || "";\n        return !opts.decodeEntities || elem.parent && elem.parent.name in unencodedElements || (data = entities.encodeXML(data)), \n        data;\n    }\n    function renderCdata(elem) {\n        return "<![CDATA[" + elem.children[0].data + "]]>";\n    }\n    function renderComment(elem) {\n        return "\\x3c!--" + elem.data + "--\\x3e";\n    }\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    });\n    var decode_1 = __webpack_require__(19), encode_1 = __webpack_require__(20);\n    exports.decode = function(data, level) {\n        return (!level || level <= 0 ? decode_1.decodeXML : decode_1.decodeHTML)(data);\n   }, exports.decodeStrict = function(data, level) {\n        return (!level || level <= 0 ? decode_1.decodeXML : decode_1.decodeHTMLStrict)(data);\n   }, exports.encode = function(data, level) {\n        return (!level || level <= 0 ? encode_1.encodeXML : encode_1.encodeHTML)(data);\n   };\n    var encode_2 = __webpack_require__(20);\n    exports.encodeXML = encode_2.encodeXML, exports.encodeHTML = encode_2.encodeHTML, \n    exports.escape = encode_2.escape, exports.encodeHTML4 = encode_2.encodeHTML, exports.encodeHTML5 = encode_2.encodeHTML;\n    var decode_2 = __webpack_require__(19);\n    exports.decodeXML = decode_2.decodeXML, exports.decodeHTML = decode_2.decodeHTML, \n    exports.decodeHTMLStrict = decode_2.decodeHTMLStrict, exports.decodeHTML4 = decode_2.decodeHTML, \n    exports.decodeHTML5 = decode_2.decodeHTML, exports.decodeHTML4Strict = decode_2.decodeHTMLStrict, \n    exports.decodeHTML5Strict = decode_2.decodeHTMLStrict, exports.decodeXMLStrict = decode_2.decodeXML;\n}, function(module) {\n    module.exports = JSON.parse(\'{"elementNames":{"altglyph":"altGlyph","altglyphdef":"altGlyphDef","altglyphitem":"altGlyphItem","animatecolor":"animateColor","animatemotion":"animateMotion","animatetransform":"animateTransform","clippath":"clipPath","feblend":"feBlend","fecolormatrix":"feColorMatrix","fecomponenttransfer":"feComponentTransfer","fecomposite":"feComposite","feconvolvematrix":"feConvolveMatrix","fediffuselighting":"feDiffuseLighting","fedisplacementmap":"feDisplacementMap","fedistantlight":"feDistantLight","fedropshadow":"feDropShadow","feflood":"feFlood","fefunca":"feFuncA","fefuncb":"feFuncB","fefuncg":"feFuncG","fefuncr":"feFuncR","fegaussianblur":"feGaussianBlur","feimage":"feImage","femerge":"feMerge","femergenode":"feMergeNode","femorphology":"feMorphology","feoffset":"feOffset","fepointlight":"fePointLight","fespecularlighting":"feSpecularLighting","fespotlight":"feSpotLight","fetile":"feTile","feturbulence":"feTurbulence","foreignobject":"foreignObject","glyphref":"glyphRef","lineargradient":"linearGradient","radialgradient":"radialGradient","textpath":"textPath"},"attributeNames":{"definitionurl":"definitionURL","attributename":"attributeName","attributetype":"attributeType","basefrequency":"baseFrequency","baseprofile":"baseProfile","calcmode":"calcMode","clippathunits":"clipPathUnits","diffuseconstant":"diffuseConstant","edgemode":"edgeMode","filterunits":"filterUnits","glyphref":"glyphRef","gradienttransform":"gradientTransform","gradientunits":"gradientUnits","kernelmatrix":"kernelMatrix","kernelunitlength":"kernelUnitLength","keypoints":"keyPoints","keysplines":"keySplines","keytimes":"keyTimes","lengthadjust":"lengthAdjust","limitingconeangle":"limitingConeAngle","markerheight":"markerHeight","markerunits":"markerUnits","markerwidth":"markerWidth","maskcontentunits":"maskContentUnits","maskunits":"maskUnits","numoctaves":"numOctaves","pathlength":"pathLength","patterncontentunits":"patternContentUnits","patterntransform":"patternTransform","patternunits":"patternUnits","pointsatx":"pointsAtX","pointsaty":"pointsAtY","pointsatz":"pointsAtZ","preservealpha":"preserveAlpha","preserveaspectratio":"preserveAspectRatio","primitiveunits":"primitiveUnits","refx":"refX","refy":"refY","repeatcount":"repeatCount","repeatdur":"repeatDur","requiredextensions":"requiredExtensions","requiredfeatures":"requiredFeatures","specularconstant":"specularConstant","specularexponent":"specularExponent","spreadmethod":"spreadMethod","startoffset":"startOffset","stddeviation":"stdDeviation","stitchtiles":"stitchTiles","surfacescale":"surfaceScale","systemlanguage":"systemLanguage","tablevalues":"tableValues","targetx":"targetX","targety":"targetY","textlength":"textLength","viewbox":"viewBox","viewtarget":"viewTarget","xchannelselector":"xChannelSelector","ychannelselector":"yChannelSelector","zoomandpan":"zoomAndPan"}}\');\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    function getChildren(elem) {\n        return elem.children || null;\n    }\n    function getParent(elem) {\n        return elem.parent || null;\n    }\n    function getAttributeValue(elem, name) {\n        return elem.attribs && elem.attribs[name];\n    }\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    }), exports.getChildren = getChildren, exports.getParent = getParent, exports.getSiblings = function(elem) {\n        var parent = getParent(elem);\n        return parent ? getChildren(parent) : [ elem ];\n   }, exports.getAttributeValue = getAttributeValue, exports.hasAttrib = function(elem, name) {\n        return !!getAttributeValue(elem, name);\n    }, exports.getName = function(elem) {\n        return elem.name;\n    };\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    }), exports.removeElement = function(elem) {\n        if (elem.prev && (elem.prev.next = elem.next), elem.next && (elem.next.prev = elem.prev), \n        elem.parent) {\n            var childs = elem.parent.children;\n            childs.splice(childs.lastIndexOf(elem), 1);\n        }\n    }, exports.replaceElement = function(elem, replacement) {\n        var prev = replacement.prev = elem.prev;\n        prev && (prev.next = replacement);\n        var next = replacement.next = elem.next;\n        next && (next.prev = replacement);\n        var parent = replacement.parent = elem.parent;\n        if (parent) {\n            var childs = parent.children;\n            childs[childs.lastIndexOf(elem)] = replacement;\n        }\n    }, exports.appendChild = function(elem, child) {\n        if (child.parent = elem, 1 !== elem.children.push(child)) {\n            var sibling = elem.children[elem.children.length - 2];\n            sibling.next = child, child.prev = sibling, child.next = null;\n        }\n    }, exports.append = function(elem, next) {\n        var parent = elem.parent, currNext = elem.next;\n        if (next.next = currNext, next.prev = elem, elem.next = next, next.parent = parent, \n        currNext) {\n            if (currNext.prev = next, parent) {\n                var childs = parent.children;\n                childs.splice(childs.lastIndexOf(currNext), 0, next);\n            }\n        } else parent && parent.children.push(next);\n    }, exports.prepend = function(elem, prev) {\n        var parent = elem.parent;\n        if (parent) {\n            var childs = parent.children;\n            childs.splice(childs.lastIndexOf(elem), 0, prev);\n        }\n        elem.prev && (elem.prev.next = prev), prev.parent = parent, prev.prev = elem.prev, \n        prev.next = elem, elem.prev = prev;\n    };\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    });\n    var querying_1 = __webpack_require__(21), tagtypes_1 = __webpack_require__(8);\n    function isTextNode(node) {\n        return "text" === node.type;\n    }\n    var Checks = {\n        tag_name: function(name) {\n            return "function" == typeof name ? function(elem) {\n               return tagtypes_1.isTag(elem) && name(elem.name);\n            } : "*" === name ? tagtypes_1.isTag : function(elem) {\n               return tagtypes_1.isTag(elem) && elem.name === name;\n            };\n        },\n        tag_type: function(type) {\n            return "function" == typeof type ? function(elem) {\n               return type(elem.type);\n            } : function(elem) {\n                return elem.type === type;\n            };\n        },\n        tag_contains: function(data) {\n            return "function" == typeof data ? function(elem) {\n               return isTextNode(elem) && data(elem.data);\n            } : function(elem) {\n                return isTextNode(elem) && elem.data === data;\n            };\n        }\n    };\n    function getAttribCheck(attrib, value) {\n        return "function" == typeof value ? function(elem) {\n           return tagtypes_1.isTag(elem) && value(elem.attribs[attrib]);\n        } : function(elem) {\n            return tagtypes_1.isTag(elem) && elem.attribs[attrib] === value;\n        };\n    }\n    function combineFuncs(a, b) {\n        return function(elem) {\n            return a(elem) || b(elem);\n        };\n    }\n    function compileTest(options) {\n        var funcs = Object.keys(options).map((function(key) {\n            var value = options[key];\n            return key in Checks ? Checks[key](value) : getAttribCheck(key, value);\n       }));\n        return 0 === funcs.length ? null : funcs.reduce(combineFuncs);\n   }\n    exports.testElement = function(options, element) {\n        var test = compileTest(options);\n        return !test || test(element);\n    }, exports.getElements = function(options, element, recurse, limit) {\n        void 0 === limit && (limit = 1 / 0);\n        var test = compileTest(options);\n        return test ? querying_1.filter(test, element, recurse, limit) : [];\n   }, exports.getElementById = function(id, element, recurse) {\n        return void 0 === recurse && (recurse = !0), Array.isArray(element) || (element = [ element ]), \n        querying_1.findOne(getAttribCheck("id", id), element, recurse);\n    }, exports.getElementsByTagName = function(name, element, recurse, limit) {\n        return void 0 === limit && (limit = 1 / 0), querying_1.filter(Checks.tag_name(name), element, recurse, limit);\n    }, exports.getElementsByTagType = function(type, element, recurse, limit) {\n        return void 0 === recurse && (recurse = !0), void 0 === limit && (limit = 1 / 0), \n        querying_1.filter(Checks.tag_type(type), element, recurse, limit);\n    };\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    });\n    var tagtypes_1 = __webpack_require__(8);\n    function compareDocumentPosition(nodeA, nodeB) {\n        var aParents = [], bParents = [];\n        if (nodeA === nodeB) return 0;\n        for (var current = tagtypes_1.hasChildren(nodeA) ? nodeA : nodeA.parent; current; ) aParents.unshift(current), \n       current = current.parent;\n        for (current = tagtypes_1.hasChildren(nodeB) ? nodeB : nodeB.parent; current; ) bParents.unshift(current), \n       current = current.parent;\n        for (var idx = 0; aParents[idx] === bParents[idx]; ) idx++;\n        if (0 === idx) return 1;\n        var sharedParent = aParents[idx - 1], siblings = sharedParent.children, aSibling = aParents[idx], bSibling = bParents[idx];\n        return siblings.indexOf(aSibling) > siblings.indexOf(bSibling) ? sharedParent === nodeB ? 20 : 4 : sharedParent === nodeA ? 10 : 2;\n    }\n    exports.removeSubsets = function(nodes) {\n        for (var idx = nodes.length; --idx >= 0; ) {\n            var node = nodes[idx];\n            if (idx > 0 && nodes.lastIndexOf(node, idx - 1) >= 0) nodes.splice(idx, 1); else for (var ancestor = node.parent; ancestor; ancestor = ancestor.parent) if (nodes.indexOf(ancestor) > -1) {\n                nodes.splice(idx, 1);\n                break;\n            }\n        }\n        return nodes;\n    }, exports.compareDocumentPosition = compareDocumentPosition, exports.uniqueSort = function(nodes) {\n        return (nodes = nodes.filter((function(node, i, arr) {\n            return !arr.includes(node, i + 1);\n        }))).sort((function(a, b) {\n            var relative = compareDocumentPosition(a, b);\n            return 2 & relative ? -1 : 4 & relative ? 1 : 0;\n       })), nodes;\n    };\n}, function(module, exports) {}, function(module, exports, __webpack_require__) {\n    "use strict";\n    var extendStatics, __extends = this && this.__extends || (extendStatics = function(d, b) {\n        return (extendStatics = Object.setPrototypeOf || {\n            __proto__: []\n        } instanceof Array && function(d, b) {\n            d.__proto__ = b;\n        } || function(d, b) {\n            for (var p in b) b.hasOwnProperty(p) && (d[p] = b[p]);\n        })(d, b);\n    }, function(d, b) {\n        function __ {\n            this.constructor = d;\n        }\n        extendStatics(d, b), d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, \n        new __);\n    }), __importDefault = this && this.__importDefault || function(mod) {\n        return mod && mod.__esModule ? mod : {\n           default: mod\n        };\n    };\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    });\n    var CollectingHandler = function(_super) {\n        function CollectingHandler(cbs) {\n            void 0 === cbs && (cbs = {});\n            var _this = _super.call(this, (function(name) {\n                for (var _a, args = [], _i = 1; _i < arguments.length; _i++) args[_i - 1] = arguments[_i];\n                _this.events.push([ name ].concat(args)), _this._cbs[name] && (_a = _this._cbs)[name].apply(_a, args);\n            })) || this;\n            return _this._cbs = cbs, _this.events = [], _this;\n        }\n        return __extends(CollectingHandler, _super), CollectingHandler.prototype.onreset = function {\n            this.events = [], this._cbs.onreset && this._cbs.onreset;\n        }, CollectingHandler.prototype.restart = function {\n            var _a;\n            this._cbs.onreset && this._cbs.onreset;\n            for (var i = 0; i < this.events.length; i++) {\n                var _b = this.events[i], name_1 = _b[0], args = _b.slice(1);\n                this._cbs[name_1] && (_a = this._cbs)[name_1].apply(_a, args);\n            }\n        }, CollectingHandler;\n    }(__importDefault(__webpack_require__(43)).default);\n    exports.CollectingHandler = CollectingHandler;\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    Object.defineProperty(exports, "__esModule", {\n        value: !0\n    });\n    var MultiplexHandler = function {\n        function MultiplexHandler(func) {\n            this._func = func;\n        }\n        return MultiplexHandler.prototype.onattribute = function(name, value) {\n            this._func("onattribute", name, value);\n        }, MultiplexHandler.prototype.oncdatastart = function {\n            this._func("oncdatastart");\n        }, MultiplexHandler.prototype.oncdataend = function {\n            this._func("oncdataend");\n        }, MultiplexHandler.prototype.ontext = function(text) {\n            this._func("ontext", text);\n        }, MultiplexHandler.prototype.onprocessinginstruction = function(name, value) {\n            this._func("onprocessinginstruction", name, value);\n        }, MultiplexHandler.prototype.oncomment = function(comment) {\n            this._func("oncomment", comment);\n        }, MultiplexHandler.prototype.oncommentend = function {\n            this._func("oncommentend");\n        }, MultiplexHandler.prototype.onclosetag = function(name) {\n            this._func("onclosetag", name);\n        }, MultiplexHandler.prototype.onopentag = function(name, attribs) {\n            this._func("onopentag", name, attribs);\n        }, MultiplexHandler.prototype.onopentagname = function(name) {\n            this._func("onopentagname", name);\n        }, MultiplexHandler.prototype.onerror = function(error) {\n            this._func("onerror", error);\n        }, MultiplexHandler.prototype.onend = function {\n            this._func("onend");\n        }, MultiplexHandler.prototype.onparserinit = function(parser) {\n            this._func("onparserinit", parser);\n        }, MultiplexHandler.prototype.onreset = function {\n            this._func("onreset");\n        }, MultiplexHandler;\n    };\n    exports.default = MultiplexHandler;\n}, function(module, exports, __webpack_require__) {\n    "use strict";\n    module.exports = function(table, quoteStyle) {\n        var decimal, useTable, useQuoteStyle, entities = {}, hashMap = {}, constMappingTable = {}, constMappingQuoteStyle = {};\n        if (constMappingTable[0] = "HTML_SPECIALCHARS", constMappingTable[1] = "HTML_ENTITIES", \n        constMappingQuoteStyle[0] = "ENT_NOQUOTES", constMappingQuoteStyle[2] = "ENT_COMPAT", \n        constMappingQuoteStyle[3] = "ENT_QUOTES", useTable = isNaN(table) ? table ? table.toUpperCase : "HTML_SPECIALCHARS" : constMappingTable[table], \n       useQuoteStyle = isNaN(quoteStyle) ? quoteStyle ? quoteStyle.toUpperCase : "ENT_COMPAT" : constMappingQuoteStyle[quoteStyle], \n       "HTML_SPECIALCHARS" !== useTable && "HTML_ENTITIES" !== useTable) throw new Error("Table: " + useTable + " not supported");\n        for (decimal in entities[38] = "&amp;", "HTML_ENTITIES" === useTable && (entities[160] = " ", \n        entities[161] = "&iexcl;", entities[162] = "&cent;", entities[163] = "&pound;", \n        entities[164] = "&curren;", entities[165] = "&yen;", entities[166] = "&brvbar;", \n        entities[167] = "&sect;", entities[168] = "&uml;", entities[169] = "&copy;", entities[170] = "&ordf;", \n        entities[171] = "&laquo;", entities[172] = "&not;", entities[173] = "&shy;", entities[174] = "&reg;", \n        entities[175] = "&macr;", entities[176] = "&deg;", entities[177] = "&plusmn;", entities[178] = "&sup2;", \n        entities[179] = "&sup3;", entities[180] = "&acute;", entities[181] = "&micro;", \n        entities[182] = "&para;", entities[183] = "&middot;", entities[184] = "&cedil;", \n        entities[185] = "&sup1;", entities[186] = "&ordm;", entities[187] = "&raquo;", entities[188] = "&frac14;", \n        entities[189] = "&frac12;", entities[190] = "&frac34;", entities[191] = "&iquest;", \n        entities[192] = "&Agrave;", entities[193] = "&Aacute;", entities[194] = "&Acirc;", \n        entities[195] = "&Atilde;", entities[196] = "&Auml;", entities[197] = "&Aring;", \n        entities[198] = "&AElig;", entities[199] = "&Ccedil;", entities[200] = "&Egrave;", \n        entities[201] = "&Eacute;", entities[202] = "&Ecirc;", entities[203] = "&Euml;", \n        entities[204] = "&Igrave;", entities[205] = "&Iacute;", entities[206] = "&Icirc;", \n        entities[207] = "&Iuml;", entities[208] = "&ETH;", entities[209] = "&Ntilde;", entities[210] = "&Ograve;", \n        entities[211] = "&Oacute;", entities[212] = "&Ocirc;", entities[213] = "&Otilde;", \n        entities[214] = "&Ouml;", entities[215] = "&times;", entities[216] = "&Oslash;", \n        entities[217] = "&Ugrave;", entities[218] = "&Uacute;", entities[219] = "&Ucirc;", \n        entities[220] = "&Uuml;", entities[221] = "&Yacute;", entities[222] = "&THORN;", \n        entities[223] = "&szlig;", entities[224] = "&agrave;", entities[225] = "&aacute;", \n        entities[226] = "&acirc;", entities[227] = "&atilde;", entities[228] = "&auml;", \n        entities[229] = "&aring;", entities[230] = "&aelig;", entities[231] = "&ccedil;", \n        entities[232] = "&egrave;", entities[233] = "&eacute;", entities[234] = "&ecirc;", \n        entities[235] = "&euml;", entities[236] = "&igrave;", entities[237] = "&iacute;", \n        entities[238] = "&icirc;", entities[239] = "&iuml;", entities[240] = "&eth;", entities[241] = "&ntilde;", \n        entities[242] = "&ograve;", entities[243] = "&oacute;", entities[244] = "&ocirc;", \n        entities[245] = "&otilde;", entities[246] = "&ouml;", entities[247] = "&divide;", \n        entities[248] = "&oslash;", entities[249] = "&ugrave;", entities[250] = "&uacute;", \n        entities[251] = "&ucirc;", entities[252] = "&uuml;", entities[253] = "&yacute;", \n        entities[254] = "&thorn;", entities[255] = "&yuml;"), "ENT_NOQUOTES" !== useQuoteStyle && (entities[34] = "&quot;"), \n        "ENT_QUOTES" === useQuoteStyle && (entities[39] = "&#39;"), entities[60] = "&lt;", \n        entities[62] = "&gt;", entities) entities.hasOwnProperty(decimal) && (hashMap[String.fromCharCode(decimal)] = entities[decimal]);\n        return hashMap;\n    };\n} ]);', null); }; }, function(module, exports, __webpack_require__) { "use strict"; module.exports = function(table, quoteStyle) { var decimal, useTable, useQuoteStyle, entities = {}, hashMap = {}, constMappingTable = {}, constMappingQuoteStyle = {}; if (constMappingTable[0] = "HTML_SPECIALCHARS", constMappingTable[1] = "HTML_ENTITIES",        constMappingQuoteStyle[0] = "ENT_NOQUOTES", constMappingQuoteStyle[2] = "ENT_COMPAT",         constMappingQuoteStyle[3] = "ENT_QUOTES", useTable = isNaN(table) ? table ? table.toUpperCase : "HTML_SPECIALCHARS" : constMappingTable[table],         useQuoteStyle = isNaN(quoteStyle) ? quoteStyle ? quoteStyle.toUpperCase : "ENT_COMPAT" : constMappingQuoteStyle[quoteStyle],         "HTML_SPECIALCHARS" !== useTable && "HTML_ENTITIES" !== useTable) throw new Error("Table: " + useTable + " not supported"); for (decimal in entities[38] = "&amp;", "HTML_ENTITIES" === useTable && (entities[160] = " ", entities[161] = "&iexcl;", entities[162] = "&cent;", entities[163] = "&pound;", entities[164] = "&curren;", entities[165] = "&yen;", entities[166] = "&brvbar;", entities[167] = "&sect;", entities[168] = "&uml;", entities[169] = "&copy;", entities[170] = "&ordf;", entities[171] = "&laquo;", entities[172] = "&not;", entities[173] = "&shy;", entities[174] = "&reg;", entities[175] = "&macr;", entities[176] = "&deg;", entities[177] = "&plusmn;", entities[178] = "&sup2;", entities[179] = "&sup3;", entities[180] = "&acute;", entities[181] = "&micro;", entities[182] = "&para;", entities[183] = "&middot;", entities[184] = "&cedil;", entities[185] = "&sup1;", entities[186] = "&ordm;", entities[187] = "&raquo;", entities[188] = "&frac14;", entities[189] = "&frac12;", entities[190] = "&frac34;", entities[191] = "&iquest;", entities[192] = "&Agrave;", entities[193] = "&Aacute;", entities[194] = "&Acirc;", entities[195] = "&Atilde;", entities[196] = "&Auml;", entities[197] = "&Aring;", entities[198] = "&AElig;", entities[199] = "&Ccedil;", entities[200] = "&Egrave;", entities[201] = "&Eacute;", entities[202] = "&Ecirc;", entities[203] = "&Euml;", entities[204] = "&Igrave;", entities[205] = "&Iacute;", entities[206] = "&Icirc;", entities[207] = "&Iuml;", entities[208] = "&ETH;", entities[209] = "&Ntilde;", entities[210] = "&Ograve;", entities[211] = "&Oacute;", entities[212] = "&Ocirc;", entities[213] = "&Otilde;", entities[214] = "&Ouml;", entities[215] = "&times;", entities[216] = "&Oslash;", entities[217] = "&Ugrave;", entities[218] = "&Uacute;", entities[219] = "&Ucirc;", entities[220] = "&Uuml;", entities[221] = "&Yacute;", entities[222] = "&THORN;", entities[223] = "&szlig;", entities[224] = "&agrave;", entities[225] = "&aacute;", entities[226] = "&acirc;", entities[227] = "&atilde;", entities[228] = "&auml;", entities[229] = "&aring;", entities[230] = "&aelig;", entities[231] = "&ccedil;", entities[232] = "&egrave;", entities[233] = "&eacute;", entities[234] = "&ecirc;", entities[235] = "&euml;", entities[236] = "&igrave;", entities[237] = "&iacute;", entities[238] = "&icirc;", entities[239] = "&iuml;", entities[240] = "&eth;", entities[241] = "&ntilde;", entities[242] = "&ograve;", entities[243] = "&oacute;", entities[244] = "&ocirc;", entities[245] = "&otilde;", entities[246] = "&ouml;", entities[247] = "&divide;", entities[248] = "&oslash;", entities[249] = "&ugrave;", entities[250] = "&uacute;", entities[251] = "&ucirc;", entities[252] = "&uuml;", entities[253] = "&yacute;", entities[254] = "&thorn;", entities[255] = "&yuml;"), "ENT_NOQUOTES" !== useQuoteStyle && (entities[34] = "&quot;"),        "ENT_QUOTES" === useQuoteStyle && (entities[39] = "&#39;"), entities[60] = "&lt;",         entities[62] = "&gt;", entities) entities.hasOwnProperty(decimal) && (hashMap[String.fromCharCode(decimal)] = entities[decimal]); return hashMap; }; }, function(module, exports, __webpack_require__) { "use strict"; var URL = window.URL || window.webkitURL; module.exports = function(content, url) { try { try { var blob; try { (blob = new (window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder)).append(content), blob = blob.getBlob; } catch (e) { blob = new Blob([ content ]); }               return new Worker(URL.createObjectURL(blob)); } catch (e) { return new Worker("data:application/javascript," + encodeURIComponent(content)); }       } catch (e) { if (!url) throw Error("Inline worker is not supported"); return new Worker(url); }   }; }, function(module, exports, __webpack_require__) { (exports = __webpack_require__(4)(!1)).push([ module.i, "a:not([href]) {\n cursor: pointer;\n}\n", "" ]), module.exports = exports; }, function(module, exports, __webpack_require__) { var api = __webpack_require__(3), content = __webpack_require__(14); "string" == typeof (content = content.__esModule ? content.default : content) && (content = [ [ module.i, content, "" ] ]); var options = { insert: "head", singleton: !1 };   api(content, options); module.exports = content.locals || {}; }, function(module, exports, __webpack_require__) { (exports = __webpack_require__(4)(!1)).push, module.exports = exports; }, function(module, exports, __webpack_require__) { var api = __webpack_require__(3), content = __webpack_require__(16); "string" == typeof (content = content.__esModule ? content.default : content) && (content = [ [ module.i, content, "" ] ]); var options = { insert: "head", singleton: !1 };   api(content, options); module.exports = content.locals || {}; }, function(module, exports, __webpack_require__) { (exports = __webpack_require__(4)(!1)).push, module.exports = exports; }, function(module, exports, __webpack_require__) { var api = __webpack_require__(3), content = __webpack_require__(18); "string" == typeof (content = content.__esModule ? content.default : content) && (content = [ [ module.i, content, "" ] ]); var options = { insert: "head", singleton: !1 };   api(content, options); module.exports = content.locals || {}; }, function(module, exports, __webpack_require__) { (exports = __webpack_require__(4)(!1)).push([ module.i, '.cd-sectionLinkWrapper::before {\n content: " | ";\n  color: #54595d;\n}\n.cd-sectionLink-pending.cd-sectionLink-pending {\n  opacity: 0.5;\n  cursor: wait;\n  text-decoration: none;\n}\n.cd-sectionButtonContainer {\n  margin-top: 0.5em;\n}\n.cd-replyWrapper:not(.cd-commentForm) {\n  margin-left: -1px;\n}\n.cd-sectionButton {\n  padding-top: 0;\n  padding-bottom: 0;\n}\nol .cd-sectionButton {\n  margin-top: -2px;\n}\n', "" ]), module.exports = exports; }, function(module, exports, __webpack_require__) { var api = __webpack_require__(3), content = __webpack_require__(20); "string" == typeof (content = content.__esModule ? content.default : content) && (content = [ [ module.i, content, "" ] ]); var options = { insert: "head", singleton: !1 };   api(content, options); module.exports = content.locals || {}; }, function(module, exports, __webpack_require__) { (exports = __webpack_require__(4)(!1)).push([ module.i, ".cd-commentUnderlay {\n position: absolute;\n  z-index: -1;\n}\n.cd-commentUnderlay-focused.cd-commentUnderlay-focused {\n  background-color: var(--cd-comment-underlay-focused-color);\n}\n.cd-commentUnderlay-target.cd-commentUnderlay-target {\n  background-color: var(--cd-comment-underlay-target-color);\n}\n.cd-commentUnderlay-new {\n  background-color: var(--cd-comment-underlay-new-color);\n}\n.cd-commentUnderlay-own {\n  background-color: var(--cd-comment-underlay-own-color);\n}\n.cd-commentOverlay {\n  position: absolute;\n  display: none;\n  pointer-events: none;\n}\n.cd-commentOverlay-focused {\n  display: block;\n}\n.cd-commentOverlay-innerWrapper {\n  position: absolute;\n  z-index: 1;\n  bottom: 0;\n  right: 0;\n  font-size: 14px;\n  line-height: normal;\n  pointer-events: all;\n}\n.cd-commentOverlay-gradient {\n  width: 1.4em;\n  display: inline-block;\n  padding: 0 1px 4px;\n  line-height: 1.28571429em;\n  -moz-user-select: none;\n  -webkit-user-select: none;\n  user-select: none;\n}\n.cd-commentOverlay-content {\n  display: inline-block;\n  padding: 0 0.5em 2px;\n  background-color: var(--cd-comment-underlay-focused-color);\n}\n.cd-commentOverlay-content .oo-ui-buttonWidget {\n  margin-right: 0;\n}\n.cd-commentOverlay-content .cd-commentButton:not(:first-child) {\n  margin-left: 1em;\n}\n.cd-commentOverlay .cd-button.oo-ui-buttonElement-frameless.oo-ui-widget-enabled > .oo-ui-buttonElement-button:hover,\n.cd-commentOverlay .cd-button.oo-ui-buttonElement-frameless.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active {\n  background-color: transparent;\n}\n.cd-commentLayersContainerParent {\n  position: relative;\n  z-index: 0;\n}\n", "" ]), module.exports = exports; }, function(module, exports, __webpack_require__) { var api = __webpack_require__(3), content = __webpack_require__(22); "string" == typeof (content = content.__esModule ? content.default : content) && (content = [ [ module.i, content, "" ] ]); var options = { insert: "head", singleton: !1 };   api(content, options); module.exports = content.locals || {}; }, function(module, exports, __webpack_require__) { (exports = __webpack_require__(4)(!1)).push, module.exports = exports; }, function(module, exports, __webpack_require__) { var api = __webpack_require__(3), content = __webpack_require__(24); "string" == typeof (content = content.__esModule ? content.default : content) && (content = [ [ module.i, content, "" ] ]); var options = { insert: "head", singleton: !1 };   api(content, options); module.exports = content.locals || {}; }, function(module, exports, __webpack_require__) { (exports = __webpack_require__(4)(!1)).push([ module.i, ".skin-monobook .cd-commentUnderlay {\n z-index: -1;\n}\n.skin-monobook .cd-commentOverlay-innerWrapper {\n  z-index: 2;\n}\n.skin-monobook .cd-commentButton.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {\n  line-height: 1.172em;\n}\n.skin-monobook .cd-commentInput {\n  border: 1px solid #ccc;\n}\n.skin-monobook .cd-commentInput .wikiEditor-ui .wikiEditor-ui-top {\n  border-color: #ccc;\n}\n.skin-monobook .cd-insertButtons {\n  border-color: #ccc;\n}\n.skin-monobook .cd-toolbarPlaceholder {\n  border-color: #ccc;\n}\n.skin-timeless .mw-body-content,\n.skin-modern #mw-content-text {\n  position: relative;\n}\n.skin-minerva #mw-content-text dl {\n  margin-left: 0;\n}\n.skin-minerva #mw-content-text dd {\n  margin-left: 1em;\n}\n", "" ]), module.exports = exports; }, function(module, exports, __webpack_require__) { var api = __webpack_require__(3), content = __webpack_require__(26); "string" == typeof (content = content.__esModule ? content.default : content) && (content = [ [ module.i, content, "" ] ]); var options = { insert: "head", singleton: !1 };   api(content, options); module.exports = content.locals || {}; }, function(module, exports, __webpack_require__) { (exports = __webpack_require__(4)(!1)).push([ module.i, ".cd-commentButton.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button,\n.cd-sectionButton.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button {\n padding: 0;\n}\n.cd-commentButton.oo-ui-buttonElement-frameless.oo-ui-labelElement:first-child,\n.cd-sectionButton.oo-ui-buttonElement-frameless.oo-ui-labelElement:first-child {\n  margin-left: 0;\n}\n.cd-button.oo-ui-buttonElement > .oo-ui-buttonElement-button {\n  min-height: unset;\n}\nol > .cd-replyWrapper:not(.cd-replyWrapper-hasCommentForm) {\n  list-style-type: none;\n}\n.action-view .cd-hidden:not(#cd-notExistingClass) {\n  display: none;\n}\np.cd-shown {\n  display: block !important;\n}\n.cd-destructiveText {\n  color: #d33;\n}\n.cd-loadingPopup {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 1.5em;\n  z-index: 111;\n  margin: 0 auto;\n  padding: 17px 17px 11px 17px;\n  background-color: #fff;\n  border: 1px solid #c8ccd1;\n}\n.cd-loadingPopup-logo {\n  display: block;\n  margin: 0 auto;\n}\n.cd-spaceBeforeSectionMenu {\n  height: 0;\n  float: right;\n}\n.cd-notification-restoreCommentForms {\n  display: inline-block;\n  padding: 0.25em;\n  margin: -0.25em;\n}\n", "" ]), module.exports = exports; }, function(module, exports, __webpack_require__) { var api = __webpack_require__(3), content = __webpack_require__(28); "string" == typeof (content = content.__esModule ? content.default : content) && (content = [ [ module.i, content, "" ] ]); var options = { insert: "head", singleton: !1 };   api(content, options); module.exports = content.locals || {}; }, function(module, exports, __webpack_require__) { (exports = __webpack_require__(4)(!1)).push([ module.i, ".cd-commentLink-interesting a {\n font-weight: bold;\n}\n.cd-watchlistMenu {\n  display: inline-block;\n  border: 1px solid #a2a9b1;\n  border-radius: 2px;\n  padding: 0 0.5em 0.5em;\n  vertical-align: top;\n  margin: -10px 1em 0 0.5em;\n}\n#mw-watchlist-options .cd-watchlistMenu {\n  float: right;\n}\n.cd-watchlistMenu-legend {\n  padding: 0 0.5em;\n}\n.cd-watchlistMenu-button {\n  margin-right: 0;\n}\n.cd-watchlistMenu-button-switchInteresting {\n  margin-bottom: -2px;\n}\n.cd-editWatchedSections-input {\n  margin: 1px 0;\n}\n.cd-editWatchedSections-input textarea {\n  resize: none;\n}\n", "" ]), module.exports = exports; }, function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); var nano_css = __webpack_require__(6), asyncToGenerator = __webpack_require__(1), asyncToGenerator_default = __webpack_require__.n(asyncToGenerator), classPrivateFieldGet = __webpack_require__(0), classPrivateFieldGet_default = __webpack_require__.n(classPrivateFieldGet), classPrivateFieldSet = __webpack_require__(2), classPrivateFieldSet_default = __webpack_require__.n(classPrivateFieldSet); class CdError extends Error { constructor(data) { let message; data ? (message = data.type, data.code && (message += "/".concat(data.code)), data.apiData && data.apiData.error && data.apiData.error.code && (message += "/".concat(data.apiData.error.code))) : message = "", super(message), this.name = "CdError", this.data = data; }   }    const context = "undefined" == typeof window ? self : window; context.convenientDiscussions = context.convenientDiscussions || {}, "object" != typeof context.convenientDiscussions && (context.convenientDiscussions = {}); var cd = context.convenientDiscussions; class TreeWalker { constructor(root, acceptNode, onlyElementNodes = !1, startNode = root) { this.acceptNode = acceptNode, this.root = root, this.currentNode = startNode, onlyElementNodes ? (this.firstChildProperty = "firstElementChild",            this.lastChildProperty = "lastElementChild", this.previousSiblingProperty = "previousElementSibling",             this.nextSiblingProperty = "nextElementSibling") : (this.firstChildProperty = "firstChild",             this.lastChildProperty = "lastChild", this.previousSiblingProperty = "previousSibling",             this.nextSiblingProperty = "nextSibling"); }       tryMove(property) { let node = this.currentNode; if (node === this.root && !property.includes("Child")) return null; do { node = node[property]; } while (node && this.acceptNode && !this.acceptNode(node)); return node && (this.currentNode = node), node || null; }       parentNode { return this.tryMove("parentNode"); }       firstChild { return this.tryMove(this.firstChildProperty); }       lastChild { return this.tryMove(this.lastChildProperty); }       previousSibling { return this.tryMove(this.previousSiblingProperty); }       nextSibling { return this.tryMove(this.nextSiblingProperty); }       nextNode { let node = this.currentNode; do { if (node[this.firstChildProperty]) node = node[this.firstChildProperty]; else { for (node && !node[this.nextSiblingProperty] && node.parentNode !== this.root; ) node = node.parentNode; node && (node = node[this.nextSiblingProperty]); }           } while (node && this.acceptNode && !this.acceptNode(node)); return node && (this.currentNode = node), node; }       previousNode { let node = this.currentNode; if (node !== this.root) { do { if (node[this.previousSiblingProperty]) for (node = node[this.previousSiblingProperty]; node[this.lastChildProperty]; ) node = node[this.lastChildProperty]; else node = node.parentNode; } while (node && this.acceptNode && !this.acceptNode(node)); return node && (this.currentNode = node), node; }       }    }    class treeWalker_ElementsTreeWalker extends TreeWalker { constructor(startNode) { super(cd.g.rootElement, node => ![ "STYLE", "LINK" ].includes(node.tagName), !0), startNode && (this.currentNode = startNode); }   }    class treeWalker_ElementsAndTextTreeWalker extends TreeWalker { constructor(startNode) { super(cd.g.rootElement, node => node.nodeType === Node.TEXT_NODE || node.nodeType === Node.ELEMENT_NODE && ![ "STYLE", "LINK" ].includes(node.tagName)), startNode && (this.currentNode = startNode); }   }    var _parser = new WeakMap; function removeDuplicates(arr) { return arr && "object" == typeof arr ? arr.filter((value, i) => arr.indexOf(value) === i) : null; }   function isInline(node, countTextNodesAsInline) { return !(!countTextNodesAsInline || node.nodeType !== Node.TEXT_NODE) || (node.nodeType !== Node.ELEMENT_NODE ? null : !!cd.g.POPULAR_INLINE_ELEMENTS.includes(node.tagName) || !cd.g.POPULAR_NOT_INLINE_ELEMENTS.includes(node.tagName) && ("undefined" != typeof window ? (console.warn("Expensive operation: isInline called for the element:", node),        "inline" === window.getComputedStyle(node).display) : null)); }   function caseInsensitiveFirstCharPattern(s) { const firstChar = s[0]; return (firstChar.toUpperCase !== firstChar.toLowerCase ? "[" + firstChar.toUpperCase + firstChar.toLowerCase + "]" : mw.util.escapeRegExp(firstChar)) + mw.util.escapeRegExp(s.slice(1)); }   function isTalkNamespace(namespaceNumber) { return namespaceNumber % 2 == 1 || cd.config.customTalkNamespaces.includes(namespaceNumber); }   function isProbablyTalkPage(page, namespaceNumber) { if (void 0 === namespaceNumber) { namespaceNumber = new mw.Title.newFromText(page).namespace; }       return isTalkNamespace(namespaceNumber) && (namespaceNumber % 2 == 1 || !cd.config.pageWhiteListRegexp || cd.config.pageWhiteListRegexp.test(page)) && (!cd.config.pageBlackListRegexp || !cd.config.pageBlackListRegexp.test(page)); }   function isCommentEdit(summary) { return summary && (summary.includes("".concat(cd.s("es-edit"), " ").concat(cd.s("es-reply-genitive"))) || summary.includes("".concat(cd.s("es-edit"), " ").concat(cd.s("es-addition-genitive")))); }   function isUndo(summary) { return summary && cd.config.undoTexts.some(text => summary.includes(text)); }   function defined(el) { return void 0 !== el; }   function notNull(el) { return null != el; }   function reorderArray(arr, startIndex, reverse = !1) { return reverse ? arr.slice(startIndex + 1).concat(arr.slice(0, startIndex + 1)).reverse : arr.slice(startIndex).concat(arr.slice(0, startIndex)); }   function handleApiReject(code, data) { throw new CdError("http" === code ? {           type: "network"        } : {            type: "api",            code: "error",            apiData: data        }); }   function underlinesToSpaces(s) { return s.replace(/_/g, " "); }   function spacesToUnderlines(s) { return s.replace(/ /g, "_"); }   function animateLink(html, className, callback) { const $link = html instanceof $ ? html : cd.util.wrapInElement(html); return $link.find(".".concat(className)).on("click", callback), $link; }   function firstCharToUpperCase(s) { return s.length ? s[0].toUpperCase + s.slice(1) : ""; }   function util_getMessages(messages) { return messages.map(mw.msg); }   function isInputFocused { return $(":focus:input").length || $(":focus").prop("isContentEditable"); }   var commentLayers = { underlays: [], layersContainers: [], redrawIfNecessary(removeUnhighlighted = !1) { if (!this.underlays.length || document.hidden) return; const comments = [], rootBottom = cd.g.$root.get(0).getBoundingClientRect.bottom + window.pageYOffset; let floatingRects, notMovedCount = 0; cd.comments.slice.reverse.some(comment => {               const shouldBeHighlighted = comment.newness || comment.own && cd.settings.highlightOwnComments;                if ((removeUnhighlighted || comment.positions && comment.positions.bottom > rootBottom) && !shouldBeHighlighted && comment.$underlay) comment.removeLayers; else if (shouldBeHighlighted && !comment.editForm) {                    floatingRects = floatingRects || cd.g.specialElements.floating.map(el => el.getBoundingClientRect);                    const isMoved = comment.configureLayers(!1, floatingRects);                    if (isMoved) notMovedCount = 0, comments.push(comment); else if (!1 === isMoved && (notMovedCount++,                     2 === notMovedCount)) return !0;                }            }), comments.forEach(comment => {                comment.updateLayersPositions;            }); },       reset { this.underlays = [], this.layersContainers.forEach(container => {               container.innerHTML = "";            }); }   }, userRegistry = { users: {}, getUser(name) { if (name.includes("#") && (name = name.slice(0, name.indexOf("#"))), name = underlinesToSpaces(firstCharToUpperCase(name)).trim,            !this.users[name]) { const options = name === cd.g.CURRENT_USER_NAME ? {                   gender: cd.g.CURRENT_USER_GENDER } : {};               this.users[name] = new userRegistry_User(name, options); }           return this.users[name]; }   };    class userRegistry_User { constructor(name, options = {}) { _cachedRegistered.set(this, {               writable: !0,                value: void 0            }), this.name = name, this.options = new mw.Map, Object.keys(options).forEach(name => {                this[name] = options[name];            }); }       get registered { return void 0 === classPrivateFieldGet_default(this, _cachedRegistered) && classPrivateFieldSet_default(this, _cachedRegistered, !mw.util.isIPAddress(this.name)), classPrivateFieldGet_default(this, _cachedRegistered); }       set gender(value) { this.options.set("gender", value); }       get gender { return this.options.get("gender"); }   }    var _cachedRegistered = new WeakMap, lz_string = __webpack_require__(5), lz_string_default = __webpack_require__.n(lz_string); function packVisits(visits) { return Object.keys(visits).map(key => "".concat(key, ",").concat(visits[key].join(","), "\n")).join("").trim; }   function getSettings { return _getSettings.apply(this, arguments); }   function _getSettings { return (_getSettings = asyncToGenerator_default((function*(reuse = !1) {           const {options: options} = yield getUserInfo(reuse);            let settings;            try {                settings = JSON.parse(options[cd.g.SETTINGS_OPTION_FULL_NAME]) || {};            } catch (e) {                settings = cd.settings;            }            return settings;        }))).apply(this, arguments); }   function setSettings(_x) { return _setSettings.apply(this, arguments); }   function _setSettings { return (_setSettings = asyncToGenerator_default((function*(settings) {           yield setOption(cd.g.SETTINGS_OPTION_FULL_NAME, JSON.stringify(settings || cd.settings));        }))).apply(this, arguments); }   function getVisits { return _getVisits.apply(this, arguments); }   function _getVisits { return (_getVisits = asyncToGenerator_default((function*(reuse = !1) {           const visits = yield cd.g.firstRun && null === mw.user.options.get(cd.g.VISITS_OPTION_FULL_NAME) ? Promise.resolve({}) : getUserInfo(reuse).then(options => options.visits), articleId = mw.config.get("wgArticleId");            let thisPageVisits;            return articleId && (visits[articleId] = visits[articleId] || [], thisPageVisits = visits[articleId]),             cd.g.visits = visits, cd.g.thisPageVisits = thisPageVisits, {                visits: visits,                thisPageVisits: thisPageVisits            };        }))).apply(this, arguments); }   function cleanUpVisits(originalVisits) { const visits = Object.assign({}, originalVisits), timestamps = Object.keys(visits).reduce((acc, key) => acc.concat(visits[key]), []); timestamps.sort; const boundary = timestamps[Math.floor(timestamps.length / 10)]; return Object.keys(visits).forEach(key => {           visits[key] = visits[key].filter(visit => visit >= boundary), visits[key].length || delete visits[key];        }), visits; }   function setVisits(_x2) { return _setVisits.apply(this, arguments); }   function _setVisits { return (_setVisits = asyncToGenerator_default((function*(visits) {           if (!visits) return;            const visitsString = packVisits(visits), visitsStringCompressed = lz_string_default.a.compressToEncodedURIComponent(visitsString);            try {                yield setOption(cd.g.VISITS_OPTION_FULL_NAME, visitsStringCompressed);            } catch (e) {                if (e instanceof CdError) {                    const {type: type, code: code} = e.data;                    "internal" === type && "sizeLimit" === code ? setVisits(cleanUpVisits(visits)) : console.error(e);                } else console.error(e);            }        }))).apply(this, arguments); }   function getWatchedSections { return _getWatchedSections.apply(this, arguments); }   function _getWatchedSections { return (_getWatchedSections = asyncToGenerator_default((function*(reuse = !1, keptData = {}, noTimers = !1) {           const watchedSections = yield cd.g.firstRun && null === mw.user.options.get(cd.g.WATCHED_SECTIONS_OPTION_FULL_NAME) ? Promise.resolve({}) : getUserInfo(reuse).then(options => options.watchedSections), articleId = mw.config.get("wgArticleId");            let thisPageWatchedSections;            return articleId && (watchedSections[articleId] = watchedSections[articleId] || [], thisPageWatchedSections = watchedSections[articleId], keptData.justWatchedSection && (thisPageWatchedSections.includes(keptData.justWatchedSection) || thisPageWatchedSections.push(keptData.justWatchedSection)), keptData.justUnwatchedSection && thisPageWatchedSections.includes(keptData.justUnwatchedSection) && thisPageWatchedSections.splice(thisPageWatchedSections.indexOf(keptData.justUnwatchedSection), 1)),            {                watchedSections: watchedSections,                thisPageWatchedSections: thisPageWatchedSections            };        }))).apply(this, arguments); }   function setWatchedSections(watchedSections) { const watchedSectionsString = function(watchedSections) { return Object.keys(watchedSections).filter(pageId => watchedSections[pageId].length).map(key => " ".concat(key, " ").concat(watchedSections[key].join("\n"), "\n")).join("").trim; }(watchedSections), watchedSectionsStringCompressed = lz_string_default.a.compressToEncodedURIComponent(watchedSectionsString); setOption(cd.g.WATCHED_SECTIONS_OPTION_FULL_NAME, watchedSectionsStringCompressed); }   function makeRequestNoTimers(params, method = "get") { return new Promise((resolve, reject) => {           cd.g.api[method](params, { success: resp => { resp.error ? reject("api", resp) : resolve(resp); },               error: (jqXHR, textStatus) => { reject("http", textStatus); }           });        });    }    function getCurrentPageData { return _getCurrentPageData.apply(this, arguments); }   function _getCurrentPageData { return (_getCurrentPageData = asyncToGenerator_default((function*(markAsRead = !1, noTimers = !1) {           const params = {                action: "parse",                page: cd.g.CURRENT_PAGE,                prop: [ "text", "revid", "modules", "jsconfigvars" ],                formatversion: 2            }, request = noTimers ? makeRequestNoTimers(params).catch(handleApiReject) : cd.g.api.get(params).catch(handleApiReject);            markAsRead && $.get(mw.util.getUrl(cd.g.CURRENT_PAGE));            const resp = yield request;            if (void 0 === resp.parse) throw new CdError({ type: "api", code: "noData" });           return resp.parse;        }))).apply(this, arguments); }   function parseCode(_x, _x2) { return _parseCode.apply(this, arguments); }   function _parseCode { return (_parseCode = asyncToGenerator_default((function*(code, options) {           const defaultOptions = {                action: "parse",                text: code,                prop: [ "text", "modules" ],                pst: !0,                disablelimitreport: !0,                formatversion: 2            };            return cd.g.api.post(Object.assign({}, defaultOptions, options)).then(resp => { const html = resp && resp.parse && resp.parse.text; if (!html) throw new CdError({                   type: "api",                    code: "noData"                }); return mw.loader.load(resp.parse.modules), mw.loader.load(resp.parse.modulestyles), {                   html: html, parsedSummary: resp.parse.parsedsummary };           }, handleApiReject);        }))).apply(this, arguments); }   function getLastRevision(_x3) { return _getLastRevision.apply(this, arguments); }   function _getLastRevision { return (_getLastRevision = asyncToGenerator_default((function*(title) {           if (!mw.config.get("wgArticleId")) return {                code: ""            };            const resp = yield cd.g.api.get({ action: "query", titles: title.toString, prop: "revisions", rvprop: [ "ids", "content" ], redirects: !0, curtimestamp: !0, formatversion: 2 }).catch(handleApiReject), query = resp.query, page = query && query.pages && query.pages[0], revision = page && page.revisions && page.revisions[0];           if (!query || !page) throw new CdError({ type: "api", code: "noData" });           if (page.missing) throw new CdError({ type: "api", code: "missing" });           if (page.invalid) throw new CdError({ type: "api", code: "invalid" });           if (!revision) throw new CdError({ type: "api", code: "noData" });           return {                code: revision.content,                revisionId: revision.revid,                redirectTarget: query.redirects && query.redirects[0] && query.redirects[0].to,                queryTimestamp: resp.curtimestamp            };        }))).apply(this, arguments); }   let keptUserInfoRequest; function getUserInfo(reuse = !1) { if (reuse && keptUserInfoRequest) return keptUserInfoRequest; return keptUserInfoRequest = makeRequestNoTimers({           action: "query",            meta: "userinfo",            uiprop: [ "options", "rights" ],            formatversion: 2        }).then(resp => {            const userinfo = resp && resp.query && resp.query.userinfo, options = userinfo && userinfo.options, rights = userinfo && userinfo.rights;            if (!options || !rights) throw new CdError({ type: "api", code: "noData" });           const visitsCompressed = options[cd.g.VISITS_OPTION_FULL_NAME], visits = function(visitsString) {                const visits = {}, regexp = /^(\d+), *(.+)$/gm;                let match;                for (match = regexp.exec(visitsString); ) visits[match[1]] = match[2].split(",");                return visits;            }(visitsCompressed ? lz_string_default.a.decompressFromEncodedURIComponent(visitsCompressed) : ""), watchedSectionsCompressed = options[cd.g.WATCHED_SECTIONS_OPTION_FULL_NAME], watchedSections = function(watchedSectionsString) {               const watchedSections = {}, pages = watchedSectionsString.split(/(?:^|\n )(\d+) /).slice(1);                let pageId;                for (let i = 0, isPageId = !0; i < pages.length; i++, isPageId = !isPageId) isPageId ? pageId = pages[i] : watchedSections[pageId] = pages[i].split("\n");                return watchedSections;            }(watchedSectionsCompressed ? lz_string_default.a.decompressFromEncodedURIComponent(watchedSectionsCompressed) : "");           return cd.g.CURRENT_USER_RIGHTS = rights, {                options: options,                visits: visits,                watchedSections: watchedSections,                rights: rights            };        }, handleApiReject), keptUserInfoRequest; }   function getPageTitles(_x4) { return _getPageTitles.apply(this, arguments); }   function _getPageTitles { return (_getPageTitles = asyncToGenerator_default((function*(pageIds) {           const allPages = [], limit = cd.g.CURRENT_USER_RIGHTS && cd.g.CURRENT_USER_RIGHTS.includes("apihighlimits") ? 500 : 50;            let nextPageIds;            for (nextPageIds = pageIds.splice(0, limit).join("|"); ) {                const resp = yield cd.g.api.post({ action: "query", pageids: nextPageIds, formatversion: 2 }).catch(handleApiReject);               if (resp.error) throw new CdError({ type: "api", code: "error", apiData: resp });               const query = resp && resp.query, pages = query && query.pages;                if (!pages) throw new CdError({ type: "api", code: "noData" });               allPages.push(...pages);            }            return allPages;        }))).apply(this, arguments); }   function getPageIds(_x5) { return _getPageIds.apply(this, arguments); }   function _getPageIds { return (_getPageIds = asyncToGenerator_default((function*(pageTitles) {           const allPages = [], allNormalized = [], allRedirects = [], limit = cd.g.CURRENT_USER_RIGHTS && cd.g.CURRENT_USER_RIGHTS.includes("apihighlimits") ? 500 : 50;            let nextPageTitles;            for (nextPageTitles = pageTitles.splice(0, limit).join("|"); ) {                const resp = yield cd.g.api.post({ action: "query", titles: nextPageTitles, redirects: !0, formatversion: 2 }).catch(handleApiReject);               if (resp.error) throw new CdError({ type: "api", code: "error", apiData: resp });               const query = resp && resp.query, pages = query && query.pages;                if (!pages) throw new CdError({ type: "api", code: "noData" });               const normalized = query.normalized || [], redirects = query.redirects || [];                allNormalized.push(...normalized), allRedirects.push(...redirects), allPages.push(...pages);            }            return {                pages: allPages,                normalized: allNormalized,                redirects: allRedirects            };        }))).apply(this, arguments); }   function setOption(_x6, _x7) { return _setOption.apply(this, arguments); }   function _setOption { return (_setOption = asyncToGenerator_default((function*(name, value) {           if (value.length > 65535) throw new CdError({ type: "internal", code: "sizeLimit" });           const resp = yield cd.g.api.postWithToken("csrf", { action: "options", optionname: name, optionvalue: value }).catch(handleApiReject);           if (!resp || "success" !== resp.options) throw new CdError({ type: "api", code: "noSuccess" });       }))).apply(this, arguments); }   function getUserGenders(_x8) { return _getUserGenders.apply(this, arguments); }   function _getUserGenders { return (_getUserGenders = asyncToGenerator_default((function*(users, noTimers = !1) {           const usersToRequest = users.filter(user => !user.gender).map(user => user.name), limit = cd.g.CURRENT_USER_RIGHTS && cd.g.CURRENT_USER_RIGHTS.includes("apihighlimits") ? 500 : 50;            let nextUsers;            for (nextUsers = usersToRequest.splice(0, limit).join("|"); ) {                const params = {                    action: "query",                    list: "users",                    ususers: nextUsers,                    usprop: "gender",                    formatversion: 2                }, request = noTimers ? makeRequestNoTimers(params, "post").catch(handleApiReject) : cd.g.api.post(params).catch(handleApiReject), resp = yield request, users = resp && resp.query && resp.query.users;                if (!users) throw new CdError({ type: "api", code: "noData" });               users.forEach(user => { userRegistry.getUser(user.name).gender = user.gender; });           }        }))).apply(this, arguments); }   var jqueryExtensions = { cdRemoveNonElementNodes: function { return this.filter((function { return this.nodeType === Node.ELEMENT_NODE; }));       },        cdScrollTo(alignment = "top", smooth = !0, callback) { cd.g.autoScrollInProgress = !0; let offset, $elements = this.cdRemoveNonElementNodes; const offsetTop = $elements.first.offset.top, offsetLast = $elements.last.offset.top + $elements.last.height; return offset = "center" === alignment ? Math.min(offsetTop, offsetTop + .5 * (offsetLast - offsetTop) - .5 * $(window).height) : "bottom" === alignment ? offsetLast - $(window).height : offsetTop, smooth ? $("body, html").animate({               scrollTop: offset            }, {                complete:  => {                    cd.g.autoScrollInProgress = !1, js_navPanel.isMounted && (js_navPanel.registerSeenComments, js_navPanel.updateCommentFormButton), callback && callback;               }            }) : (window.scrollTo(0, offset), cd.g.autoScrollInProgress = !1, js_navPanel.isMounted && (js_navPanel.registerSeenComments, js_navPanel.updateCommentFormButton)), this; },       cdIsInViewport(partially = !1) { const $elements = this.cdRemoveNonElementNodes, wasHidden = $elements.get.every(el => "none" === el.style.display); wasHidden && $elements.show; const elementTop = $elements.first.offset.top, elementBottom = $elements.last.offset.top + $elements.last.height; wasHidden && $elements.hide; const viewportTop = $(window).scrollTop, viewportBottom = viewportTop + $(window).height; return partially ? elementBottom > viewportTop && elementTop < viewportBottom : elementTop >= viewportTop && elementBottom <= viewportBottom; },       cdScrollIntoView(alignment) { return this.cdIsInViewport || this.cdScrollTo(alignment), this; },       cdGetText { let text; const dummyElement = document.createElement("div"); return Array.from(this.get(0).childNodes).forEach(node => {               dummyElement.appendChild(node.cloneNode(!0));            }), document.body.appendChild(dummyElement), text = dummyElement.innerText, document.body.removeChild(dummyElement), text; },       cdAddCloseButton { if (this.find(".cd-closeButton").length) return this; const $closeButton = $("").attr("title", cd.s("cf-block-close")).addClass("cd-closeButton").on("click", => {                this.empty;            }); return this.prepend($closeButton), this; }   };    let parseTimestampRegexp, parseTimestampRegexpNoTimezone; function parseTimestamp(timestamp, timezoneOffset) { parseTimestampRegexp || (parseTimestampRegexp = new RegExp("^([^]*)(".concat(cd.g.TIMESTAMP_REGEXP.source, ")"))), parseTimestampRegexpNoTimezone || (parseTimestampRegexpNoTimezone = new RegExp("^([^]*)(".concat(cd.g.TIMESTAMP_REGEXP_NO_TIMEZONE.source, ")"))); const regexp = void 0 === timezoneOffset ? parseTimestampRegexp : parseTimestampRegexpNoTimezone, match = timestamp.match(regexp); if (!match) return null; let date = cd.g.TIMESTAMP_PARSER(match, cd.g.TIMESTAMP_MATCHING_GROUPS, cd.g.DIGITS, cd.g.LOCAL_TIMEZONE_OFFSET); return timezoneOffset && (date = new Date(date.getTime - timezoneOffset * cd.g.MILLISECONDS_IN_A_MINUTE)), {           date: date, match: match };   }    function zeroPad(number, length) { return ("0000" + number).slice(-length); }   function formatDate(date) { const format = cd.g.DATE_FORMAT; let s = ""; for (let p = 0; p < format.length; p++) { let code = format[p]; switch ("x" === code && p < format.length - 1 && (code += format[++p]), "xk" === code && p < format.length - 1 && (code += format[++p]),            code) { case "xx": s += "x"; break;

case "xg": s += util_getMessages([ "january-gen", "february-gen", "march-gen", "april-gen", "may-gen", "june-gen", "july-gen", "august-gen", "september-gen", "october-gen", "november-gen", "december-gen" ])[date.getUTCMonth]; break;

case "d": s += zeroPad(date.getUTCDate, 2); break;

case "D": s += util_getMessages([ "sun", "mon", "tue", "wed", "thu", "fri", "sat" ])[date.getUTCDay]; break;

case "j": s += date.getUTCDate; break;

case "l": s += util_getMessages([ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" ])[date.getDay]; break;

case "F": s += util_getMessages([ "january", "february", "march", "april", "may_long", "june", "july", "august", "september", "october", "november", "december" ])[date.getUTCMonth]; break;

case "M": s += util_getMessages([ "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec" ])[date.getUTCMonth]; break;

case "n": s += date.getUTCMonth + 1; break;

case "Y": s += date.getUTCFullYear; break;

case "xkY": s += date.getUTCFullYear + 543; break;

case "G": s += date.getUTCHours; break;

case "H": s += zeroPad(date.getUTCHours, 2); break;

case "i": s += zeroPad(date.getUTCMinutes, 2); break;

case "\\": p < format.length - 1 ? s += format[++p] : s += "\\"; break;

case '"':               if (p < format.length - 1) {                    const endQuote = format.indexOf('"', p + 1); -1 === endQuote ? s += '"' : (s += format.substr(p + 1, endQuote - p - 1), p = endQuote);               } else s += '"'; break;

default: s += format[p]; }       }        return s;    } function generateCommentAnchor(date, author, resolveCollisions = !1) { let year = date.getUTCFullYear, month = date.getUTCMonth, day = date.getUTCDate, hours = date.getUTCHours, minutes = date.getUTCMinutes, anchor = zeroPad(year, 4) + zeroPad(month + 1, 2) + zeroPad(day, 2) + zeroPad(hours, 2) + zeroPad(minutes, 2) + (author ? "_" + spacesToUnderlines(author) : ""); if (resolveCollisions && commentAnchors.includes(anchor)) { let anchorNum = 2; const base = anchor; do { anchor = "".concat(base, "_").concat(anchorNum), anchorNum++; } while (commentAnchors.includes(anchor)); }       return anchor; }   let commentAnchors = []; function registerCommentAnchor(anchor) { anchor && commentAnchors.push(anchor); }   function resetCommentAnchors { commentAnchors = []; }   function parseCommentAnchor(commentAnchor) { const match = commentAnchor.match(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})_(.+)$/); if (!match) return null; const year = Number(match[1]), month = Number(match[2]) - 1, day = Number(match[3]), hours = Number(match[4]), minutes = Number(match[5]), author = match[6]; return { date: new Date(Date.UTC(year, month, day, hours, minutes)), author: author };   }    function getUserNameFromLink(element) { const href = element.getAttribute("href"); if (!href) return null; const pageName = function(url) { if ("undefined" == typeof mw || "/wiki/$1" === mw.config.get("wgArticlePath") && "/w/index.php" === mw.config.get("wgScript")) { url = url.replace(/^(?:https?:)?\/\/[^/]+/, "").replace(/^\/wiki\//, "").replace(/^\/w\/index.php\?title=/, "").replace(/&action=edit.*/, "").replace(/#.*/, "").replace(/_/g, " "); try { url = decodeURIComponent(url); } catch (e) { return null; }               return url; }           {                const uri = new mw.Uri(url), match = uri.path.match(cd.g.ARTICLE_PATH_REGEXP); if (match) try { return decodeURIComponent(match[1]); } catch (e) { return null; }               return uri.query.title ? uri.query.title : null; }       }(href); if (!pageName) return null; let userName; const match = pageName.match(cd.g.USER_NAMESPACES_REGEXP); return match ? userName = match[1] : pageName.startsWith(cd.g.CONTRIBS_PAGE + "/") && (userName = pageName.replace(cd.g.CONTRIBS_PAGE_LINK_REGEXP, "")), userName && firstCharToUpperCase(underlinesToSpaces(userName.replace(/\/.*/, ""))).trim; }   class Parser_Parser { constructor(context) { this.context = context; }       createComment(signature) { return new this.context.CommentClass(this, signature); }       createSection(headingElement, watchedSectionsRequest) { return new this.context.SectionClass(this, headingElement, watchedSectionsRequest); }       findTimestamps { const blocksToExclude = [ ...Array.from(cd.g.rootElement.getElementsByTagName("blockquote")), ...(arr = cd.config.elementsToExcludeClasses.map(className => Array.from(cd.g.rootElement.getElementsByClassName(className))),            [].concat(...arr)) ]; var arr; return this.context.getAllTextNodes.map(node => {               const text = node.textContent, {date: date, match: match} = parseTimestamp(text) || {};                if (date && !blocksToExclude.some(block => block.contains(node))) return {                    node: node,                    date: date,                    match: match                };            }).filter(defined).map(finding => {                const {node: node, match: match, date: date} = finding, element = this.context.document.createElement("span");                element.classList.add("cd-timestamp");                const textNode = this.context.document.createTextNode(match[2]);                element.appendChild(textNode);                const remainedText = node.textContent.slice(match.index + match[0].length);                let afterNode;                return remainedText && (afterNode = this.context.document.createTextNode(remainedText)), node.textContent = node.textContent.slice(0, match.index + match[1].length), node.parentNode.insertBefore(element, node.nextSibling), afterNode && node.parentNode.insertBefore(afterNode, element.nextSibling), { element: element, date: date };           });        }        findSignatures(timestamps) {            const signatures = timestamps.map(timestamp => { const date = timestamp.date, timestampElement = timestamp.element, timestampText = timestamp.element.textContent; let unsignedElement, closestNotInlineAncestor; for (let el = timestamp.element; !closestNotInlineAncestor; el = el.parentNode) isInline(el) ? el.classList.contains(cd.config.unsignedClass) && (unsignedElement = el) : closestNotInlineAncestor = el; const unsigned = Boolean(unsignedElement); if (closestNotInlineAncestor) { const cniaChildren = Array.from(closestNotInlineAncestor[this.context.childElementsProperty]), treeWalker = new treeWalker_ElementsTreeWalker(timestamp.element); let found = !1; for (!found && treeWalker.nextNode && closestNotInlineAncestor.contains(treeWalker.currentNode) && (!cniaChildren.includes(treeWalker.currentNode) || isInline(treeWalker.currentNode)); ) treeWalker.currentNode.classList.contains("cd-timestamp") && (found = !0); if (found) return; }               const startElement = unsignedElement || timestamp.element, treeWalker = new treeWalker_ElementsAndTextTreeWalker(startElement); let authorName, firstSignatureElement, length = 0; const signatureNodes = []; unsignedElement ? firstSignatureElement = startElement : (signatureNodes.push(startElement),                treeWalker.previousSibling); do { const node = treeWalker.currentNode; if (length += node.textContent.length, node.nodeType === Node.ELEMENT_NODE) { if (node.classList.contains("cd-timestamp")) break; let hasAuthorLinks = !1; if ("A" === node.tagName) { const userName = getUserNameFromLink(node); userName && (authorName || (authorName = userName), authorName === userName && (hasAuthorLinks = !0)); } else { Array.from(node.getElementsByTagName("a")).some(link => {                               const userName = getUserNameFromLink(link);                                if (userName && (authorName || (authorName = userName), authorName === userName)) return hasAuthorLinks = !0,                                 !0;                            }); }                       hasAuthorLinks && (firstSignatureElement = node); }                   signatureNodes.push(node); } while (treeWalker.previousSibling && length < cd.config.signatureScanLimit); const firstSignatureElementIndex = signatureNodes.indexOf(firstSignatureElement); signatureNodes.splice(-1 === firstSignatureElementIndex ? 1 : firstSignatureElementIndex + 1); const anchor = generateCommentAnchor(timestamp.date, authorName, !0); registerCommentAnchor(anchor); const signatureContainer = startElement.parentNode, startElementNextSibling = startElement.nextSibling, element = this.context.document.createElement("span"); if (element.classList.add("cd-signature"), signatureNodes.reverse.forEach(node => { element.appendChild(node); }), signatureContainer.insertBefore(element, startElementNextSibling), authorName) return { element: element, timestampElement: timestampElement, timestampText: timestampText, date: date, authorName: authorName, anchor: anchor, unsigned: unsigned };           }).filter(defined);            return cd.config.unsignedClass && Array.from(cd.g.rootElement.getElementsByClassName(cd.config.unsignedClass)).forEach(element => { if (!this.context.getElementByClassName(element, "cd-timestamp")) { Array.from(element.getElementsByTagName("a")).some(link => {                       const authorName = getUserNameFromLink(link);                        if (authorName) {                            element.classList.add("cd-signature");                            const unsigned = !0;                            return signatures.push({ element: element, authorName: authorName, unsigned: unsigned }), !0;                       }                    });                }            }), signatures.sort((sig1, sig2) => this.context.follows(sig1.element, sig2.element) ? 1 : -1),            signatures;        }        collectParts(signatureElement) {            const treeWalker = new treeWalker_ElementsAndTextTreeWalker(signatureElement);            let firstForeignComponentAfter, parts = [];            for (!firstForeignComponentAfter; ) {                for (!treeWalker.currentNode.nextSibling && treeWalker.parentNode; ) ;                if (!treeWalker.nextSibling) break;                isInline(treeWalker.currentNode, !0) || (firstForeignComponentAfter = treeWalker.currentNode);            }            if (firstForeignComponentAfter && signatureElement.parentNode.contains(firstForeignComponentAfter)) {                for (treeWalker.currentNode = signatureElement; treeWalker.nextSibling && isInline(treeWalker.currentNode, !0); ) parts.push({ node: treeWalker.currentNode, isTextNode: treeWalker.currentNode.nodeType === Node.TEXT_NODE, isHeading: !1, hasCurrentSignature: !1, hasForeignComponents: !1, lastStep: "start" });               parts.reverse, treeWalker.currentNode = signatureElement;            } else treeWalker.currentNode = signatureElement.parentNode;            parts.push({ node: treeWalker.currentNode, isTextNode: !1, isHeading: !1, hasCurrentSignature: !0, hasForeignComponents: !1, lastStep: "start" });           const timezoneRegexp = new RegExp(cd.g.TIMEZONE_REGEXP.source + "\\s*$");            for (let i = 0; i < 500; i++) {                let lastStep;                const previousPart = parts[parts.length - 1];                if (!previousPart.isTextNode && !previousPart.hasCurrentSignature) {                    const text = previousPart.node.textContent;                    if (timezoneRegexp.test(text) || cd.config.signatureEndingRegexp && cd.config.signatureEndingRegexp.test(text)) {                        previousPart.hasForeignComponents = !0;                        break;                    }                }                if (!previousPart.hasCurrentSignature && previousPart.hasForeignComponents) {                    let previousNode, dived = !1;                    for ((previousNode = treeWalker.currentNode) && treeWalker.lastChild; ) {                        if (isInline(treeWalker.currentNode, !0)) { treeWalker.currentNode = previousNode; break; }                       dived = !0; }                   if (!dived) break; lastStep = "dive"; } else if (treeWalker.previousSibling) lastStep = "back"; else { if (!treeWalker.parentNode) break; lastStep = "up"; }               const node = treeWalker.currentNode, isTextNode = node.nodeType === Node.TEXT_NODE; if ("back" === lastStep && [ "OL", "UL" ].includes(previousPart.node.tagName) && !([ "DL", "OL", "UL" ].includes(node.tagName) || isTextNode && node.previousSibling && [ "DL", "OL", "UL" ].includes(node.previousSibling.tagName)) && previousPart.node[this.context.childElementsProperty].length && previousPart.node[this.context.childElementsProperty][0].contains(signatureElement)) break; let isHeading = null, hasCurrentSignature = null, hasForeignComponents = null; if (!isTextNode) { if (node.classList.contains("cd-commentPart") || "toc" === node.getAttribute("id") || "TD" === node.tagName || "HR" === node.tagName && node.previousElementSibling && this.context.getElementByClassName(node.previousElementSibling, "cd-signature") || cd.config.customForeignComponentChecker && cd.config.customForeignComponentChecker(node, this.context)) break; isHeading = /^H[1-6]$/.test(node.tagName), hasCurrentSignature = node.contains(signatureElement), hasForeignComponents = node.getElementsByClassName("cd-signature", Number(hasCurrentSignature) + 1).length - Number(hasCurrentSignature) > 0 || firstForeignComponentAfter && node.contains(firstForeignComponentAfter); }               if (parts.push({ node: node, isTextNode: isTextNode, isHeading: isHeading, hasCurrentSignature: hasCurrentSignature, hasForeignComponents: hasForeignComponents, lastStep: lastStep }), isHeading) break; }           return parts; }       removeNestedParts(parts) { for (let i = parts.length - 1; i >= 0; i--) { const part = parts[i]; if ("up" === part.lastStep && !part.hasForeignComponents) { let nextDiveElementIndex = 0; for (let j = i - 1; j > 0; j--) if ("dive" === parts[j].lastStep) { nextDiveElementIndex = j;                       break; }                   parts.splice(nextDiveElementIndex, i - nextDiveElementIndex), i = nextDiveElementIndex; }           }            return parts; }       encloseInlineParts(parts, signatureElement) { const sequencesToBeEnclosed = []; let start = null, encloseThis = !1; for (let i = 0; i <= parts.length; i++) { const part = parts[i]; if (!part || null !== start && ![ "back", "start" ].includes(part.lastStep) || part.hasForeignComponents || part.isHeading) { if (null !== start) { if (encloseThis) { const end = i - 1; sequencesToBeEnclosed.push({                               start: start,                                end: end                            }); }                       start = null, encloseThis = !1; }               } else { if (null === start) { if (isInline(part.node.parentNode)) { for (let j = i + 1; j < parts.length; j++) "up" !== parts[j].lastStep || (i = j - 1); break; }                       start = i;                    } !encloseThis && (part.isTextNode && part.node.textContent.trim || isInline(part.node)) && (encloseThis = !0); }           }            for (let i = sequencesToBeEnclosed.length - 1; i >= 0; i--) { const sequence = sequencesToBeEnclosed[i], wrapper = this.context.document.createElement("div"), nextSibling = parts[sequence.start].node.nextSibling, parent = parts[sequence.start].node.parentNode; for (let j = sequence.end; j >= sequence.start; j--) wrapper.appendChild(parts[j].node); parent.insertBefore(wrapper, nextSibling); const newNode = { node: wrapper, isTextNode: !1, isHeading: !1, hasCurrentSignature: wrapper.contains(signatureElement), hasForeignComponents: !1, lastStep: "replaced" };               parts.splice(sequence.start, sequence.end - sequence.start + 1, newNode); }           return parts; }       filterParts(parts) { for (let i = (parts = parts.filter(part => !part.hasForeignComponents && !part.isTextNode)).length - 1; i > 0; i--) { const part = parts[i]; if ("P" !== part.node.tagName || part.node.textContent.trim) break; parts.splice(i, 1); }           return parts; }       replaceListsWithItems(parts, signatureElement) { const lastPart = parts[parts.length - 1]; for (let i = parts.length - 1; i >= 0; i--) { const part = parts[i]; if ([ "UL", "DL", "OL", "LI", "DD" ].includes(part.node.tagName) && ("up" === part.lastStep && (!parts[i - 1] || "back" !== parts[i - 1].lastStep) || ("DD" === lastPart.node.tagName || "DD" === lastPart.node.parentNode.tagName || "DL" === lastPart.node.tagName) && !parts.slice(i + 1).some(part => "P" === part.node.tagName))) { const partTextNoSpaces = part.node.textContent.replace(/\s+/g, ""); let children, current = [ part.node ]; do { children = current.reduce((arr, element) => arr.concat(Array.from(element[this.context.childElementsProperty])), []); } while (children.length && children.every(child => [ "UL", "DL", "OL", "LI", "DD" ].includes(child.tagName)) && children.map(child => child.textContent).join("").replace(/\s+/g, "") === partTextNoSpaces && (current = children)); if (current.length > 1) { const newParts = current.map(el => ({ node: el, isTextNode: !1, hasCurrentSignature: el.contains(signatureElement), hasForeignComponents: !1, lastStep: "replaced" }));                       parts.splice(i, 1, ...newParts); } else current[0] !== part.node && Object.assign(part, {                       node: current[0],                        lastStep: "replaced"                    }); }           }            return parts; }       getLevelsUpTree(initialElement) { const levelElements = [], treeWalker = new treeWalker_ElementsTreeWalker(initialElement); for (treeWalker.parentNode; ) { const el = treeWalker.currentNode; if ([ "UL", "DL", "OL" ].includes(el.tagName)) { if (el.classList.contains("cd-commentLevel")) { const match = el.getAttribute("class").match(/cd-commentLevel-(\d+)/); return match && levelElements.unshift(...Array(Number(match[1]))), levelElements; }                   levelElements.unshift(el); }           }            return levelElements; }       findHeadings { const headings = [ ...cd.g.rootElement.getElementsByTagName("h2"), ...cd.g.rootElement.getElementsByTagName("h3"), ...cd.g.rootElement.getElementsByTagName("h4"), ...cd.g.rootElement.getElementsByTagName("h5"), ...cd.g.rootElement.getElementsByTagName("h6") ]; return headings.sort((heading1, heading2) => this.context.follows(heading1, heading2) ? 1 : -1), headings; }   }    function windowGetAllTextNodes { const result = document.evaluate(".//descendant::text", cd.g.rootElement, null, XPathResult.ANY_TYPE, null), textNodes = []; let node; for (node = result.iterateNext; ) textNodes.push(node); return textNodes; }   function findSpecialElements { const floatingElementsSelector = [ ...cd.g.FLOATING_ELEMENTS_SELECTORS, ...cd.config.customFloatingElementsSelectors ].join(", "), floating = cd.g.$root.find(floatingElementsSelector).get.filter(el => !el.classList.contains("cd-ignoreFloating")); floating.forEach(el => {           const style = window.getComputedStyle(el);            el.setAttribute("data-margin-top", parseFloat(style.marginTop)), el.setAttribute("data-margin-bottom", parseFloat(style.marginBottom));        }); const closedDiscussionsSelector = cd.config.closedDiscussionsClasses.map(name => ".".concat(name)).join(", "); return { floating: floating, closedDiscussions: cd.g.$root.find(closedDiscussionsSelector).get, pageHasOutdents: Boolean(cd.g.$root.find(".outdent-template").length) };   }    function changeElementType(element, newType, firstVisibleElementData) { const newElement = document.createElement(newType); for (element.firstChild; ) newElement.appendChild(element.firstChild); Array.from(element.attributes).forEach(attribute => {           newElement.setAttribute(attribute.name, attribute.value);        }), element.parentNode.replaceChild(newElement, element); let commentId = element.getAttribute("data-comment-id"); if (null !== commentId) { commentId = Number(commentId); const comment = cd.comments[commentId]; comment.elements.splice(comment.elements.indexOf(element), 1, newElement), comment.highlightables.includes(element) && (comment.highlightables.splice(comment.highlightables.indexOf(element), 1, newElement),            comment.bindEvents(newElement)); }       return element === firstVisibleElementData.element && (firstVisibleElementData.element = newElement), newElement; }   function mergeAdjacentCommentLevels(levels, firstVisibleElementData) { if (!levels.length) return; const isOrHasCommentLevel = el => el.classList.contains("cd-commentLevel") && "OL" !== el.tagName || el.querySelector(".cd-commentLevel:not(ol)"); Array.from(levels).forEach(bottomElement => {           const topElement = bottomElement.previousElementSibling;            if (!topElement) return;            let currentTopElement = topElement, currentBottomElement = bottomElement;            do {                const topTag = currentTopElement.tagName, bottomInnerTags = {};                let firstMoved;                if ("UL" === topTag ? bottomInnerTags.DD = "LI" : "DL" === topTag && (bottomInnerTags.LI = "DD"), isOrHasCommentLevel(currentTopElement)) {                   for (currentBottomElement.childNodes.length; ) {                        let child = currentBottomElement.firstChild;                        if (child.nodeType === Node.ELEMENT_NODE) bottomInnerTags[child.tagName] && (child = changeElementType(child, bottomInnerTags[child.tagName], firstVisibleElementData)),                         void 0 === firstMoved && (firstMoved = child); else if (void 0 === firstMoved && child.textContent.trim) {                            firstMoved = null;                            const newChild = document.createElement("span");                            newChild.appendChild(child), child = newChild;                        }                        currentTopElement.appendChild(child);                    }                    currentBottomElement.parentNode.removeChild(currentBottomElement); }               currentBottomElement = firstMoved, currentTopElement = firstMoved && firstMoved.previousElementSibling; } while (currentTopElement && currentBottomElement && isOrHasCommentLevel(currentBottomElement)); });   }    function prepare(_x) {        return _prepare.apply(this, arguments);    }    function _prepare {        return (_prepare = asyncToGenerator_default((function*({messagesRequest: messagesRequest}) { cd.g.$root = cd.g.$content.children(".mw-parser-output"), cd.g.$root.length || (cd.g.$root = cd.g.$content), cd.g.rootElement = cd.g.$root.get(0), cd.comments = [], cd.sections = [], cd.g.firstRun ? yield init({               messagesRequest: messagesRequest            }) : (resetCommentAnchors, commentLayers.reset); }))).apply(this, arguments);   }    function getFirstVisibleElementData {        let element, top;        if (0 !== window.pageYOffset && cd.g.rootElement.getBoundingClientRect.top <= 0) {            const treeWalker = new treeWalker_ElementsTreeWalker(cd.g.rootElement.firstElementChild);            for  {                if (!isInline(treeWalker.currentNode.tagName)) {                    const rect = treeWalker.currentNode.getBoundingClientRect;                    if (rect.bottom >= 0 && 0 !== rect.height) {                        if (element = treeWalker.currentNode, top = rect.top, treeWalker.firstChild) continue;                        break;                    }                }                if (!treeWalker.nextSibling) break;            }        }        return {            element: element,            top: top        };    }    function processComments(parser, firstVisibleElementData) { const timestamps = parser.findTimestamps; parser.findSignatures(timestamps).forEach(signature => {           try {                const comment = parser.createComment(signature);                comment.highlightables.length && cd.comments.push(comment);            } catch (e) {                e instanceof CdError || console.error(e);            }        }), function(firstVisibleElementData) { mergeAdjacentCommentLevels(cd.g.rootElement.querySelectorAll(".cd-commentLevel:not(ol) + .cd-commentLevel:not(ol)"), firstVisibleElementData), mergeAdjacentCommentLevels(cd.g.rootElement.querySelectorAll(".cd-commentLevel:not(ol) + .cd-commentLevel:not(ol)"), firstVisibleElementData), cd.g.rootElement.querySelector(".cd-commentLevel:not(ol) + .cd-commentLevel:not(ol)") && console.warn(".cd-commentLevel adjacencies have left."), $("dl").has("dt").each((i, element) => {               Array.from(element.classList).filter(className => className.startsWith("cd-commentLevel")).forEach(className => element.classList.remove(className));            }); }(firstVisibleElementData), mw.hook("convenientDiscussions.commentsReady").fire(cd.comments); }   function processSections(parser, watchedSectionsRequest) { parser.findHeadings.forEach(heading => {           try {                const section = parser.createSection(heading, watchedSectionsRequest);                void 0 !== section.id && cd.sections.push(section);            } catch (e) {                e instanceof CdError || console.error(e);            }        }), cd.sections.forEach((section, i) => {            section.isLastSection = i === cd.sections.length - 1;        }), cd.sections.forEach((section, i) => {            if (section.subsections = [], cd.sections.slice(i + 1).some(otherSection => {                if (!(otherSection.level > section.level)) return !0;                section.subsections.push(otherSection), 2 === section.level && (otherSection.baseSection = section);            }), section.level > 2 && cd.sections.slice(0, i).reverse.some(otherSection => {                if (otherSection.level < section.level) return section.parent = otherSection, !0; }), !section.frozen && 2 === section.level) { const targetSection = section.subsections.length ? section.subsections[section.subsections.length - 1] : section; targetSection.$replyButtonLink && targetSection.$replyButtonLink.on("mouseenter", section.replyButtonHoverHandler).on("mouseleave", section.replyButtonUnhoverHandler); }       });        const $space = $(" ").addClass("cd-spaceBeforeSectionMenu").text(" ");        $(".mw-headline").each((function {            $(this).append($space.clone);        })), mw.hook("convenientDiscussions.sectionsReady").fire(cd.sections);    }    function connectToAddTopicLinks {        $(cd.g.ADD_TOPIC_SELECTORS).off("click.cd").on("click.cd", (function(e) {            const href = $(this).attr("href");            if (e.ctrlKey || e.shiftKey || mw.util.getParamValue("preload", href)) return;            e.preventDefault;            const editintro = mw.util.getParamValue("editintro", href);            cd.g.addSectionForm ? (cd.g.addSectionForm.$element.cdScrollIntoView("center"), cd.g.addSectionForm.headlineInput.focus) : cd.g.addSectionForm = new CommentForm_CommentForm({ mode: "addSection", $addSectionLink: $(this), scrollIntoView: !0, editintro: editintro });       })).attr("title", cd.s("addtopicbutton-tooltip"));    }    function processFragment(_x2, _x3) {        return _processFragment.apply(this, arguments);    }    function _processFragment {        return (_processFragment = asyncToGenerator_default((function*(keptCommentAnchor, keptSectionAnchor) { let fragment, decodedFragment, escapedFragment, escapedDecodedFragment, commentAnchor, date, author, comment; if (cd.g.firstRun) { fragment = location.hash.slice(1); try { decodedFragment = decodeURIComponent(fragment); } catch (e) { console.error(e); }               escapedFragment = $.escapeSelector(fragment), escapedDecodedFragment = decodedFragment && $.escapeSelector(decodedFragment), /^\d{12}_.+$/.test(fragment) && (commentAnchor = decodedFragment); } else commentAnchor = keptCommentAnchor; if (commentAnchor) { if (({date: date, author: author} = parseCommentAnchor(commentAnchor) || {}), comment = Comment_Comment.getCommentByAnchor(commentAnchor),                !keptCommentAnchor && !comment) { let commentAnchorToCheck; for (let gap = 1; !comment && gap <= 5; gap++) { commentAnchorToCheck = generateCommentAnchor(new Date(date.getTime - cd.g.MILLISECONDS_IN_A_MINUTE * gap), author), comment = Comment_Comment.getCommentByAnchor(commentAnchorToCheck); }               }                comment && setTimeout( => {                    comment.scrollToAndHighlightTarget(!1);                }, 0); }           if (keptSectionAnchor) { const section = Section_Section.getSectionByAnchor(keptSectionAnchor); section && section.$elements.first.cdScrollTo("top", !1); }           if (cd.g.firstRun) { const fragmentHasNoTarget = decodedFragment && !comment && !cd.config.idleFragments.includes(decodedFragment) && !decodedFragment.startsWith("/media/") && !$(":target").length && !$('a[name="'.concat(escapedDecodedFragment, '"]')).length && !$('*[id="'.concat(escapedDecodedFragment, '"]')).length && !$('a[name="'.concat(escapedFragment, '"]')).length && !$('*[id="'.concat(escapedFragment, '"]')).length; decodedFragment && fragmentHasNoTarget && cd.g.isPageActive && (yield notFound(decodedFragment, date)); }       }))).apply(this, arguments);    }    function highlightOwnComments {        if (!cd.settings.highlightOwnComments) return;        const myComments = cd.comments.filter(comment => comment.own), floatingRects = myComments.length ? cd.g.specialElements.floating.map(el => el.getBoundingClientRect) : void 0;        myComments.forEach(comment => { comment.configureLayers(!1, floatingRects); }), myComments.forEach(comment => { comment.addLayers; });   }    function confirmDesktopNotifications {        return _confirmDesktopNotifications.apply(this, arguments);    }    function _confirmDesktopNotifications {        return (_confirmDesktopNotifications = asyncToGenerator_default((function* { "unknown" === cd.settings.desktopNotifications && "denied" !== Notification.permission && getSettings(!0).then(settings => {               if ("unknown" === settings.desktopNotifications) {                    const actions = [ {                        label: cd.s("dn-confirm-yes"),                        action: "accept",                        flags: "primary"                    }, {                        label: cd.s("dn-confirm-no"),                        action: "reject"                    } ];                    confirmDialog(cd.s("dn-confirm"), { size: "medium", actions: actions }).then(action => { let promise; "accept" === action ? "default" === Notification.permission ? (OO.ui.alert(cd.s("dn-grantpermission")),                        Notification.requestPermission(permission => { "granted" === permission ? (cd.settings.desktopNotifications = settings.desktopNotifications = "all",                            promise = setSettings(settings)) : "denied" === permission && (cd.settings.desktopNotifications = settings.desktopNotifications = "none",                             promise = setSettings(settings)); })) : "granted" === Notification.permission && (cd.settings.desktopNotifications = settings.desktopNotifications = "all",                        promise = setSettings(settings)) : "reject" === action && (cd.settings.desktopNotifications = settings.desktopNotifications = "none",                         promise = setSettings(settings)), promise.catch(e => {                            mw.notify(cd.s("error-settings-save"), { type: "error" }), console.warn(e);                       }); });               }            }), "unknown" !== cd.settings.desktopNotifications && "default" === Notification.permission && (yield OO.ui.alert(cd.s("dn-grantpermission-again"), { title: cd.s("script-name") }), Notification.requestPermission); }))).apply(this, arguments);   }    function debugLog {        const timePerComment = (cd.debug.timerTotal["main code"] + cd.debug.timerTotal["final code and rendering"]) / cd.comments.length;        cd.debug.logAndResetTimer("total time"), console.debug("number of comments: ".concat(cd.comments.length)),         console.debug("per comment: ".concat(timePerComment.toFixed(2))), cd.debug.logAndResetEverything;    }    function processPage {        return _processPage.apply(this, arguments);    }    function _processPage {        return (_processPage = asyncToGenerator_default((function*(keptData = {}) { cd.debug.stopTimer(cd.g.firstRun ? "loading data" : "laying out HTML"), cd.debug.startTimer("preparations"), yield prepare(keptData); const firstVisibleElementData = cd.g.firstRun ? getFirstVisibleElementData : {}; let watchedSectionsRequest; cd.debug.stopTimer("preparations"), cd.debug.startTimer("main code"), cd.g.IS_ARCHIVE_PAGE = Boolean(cd.config.archivePathRegexp && cd.config.archivePathRegexp.test(cd.g.CURRENT_PAGE)), cd.g.isPageActive = !(!mw.config.get("wgArticleId") || cd.g.IS_ARCHIVE_PAGE || (mw.util.getParamValue("diff") || mw.util.getParamValue("oldid")) && mw.config.get("wgRevisionId") !== mw.config.get("wgCurRevisionId")), cd.g.editWatchedSections = editWatchedSections, cd.g.settingsDialog = settingsDialog, mw.config.get("wgArticleId") && (watchedSectionsRequest = getWatchedSections(!0, keptData),            watchedSectionsRequest.catch(e => { console.warn("Couldn't load the settings from the server.", e); }));           const visitsRequest = cd.g.isPageActive ? getVisits(!0) : void 0; cd.g.specialElements = findSpecialElements, cd.config.customBeforeParse && cd.config.customBeforeParse, cd.debug.startTimer("process comments"); const parser = new Parser_Parser({               CommentClass: Comment_Comment,                SectionClass: Section_Section,                childElementsProperty: "children",                document: document,                follows: (el1, el2) => el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_PRECEDING,                getAllTextNodes: windowGetAllTextNodes,                getElementByClassName: (node, className) => node.querySelector(".".concat(className))            }); try { processComments(parser, firstVisibleElementData); } catch (e) { console.error(e); }           if (cd.debug.stopTimer("process comments"), cd.debug.startTimer("process sections"),             processSections(parser, watchedSectionsRequest), cd.debug.stopTimer("process sections"),             connectToAddTopicLinks, cd.debug.stopTimer("main code"), cd.debug.startTimer("final code and rendering"),             firstVisibleElementData.element || keptData.scrollPosition) { const y = firstVisibleElementData.element ? window.pageYOffset + firstVisibleElementData.element.getBoundingClientRect.top - firstVisibleElementData.top : keptData.scrollPosition; window.scrollTo(0, y); }           highlightOwnComments, processFragment(keptData.commentAnchor, keptData.sectionAnchor), cd.g.isPageActive && (cd.g.firstRun || keptData.createdPage ? js_navPanel.mount : js_navPanel.reset,            js_navPanel.processVisits(visitsRequest, keptData.unseenCommentAnchors), restoreCommentForms), cd.g.firstRun && ($(document).on("mousemove mouseover", highlightFocused), $(window).on("resize orientationchange", windowResizeHandler),            addPreventUnloadCondition("commentForms",  => (saveSession(!0), mw.user.options.get("useeditwarning") && (CommentForm_CommentForm.getLastActiveAlteredCommentForm || alwaysConfirmLeavingPage && cd.commentForms.length)))), (cd.g.firstRun && cd.g.isPageActive || keptData.createdPage) && ($(document).on("keydown", globalKeyDownHandler).on("scroll resize orientationchange", => { js_navPanel.registerSeenComments, js_navPanel.updateCommentFormButton; }), setInterval( => { commentLayers.redrawIfNecessary; }, 1e3), setTimeout( => { new MutationObserver(records => {                   records.every(record => /^cd-comment(Underlay|Overlay|Layers)/.test(record.target.className)) || commentLayers.redrawIfNecessary;                }).observe(cd.g.$content.get(0), {                    attributes: !0,                    childList: !0,                    subtree: !0                }); }, 500));           let alwaysConfirmLeavingPage = !1; mw.user.options.get("editondblclick") && mw.loader.using("mediawiki.action.view.dblClickEdit").then( => {               $("#ca-edit").off("click"), alwaysConfirmLeavingPage = !0;            }), mw.user.options.get("editsectiononrightclick") && mw.loader.using("mediawiki.action.view.rightClickEdit").then( => {                $(".mw-editsection a").off("click"), alwaysConfirmLeavingPage = !0;            }), cd.g.firstRun && confirmDesktopNotifications, mw.hook("convenientDiscussions.pageReady").fire(cd), removeLoadingOverlay, cd.g.firstRun = !1, cd.g.rootElement.getBoundingClientRect, cd.debug.stopTimer("final code and rendering"), cd.debug.stopTimer("total time"), debugLog; }))).apply(this, arguments);   }    /** * Timestamp regexp generator, timestamp parser generator, date formats, digits, and timezones. * * The code is based on {@link * https://gerrit.wikimedia.org/r/#/c/mediawiki/core/+/539305/3/signaturedetector.js}. * * @module dateFormat * @author Bartosz Dziewoński  * @license GPL v2 */    const DATE_FORMATS = {        ab: "H:i, j xg Y",        abs: "j F Y H.i",        ace: "j F Y H.i",        "ady-cyrl": "H:i, j F Y",        "aeb-arab": "H:i\u060c j xg Y",        "aeb-latn": "H:i, j F Y",        af: "H:i, j F Y",        ais: "H:i, j F Y",        ak: "H:i, j F Y",        aln: "j F Y H:i",        ami: "H:i, j F Y",        am: "H:i, j F Y",        ang: "H:i, j F Y",        an: "H:i j M Y",        anp: "H:i, j F Y",        arc: "H:i, j F Y",        ar: "H:i\u060c j xg Y",        arn: "H:i j M Y",        arq: "H:i\u060c j xg Y", ary: "H:i, j F Y", arz: "H:i\u060c j xg Y", ase: "H:i, j F Y", as: "H:i, j F Y", ast: "H:i j M Y", atj: "j F Y \xe0 H:i", av: "H:i, j xg Y", avk: "H:i, j F Y", awa: "H:i, j F Y", ay: "H:i j M Y", azb: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i", az: "H:i, j F Y", ba: "H:i, j xg Y", ban: "j F Y H.i", bar: "H:i, j. M Y", "bbc-latn": "j F Y H.i", bcc: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i", bcl: "H:i, j F Y", be: "H:i, j xg Y", "be-tarask": "H:i, j xg Y", bg: "H:i, j F Y", bgn: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i", bho: "H:i, j F Y", bi: "H:i, j F Y", bjn: "j F Y H.i", bm: "j F Y \xe0 H:i", bn: "H:i, j F Y", bo: "H:i, j F Y", bpy: "H:i, j F Y", bqi: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i", brh: "H:i, j F Y", br: 'j M Y "da" H:i', bs: "H:i, j F Y", btm: "j F Y H.i", bto: "H:i, j F Y", bug: "j F Y H.i", bxr: "H:i, j xg Y", ca: "H:i, j M Y", "cbk-zam": "H:i j M Y", cdo: 'Y "ni\xe8ng" n "ngu\u014fk" j "h\xf4\u0324" (D) H:i', ceb: "H:i, j F Y", ce: "Y, j F, H:i", ch: "H:i, j F Y", chr: "H:i, j F Y", chy: "H:i, j F Y", ckb: "H:i\u060c j\u06cc xg Y", co: "H:i, j M Y", cps: "H:i, j F Y", "crh-cyrl": 'H:i, Y "\u0441." xg j', "crh-latn": 'H:i, Y "s." xg j', cr: "H:i, j F Y", csb: "H:i, j M Y", cs: "j. n. Y, H:i", cu: "H:i, xg j \u0447\u0438\u0441\u043b\u0430, Y", cv: "H:i, j xg Y", cy: "H:i, j F Y", da: "j. M Y, H:i", "de-at": "H:i, j. M Y", "de-ch": "H:i, j. M Y", "de-formal": "H:i, j. M Y", de: "H:i, j. M Y", din: "H:i, j F Y", diq: "H:i, j F Y", dsb: "j. xg Y, H:i", dtp: "H:i, j F Y", dty: "H:i, j F Y", dv: "H:i, j F Y", dz: "H:i, j F Y", ee: "H:i, j F Y", egl: "H:i, j M Y", el: "H:i, j xg Y", eml: "H:i, j M Y", "en-ca": "H:i, j F Y", "en-gb": "H:i, j F Y", en: "H:i, j F Y", eo: "H:i, j M. Y", "es-formal": "H:i j M Y", es: "H:i j M Y", et: 'j. F Y, "kell" H:i', eu: "H:i, j F Y", exif: "H:i, j F Y", ext: "H:i j M Y", fa: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i", ff: "j F Y \xe0 H:i", fi: 'j. F"ta" Y "kello" H.i', fit: 'j. F"ta" Y "kello" H.i', fj: "H:i, j F Y", fo: 'j. M Y "kl." H:i', frc: "j F Y \xe0 H:i", fr: "j F Y \xe0 H:i", frp: 'j F Y "a" H:i', frr: "H:i, j. M Y", fur: 'j "di" M Y "a lis" H:i', fy: "j M Y, H.i", gag: "H.i, j F Y", ga: "H:i, j F Y", "gan-hans": "Y\u5e74n\u6708j\u65e5 (D) H:i", "gan-hant": "Y\u5e74n\u6708j\u65e5 (D) H:i", gan: "Y\u5e74n\u6708j\u65e5 (D) H:i", gcr: "j F Y \xe0 H:i", gd: "H:i, j F Y", gl: 'j \\d\\e F \\d\\e Y "\xe1s" H:i', glk: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i", gn: "H:i j M Y", "gom-deva": "H:i, j F Y", "gom-latn": "H:i, j F Y", gor: "j F Y H.i", got: "H:i, j F Y", grc: "H:i, j xg Y", gsw: "H:i, j. M Y", gu: "H:i, j F Y", gv: "H:i, j F Y", ha: "H:i, j F Y", hak: "H:i, j F Y", haw: "H:i, j F Y", he: "H:i, j xg Y", "hif-latn": "H:i, j F Y", hi: "H:i, j F Y", hil: "H:i, j F Y", hr: "H:i, j. F Y.", hrx: "H:i, j. M Y", hsb: "j. xg Y, H:i", ht: "j F Y \xe0 H:i", "hu-formal": "Y. F j., H:i", hu: "Y. F j., H:i", hy: "H:i, j xg Y", hyw: "H:i, j xg Y", ia: "H:i, j F Y", id: "j F Y H.i", ie: "H:i, j F Y", ig: "H:i, j F Y", ii: "Y\u5e74n\u6708j\u65e5 (D) H:i", "ike-cans": "H:i, j F Y", "ike-latn": "H:i, j F Y", ik: "H:i, j F Y", ilo: "H:i, j F Y", inh: "H:i, j xg Y", io: "H:i, j M. Y", is: 'j. F Y "kl." H:i', it: "H:i, j M Y", ja: "Y\u5e74n\u6708j\u65e5 (D) H:i", jam: "H:i, j F Y", jbo: "H:i, j F Y", jut: "j. M Y, H:i", jv: "j F Y H.i", kaa: 'H:i, Y "j." xg j', kab: "H:i, j F Y", ka: "H:i, j F Y", "kbd-cyrl": "H:i, j F Y", kbp: "j F Y \xe0 H:i", kg: "H:i, j F Y", khw: "H:i\u060c j xg Y\u0621", ki: "H:i, j F Y", kiu: "H.i, j F Y", kjp: ' H:i"\u104a" j F Y', "kk-arab": 'H:i\u060c Y "\u062c." xg j', "kk-cyrl": 'H:i, Y "\u0436." xg j', kk: 'H:i, Y "\u0436." xg j', "kk-latn": 'H:i, Y "j." xg j', kl: "j. M Y, H:i", km: "\u1798\u17c4\u1784H:i l \u1791d F \u1786\u17d2\u1793\u17b6Y", kn: "H:i, j F Y", krc: "H:i, j xg Y", kri: "H:i, j F Y", krj: "H:i, j F Y", krl: 'j. F"ta" Y "kello" H.i', "ks-arab": "H:i, j F Y", "ks-deva": "H:i, j F Y", ksh: "H:i, j. M Y", ks: "H:i, j F Y", "ku-arab": "H:i\u060c j\u06cc xg Y", "ku-latn": "H:i, j F Y", kum: "H:i, j xg Y", kv: "H:i, j xg Y", kw: "H:i, j F Y", ky: "H:i, j F Y", lad: "H:i j M Y", la: "H:i, j xg Y", lbe: "H:i, j xg Y", lb: "H:i, j. M Y", lez: "H:i, j xg Y", lfn: "H:i, j F Y", lg: "H:i, j F Y", lij: "H:i, j M Y", li: "j M Y H:i", liv: 'j. F Y, "kell" H:i', lki: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i", lmo: "H:i, j M Y", ln: "j F Y \xe0 H:i", lo: "H:i, j F Y", loz: "H:i, j F Y", lrc: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i", ltg: 'Y". gada" j. F", plkst." H.i', lt: "H:i, j F Y", lus: "H:i, j F Y", luz: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i", lv: 'Y". gada" j. F", plkst." H.i', lzh: "Y\u5e74n\u6708j\u65e5 \uff08D\uff09 H\u6642i\u5206", lzz: "H.i, j F Y", mai: "H:i, j F Y", "map-bms": "j F Y H.i", mdf: "H:i, j xg Y", mg: "j F Y \xe0 H:i", mhr: "H:i, j xg Y", mi: "H:i, j F Y", min: "j F Y H.i", mk: "H:i, j F Y", ml: "H:i, j F Y", mni: "H:i, j F Y", mn: "H:i, j F Y", mnw: ' H:i"\u104a" j F Y', mo: "j F Y H:i", mrj: "H:i, j xg Y", mr: "H:i, j F Y", ms: "H:i, j F Y", mt: "H:i, j F Y", mwl: "H\\hi\\m\\i\\n \\d\\e j \\d\\e F \\d\\e Y", my: ' H:i"\u104a" j F Y', myv: "H:i, j xg Y", mzn: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i", nah: "H:i j M Y", na: "H:i, j F Y", nan: 'Y-"n\xee" n-"goe\u030dh" j-"ji\u030dt" (D) H:i', nap: "H:i, j M Y", nb: 'j. M Y "kl." H:i', nds: "H:i, j. M Y", "nds-nl": "H:i, j M Y", ne: "H:i, j F Y", new: "H:i, j F Y", niu: "H:i, j F Y", "nl-informal": "j M Y H:i", nl: "j M Y H:i", nn: 'j. F Y "kl." H:i', nov: "H:i, j F Y", nqo: "H:i, j F Y", nrm: "j F Y \xe0 H:i", nso: "H:i, j F Y", nv: "H:i, j F Y", ny: "H:i, j F Y", nys: "H:i, j F Y", oc: 'j F "de" Y "a" H.i', olo: 'j. F"ta" Y "kello" H.i', om: "H:i, j F Y", or: "H:i, j F Y", os: "H:i, j xg Y", pag: "H:i, j F Y", pa: "H:i, j F Y", pam: "H:i, j F Y", pap: "H:i, j F Y", pcd: "j F Y \xe0 H:i", pdc: "H:i, j. M Y", pdt: "H:i, j. M Y", pfl: "H:i, j. M Y", pih: "H:i, j F Y", pi: "H:i, j F Y", pl: "H:i, j M Y", pms: "H:i, j M Y", pnb: "H:i, j F Y", pnt: "H:i, j xg Y", prg: "H:i, j F Y", ps: "H:i, j F Y", "pt-br": 'H"h"i"min" "de" j "de" F "de" Y', pt: "H\\hi\\m\\i\\n \\d\\e j \\d\\e F \\d\\e Y", qqq: "H:i, j F Y", qug: "H:i j M Y", qu: "H:i j M Y", rgn: "H:i, j M Y", rif: "H:i, j F Y", rm: "H:i, j F Y", rmy: "j F Y H:i", "roa-tara": "H:i, j M Y", ro: "j F Y H:i", rue: "H:i, j xg Y", ru: "H:i, j xg Y", rup: "j F Y H:i", "ruq-cyrl": "H:i, j F Y", "ruq-latn": "j F Y H:i", rw: "H:i, j F Y", sah: "H:i, j xg Y", sa: "H:i, j F Y", sat: "H:i, j F Y", sc: "H:i, j M Y", scn: "H:i, j M Y", sco: "H:i, j F Y", sdc: "H:i, j F Y", sdh: "j xg Y\u060c \u0633\u0627\u0639\u062a H:i", sd: "H:i, j F Y", sei: "H:i, j F Y", se: 'xg j "b." Y "dii." G.i', ses: "j F Y \xe0 H:i", sg: "j F Y \xe0 H:i", sgs: "H:i, j F Y", shi: "H:i, j F Y", sh: "H:i, j F Y", shn: "H:i, j F Y", "shy-latn": "H:i, j F Y", si: "H:i, j F Y", sk: "H:i, j. F Y", "skr-arab": "H:i\u060c j xg Y\u0621", sli: "H:i, j. M Y", sl: "H:i, j. F Y", sma: "H:i, j F Y", sm: "H:i, j F Y", sn: "H:i, j F Y", so: "H:i, j F Y", sq: "j F Y H:i", "sr-ec": "H:i, j. F Y.", "sr-el": "H:i, j. F Y.", srn: "j M Y H:i", ss: "H:i, j F Y", st: "H:i, j F Y", stq: "H:i, j. M Y", sty: "H:i, j xg Y", su: "j F Y H.i", sv: 'j F Y "kl." H.i', sw: "H:i, j F Y", szl: "H:i, j M Y", ta: "H:i, j F Y", tay: "H:i, j F Y", tcy: "H:i, j F Y", te: "H:i, j F Y", tet: "H\\hi\\m\\i\\n \\d\\e j \\d\\e F \\d\\e Y", "tg-cyrl": "H:i, j xg Y", "tg-latn": "H:i, j F Y", th: "H:i, j F xkY", ti: "H:i, j F Y", tk: "H:i, j F Y", tl: "H:i, j F Y", tly: "H:i, j F Y", tn: "H:i, j F Y", to: "H:i, j F Y", tpi: "H:i, j F Y", tr: "H.i, j F Y", tru: "H:i, j F Y", trv: "H:i, j F Y", ts: "H:i, j F Y", "tt-cyrl": "j M Y, H:i", "tt-latn": "j M Y, H:i", tw: "H:i, j F Y", ty: "j F Y \xe0 H:i", tyv: "H:i, j xg Y", tzm: "H:i, j F Y", udm: "H:i, j xg Y", "ug-arab": "H:i, j F Y", "ug-latn": "H:i, j F Y", uk: "H:i, j xg Y", ur: "H:i\u060c j xg Y\u0621", uz: "H:i, j-F Y", vec: "H:i, j M Y", ve: "H:i, j F Y", vep: 'j. F Y, "kell" H:i', vi: 'H:i, "ng\xe0y" j "th\xe1ng" n "n\u0103m" Y', vls: "j M Y H:i", vmf: "H:i, j. M Y", vo: 'H:i, Y F j"id"', vot: 'j. F"ta" Y "kello" H.i', vro: 'j. F Y, "kell" H:i', wa: "j F Y \xe0 H:i", war: "H:i, j F Y", wo: "j F Y \xe0 H:i", wuu: "Y\u5e74n\u6708j\u53f7 (D) H:i", xal: "H:i, j xg Y", xh: "H:i, j F Y", xmf: "H:i, j F Y", xsy: "H:i, j F Y", yi: "H:i, j xg Y", yo: "H:i, j F Y", yue: "Y\u5e74n\u6708j\u865f (D) H:i", za: "Y\u5e74n\u6708j\u65e5 (D) H:i", zea: "j M Y H:i", zgh: "H:i, j F Y", "zh-hans": "Y\u5e74n\u6708j\u65e5 (D) H:i", "zh-hant": "Y\u5e74n\u6708j\u65e5 (D) H:i", "zh-hk": "Y\u5e74n\u6708j\u65e5 (D) H:i", zh: "Y\u5e74n\u6708j\u65e5 (D) H:i", "zh-sg": "Y\u5e74n\u6708j\u65e5 (D) H:i", "zh-tw": "Y\u5e74n\u6708j\u65e5 (D) H:i", zu: "H:i, j F Y"   }, DIGITS = { "aeb-arab": "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669", anp: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f", ar: "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669", as: "\u09e6\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef", azb: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9", bcc: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9", bgn: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9", bho: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f", bn: "\u09e6\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef", bo: "\u0f20\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29", bpy: "\u09e6\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef", bqi: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9", ckb: "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669", dty: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f", dz: "\u0f20\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29", fa: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9", glk: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9", "gom-deva": "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f", gu: "\u0ae6\u0ae7\u0ae8\u0ae9\u0aea\u0aeb\u0aec\u0aed\u0aee\u0aef", hi: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f", kjp: "\u1040\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049", "kk-arab": "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9", km: "\u17e0\u17e1\u17e2\u17e3\u17e4\u17e5\u17e6\u17e7\u17e8\u17e9", kn: "\u0ce6\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef", "ks-arab": "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669", "ks-deva": "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f", ks: "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669", "ku-arab": "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669", lki: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9", lo: "\u0ed0\u0ed1\u0ed2\u0ed3\u0ed4\u0ed5\u0ed6\u0ed7\u0ed8\u0ed9", lrc: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9", luz: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9", lzh: "\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d", mai: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f", mni: "\uabf0\uabf1\uabf2\uabf3\uabf4\uabf5\uabf6\uabf7\uabf8\uabf9", mnw: "\u1040\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049", mr: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f", my: "\u1040\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049", mzn: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9", ne: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f", new: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f", nqo: "\u07c0\u07c1\u07c2\u07c3\u07c4\u07c5\u07c6\u07c7\u07c8\u07c9", or: "\u0b66\u0b67\u0b68\u0b69\u0b6a\u0b6b\u0b6c\u0b6d\u0b6e\u0b6f", pi: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f", ps: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9", sa: "\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f", sat: "\u1c50\u1c51\u1c52\u1c53\u1c54\u1c55\u1c56\u1c57\u1c58\u1c59", sdh: "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9", "skr-arab": "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669", tcy: "\u0ce6\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef" }, TIMEZONES = [ "acdt", "acst", "act", "acwdt", "acwst", "addt", "adt", "aedt", "aest", "aft", "ahdt", "ahst", "akdt", "akst", "amst", "amt", "ant", "apt", "arst", "art", "ast", "awdt", "awst", "awt", "azomt", "azost", "azot", "bdst", "bdt", "beat", "beaut", "bmt", "bnt", "bortst", "bort", "bost", "bot", "brst", "brt", "bst", "btt", "burt", "cant", "capt", "cast", "cat", "cawt", "cct", "cddt", "cdt", "cemt", "cest", "cet", "cgst", "cgt", "chadt", "chast", "chdt", "chost", "chot", "chut", "ckhst", "ckt", "clst", "clt", "cmt", "cost", "cot", "cpt", "cst", "cut", "cvst", "cvt", "cwt", "cxt", "chst", "dact", "dmt", "easst", "east", "eat", "ect", "eddt", "edt", "eest", "eet", "egst", "egt", "ehdt", "emt", "ept", "est", "ewt", "ffmt", "fjst", "fjt", "fkst", "fkt", "fmt", "fnst", "fnt", "galt", "gamt", "gbgt", "gft", "ghst", "gilt", "gmt", "gst", "gyt", "hdt", "hkst", "hkt", "hmt", "hovst", "hovt", "hst", "ict", "iddt", "idt", "ihst", "imt", "iot", "irdt", "irst", "isst", "ist", "javt", "jcst", "jdt", "jmt", "jst", "jwst", "kart", "kdt", "kmt", "kost", "kst", "kwat", "lhdt", "lhst", "lint", "lkt", "lrt", "lst", "madmt", "madst", "madt", "malst", "malt", "mart", "mddt", "mdst", "mdt", "mest", "met", "mht", "mist", "mmt", "most", "mot", "mpt", "msd", "msk", "mst", "must", "mut", "mvt", "mwt", "myt", "ncst", "nct", "nddt", "ndt", "negt", "nest", "net", "nfst", "nft", "nmt", "npt", "nrt", "nst", "nut", "nwt", "nzdt", "nzmt", "nzst", "pddt", "pdt", "pest", "pet", "pgt", "phot", "phst", "pht", "pkst", "pkt", "plmt", "pmdt", "pmmt", "pmst", "pmt", "pnt", "pont", "ppmt", "ppt", "pst", "pwt", "pyst", "pyt", "qmt", "ret", "rmt", "sast", "sbt", "sct", "sdmt", "sdt", "set", "sgt", "sjmt", "smt", "srt", "sst", "swat", "taht", "tbmt", "tkt", "tlt", "tmt", "tost", "tot", "tvt", "uct", "ulast", "ulat", "utc", "uyhst", "uyst", "uyt", "vet", "vust", "vut", "wakt", "warst", "wart", "wast", "wat", "wemt", "west", "wet", "wft", "wgst", "wgt", "wib", "wita", "wit", "wmt", "wsdt", "wsst", "xjt", "yddt", "ydt", "ypt", "yst", "ywt", "a", "b", "c", "d", "e", "f", "g", "h", "i", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" ]; function loadMessages { const requests = []; mw.messages.set(cd.config.messages), cd.g.CONTRIBS_PAGE = cd.config.contribsPage, cd.g.LOCAL_TIMEZONE_OFFSET = cd.config.localTimezoneOffset; const messageNames = [ "sun", "mon", "tue", "wed", "thu", "fri", "sat", "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec", "january", "february", "march", "april", "may_long", "june", "july", "august", "september", "october", "november", "december", "january-gen", "february-gen", "march-gen", "april-gen", "may-gen", "june-gen", "july-gen", "august-gen", "september-gen", "october-gen", "november-gen", "december-gen", "parentheses", "parentheses-start", "parentheses-end", "file-anchor-link" ], messagesRequests = []; for (let i = 0; i < messageNames.length; i += 50) { const nextNames = messageNames.slice(i, i + 50); messagesRequests.push(cd.g.api.loadMessagesIfMissing(nextNames, { amlang: mw.config.get("wgContentLanguage") }));       }        if (Promise.all(messagesRequests).then( => { cd.g.MESSAGES = {}, messageNames.forEach(name => {               cd.g.MESSAGES[name] = mw.msg(name);            }); }), requests.push(...messagesRequests), !Object.keys(cd.config.messages).some(name => name.startsWith("timezone-"))) { const request = cd.g.api.loadMessages(void 0, {               amlang: mw.config.get("wgContentLanguage"),                amincludelocal: 1,                amfilter: "timezone-"            }); requests.push(request); }       if (!cd.g.CONTRIBS_PAGE || null === cd.g.LOCAL_TIMEZONE_OFFSET) { const request = cd.g.api.get({               action: "query",                meta: "siteinfo",                siprop: [ "specialpagealiases", "general" ]            }).then(resp => {                resp.query.specialpagealiases.some(alias => { if ("Contributions" === alias.realname) return cd.g.CONTRIBS_PAGE = mw.config.get("wgFormattedNamespaces")[-1] + ":" + alias.aliases[0], !0;               }), cd.g.LOCAL_TIMEZONE_OFFSET = resp.query.general.timeoffset;            }); requests.push(request); }       return Promise.all(requests); }   function setLocalTimestampRegexps { const mainPartPattern = function(format, digits) { const regexpAlternateGroup = arr => "(" + arr.map(mw.util.escapeRegExp).join("|") + ")"; let s = "\\b"; for (let p = 0; p < format.length; p++) { let num = !1, code = format[p]; switch ("x" === code && p < format.length - 1 && (code += format[++p]), "xk" === code && p < format.length - 1 && (code += format[++p]),                code) { case "xx": s += "x"; break;

case "xg": s += regexpAlternateGroup(util_getMessages([ "january-gen", "february-gen", "march-gen", "april-gen", "may-gen", "june-gen", "july-gen", "august-gen", "september-gen", "october-gen", "november-gen", "december-gen" ])); break;

case "d": num = "2"; break;

case "D": s += regexpAlternateGroup(util_getMessages([ "sun", "mon", "tue", "wed", "thu", "fri", "sat" ])); break;

case "j": num = "1,2"; break;

case "l": s += regexpAlternateGroup(util_getMessages([ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" ])); break;

case "F": s += regexpAlternateGroup(util_getMessages([ "january", "february", "march", "april", "may_long", "june", "july", "august", "september", "october", "november", "december" ])); break;

case "M": s += regexpAlternateGroup(util_getMessages([ "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec" ])); break;

case "n": num = "1,2"; break;

case "Y": case "xkY": num = "4"; break;

case "G": num = "1,2"; break;

case "H": case "i": num = "2"; break;

case "\\": p < format.length - 1 ? s += format[++p] : s += "\\"; break;

case '"':                   if (p < format.length - 1) {                        const endQuote = format.indexOf('"', p + 1); -1 === endQuote ? s += '"' : (s += format.substr(p + 1, endQuote - p - 1), p = endQuote);                   } else s += '"'; break;

default: s += format[p]; }               !1 !== num && (s += "(" + (digits + "{" + num + "}") + ")"); }           return s;        }(cd.g.DATE_FORMAT, cd.g.DIGITS ? "[" + cd.g.DIGITS + "]" : "\\d"), timezones = Object.keys(cd.config.messages).filter(name => name.startsWith("timezone-")).map(name => name.slice(9)), timezonePattern = "\\((?:" + (timezones.length ? timezones : TIMEZONES).map(abbr => {            const message = mw.message("timezone-" + abbr);            return message.exists ? message.text : abbr;        }).map(mw.util.escapeRegExp).join("|").toUpperCase + ")\\)", pattern = mainPartPattern + " " + timezonePattern; cd.g.TIMESTAMP_REGEXP = new RegExp(pattern), cd.g.TIMESTAMP_REGEXP_NO_TIMEZONE = new RegExp(mainPartPattern), cd.g.TIMEZONE_REGEXP = new RegExp(timezonePattern, "g"); }   function initTimestampParsingTools { !function { const langCode = mw.config.get("wgContentLanguage"); cd.g.DATE_FORMAT = DATE_FORMATS[langCode], cd.g.DIGITS = mw.config.get("wgTranslateNumerals") ? DIGITS[langCode] : null; }, setLocalTimestampRegexps, function { const format = cd.g.DATE_FORMAT, matchingGroups = []; for (let p = 0; p < format.length; p++) { let code = format[p]; switch ("x" === code && p < format.length - 1 && (code += format[++p]), "xk" === code && p < format.length - 1 && (code += format[++p]),                code) { case "xx": break;

case "xg": case "d": case "j": case "D": case "l": case "F": case "M": case "n": case "Y": case "xkY": case "G": case "H": case "i": matchingGroups.push(code); break;

case "\\": p < format.length - 1 && ++p; break;

case '"':                   if (p < format.length - 1) {                        const endQuote = format.indexOf('"', p + 1); -1 !== endQuote && (p = endQuote); }               }            }            cd.g.TIMESTAMP_PARSER = (match, matchingGroups, digits, timezoneOffset) => { const untransformDigits = text => digits ? text.replace(new RegExp("[" + digits + "]", "g"), m => digits.indexOf(m)) : text, getMessages = messages => messages.map(name => cd.g.MESSAGES[name]); let year = 0, monthIdx = 0, day = 0, hour = 0, minute = 0; for (let i = 0; i < matchingGroups.length; i++) { const code = matchingGroups[i], text = match[i + 3]; switch (code) { case "xg": monthIdx = getMessages([ "january-gen", "february-gen", "march-gen", "april-gen", "may-gen", "june-gen", "july-gen", "august-gen", "september-gen", "october-gen", "november-gen", "december-gen" ]).indexOf(text); break;

case "d": case "j": day = Number(untransformDigits(text)); break;

case "D": case "l": break;

case "F": monthIdx = getMessages([ "january", "february", "march", "april", "may_long", "june", "july", "august", "september", "october", "november", "december" ]).indexOf(text); break;

case "M": monthIdx = getMessages([ "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec" ]).indexOf(text); break;

case "n": monthIdx = Number(untransformDigits(text)) - 1; break;

case "Y": year = Number(untransformDigits(text)); break;

case "xkY": year = Number(untransformDigits(text)) - 543; break;

case "G": case "H": hour = Number(untransformDigits(text)); break;

case "i": minute = Number(untransformDigits(text)); break;

default: throw "Not implemented"; }               }                return new Date(Date.UTC(year, monthIdx, day, hour, minute) - 60 * timezoneOffset * 1e3); }, cd.g.TIMESTAMP_MATCHING_GROUPS = matchingGroups; };   }    function initSettings { cd.settings = cd.settings || {}, cd.defaultSettings = { allowEditOthersComments: !1, alwaysExpandSettings: !1, autopreview: !0, desktopNotifications: "unknown", defaultCommentLinkType: cd.config.defaultCommentLinkType || "diff", defaultSectionLinkType: "wikilink", highlightOwnComments: !0, insertButtonsChanged: !1, insertButtons: cd.config.defaultInsertButtons || [], mySignature: cd.g.SIGN_CODE, notifications: "all", notificationsBlacklist: [], showLoadingOverlay: !0, showToolbar: !0, watchSectionOnReply: !0 };       const aliases = { desktopNotifications: [ "browserNotifications" ] };       let nativeSettings; try { nativeSettings = JSON.parse(mw.user.options.get(cd.g.SETTINGS_OPTION_FULL_NAME)) || {}; } catch (e) { nativeSettings = {}; }       Object.keys(cd.defaultSettings).forEach(name => {            const settingName = "cd" + firstCharToUpperCase(name);            settingName in window && (cd.settings[name] = window[settingName]), void 0 !== nativeSettings[name] && typeof nativeSettings[name] == typeof cd.defaultSettings[name] && (cd.settings[name] = nativeSettings[name]),             (aliases[name] || []).forEach(alias => { void 0 !== nativeSettings[alias] && typeof nativeSettings[alias] == typeof cd.defaultSettings[name] && (cd.settings[name] = nativeSettings[alias]); });       }), cd.settings.insertButtonsChanged || JSON.stringify(nativeSettings.insertButtons) === JSON.stringify(cd.config.defaultInsertButtons) || (cd.settings.insertButtons = cd.config.defaultInsertButtons), cd.settings = Object.assign({}, cd.defaultSettings, cd.settings), JSON.stringify(cd.settings) !== mw.user.options.get(cd.g.SETTINGS_OPTION_FULL_NAME) && setSettings.catch(e => {           console.warn("Couldn't save the settings to the server.", e);        }); }   function initTalkPageCss { const focusedColor = window.getComputedStyle(document.documentElement).getPropertyValue("--cd-comment-underlay-focused-color"), bodyBackgroundColor = $("#content").length ? window.getComputedStyle($("#content").get(0)).backgroundColor : "white"; document.documentElement.style.setProperty("--cd-comment-underlay-focused-transparent-color", function(color) {           const dummyElement = document.createElement("span");            return dummyElement.style.color = color, (color = dummyElement.style.color).includes("rgba") ? color.replace(/\d+(?=\))/, "0") : color.replace(/rgb/, "rgba").replace(/\)/, ", 0)"); }(focusedColor || cd.g.COMMENT_UNDERLAY_FOCUSED_COLOR)), cd.g.nanoCss.put(":root", { "--cd-comment-underlay-focused-color": cd.g.COMMENT_UNDERLAY_FOCUSED_COLOR, "--cd-comment-underlay-target-color": cd.g.COMMENT_UNDERLAY_TARGET_COLOR, "--cd-comment-underlay-new-color": cd.g.COMMENT_UNDERLAY_NEW_COLOR, "--cd-comment-underlay-own-color": cd.g.COMMENT_UNDERLAY_OWN_COLOR }), cd.g.nanoCss.put(".cd-commentOverlay-gradient", { backgroundImage: "linear-gradient(to left, var(--cd-comment-underlay-focused-color), var(--cd-comment-underlay-focused-transparent-color))" }), cd.g.nanoCss.put(".cd-messageArea .cd-closeButton", { backgroundColor: bodyBackgroundColor });   }    function init(_x) {        return _init.apply(this, arguments);    }    function _init {        return (_init = asyncToGenerator_default((function*({messagesRequest: messagesRequest}) { cd.g.api = cd.g.api || new mw.Api, (yield messagesRequest) || loadMessages, initSettings, initTimestampParsingTools, cd.config.tagName ? (cd.g.SUMMARY_POSTFIX = "", cd.g.SUMMARY_LENGTH_LIMIT = mw.config.get("wgCommentCodePointLimit")) : (cd.g.SUMMARY_POSTFIX = " (").concat(cd.s("script-name-short"), ")"),            cd.g.SUMMARY_LENGTH_LIMIT = mw.config.get("wgCommentCodePointLimit") - cd.g.SUMMARY_POSTFIX.length), cd.g.CONTRIBS_PAGE_LINK_REGEXP = new RegExp("^".concat(cd.g.CONTRIBS_PAGE, "/")), cd.g.CURRENT_USER_GENDER = mw.user.options.get("gender"), cd.g.QQX_MODE = "qqx" === mw.util.getParamValue("uselang"), cd.g.GENDER_AFFECTS_USER_STRING = cd.s("user-male-dative") !== cd.s("user-female-dative") || cd.s("user-male-dative") !== cd.s("user-unknown-dative") || cd.s("user-male-genitive") !== cd.s("user-female-genitive") || cd.s("user-male-genitive") !== cd.s("user-unknown-genitive"), cd.g.dontHandleScroll = !1, cd.g.autoScrollInProgress = !1, cd.commentForms = []; const namespaceIds = mw.config.get("wgNamespaceIds"), userNamespaces = Object.keys(namespaceIds).filter(key => [ 2, 3 ].includes(namespaceIds[key])), userNamespacesPattern = underlinesToSpaces(userNamespaces.join("|")); cd.g.USER_NAMESPACES_REGEXP = new RegExp("(?:^|:)(?:".concat(userNamespacesPattern, "):(.+)"), "i"); const anySpace = s => s.replace(/:/g, " : ").replace(/[ _]/g, "[ _]*"), userNamespacesPatternAnySpace = anySpace(userNamespaces.join("|")), contributionsPageAnySpace = anySpace(cd.g.CONTRIBS_PAGE); if (cd.g.CAPTURE_USER_NAME_PATTERN = "\\[\\[[ _]*:?(?:\\w*:){0,2}(?:(?:".concat(userNamespacesPatternAnySpace, ")[ _]*:[ _]*|") + "(?:Special[ _]*:[ _]*Contributions|".concat(contributionsPageAnySpace, ")\\/[ _]*)([^|\\]/]+)(/)?"),            cd.config.unsignedTemplates.length) {                const unsignedTemplatesPattern = cd.config.unsignedTemplates.map(caseInsensitiveFirstCharPattern).join("|");                cd.g.UNSIGNED_TEMPLATES_REGEXP = new RegExp("(\\{\\{ *(?:".concat(unsignedTemplatesPattern, ") *\\|[ \\u200E]*([^}|]+?)[ \\u200E]*(?:\\|[ \\u200E]*([^}]+?)[ \\u200E]*)?\\}\\}).*\\n"), "g");            }            const currentUserSignature = mw.user.options.get("nickname"), authorInSignatureMatch = currentUserSignature.match(new RegExp("\\s*".concat(cd.g.CAPTURE_USER_NAME_PATTERN), "i"));            if (authorInSignatureMatch) {                const textBeforeSignature = cd.settings.mySignature !== cd.defaultSettings.mySignature && cd.settings.mySignature.includes("".concat("~")) ? mw.util.escapeRegExp(cd.settings.mySignature.slice(0, cd.settings.mySignature.indexOf("".concat("~")))) : "", signatureBeginning = mw.util.escapeRegExp(currentUserSignature.slice(0, authorInSignatureMatch.index));                cd.g.CURRENT_USER_SIGNATURE_PREFIX_REGEXP = new RegExp(textBeforeSignature + signatureBeginning + "$");            }            const pniePattern = cd.g.POPULAR_NOT_INLINE_ELEMENTS.join("|");            cd.g.PNIE_PATTERN = "(?:".concat(pniePattern, ")");            const commentAntipatternsPatternParts = [];            if (cd.config.elementsToExcludeClasses.length || cd.config.templatesToExclude.length || cd.config.commentAntipatterns.length) {                if (cd.config.elementsToExcludeClasses) {                    const elementsToExcludeClassesPattern = cd.config.elementsToExcludeClasses.join("\\b|\\b");                    commentAntipatternsPatternParts.push("class=(['\"])[^'\"\\n]*(?:\\b".concat(elementsToExcludeClassesPattern, "\\b)[^'\"\\n]*\\1"));                }                if (cd.config.templatesToExclude.length) {                    const templatesToExcludePattern = cd.config.templatesToExclude.map(caseInsensitiveFirstCharPattern).join("|");                    commentAntipatternsPatternParts.push("\\{\\{ *(?:".concat(templatesToExcludePattern, ") *(?:\\||\\}\\})"));                }                cd.config.commentAntipatterns && commentAntipatternsPatternParts.push(...cd.config.commentAntipatterns);                const commentAntipatternPattern = commentAntipatternsPatternParts.join("|");                cd.g.COMMENT_ANTIPATTERNS_REGEXP = new RegExp("^.*(?:".concat(commentAntipatternPattern, ").*$"), "mg");            }            cd.g.ARTICLE_PATH_REGEXP = new RegExp(mw.util.escapeRegExp(mw.config.get("wgArticlePath")).replace(mw.util.escapeRegExp("$1"), "(.*)"));            const quoteBeginnings = [ ""', ' ' ], quoteEndings = [ '"", " " ];            cd.config.pairQuoteTemplates.forEach(template => {                quoteBeginnings.push("{{".concat(template[0])), quoteEndings.push("{{".concat(template[1]));            });            const quoteBeginningsPattern = quoteBeginnings.map(mw.util.escapeRegExp).join("|"), quoteEndingsPattern = quoteEndings.map(mw.util.escapeRegExp).join("|");            cd.g.QUOTE_REGEXP = new RegExp("(".concat(quoteBeginningsPattern, ")([^]*?)(").concat(quoteEndingsPattern, ")"), "ig"),             cd.g.UNHIGHLIGHTABLE_ELEMENTS_CLASSES = cd.g.UNHIGHLIGHTABLE_ELEMENTS_CLASSES.concat(cd.config.customUnhighlightableElementsClasses);            const file = removeDuplicates([ "File", mw.msg("file-anchor-link") ]).join("|");            cd.g.BAD_COMMENT_BEGINNINGS = cd.g.BAD_COMMENT_BEGINNINGS.concat([ new RegExp("^\\[\\[(?:".concat(file, "):.*\\n*(?=[*:#])")) ]).concat(cd.config.customBadCommentBeginnings),             cd.g.ADD_TOPIC_SELECTORS = [ "#ca-addsection a" ].concat(cd.config.customAddTopicLinkSelectors).join(", "),             createWindowManager, cd.g.COMMENT_ELEMENT_PROTOTYPES = {}, cd.g.SECTION_ELEMENT_PROTOTYPES = {},             cd.g.COMMENT_ELEMENT_PROTOTYPES.goToParentButton = new OO.ui.ButtonWidget({                label: cd.s("cm-gotoparent"),                title: cd.s("cm-gotoparent-tooltip"),                framed: !1,                classes: [ "cd-button", "cd-commentButton" ]            }).$element.get(0);            const defaultTypeProperty = "cm-copylink-tooltip-".concat(cd.settings.defaultCommentLinkType.toLowerCase);            cd.g.COMMENT_ELEMENT_PROTOTYPES.linkButton = new OO.ui.ButtonWidget({                label: cd.s("cm-copylink"),                title: cd.s("cm-copylink-tooltip", cd.s(defaultTypeProperty)),                framed: !1,                classes: [ "cd-button", "cd-commentButton" ]            }).$element.get(0), cd.g.COMMENT_ELEMENT_PROTOTYPES.pendingLinkButton = new OO.ui.ButtonWidget({                label: cd.s("cm-copylink"),                title: cd.s("cm-copylink-tooltip", cd.s(defaultTypeProperty)),                framed: !1,                disabled: !0,                classes: [ "cd-button", "cd-commentButton", "cd-button-pending" ]            }).$element.get(0), cd.g.COMMENT_ELEMENT_PROTOTYPES.thankButton = new OO.ui.ButtonWidget({                label: cd.s("cm-thank"),                title: cd.s("cm-thank-tooltip"),                framed: !1,                classes: [ "cd-button", "cd-commentButton" ]            }).$element.get(0), cd.g.COMMENT_ELEMENT_PROTOTYPES.pendingThankButton = new OO.ui.ButtonWidget({                label: cd.s("cm-thank"),                title: cd.s("cm-thank-tooltip"),                framed: !1,                disabled: !0,                classes: [ "cd-button", "cd-commentButton", "cd-button-pending" ]            }).$element.get(0), cd.g.COMMENT_ELEMENT_PROTOTYPES.disabledThankButton = new OO.ui.ButtonWidget({                label: cd.s("cm-thank"),                title: cd.s("cm-thank-disabled-tooltip"),                framed: !1,                disabled: !0,                classes: [ "cd-button", "cd-commentButton" ]            }).$element.get(0), cd.g.COMMENT_ELEMENT_PROTOTYPES.editButton = new OO.ui.ButtonWidget({                label: cd.s("cm-edit"),                framed: !1,                classes: [ "cd-button", "cd-commentButton" ]            }).$element.get(0), cd.g.COMMENT_ELEMENT_PROTOTYPES.replyButton = new OO.ui.ButtonWidget({                label: cd.s("cm-reply"),                framed: !1,                classes: [ "cd-button", "cd-commentButton" ]            }).$element.get(0), cd.g.SECTION_ELEMENT_PROTOTYPES.replyButton = new OO.ui.ButtonWidget({                label: cd.s("section-reply"),                framed: !1,                classes: [ "cd-button", "cd-sectionButton" ]            }).$element.get(0), cd.g.SECTION_ELEMENT_PROTOTYPES.addSubsectionButton = new OO.ui.ButtonWidget({                label: cd.s("section-addsubsection"),                framed: !1,                classes: [ "cd-button", "cd-sectionButton" ]            }).$element.get(0), cd.g.COMMENT_ELEMENT_PROTOTYPES.underlay = document.createElement("div"),             cd.g.COMMENT_ELEMENT_PROTOTYPES.underlay.className = "cd-commentUnderlay", cd.g.COMMENT_ELEMENT_PROTOTYPES.overlay = document.createElement("div"),             cd.g.COMMENT_ELEMENT_PROTOTYPES.overlay.className = "cd-commentOverlay";            const overlayInnerWrapper = document.createElement("div");            overlayInnerWrapper.className = "cd-commentOverlay-innerWrapper", cd.g.COMMENT_ELEMENT_PROTOTYPES.overlay.appendChild(overlayInnerWrapper);            const overlayGradient = document.createElement("div");            overlayGradient.textContent = "\xa0", overlayGradient.className = "cd-commentOverlay-gradient",             overlayInnerWrapper.appendChild(overlayGradient);            const overlayContent = document.createElement("div");            overlayContent.className = "cd-commentOverlay-content", overlayInnerWrapper.appendChild(overlayContent),             $.fn.extend(jqueryExtensions);        }))).apply(this, arguments);    }    function getUnseenCommentAnchors {        return cd.comments.filter(comment => "unseen" === comment.newness).map(comment => comment.anchor);    }    function updatePageContent(_x2, _x3) {        return _updatePageContent.apply(this, arguments);    }    function _updatePageContent {        return (_updatePageContent = asyncToGenerator_default((function*(html, keptData) {            cd.debug.stopTimer("getting HTML"), cd.debug.startTimer("laying out HTML"), cd.g.$content.html(html);            try {                yield processPage(Object.assign({}, keptData, {                    unseenCommentAnchors: getUnseenCommentAnchors                }));            } catch (e) {                mw.notify(cd.s("error-reloadpage"), {                    type: "error"                }), removeLoadingOverlay, console.error(e);            }            mw.hook("wikipage.content").fire(cd.g.$content);        }))).apply(this, arguments);    }    let $loadingPopup, newCount, unseenCount;    function isShowLoadingOverlaySettingOff {        return cd.settings && !1 === cd.settings.showLoadingOverlay || !cd.settings && void 0 !== window.cdShowLoadingOverlay && !1 === window.cdShowLoadingOverlay;    }    function setLoadingOverlay {        isShowLoadingOverlaySettingOff || ($loadingPopup ? $loadingPopup.show : ($loadingPopup = $(" ").addClass("cd-loadingPopup"),         $(" ").addClass("cd-loadingPopup-logo").attr("src", cd.config.logoDataUrl).appendTo($loadingPopup),         $(document.body).append($loadingPopup)));    }    function removeLoadingOverlay {        $loadingPopup && !isShowLoadingOverlaySettingOff && $loadingPopup.hide;    }    function reloadPage {        return _reloadPage.apply(this, arguments);    }    function _reloadPage {        return (_reloadPage = asyncToGenerator_default((function*(keptData = {}) {            let pageData;            saveSession, keptData.scrollPosition = window.pageYOffset, js_navPanel.closeAllNotifications,             cd.debug.init, cd.debug.startTimer("total time"), cd.debug.startTimer("getting HTML"),             setLoadingOverlay, getUserInfo;            try {                pageData = yield getCurrentPageData(!0);            } catch (e) {                if (removeLoadingOverlay, keptData.commentAnchor) throw e;                return mw.notify(cd.s("error-reloadpage"), {                    type: "error"                }), void console.warn(e);            }            cd.commentForms.forEach(commentForm => {                commentForm.$element.detach;            }), mw.config.set({                wgRevisionId: pageData.revid,                wgCurRevisionId: pageData.revid            }), mw.loader.load(pageData.modules), mw.loader.load(pageData.modulestyles), mw.config.set(pageData.jsconfigvars),             updatePageContent(pageData.text, keptData);        }))).apply(this, arguments);    }    function saveSession(warnedLeave) {        const forms = cd.commentForms.map(commentForm => {            let targetData;            const target = commentForm.target;            return commentForm.target instanceof Comment_Comment ? targetData = {                anchor: target.anchor            } : target instanceof Section_Section && (targetData = {                headline: target.headline,                firstCommentAnchor: target.comments[0] && target.comments[0].anchor,                index: target.id            }), {                mode: commentForm.mode,                targetData: targetData,                addSectionLinkHref: commentForm.$addSectionLink && commentForm.$addSectionLink.attr("href"),                headline: commentForm.headlineInput && commentForm.headlineInput.getValue,                comment: commentForm.commentInput.getValue,                summary: commentForm.summaryInput.getValue,                minor: commentForm.minorCheckbox && commentForm.minorCheckbox.isSelected,                watch: commentForm.watchCheckbox && commentForm.watchCheckbox.isSelected,                watchSection: commentForm.watchSectionCheckbox && commentForm.watchSectionCheckbox.isSelected,                ping: commentForm.pingCheckbox && commentForm.pingCheckbox.isSelected,                small: commentForm.smallCheckbox && commentForm.smallCheckbox.isSelected,                noSignature: commentForm.noSignatureCheckbox && commentForm.noSignatureCheckbox.isSelected,                delete: commentForm.deleteCheckbox && commentForm.deleteCheckbox.isSelected,                originalHeadline: commentForm.originalHeadline,                originalComment: commentForm.originalComment,                summaryAltered: commentForm.summaryAltered,                lastFocused: commentForm.lastFocused            };        }), commentFormsData = forms.length ? {            forms: forms,            saveUnixTime: Date.now,            warnedLeave: warnedLeave        } : {}, commentFormsDataAllPagesJson = localStorage.getItem("convenientDiscussions-commentForms");        let commentFormsDataAllPages;        try {            commentFormsDataAllPages = commentFormsDataAllPagesJson && JSON.parse(commentFormsDataAllPagesJson) || {};        } catch (e) {            console.error(e), commentFormsDataAllPages = {};        }        commentFormsDataAllPages[mw.config.get("wgPageName")] = commentFormsData, localStorage.setItem("convenientDiscussions-commentForms", JSON.stringify(commentFormsDataAllPages));    }    function restoreCommentFormsFromData(commentFormsData) {        const restored = [], rescue = [];        commentFormsData.forms.forEach(data => {            const property = CommentForm_CommentForm.modeToProperty(data.mode);            if (data.targetData && data.targetData.anchor) {                const comment = Comment_Comment.getCommentByAnchor(data.targetData.anchor);                comment && !comment["".concat(property, "Form")] ? (comment[property](data), restored.push(comment["".concat(property, "Form")])) : rescue.push(data);            } else if (data.targetData && data.targetData.headline) {                const section = Section_Section.search({                    headline: data.targetData.headline,                    firstCommentAnchor: data.targetData.firstCommentAnchor,                    index: data.targetData.index                });                section && !section["".concat(property, "Form")] ? (section[property](data), restored.push(section["".concat(property, "Form")])) : rescue.push(data);            } else if ("addSection" === data.mode) if (cd.g.addSectionForm) rescue.push(data); else {                const $fakeA = $("").attr("href", data.addSectionLinkHref);                cd.g.addSectionForm = new CommentForm_CommentForm({                    mode: data.mode,                    $addSectionLink: $fakeA,                    dataToRestore: data                }), restored.push(cd.g.addSectionForm);            }        }), restored.length && (restored.slice.sort(lastFocused)[0].commentInput.focus,         saveSession), rescue.length && rescueCommentFormsContent(rescue);    }    function restoreCommentForms {        if (cd.g.firstRun) {            const commentFormsDataAllPagesJson = localStorage.getItem("convenientDiscussions-commentForms");            if (commentFormsDataAllPagesJson) {                let commentFormsDataAllPages;                try {                    commentFormsDataAllPages = JSON.parse(commentFormsDataAllPagesJson) || {};                } catch (e) {                    return void console.error(e);                }                data = commentFormsDataAllPages, Object.keys(data).forEach(key => {                    (!data[key].forms || !data[key].forms.length || data[key].saveUnixTime < Date.now - 1e3 * cd.g.SECONDS_IN_A_DAY * 30) && delete data[key];                }), commentFormsDataAllPages = data, localStorage.setItem("convenientDiscussions-commentForms", JSON.stringify(commentFormsDataAllPages));                const commentFormsData = commentFormsDataAllPages[mw.config.get("wgPageName")] || {};                if (commentFormsData.forms) if (commentFormsData.warnedLeave) {                    const $text = animateLink(cd.s("restore-suggestion-text"), "cd-notification-restoreCommentForms", asyncToGenerator_default((function* {                        cd.util.isPageOverlayOn || (notification.close, restoreCommentFormsFromData(commentFormsData));                    }))), notification = mw.notification.notify($text, {                        autoHide: !1                    });                } else restoreCommentFormsFromData(commentFormsData), mw.notify(cd.s("restore-restored-text"), {                    title: cd.s("restore-restored-title")                });            }        } else {            const rescue = [];            cd.commentForms.forEach(commentForm => {                commentForm.checkCodeRequest = null;                const target = commentForm.target;                if (target instanceof Comment_Comment) {                    if (target.anchor) {                        const comment = Comment_Comment.getCommentByAnchor(target.anchor);                        comment ? (commentForm.setTargets(comment), comment[CommentForm_CommentForm.modeToProperty(commentForm.mode)](commentForm),                         commentForm.addToPage) : rescue.push({                            headline: commentForm.headlineInput && commentForm.headlineInput.getValue,                            comment: commentForm.commentInput.getValue,                            summary: commentForm.summaryInput.getValue                        });                    }                } else if (target instanceof Section_Section) {                    const section = Section_Section.search({                        headline: target.headline,                        firstCommentAnchor: target.comments[0] && target.comments[0].anchor,                        index: target.id                    });                    section ? (commentForm.setTargets(section), section[CommentForm_CommentForm.modeToProperty(commentForm.mode)](commentForm),                     commentForm.addToPage) : rescue.push({                        headline: commentForm.headlineInput && commentForm.headlineInput.getValue,                        comment: commentForm.commentInput.getValue,                        summary: commentForm.summaryInput.getValue                    });                } else "addSection" === commentForm.mode && commentForm.addToPage;            }), rescue.length && rescueCommentFormsContent(rescue);        }        var data;        saveSession, js_navPanel.updateCommentFormButton;    }    let relevantNewCommentAnchor, $navPanel, $refreshButton, $previousButton, $nextButton, $firstUnseenButton, $commentFormButton, lastFirstTimeSeenCommentId = null, newRevisions = [], notifiedAbout = [], navPanel_notifications = [], isBackgroundCheckArranged = !1;    function setAlarmViaWorker(interval) {        cd.g.worker.postMessage({            type: "setAlarm",            interval: interval        });    }    function removeAlarmViaWorker {        cd.g.worker.postMessage({            type: "removeAlarm"        });    }    function checkForNewComments {        return _checkForNewComments.apply(this, arguments);    }    function _checkForNewComments {        return (_checkForNewComments = asyncToGenerator_default((function* {            if (!cd.g.worker) return;            if (document.hidden && !isBackgroundCheckArranged) {                const callback =  => {                    $(document).off("visibilitychange", callback), isBackgroundCheckArranged = !1, removeAlarmViaWorker,                     checkForNewComments;                };                return $(document).on("visibilitychange", callback), setAlarmViaWorker(1e3 * Math.abs(cd.g.BACKGROUND_CHECK_FOR_NEW_COMMENTS_INTERVAL - cd.g.CHECK_FOR_NEW_COMMENTS_INTERVAL)),                 void (isBackgroundCheckArranged = !0);            }            isBackgroundCheckArranged = !1;            const rvstartid = newRevisions.length ? newRevisions[newRevisions.length - 1] : mw.config.get("wgRevisionId");            try {                const revisionsResp = yield makeRequestNoTimers({                    action: "query",                    titles: cd.g.CURRENT_PAGE,                    prop: "revisions",                    rvprop: [ "ids", "flags", "size", "comment" ],                    rvdir: "newer",                    rvstartid: rvstartid,                    rvlimit: 500,                    redirects: !0,                    formatversion: 2                }).catch(handleApiReject), revisions = revisionsResp && revisionsResp.query && revisionsResp.query.pages && revisionsResp.query.pages[0] && revisionsResp.query.pages[0].revisions;                if (!revisions) throw new CdError({                    type: "api",                    code: "noData"                });                const addedNewRevisions = revisions.filter((revision, i) => 0 !== i && !revision.minor && Math.abs(revision.size - revisions[i - 1].size) >= cd.config.bytesToDeemComment && !isCommentEdit(revision.comment)).map(revision => revision.revid);                if (newRevisions.push(...addedNewRevisions), newRevisions = removeDuplicates(newRevisions),                 addedNewRevisions.length) {                    const {text: text} = (yield getCurrentPageData(!1, !0)) || {};                    void 0 === text ? console.error("No page text.") : (cd.g.worker.postMessage({                        type: "parse",                        text: text,                        g: {                            TIMESTAMP_REGEXP: cd.g.TIMESTAMP_REGEXP,                            TIMESTAMP_REGEXP_NO_TIMEZONE: cd.g.TIMESTAMP_REGEXP_NO_TIMEZONE,                            TIMESTAMP_PARSER: cd.g.TIMESTAMP_PARSER.toString,                            TIMESTAMP_MATCHING_GROUPS: cd.g.TIMESTAMP_MATCHING_GROUPS,                            DIGITS: cd.g.DIGITS,                            LOCAL_TIMEZONE_OFFSET: cd.g.LOCAL_TIMEZONE_OFFSET,                            MESSAGES: cd.g.MESSAGES,                            CONTRIBS_PAGE: cd.g.CONTRIBS_PAGE,                            CONTRIBS_PAGE_LINK_REGEXP: cd.g.CONTRIBS_PAGE_LINK_REGEXP,                            ARTICLE_PATH_REGEXP: cd.g.ARTICLE_PATH_REGEXP,                            USER_NAMESPACES_REGEXP: cd.g.USER_NAMESPACES_REGEXP,                            UNHIGHLIGHTABLE_ELEMENTS_CLASSES: cd.g.UNHIGHLIGHTABLE_ELEMENTS_CLASSES,                            CURRENT_USER_NAME: cd.g.CURRENT_USER_NAME,                            CURRENT_USER_GENDER: cd.g.CURRENT_USER_GENDER,                            CURRENT_NAMESPACE_NUMBER: cd.g.CURRENT_NAMESPACE_NUMBER                        },                        config: {                            customFloatingElementsSelectors: cd.config.customFloatingElementsSelectors,                            closedDiscussionsClasses: cd.config.closedDiscussionsClasses,                            elementsToExcludeClasses: cd.config.elementsToExcludeClasses,                            signatureScanLimit: cd.config.signatureScanLimit,                            foreignElementsInHeadlinesClasses: cd.config.foreignElementsInHeadlinesClasses,                            customForeignComponentChecker: cd.config.customForeignComponentChecker ? cd.config.customForeignComponentChecker.toString : cd.config.customForeignComponentChecker                        }                    }), console.debug("sent message from the main thread", Date.now));                }            } catch (e) {                console.warn(e);            }            document.hidden ? (setAlarmViaWorker(1e3 * cd.g.BACKGROUND_CHECK_FOR_NEW_COMMENTS_INTERVAL),             isBackgroundCheckArranged = !0) : setAlarmViaWorker(1e3 * cd.g.CHECK_FOR_NEW_COMMENTS_INTERVAL);        }))).apply(this, arguments);    }    function updateRefreshButton(newComments, areThereInteresting) {        const newCommentsBySection = {};        let tooltipText;        newComments.forEach(comment => {            newCommentsBySection[comment.sectionAnchor] || (newCommentsBySection[comment.sectionAnchor] = []),             newCommentsBySection[comment.sectionAnchor].push(comment);        }), newComments.length ? (tooltipText = "".concat(cd.s("navpanel-newcomments-count", newComments.length), " (R)"),         Object.keys(newCommentsBySection).forEach(anchor => {            const headline = newCommentsBySection[anchor][0].sectionHeadline ? cd.s("navpanel-newcomments-insection", newCommentsBySection[anchor][0].sectionHeadline) : mw.msg("parentheses", cd.s("navpanel-newcomments-outsideofsections"));            tooltipText += "\n\n".concat(headline), newCommentsBySection[anchor].forEach(comment => {                tooltipText += "\n", comment.toMe && (tooltipText += "".concat(cd.s("navpanel-newcomments-toyou"), " "));                const author = comment.author.name || cd.s("navpanel-newcomments-unknownauthor"), date = comment.date ? cd.util.formatDate(comment.date) : cd.s("navpanel-newcomments-unknowndate");                tooltipText += "".concat(author, ", ").concat(date);            });        })) : tooltipText = "".concat(cd.s("navpanel-refresh"), " (R)"), $refreshButton.text(newComments.length ? "+".concat(newComments.length) : "").attr("title", tooltipText),         areThereInteresting ? $refreshButton.addClass("cd-navPanel-refreshButton-interesting") : $refreshButton.removeClass("cd-navPanel-refreshButton-interesting");    }    function updatePageTitle(newCommentsCount, areThereInteresting) {        const interestingMark = areThereInteresting ? "*" : "", s = newCommentsCount ? "(".concat(newCommentsCount).concat(interestingMark, ") ") : "";        document.title = document.title.replace(/^(?:\(\d+\*?\) )?/, s);    }    function addSectionNotifications(newComments) {        $(".cd-refreshButtonContainer").remove, removeDuplicates(newComments.map(comment => comment.sectionAnchor)).forEach(anchor => {            const section = Section_Section.getSectionByAnchor(anchor);            if (!section) return;            const button = new OO.ui.ButtonWidget({                label: "".concat(cd.s("section-newcomments"), ". ").concat(cd.s("navpanel-refresh-tooltip"), "."),                framed: !1,                classes: [ "cd-button", "cd-sectionButton" ]            });            button.on("click",  => {                reloadPage({                    commentAnchor: newComments.find(comment => comment.sectionAnchor === anchor).anchor                });            });            const $lastElement = section.$replyButton ? section.$replyButton.closest("ul, ol") : section.$elements[section.$elements.length - 1];            $(" ").addClass("cd-refreshButtonContainer").addClass("cd-sectionButtonContainer").append(button.$element).insertAfter($lastElement);        });    }    function sendNotifications(_x, _x2) {        return _sendNotifications.apply(this, arguments);    }    function _sendNotifications {        return (_sendNotifications = asyncToGenerator_default((function*(comments, thisPageWatchedSections) {            const notifyAbout = comments.filter(comment => !notifiedAbout.some(commentNotifiedAbout => commentNotifiedAbout.anchor === comment.anchor));            let notifyAboutDesktop = [];            "all" === cd.settings.desktopNotifications ? notifyAboutDesktop = notifyAbout : "toMe" === cd.settings.desktopNotifications && (notifyAboutDesktop = notifyAbout.filter(comment => comment.toMe));            let notifyAboutOrdinary = [];            "all" === cd.settings.notifications ? notifyAboutOrdinary = notifyAbout : "toMe" === cd.settings.notifications && (notifyAboutOrdinary = notifyAbout.filter(comment => comment.toMe)),             "none" !== cd.settings.notifications && notifyAboutOrdinary.length && navPanel_notifications.slice.reverse.some(notification => !notification.notification.isOpen || (notifyAboutOrdinary.push(...notification.comments),             !1));            const authors = removeDuplicates(notifyAboutOrdinary.concat(notifyAboutDesktop)).map(comment => comment.author).filter(defined);            if (yield getUserGenders(authors, !0), notifyAboutOrdinary.length) {                let html, href;                if (1 === notifyAboutOrdinary.length) {                    const comment = notifyAboutOrdinary[0];                    if (href = mw.util.getUrl("".concat(cd.g.CURRENT_PAGE).concat(comment.anchor ? "#".concat(comment.anchor) : "")),                     comment.toMe) {                        const formsDataWillNotBeLost = cd.commentForms.some(commentForm => commentForm.isAltered) ? " " + mw.msg("parentheses", cd.s("notification-formdata")) : "", where = comment.watchedSectionHeadline ? " " + cd.s("notification-part-insection", comment.watchedSectionHeadline) : " " + cd.s("notification-part-onthispage");                        html = cd.s("notification-toyou", comment.author.name, comment.author, where, href, formsDataWillNotBeLost);                    } else {                        const formsDataWillNotBeLost = cd.commentForms.some(commentForm => commentForm.isAltered) ? " " + mw.msg("parentheses", cd.s("notification-formdata")) : "";                        html = cd.s("notification-insection", comment.author.name, comment.author, comment.watchedSectionHeadline, href, formsDataWillNotBeLost);                    }                } else {                    const section = notifyAboutOrdinary.every(comment => comment.watchedSectionHeadline === notifyAboutOrdinary[0].watchedSectionHeadline) ? notifyAboutOrdinary[0].watchedSectionHeadline : void 0;                    href = mw.util.getUrl("".concat(cd.g.CURRENT_PAGE).concat(section ? "#".concat(section) : ""));                    const where = section ? " " + cd.s("notification-part-insection", section) : " " + cd.s("notification-part-onthispage");                    let mayBeInterestingString = cd.s("notification-newcomments-maybeinteresting");                    mayBeInterestingString.startsWith(",") || (mayBeInterestingString = " " + mayBeInterestingString);                    const mayBeInteresting = section && thisPageWatchedSections.includes(section) ? "" : mayBeInterestingString, formsDataWillNotBeLost = cd.commentForms.some(commentForm => commentForm.isAltered) ? " " + mw.msg("parentheses", cd.s("notification-formdata")) : "";                    html = cd.s("notification-newcomments", notifyAboutOrdinary.length, where, mayBeInteresting, href, formsDataWillNotBeLost);                }                navPanel.closeAllNotifications;                const $body = animateLink(html, "cd-notification-reloadPage", e => {                    e.preventDefault, reloadPage({                        commentAnchor: notifyAboutOrdinary[0].anchor                    }), notification.close;                }), notification = mw.notification.notify($body);                navPanel_notifications.push({                    notification: notification,                    comments: notifyAboutOrdinary                });            }            if (!document.hasFocus && "granted" === Notification.permission && notifyAboutDesktop.length) {                let body, tag = "convenient-discussions-";                const comment = notifyAboutDesktop[0];                if (1 === notifyAboutDesktop.length) if (tag += comment.anchor, comment.toMe) {                    const where = comment.sectionHeadline ? " " + cd.s("notification-part-insection", comment.sectionHeadline) : "";                    body = cd.s("notification-toyou-desktop", comment.author.name, comment.author, where, cd.g.CURRENT_PAGE);                } else body = cd.s("notification-insection-desktop", comment.author.name, comment.author, comment.sectionHeadline, cd.g.CURRENT_PAGE); else {                    const section = notifyAboutDesktop.every(comment => comment.watchedSectionHeadline === notifyAboutDesktop[0].watchedSectionHeadline) ? notifyAboutDesktop[0].watchedSectionHeadline : void 0, where = section ? " " + cd.s("notification-part-insection", section) : "";                    let mayBeInterestingString = cd.s("notification-newcomments-maybeinteresting");                    mayBeInterestingString.startsWith(",") || (mayBeInterestingString = " " + mayBeInterestingString);                    const mayBeInteresting = section && thisPageWatchedSections.includes(section) ? "" : mayBeInterestingString;                    body = cd.s("notification-newcomments-desktop", notifyAboutDesktop.length, where, cd.g.CURRENT_PAGE, mayBeInteresting),                     tag += notifyAboutDesktop[notifyAboutDesktop.length - 1].anchor;                }                new Notification(mw.config.get("wgSiteName"), {                    body: body,                    tag: tag                }).onclick =  => {                    parent.focus, window.focus, reloadPage({                        commentAnchor: comment.anchor                    });                };            }            notifiedAbout.push(...notifyAbout);        }))).apply(this, arguments);    }    function navPanel_processComments(_x3) {        return _processComments.apply(this, arguments);    }    function _processComments {        return (_processComments = asyncToGenerator_default((function*(comments) {            let thisPageWatchedSections;            try {                ({thisPageWatchedSections: thisPageWatchedSections} = (yield getWatchedSections(!0)) || {});            } catch (e) {                console.warn("Couldn't load the settings from the server.");            }            comments.forEach(comment => {                comment.author = userRegistry.getUser(comment.authorName), delete comment.authorName;            });            const newComments = comments.filter(comment => comment.anchor && !Comment_Comment.getCommentByAnchor(comment.anchor)), interestingNewComments = newComments.filter(comment => {                if (comment.own || cd.settings.notificationsBlacklist.includes(comment.author.name) || !thisPageWatchedSections) return !1;                if (comment.toMe) return !0;                const sections = Section_Section.getSectionsByHeadline(comment.sectionHeadline);                for (const section of sections) {                    const watchedAncestor = section.getWatchedAncestor(!0);                    if (watchedAncestor) return comment.watchedSectionHeadline = watchedAncestor.headline,                     !0;                }            });            interestingNewComments[0] ? relevantNewCommentAnchor = interestingNewComments[0].anchor : newComments[0] && (relevantNewCommentAnchor = newComments[0].anchor),             updateRefreshButton(newComments, interestingNewComments.length), updatePageTitle(newComments.length, interestingNewComments.length),             addSectionNotifications(newComments), sendNotifications(interestingNewComments, thisPageWatchedSections);        }))).apply(this, arguments);    }    function onMessageFromWorker(_x4) {        return _onMessageFromWorker.apply(this, arguments);    }    function _onMessageFromWorker {        return (_onMessageFromWorker = asyncToGenerator_default((function*(e) {            const message = e.data;            if ("wakeUp" === message.type && checkForNewComments, "parse" === message.type) {                const {comments: comments} = message;                navPanel_processComments(comments);            }        }))).apply(this, arguments);    }    const navPanel = {        mouseOverNavPanel: !1,        mount {            var _this = this;            return asyncToGenerator_default((function* {                $navPanel = $(" ").attr("id", "cd-navPanel").on("mouseenter",  => {                    _this.isMouseOver = !0;                }).on("mouseleave",  => {                    _this.isMouseOver = !1;                }).appendTo(document.body), $refreshButton = $(" ").addClass("cd-navPanel-button").attr("id", "cd-navPanel-refreshButton").attr("title", "".concat(cd.s("navpanel-refresh"), " (R)")).on("click",  => {                    _this.refreshClick;                }).appendTo($navPanel), $previousButton = $(" ").addClass("cd-navPanel-button").attr("id", "cd-navPanel-previousButton").attr("title", "".concat(cd.s("navpanel-previous"), " (W)")).on("click",  => {                    _this.goToPreviousNewComment;                }).hide.appendTo($navPanel), $nextButton = $(" ").addClass("cd-navPanel-button").attr("id", "cd-navPanel-nextButton").attr("title", "".concat(cd.s("navpanel-next"), " (S)")).on("click",  => {                    _this.goToNextNewComment;                }).hide.appendTo($navPanel), $firstUnseenButton = $(" ").addClass("cd-navPanel-button").attr("id", "cd-navPanel-firstUnseenButton").attr("title", "".concat(cd.s("navpanel-firstunseen"), " (F)")).on("click",  => {                    _this.goToFirstUnseenComment;                }).hide.appendTo($navPanel), $commentFormButton = $(" ").addClass("cd-navPanel-button").attr("id", "cd-navPanel-commentFormButton").attr("title", cd.s("navpanel-commentform")).on("click",  => {                    _this.goToCommentForm;                }).hide.appendTo($navPanel), cd.g.worker && (cd.g.worker.onmessage = onMessageFromWorker,                 setAlarmViaWorker(1e3 * cd.g.CHECK_FOR_NEW_COMMENTS_INTERVAL));            }));        },        isMounted:  => Boolean($navPanel),        processVisits(visitsRequest, memorizedUnseenCommentAnchors = []) {            var _this2 = this;            return asyncToGenerator_default((function* {                let visits, thisPageVisits;                try {                    ({visits: visits, thisPageVisits: thisPageVisits} = yield visitsRequest);                } catch (e) {                    return void console.warn("Couldn't load the settings from the server.", e);                }                cd.g.visits = visits, cd.g.thisPageVisits = thisPageVisits;                const currentUnixTime = Math.floor(Date.now / 1e3);                for (let i = thisPageVisits.length - 1; i >= 0; i--) if (thisPageVisits[i] < currentUnixTime - 60 * cd.g.HIGHLIGHT_NEW_COMMENTS_INTERVAL) {                    thisPageVisits.splice(0, i);                    break;                }                if (thisPageVisits.length) {                    const newComments = cd.comments.filter(comment => {                        if (comment.newness = null, !comment.date) return !1;                        const isUnseen = memorizedUnseenCommentAnchors.some(anchor => anchor === comment.anchor), commentUnixTime = Math.floor(comment.date.getTime / 1e3);                        return commentUnixTime > thisPageVisits[0] && (comment.newness = commentUnixTime > thisPageVisits[thisPageVisits.length - 1] && !comment.own || isUnseen ? "unseen" : "new",                         !0);                    }), floatingRects = newComments.length ? cd.g.specialElements.floating.map(el => el.getBoundingClientRect) : void 0;                    newComments.forEach(comment => {                        comment.configureLayers(!1, floatingRects);                    }), newComments.forEach(comment => {                        comment.addLayers;                    });                }                thisPageVisits.push(String(currentUnixTime)), setVisits(visits), _this2.fill,                 _this2.registerSeenComments, mw.hook("convenientDiscussions.newCommentsMarked").fire(cd);            }));        },        reset {            lastFirstTimeSeenCommentId = null, newRevisions = [], notifiedAbout = [], relevantNewCommentAnchor = null,             removeAlarmViaWorker, setAlarmViaWorker(1e3 * cd.g.CHECK_FOR_NEW_COMMENTS_INTERVAL),             isBackgroundCheckArranged = !1, $refreshButton.empty.attr("title", "".concat(cd.s("navpanel-refresh"), " (R)")),             $previousButton.hide, $nextButton.hide, $firstUnseenButton.hide, $commentFormButton.hide;        },        fill {            newCount = cd.comments.filter(comment => comment.newness).length, unseenCount = cd.comments.filter(comment => "unseen" === comment.newness).length,             newCount && ($nextButton.show, $previousButton.show, unseenCount && ($firstUnseenButton.show,             this.updateFirstUnseenButton));        },        areAllCommentsSeen:  => 0 === unseenCount,        decrementUnseenCommentCount {            unseenCount--;        },        updateFirstUnseenButton {            unseenCount ? $firstUnseenButton.text(unseenCount) : $firstUnseenButton.hide;        },        refreshClick {            reloadPage({                commentAnchor: relevantNewCommentAnchor            });        },        closeAllNotifications {            navPanel_notifications.forEach(notification => {                notification.notification.$notification.hide, notification.notification.close;            }), navPanel_notifications = [];        },        goToPreviousNewComment {            if (cd.g.autoScrollInProgress) return;            const foundComment = Comment_Comment.findInViewport("backward");            if (!foundComment) return;            const comment = reorderArray(cd.comments, foundComment.id, !0).find(comment => comment.newness && !1 === comment.isInViewport(!0));            comment && comment.$elements.cdScrollTo("center", !0,  => {                comment.registerSeen("backward", !0), this.updateFirstUnseenButton;            });        },        goToNextNewComment {            if (cd.g.autoScrollInProgress) return;            const foundComment = Comment_Comment.findInViewport("forward");            if (!foundComment) return;            const comment = reorderArray(cd.comments, foundComment.id).find(comment => comment.newness && !1 === comment.isInViewport(!0));            comment && comment.$elements.cdScrollTo("center", !0,  => {                comment.registerSeen("forward", !0), this.updateFirstUnseenButton;            });        },        goToFirstUnseenComment {            if (!cd.g.autoScrollInProgress && unseenCount) {                const comment = cd.comments.slice(lastFirstTimeSeenCommentId || 0).find(comment => "unseen" === comment.newness);                comment && (comment.$elements.cdScrollTo("center", !0,  => {                    comment.registerSeen("forward", !0), this.updateFirstUnseenButton;                }), lastFirstTimeSeenCommentId = comment.id);            }        },        goToCommentForm {            const commentForm = cd.commentForms.filter(commentForm => !commentForm.$element.cdIsInViewport(!0)).sort((commentForm1, commentForm2) => {                const top1 = commentForm1.$element.get(0).getBoundingClientRect.top, top2 = commentForm2.$element.get(0).getBoundingClientRect.top;                return top1 > top2 ? 1 : top2 > top1 ? -1 : 0;            })[0];            commentForm && (commentForm.$element.cdScrollIntoView("center"), commentForm.commentInput.focus);        },        registerSeenComments {            !unseenCount || cd.g.dontHandleScroll || cd.g.autoScrollInProgress || (cd.g.dontHandleScroll = !0,             setTimeout( => {                cd.g.dontHandleScroll = !1;                const foundComment = Comment_Comment.findInViewport;                if (!foundComment) return;                const registerSeenIfInViewport = comment => {                    const isInViewport = comment.isInViewport(!0);                    if (isInViewport) comment.registerSeen; else if (!1 === isInViewport) return !0;                };                cd.comments.slice(0, foundComment.id).reverse.some(registerSeenIfInViewport),                 cd.comments.slice(foundComment.id).some(registerSeenIfInViewport), this.updateFirstUnseenButton;            }, 300));        },        updateCommentFormButton {            cd.g.autoScrollInProgress || (cd.commentForms.some(commentForm => !commentForm.$element.cdIsInViewport(!0)) ? $commentFormButton.show : $commentFormButton.hide);        }    };    var js_navPanel = navPanel;    const beforeUnloadHandlers = {};    function windowResizeHandler {        commentLayers.redrawIfNecessary(!0), js_navPanel.isMounted && js_navPanel.updateCommentFormButton,         cd.commentForms.forEach(commentForm => {            commentForm.adjustLabels;        });    }    function addPreventUnloadCondition(name, condition) {        beforeUnloadHandlers[name] = e => {            if (condition) return e.preventDefault, e.returnValue = "", "";        }, $(window).on("beforeunload", beforeUnloadHandlers[name]);    }    function removePreventUnloadCondition(name) {        beforeUnloadHandlers[name] && $(window).off("beforeunload", beforeUnloadHandlers[name]);    }    function globalKeyDownHandler(e) {        if (!cd.util.isPageOverlayOn) {            if (e.ctrlKey && !e.shiftKey && e.altKey && 81 === e.keyCode || !e.ctrlKey && !e.shiftKey && !e.altKey && 81 === e.keyCode && !isInputFocused) {                e.preventDefault;                const commentForm = CommentForm_CommentForm.getLastActiveCommentForm;                commentForm && commentForm.quote(!e.ctrlKey);            }            js_navPanel.isMounted && (e.ctrlKey || e.shiftKey || e.altKey || 82 !== e.keyCode || isInputFocused || js_navPanel.refreshClick,             e.ctrlKey || e.shiftKey || e.altKey || 87 !== e.keyCode || isInputFocused || js_navPanel.goToPreviousNewComment,             e.ctrlKey || e.shiftKey || e.altKey || 83 !== e.keyCode || isInputFocused || js_navPanel.goToNextNewComment,             e.ctrlKey || e.shiftKey || e.altKey || 70 !== e.keyCode || isInputFocused || js_navPanel.goToFirstUnseenComment);        }    }    function highlightFocused(e) {        if (cd.util.isPageOverlayOn || cd.g.dontHandleScroll || cd.g.autoScrollInProgress) return;        const contentLeft = cd.g.rootElement.getBoundingClientRect.left;        e.pageX < contentLeft - cd.g.COMMENT_UNDERLAY_SIDE_MARGIN ? commentLayers.underlays.filter(underlay => underlay.classList.contains("cd-commentUnderlay-focused")).forEach(underlay => {            underlay.cdTarget.unhighlightFocused;        }) : cd.comments.filter(comment => comment.$underlay).forEach(comment => {            const underlay = comment.$underlay.get(0);            if (!underlay.classList.contains("cd-commentUnderlay")) return;            const top = Number(underlay.style.top.replace("px", "")), left = Number(underlay.style.left.replace("px", "")), width = Number(underlay.style.width.replace("px", "")), height = Number(underlay.style.height.replace("px", "")), layersContainerOffset = comment.getLayersContainerOffset;            !js_navPanel.isMouseOver && e.pageY >= top + layersContainerOffset.top && e.pageY <= top + height + layersContainerOffset.top && e.pageX >= left + layersContainerOffset.left && e.pageX <= left + width + layersContainerOffset.left ? underlay.classList.contains("cd-commentUnderlay-focused") || underlay.cdTarget.highlightFocused : underlay.classList.contains("cd-commentUnderlay-focused") && underlay.cdTarget.unhighlightFocused;        });    }    function checkboxField({value: value, selected: selected, label: label, help: help, tabIndex: tabIndex, title: title}) {        const checkbox = new OO.ui.CheckboxInputWidget({            value: value,            selected: selected,            tabIndex: tabIndex        });        return [ new OO.ui.FieldLayout(checkbox, {            label: label,            align: "inline",            help: help,            helpInline: !0,            title: title        }), checkbox ];    }    function radioField({label: label, selected: selected, help: help, options: options}) {        const items = options.map(config => new OO.ui.RadioOptionWidget(config)), select = new OO.ui.RadioSelectWidget({            items: items        }), field = new OO.ui.FieldLayout(select, {            label: label,            align: "top",            help: help,            helpInline: !0        });        return select.selectItemByData(selected), [ field, select, ...items ];    }    var html_entity_decode = __webpack_require__(8), html_entity_decode_default = __webpack_require__.n(html_entity_decode);    function hideHtmlComments(code) {        return code.replace(//g, (s, m1, m2, m3) => m1 + " ".repeat(m2.length) + m3);    }    function findFirstTimestamp(code) {        const signatures = extractSignatures(code);        return signatures.length ? signatures[0].timestamp : null;    }    function removeWikiMarkup(code) {        return code.replace(//g, "").replace(/\[\[:?(?:[^|[\]<>\n]+\|)?(.+?)\]\]/g, "$1").replace(/\{\{:?(?:[^|{}<>\n]+)(?:\|(.+?))?\}\}/g, "$1").replace(/\[https?:\/\/[^[\]<>"\n ]+ *([^\]]*)\]/g, "$1").replace(/(.+?)/g, "$1").replace(/(.+?)/g, "$1").replace(//g, " ").replace(/<\w+(?: [\w ]+?=[^<>]+?| ?\/?)>/g, "").replace(/<\/\w+ ?>/g, "").replace(/ {2,}/g, " ").trim; }   function normalizeCode(text) { return text.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&#91;/g, "[").replace(/&#93;/g, "]").replace(/&#123;/g, "{").replace(/&#124;/g, "|").replace(/&#125;/g, "}").replace(/\s+/g, " "); }   function encodeWikilink(link) { return link.replace(//g, "&gt;").replace(/\[/g, "&#91;").replace(/\]/g, "&#93;").replace(/\{/g, "&#123;").replace(/\|/g, "&#124;").replace(/\}/g, "&#125;").replace(/\s+/g, " "); }   function extractSignatures(code, generateCommentAnchors) { const adjustedCode = hideHtmlComments(code).replace(cd.g.QUOTE_REGEXP, (s, m1, m2, m3) => m1 + " ".repeat(m2.length) + m3).replace(cd.g.COMMENT_ANTIPATTERNS_REGEXP, s => " ".repeat(s.length)), timestampRegexp = new RegExp("^((.*)(".concat(cd.g.TIMESTAMP_REGEXP.source, ")(?:\\}\\}| )?).*(?:\n*|$)"), "igm"), signatureRegexp = new RegExp("^((.*)(".concat(cd.g.CAPTURE_USER_NAME_PATTERN, ".{1,").concat(250, "}((").concat(cd.g.TIMESTAMP_REGEXP.source, ")(?:\\}\\}| )?)).*)(?:\n*|$)"), "igm"), authorLinkRegexp = new RegExp(cd.g.CAPTURE_USER_NAME_PATTERN, "ig"); let timestampMatch, signatures = []; for (timestampMatch = timestampRegexp.exec(adjustedCode); ) { const line = timestampMatch[0]; signatureRegexp.lastIndex = 0; const authorTimestampMatch = signatureRegexp.exec(line); let author, timestamp, signatureStartIndex, signatureEndIndex, nextCommentStartIndex, dirtySignature; if (authorTimestampMatch) { let authorLinkMatch; author = userRegistry.getUser(decodeHtmlEntities(authorTimestampMatch[4])), timestamp = authorTimestampMatch[7], signatureStartIndex = timestampMatch.index + authorTimestampMatch[2].length, signatureEndIndex = timestampMatch.index + authorTimestampMatch[1].length, nextCommentStartIndex = timestampMatch.index + authorTimestampMatch[0].length, dirtySignature = authorTimestampMatch[3], authorLinkRegexp.lastIndex = 0; const commentEndingStartIndex = Math.max(0, authorTimestampMatch[0].length - authorTimestampMatch[6].length - 250), commentEnding = authorTimestampMatch[0].slice(commentEndingStartIndex); for (authorLinkMatch = authorLinkRegexp.exec(commentEnding); ) { if (authorLinkMatch[2]) continue; if (userRegistry.getUser(decodeHtmlEntities(authorLinkMatch[1])) === author) { signatureStartIndex = timestampMatch.index + commentEndingStartIndex + authorLinkMatch.index, dirtySignature = code.slice(signatureStartIndex, signatureEndIndex); break; }               }            } else timestamp = timestampMatch[3], signatureStartIndex = timestampMatch.index + timestampMatch[2].length, signatureEndIndex = timestampMatch.index + timestampMatch[1].length, nextCommentStartIndex = timestampMatch.index + timestampMatch[0].length, dirtySignature = timestamp; signatures.push({               author: author,                timestamp: timestamp,                signatureStartIndex: signatureStartIndex,                signatureEndIndex: signatureEndIndex,                dirtySignature: dirtySignature,                nextCommentStartIndex: nextCommentStartIndex            }); }       if (cd.g.UNSIGNED_TEMPLATES_REGEXP) { let match; for (match = cd.g.UNSIGNED_TEMPLATES_REGEXP.exec(adjustedCode); ) { let author, timestamp; cd.g.TIMESTAMP_REGEXP_NO_TIMEZONE.test(match[2]) ? (timestamp = match[2], author = match[3]) : cd.g.TIMESTAMP_REGEXP_NO_TIMEZONE.test(match[3]) ? (timestamp = match[3],                author = match[2]) : author = match[2], author = userRegistry.getUser(decodeHtmlEntities(author)), signatures.push({                   author: author,                    timestamp: timestamp,                    signatureStartIndex: match.index,                    signatureEndIndex: match.index + match[1].length,                    dirtySignature: match[1],                    nextCommentStartIndex: match.index + match[0].length                }); }           signatures.sort((sig1, sig2) => sig1.signatureStartIndex > sig2.signatureStartIndex ? 1 : -1); }       return signatures.forEach((sig, i) => {            sig.commentStartIndex = 0 === i ? 0 : signatures[i - 1].nextCommentStartIndex;        }), signatures = signatures.filter(sig => sig.author), generateCommentAnchors && resetCommentAnchors, signatures.forEach((sig, i) => {           const {date: date} = sig.timestamp && parseTimestamp(sig.timestamp) || {};            if (sig.id = i, sig.date = date, delete sig.nextCommentStartIndex, generateCommentAnchors) {                const anchor = date ? generateCommentAnchor(date, sig.author.name, !0) : void 0;                sig.anchor = anchor, registerCommentAnchor(anchor);            }        }), signatures; }   function decodeHtmlEntities(s) { if (-1 === s.indexOf("&")) return s;       { let result = s;           return -1 !== result.indexOf("&#38;amp;") && (result = result.replace(/&#38;amp;/g, "&amp;amp;")), result = -1 === result.indexOf("&#") ? result : result.replace(/&#(\d+);/g, (s, m1) => String.fromCharCode(m1)), -1 === result.indexOf("&") ? result : html_entity_decode_default(result); }   }    function hideSensitiveCode(code, callback) { const hidden = [], hide = (re, isTable) => { code = code.replace(re, s => (callback && callback(isTable), (isTable ? "\x03" : "\x01") + hidden.push(s) + (isTable ? "\x04" : "\x02"))); };       return ( => {            hide(/\{\{([^{]\{?)+?\}\}/g);            let pos = 0;            const stack = [];            let template, left, right;            for (left = code.indexOf("", pos), -1 !== left || -1 !== right || stack.length; ) if (-1 !== left && (left < right || -1 === right)) stack.push(left),             pos = left + 2; else {                if (left = stack.pop, void 0 === left) {                    if (-1 === right) {                        pos += 2;                        continue;                    }                    left = 0;                }                -1 === right && (right = code.length), right += 2, template = code.substring(left, right),                 code = code.substring(0, left) + "\x01" + hidden.push(template) + "\x02" + code.substr(right),                 pos = right - template.length;            }        }), hide(/^\{\|[^]*?\n\|\}/gm, !0), ((...args) => { args.forEach(arg => {               hide(new RegExp("<".concat(arg, "( [^>]+)?>[\\s\\S]+?"), "gi"));            }); })("nowiki", "pre", "source", "syntaxhighlight"), {           code: code,            hidden: hidden        };    }    function unhideSensitiveCode(code, hidden) {        for (code.match(/(?:\x01|\x03)\d+(?:\x02|\x04)/); ) code = code.replace(/(?:\x01|\x03)(\d+)(?:\x02|\x04)/g, (s, num) => hidden[num - 1]);        return code;    }    function createWindowManager {        cd.g.windowManager || (cd.g.windowManager = new OO.ui.WindowManager, $(document.body).append(cd.g.windowManager.$element));    }    function getSelectedItemData(select) {        const selectedItem = select.findSelectedItem;        return selectedItem && selectedItem.getData;    }    function isUnsaved(dialog) {        const saveButton = dialog.actions.get({ actions: "save" })[0];       return saveButton && !saveButton.isDisabled;    }    function confirmCloseDialog(_x, _x2) {        return _confirmCloseDialog.apply(this, arguments);    }    function _confirmCloseDialog {        return (_confirmCloseDialog = asyncToGenerator_default((function*(dialog, dialogCode) { isUnsaved(dialog) && !(yield confirmDestructive("".concat(dialogCode, "-close-confirm"))) || (dialog.close({ action: "close" }), removePreventUnloadCondition("dialog")); }))).apply(this, arguments);   }    function handleError(dialog, e, messageName, recoverable) {        e instanceof CdError ? dialog.showErrors(new OO.ui.Error(cd.s(messageName), {            recoverable: recoverable        })) : dialog.showErrors(new OO.ui.Error(cd.s("error-javascript"), {            recoverable: !1        })), console.warn(e), recoverable || dialog.$errors.find(".oo-ui-buttonElement-button").on("click",  => { dialog.close; }), dialog.actions.setAbilities({ close: !0 }), cd.g.windowManager.updateWindowSize(dialog), dialog.popPending;   }    function settingsDialog {        return _settingsDialog.apply(this, arguments);    }    function _settingsDialog {        return (_settingsDialog = asyncToGenerator_default((function* { if (cd.util.isPageOverlayOn) return; function SettingsDialog { SettingsDialog.parent.call(this); }           OO.inheritClass(SettingsDialog, OO.ui.ProcessDialog), SettingsDialog.static.name = "settingsDialog", SettingsDialog.static.title = cd.s("sd-title"), SettingsDialog.static.actions = [ { action: "close", modes: [ "settings", "reload", "dataRemoved" ], flags: [ "safe", "close" ], disabled: !0 }, {               action: "save", modes: [ "settings" ], label: cd.s("sd-save"), flags: [ "primary", "progressive" ], disabled: !0 }, {               action: "reset", modes: [ "settings" ], label: cd.s("sd-reset"), flags: [ "destructive" ], disabled: !0 }, {               action: "reload", modes: [ "reload" ], label: cd.s("sd-reload"), flags: [ "primary", "progressive" ] } ], SettingsDialog.static.size = "large", SettingsDialog.prototype.getBodyHeight = function { return 600; }, SettingsDialog.prototype.initialize = asyncToGenerator_default((function* { SettingsDialog.parent.prototype.initialize.apply(this, arguments), this.pushPending; const $loading = $(" ").text(cd.s("loading-ellipsis")); this.loadingPanel = new OO.ui.PanelLayout({                   padded: !0,                    expanded: !1                }), this.loadingPanel.$element.append($loading), this.settingsPanel = new OO.ui.PanelLayout({                    padded: !1,                    expanded: !0                }); const $settingsSaved = $(" ").html(cd.s("sd-saved")); this.reloadPanel = new OO.ui.PanelLayout({                   padded: !0,                    expanded: !1                }), this.reloadPanel.$element.append($settingsSaved); const $dataRemoved = $(" ").html(cd.s("sd-dataremoved")); this.dataRemovedPanel = new OO.ui.PanelLayout({                   padded: !0,                    expanded: !1                }), this.dataRemovedPanel.$element.append($dataRemoved), this.stackLayout = new OO.ui.StackLayout({                    items: [ this.loadingPanel, this.settingsPanel, this.reloadPanel, this.dataRemovedPanel ]                }), this.$body.append(this.stackLayout.$element); })), SettingsDialog.prototype.getSetupProcess = function(data) { return SettingsDialog.parent.prototype.getSetupProcess.call(this, data).next( => {                   this.stackLayout.setItem(this.loadingPanel), this.actions.setMode("settings");                }); }, SettingsDialog.prototype.getReadyProcess = function(data) { var _this = this; return SettingsDialog.parent.prototype.getReadyProcess.call(this, data).next(asyncToGenerator_default((function* {                   let settings;                    try {                        [settings] = yield Promise.all(preparationRequests);                    } catch (e) {                        return void handleError(_this, e, "error-settings-load", !1);                    }                    _this.settings = Object.assign({}, cd.settings, settings), cd.g.settingsForm = _this,                     _this.renderForm(_this.settings), _this.stackLayout.setItem(_this.settingsPanel),                     _this.bookletLayout.setPage("general"), _this.actions.setAbilities({ close: !0 }), cd.g.windowManager.updateWindowSize(_this), _this.popPending, addPreventUnloadCondition("dialog", => isUnsaved(dialog));                }))); }, SettingsDialog.prototype.getActionProcess = function(action) { var _this2 = this; return "save" === action ? new OO.ui.Process(asyncToGenerator_default((function* {                   _this2.pushPending;                    const settings = {};                    settings.allowEditOthersComments = _this2.allowEditOthersCommentsCheckbox.isSelected,                     settings.alwaysExpandSettings = _this2.alwaysExpandSettingsCheckbox.isSelected,                     settings.autopreview = _this2.autopreviewCheckbox.isSelected, settings.desktopNotifications = getSelectedItemData(_this2.desktopNotificationsSelect) || "unknown",                     settings.defaultCommentLinkType = getSelectedItemData(_this2.defaultCommentLinkTypeSelect),                     settings.defaultSectionLinkType = getSelectedItemData(_this2.defaultSectionLinkTypeSelect),                     settings.highlightOwnComments = _this2.highlightOwnCommentsCheckbox.isSelected,                     settings.insertButtons = _this2.processInsertButtons, settings.mySignature = _this2.mySignatureInput.getValue, settings.notifications = getSelectedItemData(_this2.notificationsSelect), settings.notificationsBlacklist = _this2.notificationsBlacklistMultiselect.getValue, settings.showToolbar = _this2.showToolbarCheckbox.isSelected, settings.watchSectionOnReply = _this2.watchSectionOnReplyCheckbox.isSelected, settings.insertButtonsChanged = JSON.stringify(settings.insertButtons) !== JSON.stringify(cd.defaultSettings.insertButtons); try { yield setSettings(settings); } catch (e) { return void handleError(_this2, e, "error-settings-save", !0); }                   _this2.stackLayout.setItem(_this2.reloadPanel), _this2.actions.setMode("reload"), _this2.popPending; }))) : "reload" === action ? new OO.ui.Process( => { this.close({                       action: action                    }), location.reload; }) : "close" === action ? new OO.ui.Process(asyncToGenerator_default((function* { confirmCloseDialog(_this2, "sd"); }))) : "reset" === action ? new OO.ui.Process(asyncToGenerator_default((function* { (yield OO.ui.confirm(cd.s("sd-reset-confirm"))) && _this2.renderForm(cd.defaultSettings); }))) : SettingsDialog.parent.prototype.getActionProcess.call(this, action);           }, SettingsDialog.prototype.renderForm = function(settings) {                [this.allowEditOthersCommentsField, this.allowEditOthersCommentsCheckbox] = checkboxField({ value: "allowEditOthersComments", selected: settings.allowEditOthersComments, label: cd.s("sd-alloweditotherscomments") }), [this.alwaysExpandSettingsField, this.alwaysExpandSettingsCheckbox] = checkboxField({ value: "alwaysExpandSettings", selected: settings.alwaysExpandSettings, label: cd.s("sd-alwaysexpandsettings") }), [this.autopreviewField, this.autopreviewCheckbox] = checkboxField({ value: "autopreview", selected: settings.autopreview, label: cd.s("sd-autopreview") }), [this.desktopNotificationsField, this.desktopNotificationsSelect, this.desktopNotificationsRadioAll, this.desktopNotificationsRadioNone, this.desktopNotificationsRadioToMe] = radioField({ options: [ { label: cd.s("sd-desktopnotifications-radio-all"), data: "all" }, {                       label: cd.s("sd-desktopnotifications-radio-tome"), data: "toMe" }, {                       label: cd.s("sd-desktopnotifications-radio-none"), data: "none" } ],                   selected: settings.desktopNotifications, label: cd.s("sd-desktopnotifications"), help: cd.s("sd-desktopnotifications-help", location.host) });               let defaultCommentLinkTypeHelp = cd.s("sd-defaultcommentlinktype-help");                "diff" === cd.config.defaultCommentLinkType && (defaultCommentLinkTypeHelp += " ".concat(cd.s("sd-defaultcommentlinktype-help-notdifflinks"))),                 [this.defaultCommentLinkTypeField, this.defaultCommentLinkTypeSelect, this.defaultCommentLinkTypeRadioWikilink, this.defaultCommentLinkTypeRadioLink] = radioField({ options: [ { label: cd.s("sd-defaultcommentlinktype-radio-diff"), data: "diff" }, {                       label: cd.s("sd-defaultcommentlinktype-radio-wikilink"), data: "wikilink" }, {                       label: cd.s("sd-defaultcommentlinktype-radio-link"), data: "link" } ],                   selected: settings.defaultCommentLinkType, label: cd.s("sd-defaultcommentlinktype", cd.s("cm-copylink")), help: defaultCommentLinkTypeHelp }), [this.defaultSectionLinkTypeField, this.defaultSectionLinkTypeSelect, this.defaultSectionLinkTypeRadioWikilink, this.defaultSectionLinkTypeRadioLink] = radioField({ options: [ { label: cd.s("sd-defaultsectionlinktype-radio-wikilink"), data: "wikilink" }, {                       label: cd.s("sd-defaultsectionlinktype-radio-link"), data: "link" } ],                   selected: settings.defaultSectionLinkType, label: cd.s("sd-defaultsectionlinktype"), help: cd.s("sd-defaultsectionlinktype-help") }), [this.highlightOwnCommentsField, this.highlightOwnCommentsCheckbox] = checkboxField({ value: "highlightOwnComments", selected: settings.highlightOwnComments, label: cd.s("sd-highlightowncomments") });               const insertButtonsSelected = settings.insertButtons.map(button => Array.isArray(button) ? button.join(";") : button);               function GeneralPageLayout(name, config) {                    GeneralPageLayout.super.call(this, name, config), this.$element.append(dialog.highlightOwnCommentsField.$element, dialog.allowEditOthersCommentsField.$element, dialog.defaultCommentLinkTypeField.$element, dialog.defaultSectionLinkTypeField.$element);                }                function CommentFormPageLayout(name, config) {                    CommentFormPageLayout.super.call(this, name, config), this.$element.append(dialog.autopreviewField.$element, dialog.watchSectionOnReplyField.$element, dialog.showToolbarField.$element, dialog.alwaysExpandSettingsField.$element, dialog.insertButtonsField.$element, dialog.mySignatureField.$element);                }                function NotificationsPageLayout(name, config) {                    NotificationsPageLayout.super.call(this, name, config), this.$element.append(dialog.notificationsField.$element, dialog.desktopNotificationsField.$element, dialog.notificationsBlacklistField.$element); }               function RemoveDataPageLayout(name, config) { RemoveDataPageLayout.super.call(this, name, config), this.$element.append(dialog.removeDataField.$element); }               this.insertButtonsMultiselect = new OO.ui.TagMultiselectWidget({                    placeholder: cd.s("sd-insertbuttons-multiselect-placeholder"),                    allowArbitrary: !0,                    inputPosition: "outline",                    tagLimit: 100,                    selected: insertButtonsSelected                }), this.insertButtonsField = new OO.ui.FieldLayout(this.insertButtonsMultiselect, {                    label: cd.s("sd-insertbuttons"),                    align: "top",                    help: cd.util.wrapInElement(cd.s("sd-insertbuttons-help")),                    helpInline: !0                }), this.mySignatureInput = new OO.ui.TextInputWidget({                    value: settings.mySignature,                    maxlength: 100,                    validate: /\/                }), this.mySignatureField = new OO.ui.FieldLayout(this.mySignatureInput, { label: cd.s("sd-mysignature"), align: "top", help: cd.util.wrapInElement(cd.s("sd-mysignature-help", cd.g.SIGN_CODE)), helpInline: !0 }), [this.notificationsField, this.notificationsSelect, this.notificationsRadioAll, this.notificationsRadioNone, this.notificationsRadioToMe] = radioField({ options: [ { label: cd.s("sd-notifications-radio-all"), data: "all" }, {                       label: cd.s("sd-notifications-radio-tome"), data: "toMe" }, {                       label: cd.s("sd-notifications-radio-none"), data: "none" } ],                   selected: settings.notifications, label: cd.s("sd-notifications"), help: cd.s("sd-notifications-help") }), this.notificationsBlacklistMultiselect = new mw.widgets.UsersMultiselectWidget({ placeholder: cd.s("sd-notificationsblacklist-multiselect-placeholder"), tagLimit: 100, selected: settings.notificationsBlacklist }), this.notificationsBlacklistField = new OO.ui.FieldLayout(this.notificationsBlacklistMultiselect, { label: cd.s("sd-notificationsblacklist"), align: "top" }), [this.showToolbarField, this.showToolbarCheckbox] = checkboxField({ value: "showToolbar", selected: settings.showToolbar, label: cd.s("sd-showtoolbar") }), [this.watchSectionOnReplyField, this.watchSectionOnReplyCheckbox] = checkboxField({ value: "watchSectionOnReply", selected: settings.watchSectionOnReply, label: cd.s("sd-watchsectiononreply") }), this.insertButtonsMultiselect.connect(this, { change: "updateActionsAvailability" }), this.allowEditOthersCommentsCheckbox.connect(this, { change: "updateActionsAvailability" }), this.alwaysExpandSettingsCheckbox.connect(this, { change: "updateActionsAvailability" }), this.autopreviewCheckbox.connect(this, { change: "updateActionsAvailability" }), this.desktopNotificationsSelect.connect(this, { select: "updateActionsAvailability", choose: "changeDesktopNotifications" }), this.defaultCommentLinkTypeSelect.connect(this, { select: "updateActionsAvailability" }), this.defaultSectionLinkTypeSelect.connect(this, { select: "updateActionsAvailability" }), this.highlightOwnCommentsCheckbox.connect(this, { change: "updateActionsAvailability" }), this.mySignatureInput.connect(this, { change: "updateActionsAvailability" }), this.notificationsSelect.connect(this, { select: "updateActionsAvailability" }), this.notificationsBlacklistMultiselect.connect(this, { change: "updateActionsAvailability" }), this.showToolbarCheckbox.connect(this, { change: "updateActionsAvailability" }), this.watchSectionOnReplyCheckbox.connect(this, { change: "updateActionsAvailability" }), this.removeDataButton = new OO.ui.ButtonInputWidget({ label: cd.s("sd-removedata"), flags: [ "destructive" ] }), this.removeDataButton.connect(this, { click: "removeData" }), this.removeDataField = new OO.ui.FieldLayout(this.removeDataButton), OO.inheritClass(GeneralPageLayout, OO.ui.PageLayout),                GeneralPageLayout.prototype.setupOutlineItem = function(outlineItem) {                    GeneralPageLayout.super.prototype.setupOutlineItem.call(this, outlineItem), this.outlineItem.setLabel(cd.s("sd-page-general"));                }, OO.inheritClass(CommentFormPageLayout, OO.ui.PageLayout), CommentFormPageLayout.prototype.setupOutlineItem = function {                    this.outlineItem.setLabel(cd.s("sd-page-commentform"));                }, OO.inheritClass(NotificationsPageLayout, OO.ui.PageLayout), NotificationsPageLayout.prototype.setupOutlineItem = function {                    this.outlineItem.setLabel(cd.s("sd-page-notifications"));                }, OO.inheritClass(RemoveDataPageLayout, OO.ui.PageLayout), RemoveDataPageLayout.prototype.setupOutlineItem = function { this.outlineItem.setLabel(cd.s("sd-page-removedata")); };               const generalPage = new GeneralPageLayout("general"), commentFormPage = new CommentFormPageLayout("commentForm"), notificationsPage = new NotificationsPageLayout("notifications"), removeDataPage = new RemoveDataPageLayout("removeData"); this.bookletLayout = new OO.ui.BookletLayout({                   outlined: !0                }), this.bookletLayout.addPages([ generalPage, commentFormPage, notificationsPage, removeDataPage ]), this.settingsPanel.$element.empty.append(this.bookletLayout.$element), this.updateActionsAvailability; }, SettingsDialog.prototype.processInsertButtons = function { return this.insertButtonsMultiselect.getValue.map(value => {                   let [, text, displayedText] = value.match(/^(.*?[^\\])(?:;(.+))?$/) || [];                    if (text && text.replace(/^ +$/, "")) return [ text, displayedText ].filter(defined);                }).filter(defined); }, SettingsDialog.prototype.updateActionsAvailability = asyncToGenerator_default((function* { const insertButtonsJson = JSON.stringify(this.processInsertButtons); this.insertButtonsMultiselect.toggleValid(insertButtonsJson.length <= 1e4); const notificationsBlacklistJson = JSON.stringify(this.notificationsBlacklistMultiselect.getValue); this.notificationsBlacklistMultiselect.toggleValid(notificationsBlacklistJson.length <= 1e4); const desktopNotifications = getSelectedItemData(this.desktopNotificationsSelect) || "unknown", defaultCommentLinkType = getSelectedItemData(this.defaultCommentLinkTypeSelect), defaultSectionLinkType = getSelectedItemData(this.defaultSectionLinkTypeSelect), notifications = getSelectedItemData(this.notificationsSelect); let save = insertButtonsJson !== JSON.stringify(this.settings.insertButtons) || this.allowEditOthersCommentsCheckbox.isSelected !== this.settings.allowEditOthersComments || this.alwaysExpandSettingsCheckbox.isSelected !== this.settings.alwaysExpandSettings || this.autopreviewCheckbox.isSelected !== this.settings.autopreview || desktopNotifications !== this.settings.desktopNotifications || defaultCommentLinkType !== this.settings.defaultCommentLinkType || defaultSectionLinkType !== this.settings.defaultSectionLinkType || this.highlightOwnCommentsCheckbox.isSelected !== this.settings.highlightOwnComments || this.mySignatureInput.getValue !== this.settings.mySignature || notifications !== this.settings.notifications || notificationsBlacklistJson !== JSON.stringify(this.settings.notificationsBlacklist) || this.showToolbarCheckbox.isSelected !== this.settings.showToolbar || this.watchSectionOnReplyCheckbox.isSelected !== this.settings.watchSectionOnReply; save = save && this.insertButtonsMultiselect.isValid; try { yield this.mySignatureInput.getValidity; } catch (e) { save = !1; }               const reset = this.allowEditOthersCommentsCheckbox.isSelected !== cd.defaultSettings.allowEditOthersComments || this.alwaysExpandSettingsCheckbox.isSelected !== cd.defaultSettings.alwaysExpandSettings || this.autopreviewCheckbox.isSelected !== cd.defaultSettings.autopreview || desktopNotifications !== cd.defaultSettings.desktopNotifications || defaultCommentLinkType !== cd.defaultSettings.defaultCommentLinkType || defaultSectionLinkType !== cd.defaultSettings.defaultSectionLinkType || this.highlightOwnCommentsCheckbox.isSelected !== cd.defaultSettings.highlightOwnComments || insertButtonsJson !== JSON.stringify(cd.defaultSettings.insertButtons) || this.mySignatureInput.getValue !== cd.defaultSettings.mySignature || notifications !== cd.defaultSettings.notifications || notificationsBlacklistJson !== JSON.stringify(cd.defaultSettings.notificationsBlacklist) || this.showToolbarCheckbox.isSelected !== cd.defaultSettings.showToolbar || this.watchSectionOnReplyCheckbox.isSelected !== cd.defaultSettings.watchSectionOnReply; this.actions.setAbilities({                   save: save,                    reset: reset                }); })), SettingsDialog.prototype.changeDesktopNotifications = function(option) { "none" !== option.data && "granted" !== Notification.permission && (OO.ui.alert(cd.s("dn-grantpermission")),                Notification.requestPermission(permission => { "granted" !== permission && this.desktopNotificationsSelect.selectItemByData("none"); }));           }, SettingsDialog.prototype.removeData = asyncToGenerator_default((function* { if (yield confirmDestructive("sd-removedata-confirm", { size: "medium" })) {                   try { this.pushPending; const resp = yield cd.g.api.postWithToken("csrf", {                           action: "options",                            change: "".concat(cd.g.SETTINGS_OPTION_FULL_NAME, "|").concat(cd.g.VISITS_OPTION_FULL_NAME, "|").concat(cd.g.WATCHED_SECTIONS_OPTION_FULL_NAME)                        }).catch(handleApiReject); if (!resp || "success" !== resp.options) throw new CdError({                           type: "api",                            code: "noSuccess"                        }); } catch (e) { return void handleError(this, e, "sd-error-removedata", !1); }                   localStorage.removeItem("convenientDiscussions-commentForms"), this.stackLayout.setItem(this.dataRemovedPanel), this.actions.setMode("dataRemoved"), this.popPending; }           }));            const preparationRequests = [ getSettings, mw.loader.using("mediawiki.widgets.UsersMultiselectWidget") ]; createWindowManager; const dialog = new SettingsDialog; cd.g.windowManager.addWindows([ dialog ]), cd.g.windowManager.openWindow(dialog).closed.then( => {               cd.g.windowManager.clearWindows;            }); }))).apply(this, arguments);   }    function editWatchedSections {        return _editWatchedSections.apply(this, arguments);    }    function _editWatchedSections {        return (_editWatchedSections = asyncToGenerator_default((function* { if (cd.util.isPageOverlayOn) return; function EditWatchedSectionsDialog { EditWatchedSectionsDialog.parent.call(this); }           OO.inheritClass(EditWatchedSectionsDialog, OO.ui.ProcessDialog), EditWatchedSectionsDialog.static.name = "editWatchedSectionsDialog", EditWatchedSectionsDialog.static.title = cd.s("ewsd-title"), EditWatchedSectionsDialog.static.actions = [ { action: "close", modes: [ "edit", "saved" ], flags: [ "safe", "close" ], disabled: !0 }, {               action: "save", modes: [ "edit" ], label: cd.s("ewsd-save"), flags: [ "primary", "progressive" ], disabled: !0 } ], EditWatchedSectionsDialog.static.size = "large", EditWatchedSectionsDialog.prototype.getBodyHeight = function { return this.$errorItems ? this.$errors[0].scrollHeight : this.$body[0].scrollHeight; }, EditWatchedSectionsDialog.prototype.initialize = asyncToGenerator_default((function* { EditWatchedSectionsDialog.parent.prototype.initialize.apply(this, arguments), this.pushPending; const $loading = $(" ").text(cd.s("loading-ellipsis")); this.loadingPanel = new OO.ui.PanelLayout({                   padded: !0,                    expanded: !1                }), this.loadingPanel.$element.append($loading), this.sectionsPanel = new OO.ui.PanelLayout({                    padded: !1,                    expanded: !1                }); const $watchedSectionsSaved = $(" ").html(cd.s("ewsd-saved")); this.savedPanel = new OO.ui.PanelLayout({                   padded: !0,                    expanded: !1                }), this.savedPanel.$element.append($watchedSectionsSaved), this.stackLayout = new OO.ui.StackLayout({                    items: [ this.loadingPanel, this.sectionsPanel, this.savedPanel ]                }), this.$body.append(this.stackLayout.$element); })), EditWatchedSectionsDialog.prototype.getSetupProcess = function(data) { return EditWatchedSectionsDialog.parent.prototype.getSetupProcess.call(this, data).next( => {                   this.stackLayout.setItem(this.loadingPanel), this.actions.setMode("edit");                }); }, EditWatchedSectionsDialog.prototype.getReadyProcess = function(data) { var _this3 = this; return EditWatchedSectionsDialog.parent.prototype.getReadyProcess.call(this, data).next(asyncToGenerator_default((function* {                   let watchedSections, pages;                    try {                        ({watchedSections: watchedSections} = yield watchedSectionsRequest), pages = yield getPageTitles(Object.keys(watchedSections).filter(pageId => watchedSections[pageId].length));                    } catch (e) {                        return void handleError(_this3, e, "ewsd-error-processing", !1);                    }                    pages.sort((page1, page2) => page1.title > page2.title ? 1 : -1);                   const value = pages.filter(page => page.title).map(page => watchedSections[page.pageid].map(section => "".concat(page.title, "#").concat(section)).join("\n")).join("\n");                    _this3.input = new OO.ui.MultilineTextInputWidget({ value: value, rows: 30, classes: [ "cd-editWatchedSections-input" ] }), _this3.input.on("change", newValue => { _this3.actions.setAbilities({                           save: newValue !== value                        }); }), _this3.sectionsPanel.$element.append(_this3.input.$element), _this3.stackLayout.setItem(_this3.sectionsPanel),                    _this3.input.focus, _this3.actions.setAbilities({ close: !0 }), dialog.$body.css("overflow", "hidden"), setTimeout( => { dialog.$body.css("overflow", ""); }, 500), cd.g.windowManager.updateWindowSize(_this3), _this3.popPending, addPreventUnloadCondition("dialog", => isUnsaved(dialog));                }))); }, EditWatchedSectionsDialog.prototype.getActionProcess = function(action) { var _this4 = this; return "save" === action ? new OO.ui.Process(asyncToGenerator_default((function* {                   _this4.pushPending;                    const sections = {}, pageTitles = [];                    let normalized, redirects, pages;                    _this4.input.getValue.split("\n").forEach(section => { const match = section.match(/^(.+?)#(.+)$/); if (match) { const pageTitle = match[1].trim, sectionTitle = match[2].trim; sections[pageTitle] || (sections[pageTitle] = [], pageTitles.push(pageTitle)), sections[pageTitle].push(sectionTitle); }                   });                    try {                        ({normalized: normalized, redirects: redirects, pages: pages} = (yield getPageIds(pageTitles)) || {});                    } catch (e) {                        return void handleError(_this4, e, "ewsd-error-processing", !0);                    }                    normalized.concat(redirects).filter(page => sections[page.from]).forEach(page => { sections[page.to] || (sections[page.to] = []), sections[page.to].push(...sections[page.from]), delete sections[page.from]; });                   const titleToId = {};                    pages.filter(page => void 0 !== page.pageid).forEach(page => { titleToId[page.title] = page.pageid; });                   const newWatchedSections = {};                    Object.keys(sections).filter(key => titleToId[key]).forEach(key => { newWatchedSections[titleToId[key]] = removeDuplicates(sections[key]); });                   try {                        yield setWatchedSections(newWatchedSections);                    } catch (e) {                        if (e instanceof CdError) {                            const {type: type, code: code, apiData: apiData} = e.data;                            "internal" === type && "sizeLimit" === code ? _this4.showErrors(new OO.ui.Error(cd.s("ewsd-error-maxsize"), {                                recoverable: !1                            })) : _this4.showErrors(new OO.ui.Error(cd.s("ewsd-error-processing"), {                                recoverable: !0                            })), console.warn(type, code, apiData);                        } else _this4.showErrors(new OO.ui.Error(cd.s("error-javascript"), {                            recoverable: !1                        })), console.warn(e);                        return void _this4.popPending; }                   _this4.stackLayout.setItem(_this4.savedPanel), _this4.actions.setMode("saved"), _this4.popPending; }))) : "close" === action ? new OO.ui.Process(asyncToGenerator_default((function* { confirmCloseDialog(_this4, "ewsd"); }))) : EditWatchedSectionsDialog.parent.prototype.getActionProcess.call(this, action);           };            const watchedSectionsRequest = getWatchedSections;            createWindowManager;            const dialog = new EditWatchedSectionsDialog;            cd.g.windowManager.addWindows([ dialog ]), cd.g.windowManager.openWindow(dialog).closed.then( => { cd.g.windowManager.clearWindows; });       }))).apply(this, arguments); }   function copyLinkToClipboardAndNotify(text) { const $textarea = $(" ").val(text).appendTo(document.body).select, successful = document.execCommand("copy"); $textarea.remove, successful ? text.startsWith("http") ? mw.notify(cd.util.wrapInElement(cd.s("copylink-copied-url", text))) : mw.notify(cd.s("copylink-copied")) : mw.notify(cd.s("copylink-error"), {           type: "error"        }); }   function copyLink(_x3, _x4, _x5) { return _copyLink.apply(this, arguments); }   function _copyLink { return (_copyLink = asyncToGenerator_default((function*(object, chooseLink, finallyCallback) {           if (object.linkBeingCopied) return void (finallyCallback && finallyCallback);            object.linkBeingCopied = !0;            let anchor = object instanceof Comment_Comment ? object.anchor : underlinesToSpaces(object.anchor);            anchor = encodeWikilink(anchor);            const wikilink = "".concat(cd.g.CURRENT_PAGE, "");            let decodedCurrentPageUrl;            try {                decodedCurrentPageUrl = decodeURI(mw.util.getUrl(cd.g.CURRENT_PAGE));            } catch (e) {                return console.error(e), object.linkBeingCopied = !1, void (finallyCallback && finallyCallback);            }            const anchorWithUnderlines = spacesToUnderlines(anchor), url = "https:".concat(mw.config.get("wgServer")).concat(decodedCurrentPageUrl, "#").concat(anchorWithUnderlines); if (chooseLink) { let diffInput, diffField, wikilinkFieldHelp; if (object instanceof Comment_Comment) { let diffLink, value; try { value = diffLink = yield object.getDiffLink(object); } catch (e) { if (e instanceof CdError) { const {type: type} = e.data; "api" === type ? value = cd.s("cld-diff-error") : "network" === type && (value = cd.s("cld-diff-error-network")); } else value = cd.s("cld-diff-error-unknown"); }                   diffInput = new OO.ui.TextInputWidget({                        value: value || cd.s("cld-diff-error"),                        disabled: !diffLink                    }); const diffButton = new OO.ui.ButtonWidget({                       label: cd.s("cld-copy"),                        icon: "articles",                        disabled: !diffLink                    }); diffButton.on("click", => {                        copyLinkToClipboardAndNotify(diffInput.getValue), dialog.close;                    }), diffField = new OO.ui.ActionFieldLayout(diffInput, diffButton, {                        align: "top",                        label: cd.s("cld-diff")                    }); }               object instanceof Comment_Comment && "diff" === cd.config.defaultCommentLinkType && (wikilinkFieldHelp = cd.s("cld-wikilink-help-comment")); const wikilinkInput = new OO.ui.TextInputWidget({                   value: wikilink                }), wikilinkButton = new OO.ui.ButtonWidget({                    label: cd.s("cld-copy"),                    icon: "articles"                }); wikilinkButton.on("click", => {                    copyLinkToClipboardAndNotify(wikilinkInput.getValue), dialog.close;                }); const wikilinkField = new OO.ui.ActionFieldLayout(wikilinkInput, wikilinkButton, {                   align: "top",                    label: cd.s("cld-wikilink"),                    help: wikilinkFieldHelp,                    helpInline: !0                }), anchorWikilinkInput = new OO.ui.TextInputWidget({                    value: "")                }), anchorWikilinkButton = new OO.ui.ButtonWidget({                    label: cd.s("cld-copy"),                    icon: "articles"                }); anchorWikilinkButton.on("click", => {                    copyLinkToClipboardAndNotify(anchorWikilinkInput.getValue), dialog.close;                }); const anchorWikilinkField = new OO.ui.ActionFieldLayout(anchorWikilinkInput, anchorWikilinkButton, {                   align: "top",                    label: cd.s("cld-currentpagewikilink")                }), linkInput = new OO.ui.TextInputWidget({                    value: url                }), linkButton = new OO.ui.ButtonWidget({                    label: cd.s("cld-copy"),                    icon: "articles"                }); linkButton.on("click", => {                    copyLinkToClipboardAndNotify(linkInput.getValue), dialog.close;                }); const linkField = new OO.ui.ActionFieldLayout(linkInput, linkButton, {                   align: "top",                    label: cd.s("cld-link")                }), $message = $(" ").append(diffField && diffField.$element).append(wikilinkField.$element).append(anchorWikilinkField.$element).append(linkField.$element), dialog = new OO.ui.MessageDialog; cd.g.windowManager.addWindows([ dialog ]), cd.g.windowManager.openWindow(dialog, {                   message: $message,                    actions: [ {                        label: cd.s("cld-close"),                        action: "close"                    } ],                    size: "large"                }).closed.then( => {                    cd.g.windowManager.clearWindows, object.linkBeingCopied = !1;                }); } else { let link; switch (cd.settings[object instanceof Comment_Comment ? "defaultCommentLinkType" : "defaultSectionLinkType"]) { case "diff": if (!(object instanceof Comment_Comment)) { link = wikilink; break; }                   try { link = yield object.getDiffLink(object); } catch (e) { let text; if (e instanceof CdError) { const {type: type} = e.data; if ("network" === type) text = cd.s("copylink-error-diffnotfound-network"); else { const url = mw.util.getUrl(this.sourcePage, {                                   action: "history"                                }); text = cd.util.wrapInElement(cd.s("copylink-error-diffnotfound", url)); }                       } else text = cd.s("copylink-error-diffnotfound-unknown"); return mw.notify(text, {                           type: "error"                        }), object.linkBeingCopied = !1, void (finallyCallback && finallyCallback); }                   break;

case "link": link = url; break;

default: link = wikilink; }               copyLinkToClipboardAndNotify(link), object.linkBeingCopied = !1; }           finallyCallback && finallyCallback; }))).apply(this, arguments);   }    function rescueCommentFormsContent(content) {        const text = content.map(data => { let text = void 0 !== data.headline ? "".concat(cd.s("cf-headline"), ": ").concat(data.headline, "\n\n") : ""; return text += "".concat(data.comment, "\n\n").concat(cd.s("cf-summary-placeholder"), ": ").concat(data.summary), text; }).join("\n\n\n"), input = new OO.ui.MultilineTextInputWidget({ value: text, rows: 20 }), field = new OO.ui.FieldLayout(input, { align: "top", label: cd.s("rd-intro") }), dialog = new OO.ui.MessageDialog;       cd.g.windowManager.addWindows([ dialog ]), cd.g.windowManager.openWindow(dialog, { message: field.$element, actions: [ { label: cd.s("rd-close"), action: "close" } ],           size: "large" }).closed.then( => { cd.g.windowManager.clearWindows; });   }    function confirmDialog(_x6) {        return _confirmDialog.apply(this, arguments);    }    function _confirmDialog {        return (_confirmDialog = asyncToGenerator_default((function*(message, options = {}) { const defaultOptions = { message: message, actions: [ { action: "accept", label: OO.ui.deferMsg("ooui-dialog-message-accept"), flags: "primary" }, {                   action: "reject", label: OO.ui.deferMsg("ooui-dialog-message-reject"), flags: "safe" } ]           }, dialog = new OO.ui.MessageDialog; cd.g.windowManager.addWindows([ dialog ]); const windowInstance = cd.g.windowManager.openWindow(dialog, Object.assign({}, defaultOptions, options)), data = yield windowInstance.closed; return cd.g.windowManager.clearWindows, data && data.action; }))).apply(this, arguments);   }    function confirmDestructive(messageName, options = {}) {        const defaultOptions = {            actions: [ {                label: cd.s("".concat(messageName, "-yes")),                action: "accept",                flags: [ "primary", "destructive" ]            }, {                label: cd.s("".concat(messageName, "-no")),                action: "reject",                flags: "safe"            } ]        };        return OO.ui.confirm(cd.s(messageName), Object.assign({}, defaultOptions, options));    }    function notFound(_x7, _x8) {        return _notFound.apply(this, arguments);    }    function _notFound {        return (_notFound = asyncToGenerator_default((function*(decodedFragment, date) { const title = $(" ").addClass("cd-destructiveText").html(date ? cd.s("deadanchor-comment-title") : cd.s("deadanchor-section-title")); let message = date ? cd.s("deadanchor-comment-text") : cd.s("deadanchor-section-text"); if (!cd.config.pagesWithoutArchivesRegexp || !cd.config.pagesWithoutArchivesRegexp.test(cd.g.CURRENT_PAGE)) { if (message += " " + cd.s("deadanchor-searchinarchive"), yield OO.ui.confirm(message, { title: title })) {                   let text; text = date ? cd.util.formatDate(date) : decodedFragment.replace(/_/g, " ").replace(/"/g, "").trim;                   const archivePrefix = cd.config.getArchivePrefix ? cd.config.getArchivePrefix(mw.config.get("wgTitle")) : mw.config.get("wgTitle"), searchQuery = '"'.concat(text, '" prefix:') + mw.config.get("wgFormattedNamespaces")[cd.g.CURRENT_NAMESPACE_NUMBER] + ":".concat(archivePrefix), url = mw.util.getUrl("Special:Search", {                        profile: "default",                        fulltext: "Search",                        search: searchQuery                    });                    location.assign(mw.config.get("wgServer") + url);                }            } else OO.ui.alert(message, {                title: title            });        }))).apply(this, arguments);    }    class Section_Section extends class {        constructor(parser, headingElement) {            if (_parser.set(this, { writable: !0, value: void 0 }), classPrivateFieldSet_default(this, _parser, parser), this.headlineElement = classPrivateFieldGet_default(this, _parser).context.getElementByClassName(headingElement, "mw-headline"),            !this.headlineElement) throw new CdError; this.anchor = this.headlineElement.getAttribute("id"); const classesToFilter = [ "mw-headline-number", ...cd.config.foreignElementsInHeadlinesClasses ], nodes = Array.from(this.headlineElement.childNodes).filter(node => node.nodeType !== Node.ELEMENT_NODE || !Array.from(node.classList).some(name => classesToFilter.includes(name))); this.headline = nodes.map(node => node.textContent).join("").trim; const levelMatch = headingElement.tagName.match(/^H([2-6])$/); this.level = levelMatch && Number(levelMatch[1]); const treeWalker = new TreeWalker(cd.g.rootElement, node => ![ "STYLE", "LINK" ].includes(node.tagName) && !node.classList.contains("cd-sectionButtonContainer"), !0, headingElement), elements = [ headingElement ], levelRegexp = new RegExp("^H[1-".concat(this.level, "]$")); let firstCommentPart, lastCommentPart, hasSubsections = !1; for (treeWalker.nextSibling && !levelRegexp.test(treeWalker.currentNode.tagName); ) void 0 === this.lastElementInFirstChunk && /^H[3-6]$/.test(treeWalker.currentNode.tagName) && (hasSubsections = !0,            this.lastElementInFirstChunk = elements[elements.length - 1]), elements.push(treeWalker.currentNode); if (this.lastElementInFirstChunk = this.lastElementInFirstChunk || elements[elements.length - 1],            !elements.length) throw new CdError; if (elements[1]) { for (treeWalker.currentNode = elements[elements.length - 1]; treeWalker.lastChild; ) ; const lastNode = treeWalker.currentNode; treeWalker.currentNode = elements[1]; do { treeWalker.currentNode.classList.contains("cd-commentPart") && (firstCommentPart = treeWalker.currentNode); } while (!firstCommentPart && treeWalker.currentNode !== lastNode && treeWalker.nextNode); treeWalker.currentNode = lastNode; do { treeWalker.currentNode.classList.contains("cd-commentPart") && (lastCommentPart = treeWalker.currentNode); } while (!lastCommentPart && treeWalker.currentNode !== elements[1] && treeWalker.previousNode); }           if (firstCommentPart) { const firstCommentPartId = Number(firstCommentPart.getAttribute("data-comment-id")), lastCommentPartId = Number(lastCommentPart.getAttribute("data-comment-id")); if (this.comments = cd.comments.slice(firstCommentPartId, lastCommentPartId + 1),                hasSubsections) { const endIndex = this.comments.findIndex(comment => !(classPrivateFieldGet_default(this, _parser).context.follows(this.lastElementInFirstChunk, comment.elements[0]) || this.lastElementInFirstChunk.contains(comment.elements[0]))); this.commentsInFirstChunk = this.comments.slice(0, endIndex || 0); }           }            this.id = cd.sections.length, this.comments = this.comments || [], this.commentsInFirstChunk = this.commentsInFirstChunk || this.comments, this.elements = elements; }   } {        constructor(parser, headingElement, watchedSectionsRequest) { if (super(parser, headingElement), _elementPrototypes.set(this, { writable: !0, value: void 0 }), _closingBracketElement.set(this, { writable: !0, value: void 0 }), _editSectionElement.set(this, { writable: !0, value: void 0 }), _cached$elements.set(this, { writable: !0, value: void 0 }), _showAddSubsectionButtonTimeout.set(this, { writable: !0, value: void 0 }), _hideAddSubsectionButtonTimeout.set(this, { writable: !0, value: void 0 }), classPrivateFieldSet_default(this, _elementPrototypes, cd.g.SECTION_ELEMENT_PROTOTYPES),            this.$headline = $(this.headlineElement), classPrivateFieldSet_default(this, _editSectionElement, headingElement.querySelector(".mw-editsection")),             classPrivateFieldGet_default(this, _editSectionElement)) { classPrivateFieldSet_default(this, _closingBracketElement, classPrivateFieldGet_default(this, _editSectionElement).lastElementChild), classPrivateFieldGet_default(this, _closingBracketElement) && classPrivateFieldGet_default(this, _closingBracketElement).classList && classPrivateFieldGet_default(this, _closingBracketElement).classList.contains("mw-editsection-bracket") || classPrivateFieldSet_default(this, _closingBracketElement, null), this.sourcePage = cd.g.CURRENT_PAGE; const editLink = classPrivateFieldGet_default(this, _editSectionElement).querySelector('a[href*="&action=edit"], a[href*="&veaction=editsource"]'); if (editLink) { const editLinkUrl = new URL(editLink.href); if (editLinkUrl) { editLinkUrl.searchParams.get("section").startsWith("T-") && (this.sourcePage = underlinesToSpaces(editLinkUrl.searchParams.get("title"))); }               } else console.error("Edit link not found.", this); if (this.$heading = $(headingElement), this.frozen = !cd.g.isPageActive || cd.g.specialElements.closedDiscussions.some(el => el.contains(headingElement)),                !this.frozen) { classPrivateFieldSet_default(this, _showAddSubsectionButtonTimeout, void 0), classPrivateFieldSet_default(this, _hideAddSubsectionButtonTimeout, void 0), this.addAddSubsectionButton; const replyButton = classPrivateFieldGet_default(this, _elementPrototypes).replyButton.cloneNode(!0); replyButton.firstChild.onclick = => { this.addReply; };                   const isVotePlaceholder = "OL" === this.lastElementInFirstChunk.tagName && 1 === this.lastElementInFirstChunk.childElementCount && this.lastElementInFirstChunk.children[0].classList.contains("mw-empty-elt"); let tag, createUl = !1; if (this.lastElementInFirstChunk.classList.contains("cd-commentLevel")) { const tagName = this.lastElementInFirstChunk.tagName; "UL" === tagName || "OL" === tagName && (1 === this.lastElementInFirstChunk.querySelectorAll("ol > li").length || this.lastElementInFirstChunk.querySelectorAll("ol > li > .cd-signature").length > 1) ? tag = "li" : "DL" === tagName ? tag = "dd" : (tag = "li",                        createUl = !0); } else tag = "li", isVotePlaceholder || (createUl = !0); const replyWrapper = document.createElement(tag); let replyContainer; if (replyWrapper.className = "cd-replyWrapper", replyWrapper.appendChild(replyButton),                    createUl) { const replyContainer = document.createElement("ul"); replyContainer.className = "cd-commentLevel cd-sectionButtonContainer", replyContainer.appendChild(replyWrapper), this.lastElementInFirstChunk.parentElement.insertBefore(replyContainer, this.lastElementInFirstChunk.nextElementSibling); } else this.lastElementInFirstChunk.appendChild(replyWrapper); this.$replyButton = $(replyButton), this.$replyButtonLink = $(replyButton.firstChild), this.$replyWrapper = $(replyWrapper), this.$replyContainer = replyContainer ? $(replyContainer) : void 0, this.comments.length && this.comments[0].isOpeningSection && this.comments[0].openingSectionOfLevel === this.level && (this.comments[0].own || cd.settings.allowEditOthersComments) && this.comments[0].actionable && this.addMenuItem({                       label: cd.s("sm-editopeningcomment"),                        tooltip: cd.s("sm-editopeningcomment-tooltip"),                        func:  => {                            this.comments[0].edit;                        },                        class: "cd-sectionLink-editOpeningComment"                    }), this.addMenuItem({                        label: cd.s("sm-addsubsection"),                        tooltip: cd.s("sm-addsubsection-tooltip"),                        func:  => {                            this.addSubsection;                        },                        class: "cd-sectionLink-addSubsection" }), 2 === this.level && this.addMenuItem({ label: cd.s("sm-move"), tooltip: cd.s("sm-move-tooltip"), func: => { this.move; },                       class: "cd-sectionLink-moveSection" }), watchedSectionsRequest && watchedSectionsRequest.then(({thisPageWatchedSections: thisPageWatchedSections}) => { this.headline && (this.watched = thisPageWatchedSections.includes(this.headline),                        this.addMenuItem({ label: cd.s("sm-unwatch"), tooltip: cd.s("sm-unwatch-tooltip"), func: => { this.unwatch; },                           class: "cd-sectionLink-unwatch", visible: this.watched }), this.addMenuItem({ label: cd.s("sm-watch"), tooltip: cd.s("sm-watch-tooltip"), func: => { this.watch; },                           class: "cd-sectionLink-watch", visible: !this.watched }));                       const targetString = "sm-copylink-tooltip-".concat(cd.settings.defaultSectionLinkType.toLowerCase); this.addMenuItem({                           label: cd.s("sm-copylink"),                            func: this.copyLink.bind(this),                            class: "cd-sectionLink-copyLink",                            tooltip: cd.s("sm-copylink-tooltip", cd.s(targetString)),                            href: "".concat(mw.util.getUrl(cd.g.CURRENT_PAGE), "#").concat(this.anchor)                        }); }, => {});                }            }        }        addAddSubsectionButton {            if (2 !== this.level) return;            const addSubsectionButton = classPrivateFieldGet_default(this, _elementPrototypes).addSubsectionButton.cloneNode(!0), labelContainer = addSubsectionButton.querySelector(".oo-ui-labelElement-label");            if (!labelContainer) return;            labelContainer.innerHTML = "", labelContainer.appendChild(document.createTextNode(cd.s("section-addsubsection-to", this.headline))),             addSubsectionButton.firstChild.onclick =  => {                this.addSubsection;            };            const addSubsectionButtonContainer = document.createElement("div");            addSubsectionButtonContainer.className = "cd-sectionButtonContainer cd-addSubsectionButtonContainer",             addSubsectionButtonContainer.style.display = "none", addSubsectionButtonContainer.appendChild(addSubsectionButton); const lastElement = this.elements[this.elements.length - 1]; lastElement.parentElement.insertBefore(addSubsectionButtonContainer, lastElement.nextElementSibling), this.$addSubsectionButtonContainer = $(addSubsectionButtonContainer); const deferAddSubsectionButtonHide = => { classPrivateFieldGet_default(this, _hideAddSubsectionButtonTimeout) || classPrivateFieldSet_default(this, _hideAddSubsectionButtonTimeout, setTimeout( => { this.$addSubsectionButtonContainer.hide; }, 1e3)); };           addSubsectionButton.firstChild.onmouseenter =  => { clearTimeout(classPrivateFieldGet_default(this, _hideAddSubsectionButtonTimeout)), classPrivateFieldSet_default(this, _hideAddSubsectionButtonTimeout, null); }, addSubsectionButton.firstChild.onmouseleave = => { deferAddSubsectionButtonHide; }, this.replyButtonHoverHandler = => { this.addSubsectionForm || (clearTimeout(classPrivateFieldGet_default(this, _hideAddSubsectionButtonTimeout)),                classPrivateFieldSet_default(this, _hideAddSubsectionButtonTimeout, null), this.showAddSubsectionButtonTimeout || (this.showAddSubsectionButtonTimeout = setTimeout( => {                    this.$addSubsectionButtonContainer.show;                }, 1e3))); }, this.replyButtonUnhoverHandler = => { this.addSubsectionForm || (clearTimeout(this.showAddSubsectionButtonTimeout), this.showAddSubsectionButtonTimeout = null,                deferAddSubsectionButtonHide); };       }        addReply(dataToRestore) { this.addReplyForm || (this.addReplyForm = dataToRestore instanceof CommentForm_CommentForm ? dataToRestore : new CommentForm_CommentForm({ mode: "replyInSection", target: this, dataToRestore: dataToRestore })), this.$replyButton.hide; const baseSection = 2 === this.level ? this : this.baseSection; baseSection && baseSection.$addSubsectionButtonContainer && (baseSection.$addSubsectionButtonContainer.hide,            clearTimeout(baseSection.showAddSubsectionButtonTimeout), baseSection.showAddSubsectionButtonTimeout = null); }       addSubsection(dataToRestore) { this.addSubsectionForm ? (this.addSubsectionForm.$element.cdScrollIntoView("center"),            this.addSubsectionForm.headlineInput.focus) : this.addSubsectionForm = dataToRestore instanceof CommentForm_CommentForm ? dataToRestore : new CommentForm_CommentForm({               mode: "addSubsection",                target: this,                dataToRestore: dataToRestore,                scrollIntoView: !0            }), this.$addSubsectionButtonContainer && this.$addSubsectionButtonContainer.hide; }       move { var _this = this; return asyncToGenerator_default((function* { function MoveSectionDialog { MoveSectionDialog.parent.call(this); }               OO.inheritClass(MoveSectionDialog, OO.ui.ProcessDialog), MoveSectionDialog.static.name = "moveSectionDialog", MoveSectionDialog.static.title = cd.s("msd-title"), MoveSectionDialog.static.actions = [ { action: "close", modes: [ "loading", "move", "reload" ], flags: [ "safe", "close" ], disabled: !0 }, {                   action: "move", modes: [ "move" ], label: cd.s("msd-move"), flags: [ "primary", "progressive" ], disabled: !0 }, {                   action: "reload", modes: [ "reload" ], label: cd.s("msd-reload"), flags: [ "primary", "progressive" ] } ], MoveSectionDialog.prototype.onTitleInputChange = asyncToGenerator_default((function* { let move = !0; try { yield this.titleInput.getValidity; } catch (e) { move = !1; }                   this.actions.setAbilities({                        move: move                    }); })), MoveSectionDialog.prototype.areNewTopicsOnTop = function { var _ref2 = asyncToGenerator_default((function*(title, code) { let newTopicsOnTop; cd.config.areNewTopicsOnTop && (newTopicsOnTop = cd.config.areNewTopicsOnTop(title.toText, code)); const adjustedCode = hideHtmlComments(code), sectionHeadingRegexp = /^==[^=].*?==[ \t]*(?:[ \t]*)*\n/gm; let firstSectionIndex, sectionHeadingMatch, previousDate, higherLowerDifference = 0; for ((sectionHeadingMatch = sectionHeadingRegexp.exec(adjustedCode)) && (void 0 === newTopicsOnTop || !1 !== newTopicsOnTop && void 0 === firstSectionIndex) && (void 0 === firstSectionIndex && (firstSectionIndex = sectionHeadingMatch.index), void 0 === newTopicsOnTop); ) { const timestamp = findFirstTimestamp(code.slice(sectionHeadingMatch.index)), {date: date} = timestamp && parseTimestamp(timestamp) || {}; date && (previousDate && (higherLowerDifference += date > previousDate ? -1 : 1),                            previousDate = date), Math.abs(higherLowerDifference) > 5 && (newTopicsOnTop = higherLowerDifference > 0); }                       return void 0 === newTopicsOnTop && (newTopicsOnTop = 0 === higherLowerDifference ? !(title.namespace % 2 == 1) : higherLowerDifference > 0), {                           newTopicsOnTop: newTopicsOnTop, firstSectionIndex: firstSectionIndex };                   }));                    return function(_x, _x2) { return _ref2.apply(this, arguments); };               }, MoveSectionDialog.prototype.loadSourcePage = asyncToGenerator_default((function* { let page; try { page = yield getLastRevision(section.sourcePage); } catch (e) { if (!(e instanceof CdError)) throw [ cd.s("error-javascript"), !1 ]; {                           const {type: type, code: code} = e.data; if ("api" === type) throw "missing" === code ? [ cd.s("msd-error-sourcepagedeleted"), !0 ] : [ "".concat(cd.s("error-api"), ": ").concat(code, "."), !0 ]; if ("network" === type) throw [ cd.s("error-network"), !0 ]; }                   }                    const code = page.code; try { section.locateInCode(code); } catch (e) { if (e instanceof CdError) { const {code: code} = e.data; let message; throw message = "couldntLocateSection" === code ? cd.s("error-locatesection") : cd.s("error-unknown"), [ message, !0 ]; }                       throw [ cd.s("error-javascript"), !1 ]; }                   return { code: code, timestamp: page.timestamp, queryTimestamp: page.queryTimestamp, sectionInCode: section.inCode, wikilink: "".concat(section.sourcePage, "#").concat(section.headline) };               })), MoveSectionDialog.prototype.loadTargetPage = function { var _ref4 = asyncToGenerator_default((function*(targetTitle) { let page; try { page = yield getLastRevision(targetTitle); } catch (e) { if (!(e instanceof CdError)) throw [ cd.s("error-javascript"), !1 ]; {                               const {type: type, code: code} = e.data; if ("api" === type) throw "missing" === code ? [ cd.s("msd-error-targetpagedoesntexist"), !0 ] : "invalid" === code ? [ cd.s("msd-error-invalidpagename"), !1 ] : [ "".concat(cd.s("error-api"), ": ").concat(code, "."), !0 ]; if ("network" === type) throw [ cd.s("error-network"), !0 ]; }                       }                        const {code: code, timestamp: timestamp, queryTimestamp: queryTimestamp} = page, title = page.redirectTarget || targetTitle, {newTopicsOnTop: newTopicsOnTop, firstSectionIndex: firstSectionIndex} = this.areNewTopicsOnTop(title, code), wikilink = "".concat(title.toText, "#").concat(section.headline); return { code: code, timestamp: timestamp, queryTimestamp: queryTimestamp, title: title, newTopicsOnTop: newTopicsOnTop, firstSectionIndex: firstSectionIndex, wikilink: wikilink, sectionUrl: mw.util.getUrl(wikilink) };                   }));                    return function(_x3) { return _ref4.apply(this, arguments); };               }, MoveSectionDialog.prototype.saveTargetPage = function { var _ref5 = asyncToGenerator_default((function*(sourcePage, targetPage) { const addTwoNewLines = code => code.replace(/([^\n])\n?$/, "$1\n\n"); let targetPageNewCode, targetPageNewSectionCode = addTwoNewLines(sourcePage.sectionInCode.code.slice(0, sourcePage.sectionInCode.contentStartIndex - sourcePage.sectionInCode.startIndex) + cd.s("move-targetpagecode", sourcePage.wikilink, cd.settings.mySignature, { plain: !0 }) + "\n" + sourcePage.sectionInCode.code.slice(sourcePage.sectionInCode.contentStartIndex - sourcePage.sectionInCode.startIndex)); targetPage.newTopicsOnTop ? (void 0 === targetPage.firstSectionIndex && (targetPage.firstSectionIndex = targetPage.code.length),                        targetPageNewCode = addTwoNewLines(targetPage.code.slice(0, targetPage.firstSectionIndex)) + targetPageNewSectionCode + targetPage.code.slice(targetPage.firstSectionIndex)) : targetPageNewCode = targetPage.code + "\n\n" + targetPageNewSectionCode; const summaryEnding = this.summaryEndingInput.getValue, text = cd.s("es-moved-from", sourcePage.wikilink) + (summaryEnding ? ": ".concat(summaryEnding) : ""); let editTargetPageData; try { editTargetPageData = yield cd.g.api.postWithToken("csrf", {                               action: "edit",                                title: targetPage.title.toString,                                text: targetPageNewCode,                                summary: cd.util.buildEditSummary({ text: text, section: section.headline }),                               tags: cd.config.tagName,                                baserevid: targetPage.revisionId,                                starttimestamp: targetPage.queryTimestamp,                                formatversion: 2                            }).catch(handleApiReject); } catch (e) { throw [ cd.s("msd-error-editingtargetpage"), !0 ]; }                       const error = editTargetPageData.error; if (error) throw "editconflict" === error.code ? [ cd.s("msd-error-editconflict"), !0 ] : [ error.code + ": " + error.info, !0 ]; }));                   return function(_x4, _x5) { return _ref5.apply(this, arguments); };               }, MoveSectionDialog.prototype.saveSourcePage = function { var _ref6 = asyncToGenerator_default((function*(sourcePage, targetPage) { const timestamp = findFirstTimestamp(sourcePage.sectionInCode.code) || cd.g.SIGN_CODE + "~", sourcePageNewSectionCode = sourcePage.sectionInCode.code.slice(0, sourcePage.sectionInCode.contentStartIndex - sourcePage.sectionInCode.startIndex) + cd.s("move-sourcepagecode", targetPage.wikilink, cd.settings.mySignature, timestamp, {                           plain: !0                        }) + "\n\n", newSourcePageCode = sourcePage.code.slice(0, sourcePage.sectionInCode.startIndex) + sourcePageNewSectionCode + sourcePage.code.slice(sourcePage.sectionInCode.endIndex), summaryEnding = this.summaryEndingInput.getValue, text = cd.s("es-moved-to", targetPage.wikilink) + (summaryEnding ? ": ".concat(summaryEnding) : ""); try { yield cd.g.api.postWithToken("csrf", {                               action: "edit",                                title: section.sourcePage,                                text: newSourcePageCode,                                summary: cd.util.buildEditSummary({ text: text, section: section.headline }),                               tags: cd.config.tagName,                                baserevid: sourcePage.revisionId,                                starttimestamp: sourcePage.queryTimestamp,                                formatversion: 2                            }).catch(handleApiReject); } catch (e) { throw [ cd.s("msd-error-editingsourcepage"), !1 ]; }                   }));                    return function(_x6, _x7) { return _ref6.apply(this, arguments); };               }, MoveSectionDialog.prototype.abort = function(html, recoverable) { const $body = animateLink(html, "cd-message-reloadPage", => {                        cd.g.windowManager.clearWindows, reloadPage;                    }); this.showErrors(new OO.ui.Error($body, { recoverable: recoverable })), recoverable || this.$errors.find(".oo-ui-buttonElement-button").on("click", => {                        this.close;                    }), this.actions.setAbilities({                        close: !0,                        move: recoverable                    }), cd.g.windowManager.updateWindowSize(this), this.popPending; }, MoveSectionDialog.prototype.getBodyHeight = function { return this.$errorItems ? this.$errors[0].scrollHeight : this.$body[0].scrollHeight; }, MoveSectionDialog.prototype.initialize = function { MoveSectionDialog.parent.prototype.initialize.apply(this, arguments), this.pushPending; const $loading = $(" ").text(cd.s("loading-ellipsis")); this.loadingPanel = new OO.ui.PanelLayout({                       padded: !0,                        expanded: !1                    }), this.loadingPanel.$element.append($loading), this.movePanel = new OO.ui.PanelLayout({                        padded: !0,                        expanded: !1                    }), this.reloadPanel = new OO.ui.PanelLayout({                        padded: !0,                        expanded: !1                    }), this.stackLayout = new OO.ui.StackLayout({                        items: [ this.loadingPanel, this.movePanel, this.reloadPanel ]                    }), this.$body.append(this.stackLayout.$element); }, MoveSectionDialog.prototype.getSetupProcess = function(data) { return MoveSectionDialog.parent.prototype.getSetupProcess.call(this, data).next( => {                       this.stackLayout.setItem(this.loadingPanel), this.actions.setMode("loading");                    }); }, MoveSectionDialog.prototype.getReadyProcess = function(data) { var _this2 = this; return MoveSectionDialog.parent.prototype.getReadyProcess.call(this, data).next(asyncToGenerator_default((function* {                       let page;                        try {                            [page] = yield Promise.all(preparationRequests);                        } catch (e) {                            return void _this2.abort(cd.s("cf-error-getpagecode"), !1);                        }                        try {                            section.locateInCode(page.code);                        } catch (e) {                            if (e instanceof CdError) {                                const {data: data} = e.data, message = "couldntLocateSection" === data ? cd.s("error-locatesection") : cd.s("error-unknown");                                _this2.abort(message, !1);                            } else _this2.abort(cd.s("error-javascript"), !1); return; }                       const sectionCode = section.inCode.code; _this2.titleInput = new mw.widgets.TitleInputWidget({                           $overlay: _this2.$overlay,                            excludeCurrentPage: !0,                            validate:  => {                                let title = _this2.titleInput.getMWTitle;                                return title && title.toText !== section.sourcePage && isTalkNamespace(title.namespace);                            }                        }), _this2.titleField = new OO.ui.FieldLayout(_this2.titleInput, {                            label: cd.s("msd-targetpage"),                            align: "top"                        }), _this2.titleInput.connect(_this2, {                            change: "onTitleInputChange"                        }), _this2.titleInput.connect(_this2, {                            enter:  => {                                _this2.actions.get({ actions: "move" })[0].isDisabled || _this2.executeAction("move");                           }                        }); let $sectionCodeNote = $(" "); $(" ").text(sectionCode.slice(0, 300) + (sectionCode.length >= 300 ? "..." : "")).appendTo($sectionCodeNote), $(" ").css("font-size", "85%").text(cd.s("msd-bottom")).appendTo($sectionCodeNote), _this2.summaryEndingInput = new OO.ui.TextInputWidget({                           maxLength: 250                        }), _this2.summaryEndingField = new OO.ui.FieldLayout(_this2.summaryEndingInput, {                            label: cd.s("msd-summaryending"),                            align: "top"                        }), _this2.movePanel.$element.append(_this2.titleField.$element, $sectionCodeNote, _this2.summaryEndingField.$element), _this2.stackLayout.setItem(_this2.movePanel), _this2.titleInput.focus, _this2.actions.setMode("move").setAbilities({                           close: !0                        }), dialog.$body.css("overflow", "hidden"), setTimeout( => {                            dialog.$body.css("overflow", "");                        }, 500), cd.g.windowManager.updateWindowSize(_this2), _this2.popPending; })));               }, MoveSectionDialog.prototype.getActionProcess = function(action) {                    var _this3 = this;                    return "move" === action ? new OO.ui.Process(asyncToGenerator_default((function* { _this3.pushPending, _this3.titleInput.$input.blur; const targetPageTitle = _this3.titleInput.getMWTitle; if (!targetPageTitle || targetPageTitle.toText === section.sourcePage || !isTalkNamespace(targetPageTitle.namespace)) return void _this3.abort(cd.s("msd-error-wrongpage"), !1); let sourcePage, targetPage; try { [sourcePage, targetPage] = yield Promise.all([ _this3.loadSourcePage, _this3.loadTargetPage(targetPageTitle) ]), yield _this3.saveTargetPage(sourcePage, targetPage), yield _this3.saveSourcePage(sourcePage, targetPage); } catch (e) { return void _this3.abort(...e); }                       _this3.reloadPanel.$element.html(cd.s("msd-moved", targetPage.sectionUrl)), _this3.stackLayout.setItem(_this3.reloadPanel), _this3.actions.setMode("reload"), _this3.popPending; }))) : "reload" === action ? new OO.ui.Process( => { this.close({                           action: action                        }), reloadPage({                            sectionAnchor: section.anchor                        }); }) : "close" === action ? new OO.ui.Process( => { this.close; }) : MoveSectionDialog.parent.prototype.getActionProcess.call(this, action);               };                const section = _this, preparationRequests = [ getLastRevision(_this.sourcePage), mw.loader.using("mediawiki.widgets") ], dialog = new MoveSectionDialog;                cd.g.windowManager.addWindows([ dialog ]), cd.g.windowManager.openWindow(dialog).closed.then( => { cd.g.windowManager.clearWindows; });           }));        }        updateWatchMenuItems {            this.watched ? (this.$heading.find(".cd-sectionLink-unwatch").parent.show, this.$heading.find(".cd-sectionLink-watch").parent.hide) : (this.$heading.find(".cd-sectionLink-watch").parent.show, this.$heading.find(".cd-sectionLink-unwatch").parent.hide);       }        watch(silent = !1) {            let $link;            if (!silent) {                if ($link = this.$heading.find(".cd-sectionLink-watch"), $link.hasClass("cd-sectionLink-pending")) return;                $link.addClass("cd-sectionLink-pending");            }            Section_Section.watchSection(this.headline, { silent: silent, successCallback: => { this.watched = !0, $link && $link.removeClass("cd-sectionLink-pending"), Section_Section.getSectionsByHeadline(this.headline).forEach(section => {                       section.updateWatchMenuItems;                    }); },               errorCallback:  => { $link && $link.removeClass("cd-sectionLink-pending"); }           });        }        unwatch(silent = !1) {            let $link;            if (!silent) {                if ($link = this.$heading.find(".cd-sectionLink-unwatch"), $link.hasClass("cd-sectionLink-pending")) return;                $link.addClass("cd-sectionLink-pending");            }            const watchedAncestor = this.getWatchedAncestor;            Section_Section.unwatchSection(this.headline, { silent: silent, successCallback: => { this.watched = !1, $link && $link.removeClass("cd-sectionLink-pending"), Section_Section.getSectionsByHeadline(this.headline).forEach(section => {                       section.updateWatchMenuItems;                    }); },               errorCallback:  => { $link && $link.removeClass("cd-sectionLink-pending"); },               watchedAncestorHeadline: watchedAncestor && watchedAncestor.headline });       }        copyLink(e) {            e.preventDefault, copyLink(this, e.shiftKey);        }        locateInCode(pageCode) {            this.inCode = null;            const searchInput = {                firstComment: this.comments[0],                headline: normalizeCode(this.headline),                pageCode: pageCode,                adjustedPageCode: hideHtmlComments(pageCode)            };            cd.debug.startTimer("locate section");            const matches = this.searchInCode(searchInput);            let bestMatch;            if (cd.debug.stopTimer("locate section"), matches.forEach(match => {                (!bestMatch || match.score > bestMatch.score) && (bestMatch = match);            }), !bestMatch) throw new CdError({ type: "parse", code: "couldntLocateSection" });           this.inCode = bestMatch;        }        getWatchedAncestor(includeCurrent) {            for (let otherSection = includeCurrent ? this : this.parent; otherSection; otherSection = otherSection.parent) if (otherSection.watched) return otherSection;           return null;        }        getCode {            var _this4 = this;            return asyncToGenerator_default((function* {                try {                    const page = yield getLastRevision(_this4.sourcePage);                    _this4.locateInCode(page.code);                } catch (e) {                    throw e instanceof CdError ? new CdError(Object.assign({}, {                        message: cd.s("cf-error-getpagecode")                    }, e.data)) : e;                }            }));        }        addMenuItem({label: label, href: href, func: func, class: className, tooltip: tooltip, visible: visible = !0}) {            if (classPrivateFieldGet_default(this, _closingBracketElement)) {                const wrapper = document.createElement("span"); wrapper.className = "cd-sectionLinkWrapper", visible || (wrapper.style.display = "none"); const a = document.createElement("a"); a.textContent = label, href && (a.href = href), func && (a.onclick = func), a.className = "cd-sectionLink", className && (a.className += " " + className), tooltip && (a.title = tooltip), wrapper.appendChild(a), classPrivateFieldGet_default(this, _editSectionElement).insertBefore(wrapper, classPrivateFieldGet_default(this, _closingBracketElement)); }       }        get $elements { return void 0 === classPrivateFieldGet_default(this, _cached$elements) && classPrivateFieldSet_default(this, _cached$elements, $(this.elements)), classPrivateFieldGet_default(this, _cached$elements); }       set $elements(value) { classPrivateFieldSet_default(this, _cached$elements, value), this.elements = value.get; }       searchInCode({firstComment: firstComment, headline: headline, pageCode: pageCode, adjustedPageCode: adjustedPageCode}) { const sectionHeadingRegexp = /^((=+)(.*?)\2[ \t]*(?:[ \t]*)*)\n/gm, matches = [], headlines = []; let sectionHeadingMatch, sectionIndex = 0; for (sectionHeadingMatch = sectionHeadingRegexp.exec(adjustedPageCode); ) { const thisHeadline = normalizeCode(removeWikiMarkup(sectionHeadingMatch[3])), headlineMatched = thisHeadline === headline; let numberOfPreviousHeadlinesToCheck = 3; const previousHeadlinesInCode = headlines.slice(-numberOfPreviousHeadlinesToCheck).reverse, previousHeadlinesMatched = cd.sections.slice(Math.max(0, this.id - numberOfPreviousHeadlinesToCheck), this.id).reverse.map(section => section.headline).every((headline, i) => normalizeCode(headline) === previousHeadlinesInCode[i]); headlines.push(thisHeadline); const sectionIndexMatched = this.id === sectionIndex; sectionIndex++; const fullHeadingMatch = sectionHeadingMatch[1], equalSigns = sectionHeadingMatch[2], equalSignsPattern = "={1,".concat(equalSigns.length, "}"), codeFromSection = pageCode.slice(sectionHeadingMatch.index), adjustedCodeFromSection = adjustedPageCode.slice(sectionHeadingMatch.index), sectionMatch = adjustedCodeFromSection.match("(" + mw.util.escapeRegExp(fullHeadingMatch) + "[^]*?\n)" + equalSignsPattern + "[^=].*?=+[ \t]*(?:\x3c!--[^]*?--\x3e[ \t]*)*\n") || codeFromSection.match("(" + mw.util.escapeRegExp(fullHeadingMatch) + "[^]*$)"), firstChunkMatch = adjustedCodeFromSection.match("(" + mw.util.escapeRegExp(fullHeadingMatch) + "[^]*?\n)\n*={1,6}[^=].*?=+[ \t]*(?:\x3c!--[^]*?--\x3e[ \t]*)*\n") || codeFromSection.match("(" + mw.util.escapeRegExp(fullHeadingMatch) + "[^]*$)"), code = sectionMatch && codeFromSection.substr(sectionMatch.index, sectionMatch[1].length), firstChunkCode = firstChunkMatch && codeFromSection.substr(firstChunkMatch.index, firstChunkMatch[1].length); if (!code || !firstChunkCode) { console.log("Couldn't read the \"".concat(thisHeadline, '" section contents.')); continue; }               const signatures = extractSignatures(code); let firstCommentMatched; firstCommentMatched = signatures.length ? Boolean(firstComment) && (signatures[0].timestamp === firstComment.timestamp || signatures[0].author === firstComment.author) : !this.comments.length; const score = 1 * headlineMatched + 1 * firstCommentMatched + .5 * sectionIndexMatched + .25 * previousHeadlinesMatched; if (score <= 1) continue; const startIndex = sectionHeadingMatch.index, endIndex = startIndex + code.length, contentStartIndex = sectionHeadingMatch.index + sectionHeadingMatch[0].length, firstChunkEndIndex = startIndex + firstChunkCode.length; let firstChunkContentEndIndex = firstChunkEndIndex, contentEndIndex = endIndex; if (cd.config.keepInSectionEnding.forEach(regexp => { const firstChunkMatch = firstChunkCode.match(regexp); firstChunkMatch && (firstChunkContentEndIndex -= firstChunkMatch[0].length - 1); const codeMatch = code.match(regexp); codeMatch && (contentEndIndex -= codeMatch[0].length - 1); }), !this.comments.length) { const match = firstChunkCode.match(/\n(# *\n+)$/); match && (firstChunkContentEndIndex -= match[1].length); }               if (matches.push({ headlineMatched: headlineMatched, firstCommentMatched: firstCommentMatched, sectionIndexMatched: sectionIndexMatched, previousHeadlinesMatched: previousHeadlinesMatched, score: score, startIndex: startIndex, endIndex: endIndex, code: code, contentStartIndex: contentStartIndex, contentEndIndex: contentEndIndex, firstChunkEndIndex: firstChunkEndIndex, firstChunkContentEndIndex: firstChunkContentEndIndex, firstChunkCode: firstChunkCode }), 2.75 === score) break; }           return matches; }       static watchSection(headline, {silent: silent = !1, successCallback: successCallback, errorCallback: errorCallback}) { return asyncToGenerator_default((function* { if (!headline) return; let watchedSections, thisPageWatchedSections; try { ({watchedSections: watchedSections, thisPageWatchedSections: thisPageWatchedSections} = yield getWatchedSections); } catch (e) { return mw.notify(cd.s("section-watch-error-load"), {                       type: "error"                    }), void (errorCallback && errorCallback); }               thisPageWatchedSections.includes(headline) || thisPageWatchedSections.push(headline); try { yield setWatchedSections(watchedSections); } catch (e) { if (e instanceof CdError) { const {type: type, code: code} = e.data; if ("internal" === type && "sizeLimit" === code) { const $body = animateLink(cd.s("section-watch-error-maxsize"), "cd-notification-editWatchedSections", e => {                               e.preventDefault, editWatchedSections;                            }); mw.notify($body, {                               type: "error"                            }); } else mw.notify(cd.s("section-watch-error-save"), {                           type: "error"                        }); } else mw.notify(cd.s("section-watch-error-save"), {                       type: "error"                    }); return void (errorCallback && errorCallback); }               if (!silent) { let text = cd.s("section-watch-success", headline); $("#ca-watch").length && (text += " ".concat(cd.s("section-watch-pagenotwatched"))), mw.notify(cd.util.wrapInElement(text)); }               successCallback && successCallback; }));       }        static unwatchSection(headline, {silent: silent = !1, successCallback: successCallback, errorCallback: errorCallback, watchedAncestorHeadline: watchedAncestorHeadline}) { return asyncToGenerator_default((function* { if (!headline) return; let watchedSections, thisPageWatchedSections; try { ({watchedSections: watchedSections, thisPageWatchedSections: thisPageWatchedSections} = yield getWatchedSections); } catch (e) { return mw.notify(cd.s("section-watch-error-load"), {                       type: "error"                    }), void (errorCallback && errorCallback); }               thisPageWatchedSections.includes(headline) && thisPageWatchedSections.splice(thisPageWatchedSections.indexOf(headline), 1), thisPageWatchedSections.length || delete watchedSections[mw.config.get("wgArticleId")]; try { yield setWatchedSections(watchedSections); } catch (e) { return mw.notify(cd.s("section-watch-error-save"), {                       type: "error"                    }), void (errorCallback && errorCallback); }               let text = cd.s("section-unwatch-success", headline); watchedAncestorHeadline && (text += " ".concat(cd.s("section-unwatch-stillwatched", watchedAncestorHeadline))), silent && !watchedAncestorHeadline || mw.notify(cd.util.wrapInElement(text)), successCallback && successCallback; }));       }        static getSectionByAnchor(anchor) { return cd.sections && anchor && cd.sections.find(section => section.anchor === anchor) || null; }       static getSectionsByHeadline(headline) { return cd.sections.filter(section => section.headline === headline); }       static search({headline: headline, firstCommentAnchor: firstCommentAnchor, index: index}) { const matches = [ ...cd.sections.filter(section => section.headline === headline), ...cd.sections.filter(section => section.comments[0] && section.comments[0].anchor === firstCommentAnchor) ]; cd.sections[index] && matches.push(cd.sections[index]); const scores = {}; matches.forEach(match => {               scores[match.id] || (scores[match.id] = 0), scores[match.id]++;            }); const bestMatchId = Object.keys(scores).reduce((bestMatchId, matchId) => scores[matchId] >= 2 && (null === bestMatchId || scores[matchId] > scores[bestMatchId]) ? matchId : bestMatchId, null); return null !== bestMatchId ? cd.sections[bestMatchId] : null; }   }    var _elementPrototypes = new WeakMap, _closingBracketElement = new WeakMap, _editSectionElement = new WeakMap, _cached$elements = new WeakMap, _showAddSubsectionButtonTimeout = new WeakMap, _hideAddSubsectionButtonTimeout = new WeakMap; let commentFormsCounter = 0; function lastFocused(commentForm1, commentForm2) { const lastFocused1 = commentForm1.lastFocused || new Date(0), lastFocused2 = commentForm2.lastFocused || new Date(0); return lastFocused2 > lastFocused1 ? 1 : lastFocused2 < lastFocused1 ? -1 : 0;   }    class CommentForm_CommentForm { constructor({mode: mode, target: target, $addSectionLink: $addSectionLink, dataToRestore: dataToRestore, scrollIntoView: scrollIntoView, editintro: editintro}) { _sectionHeadline.set(this, {               writable: !0,                value: void 0            }), _standardButtonsTotalWidth.set(this, {                writable: !0,                value: void 0            }), _standardSubmitButtonLabel.set(this, {                writable: !0,                value: void 0            }), _shortSubmitButtonLabel.set(this, {                writable: !0,                value: void 0            }), _lastPreviewTimestamp.set(this, {                writable: !0,                value: void 0            }), _previewTimeout.set(this, {                writable: !0,                value: void 0            }), _genderRequestCallbackList.set(this, {                writable: !0,                value: void 0            }), _dontAutopreview.set(this, {                writable: !0,                value: void 0            }), _editingSectionOpeningComment.set(this, { writable: !0, value: void 0 }), _headlineInputPurpose.set(this, { writable: !0, value: void 0 }), this.mode = mode, this.setTargets(target), this.$addSectionLink = $addSectionLink,            this.target instanceof Comment_Comment ? classPrivateFieldSet_default(this, _sectionHeadline, this.target.section && this.target.section.headline) : this.target instanceof Section_Section && classPrivateFieldSet_default(this, _sectionHeadline, this.target.headline),             this.id = commentFormsCounter++, "edit" !== this.mode || dataToRestore || (this.textLoaded = !1),             this.summaryAltered = !!dataToRestore && dataToRestore.summaryAltered, editintro && parseCode(""), {                title: cd.g.CURRENT_PAGE            }).then(result => {                this.$messageArea.append(result.html).cdAddCloseButton;            }), this.createContents(dataToRestore), this.addEvents, this.addToPage, this.willCommentBeIndented = [ "reply", "replyInSection" ].includes(this.mode), this.operations = [], cd.commentForms.push(this), dataToRestore ? (this.originalComment = dataToRestore.originalComment,            this.originalHeadline = dataToRestore.originalHeadline, dataToRestore.lastFocused && (this.lastFocused = new Date(dataToRestore.lastFocused))) : "edit" === this.mode ? (this.pushPending(!0),            this.target.getCode(!0).then(({commentText: commentText, headline: headline}) => { this.commentInput.setValue(commentText), this.smallCheckbox && this.smallCheckbox.setSelected(this.target.inCode.inSmallFont), this.originalComment = commentText, this.headlineInput && (this.headlineInput.setValue(headline),                this.originalHeadline = headline), this.willCommentBeIndented = this.target.inCode.indentationChars, this.popPending(!0), this.textLoaded = !0, saveSession, this.commentInput.focus; }, e => { e instanceof CdError ? this.handleError(Object.assign({}, e.data, { retryFunc: this.retryLoad })) : this.handleError({                   type: "javascript",                    logMessage: e                }); })) : (this.originalComment = "", this.headlineInput && (this.originalHeadline = ""),            this.target ? this.checkCode : saveSession, scrollIntoView && this.$element.cdScrollIntoView("center"),             this[this.headlineInput ? "headlineInput" : "commentInput"].focus), mw.hook("convenientDiscussions.commentFormCreated").fire(this); }       checkCode { if (!this.checkCodeRequest) { const deferred = $.Deferred; this.checkCodeRequest = deferred.then( => {                   saveSession;                }, e => {                    e instanceof CdError ? this.handleError(Object.assign({}, e.data)) : this.handleError({ type: "javascript", logMessage: e                   });                }), this.target.getCode(this).then( => {                    deferred.resolve;                }, e => {                    deferred.reject(e);                }); }           return this.checkCodeRequest; }       retryLoad { this.$element.hide, this.destroy, this.target[CommentForm_CommentForm.modeToProperty(this.mode)]; }       setTargets(target) { this.target = target, this.target instanceof Comment_Comment ? this.targetSection = this.target.section : this.target instanceof Section_Section && (this.targetSection = this.target), this.targetPage = this.targetSection ? this.targetSection.sourcePage : cd.g.CURRENT_PAGE, target instanceof Comment_Comment ? this.targetComment = target : target instanceof Section_Section && target.commentsInFirstChunk[0] && target.commentsInFirstChunk[0].isOpeningSection && (this.targetComment = target.commentsInFirstChunk[0]); }       addToolbar { const $toolbarPlaceholder = $(" ").addClass("cd-toolbarPlaceholder").insertBefore(this.commentInput.$element), modules = [ "ext.wikiEditor" ]; cd.config.customCommentFormModules.filter(module => !module.checkFunc || module.checkFunc).forEach(module => {               modules.push(module.name);            }), mw.loader.using(modules).then( => {                $toolbarPlaceholder.hide, this.commentInput.$input.wikiEditor("addModule", mw.loader.moduleRegistry["ext.wikiEditor"].packageExports["jquery.wikiEditor.toolbar.config.js"]),                 this.$element.find(".group-insert").remove, this.$element.find('.option[rel="heading-2"]').remove,                 this.commentInput.$input.wikiEditor("addToToolbar", { section: "main", groups: { "convenient-discussions": {} }               }).wikiEditor("addToToolbar", { section: "main", group: "convenient-discussions", tools: { quote: { label: cd.s("cf-quote-tooltip"), type: "button", icon: "https://upload.wikimedia.org/wikipedia/commons/c/c0/OOjs_UI_icon_quotes-ltr.svg", action: { type: "callback", execute: => { this.quote; }                           }                        }                    }                }), mw.hook("convenientDiscussions.commentFormReady").fire(this);            }); }       addInsertButton(text, displayedText) { let [, pre, post] = text.match(/^(.*?(?:^|[^\\]))(?:\+(.*))?$/) || []; if (!pre) return; post = post || "", displayedText || (displayedText = pre + post); const $a = $("").text(displayedText).addClass("cd-insertButtons-item").on("click", e => {               e.preventDefault, this.commentInput.$input.textSelection("encapsulateSelection", { pre: pre, peri: "", post: post });           });            this.$insertButtons.append($a, " "); }       createContents(dataToRestore) { this.target ? this.isInNumberedList = this.target instanceof Comment_Comment ? this.target.$elements.last.parent.is("ol") : this.target.$replyWrapper.parent.is("ol") : this.isInNumberedList = !1; let tag = "div"; if ([ "reply", "edit" ].includes(this.mode)) { const $lastElementOfTarget = this.target.$elements.last; $lastElementOfTarget.is("li") ? this.isInNumberedList && "edit" !== this.mode || (tag = "li") : $lastElementOfTarget.is("dd") ? tag = "dd" : "reply" === this.mode && (tag = "ul"); }           if (classPrivateFieldSet_default(this, _editingSectionOpeningComment, "edit" === this.mode && this.target.isOpeningSection),             this.$element = $(document.createElement(tag)).addClass("cd-commentForm").addClass("cd-commentForm-".concat(this.mode)),             this.isInNumberedList && this.$element.addClass("cd-commentForm-inNumberedList"),             classPrivateFieldGet_default(this, _editingSectionOpeningComment) && this.$element.addClass("cd-commentForm-sectionOpeningComment"),             "addSubsection" === this.mode && this.$element.addClass("cd-commentForm-addSubsection-".concat(this.target.level)),             "reply" === this.mode) { const $list = "ul" === tag ? this.$element : $("").appendTo(this.$element); this.$innerWrapper = $("").addClass("cd-commentForm-innerWrapper").appendTo($list), $list.addClass("cd-commentLevel"); } else this.$innerWrapper = $(" ").addClass("cd-commentForm-innerWrapper").appendTo(this.$element); this.$messageArea = $(" ").addClass("cd-messageArea"), ([ "addSection", "addSubsection" ].includes(this.mode) || classPrivateFieldGet_default(this, _editingSectionOpeningComment)) && ("addSubsection" === this.mode ? classPrivateFieldSet_default(this, _headlineInputPurpose, cd.s("cf-headline-subsection", this.targetSection.headline)) : "edit" === this.mode && this.target.section.level > 2 ? classPrivateFieldSet_default(this, _headlineInputPurpose, cd.s("cf-headline-subsection", this.targetSection.parent.headline)) : classPrivateFieldSet_default(this, _headlineInputPurpose, cd.s("cf-headline-topic")),            this.headlineInput = new OO.ui.TextInputWidget({ value: dataToRestore ? dataToRestore.headline : "", placeholder: classPrivateFieldGet_default(this, _headlineInputPurpose), classes: [ "cd-headlineInput" ], tabIndex: String(this.id) + "11" }));           let commentInputPlaceholder, rowNumber = this.headlineInput ? 5 : 3;           if ("firefox" === $.client.profile.name && (rowNumber -= 1), !cd.config.commentInputEmptyPlaceholder) if ("replyInSection" === this.mode || "reply" === this.mode && this.target.isOpeningSection) commentInputPlaceholder = cd.s("cf-comment-placeholder-replytosection", this.targetSection.headline); else if ("reply" === this.mode) { const ending = this.formUserName(this.target, {                   returnUnknown: !1,                    callback:  => {                        this.commentInput.$input.attr("placeholder", cd.s("cf-comment-placeholder-replytocomment", this.formUserName(this.target)));                    }                }); ending && (commentInputPlaceholder = cd.s("cf-comment-placeholder-replytocomment", ending)); } else "addSection" === this.mode ? commentInputPlaceholder = cd.s("cf-comment-placeholder-addsection") : "addSubsection" === this.mode && (commentInputPlaceholder = cd.s("cf-comment-placeholder-addsubsection")); this.commentInput = new OO.ui.MultilineTextInputWidget({               value: dataToRestore ? dataToRestore.comment : "",                placeholder: commentInputPlaceholder,                autosize: !0,                rows: rowNumber,                maxRows: 30,                classes: [ "cd-commentInput" ],                tabIndex: String(this.id) + "12"            }), this.$settings = $(" ").addClass("cd-commentFormSettings"), this.summaryInput = new OO.ui.TextInputWidget({                value: dataToRestore ? dataToRestore.summary : "",                maxLength: cd.g.SUMMARY_LENGTH_LIMIT,                placeholder: cd.s("cf-summary-placeholder"),                classes: [ "cd-summaryInput" ],                tabIndex: String(this.id) + "13"            }), this.summaryInput.$input.codePointLimit(cd.g.SUMMARY_LENGTH_LIMIT), mw.widgets.visibleCodePointLimit(this.summaryInput, cd.g.SUMMARY_LENGTH_LIMIT), this.updateAutoSummary(!dataToRestore), this.$summaryPreview = $(" ").addClass("cd-summaryPreview"), "edit" === this.mode && ([this.minorField, this.minorCheckbox] = checkboxField({ value: "minor", selected: !dataToRestore || dataToRestore.minor, label: cd.s("cf-minor"), tabIndex: String(this.id) + "20" }));           const watchCheckboxSelected = cd.settings.watchSectionOnReply && "edit" !== this.mode || $("#ca-unwatch").length || mw.user.options.get(mw.config.get("wgArticleId") ? "watchdefault" : "watchcreations"); if ([this.watchField, this.watchCheckbox] = checkboxField({ value: "watch", selected: dataToRestore ? dataToRestore.watch : watchCheckboxSelected, label: cd.s("cf-watch"), tabIndex: String(this.id) + "21" }), this.targetSection || "addSection" === this.mode) { const label = "addSubsection" !== this.mode && (this.targetSection && this.targetSection.level <= 2 || "addSection" === this.mode) ? cd.s("cf-watchsection-topic") : cd.s("cf-watchsection-subsection"), selected = cd.settings.watchSectionOnReply && "edit" !== this.mode || this.targetSection && this.targetSection.watched; [this.watchSectionField, this.watchSectionCheckbox] = checkboxField({                   value: "watchSection",                    selected: dataToRestore ? dataToRestore.watchSection : selected,                    label: label,                    tabIndex: String(this.id) + "22",                    title: cd.s("cf-watchsection-tooltip")                }); }           if (![ "addSection", "addSubsection", "edit" ].includes(this.mode) && this.targetComment && !this.targetComment.own && cd.config.pingTemplate && ([this.pingField, this.pingCheckbox] = checkboxField({                value: "ping",                selected: !!dataToRestore && dataToRestore.ping,                label: this.targetComment.isOpeningSection ? cd.s("cf-ping-sectionauthor") : cd.s("cf-ping-commentauthor"),                tabIndex: String(this.id) + "23"            }), this.targetComment.author.registered ? this.pingField.setTitle(cd.s("cf-ping-tooltip")) : (this.pingCheckbox.setDisabled(!0),            this.pingCheckbox.setTitle(cd.s("cf-ping-tooltip-unreg")), this.pingField.setTitle(cd.s("cf-ping-tooltip-unreg")))),             this.headlineInput || ([this.smallField, this.smallCheckbox] = checkboxField({                value: "small",                selected: !!dataToRestore && dataToRestore.small,                label: cd.s("cf-small"),                tabIndex: String(this.id) + "24"            })), this.headlineInput && ([this.noSignatureField, this.noSignatureCheckbox] = checkboxField({                value: "noSignature",                selected: !!dataToRestore && dataToRestore.noSignature,                label: cd.s("cf-nosignature"),                tabIndex: String(this.id) + "25"            })), "edit" === this.mode && (!this.target.isOpeningSection || this.target.section && 1 === this.target.section.comments.length)) { const hasReplies = this.target.isOpeningSection ? void 0 : !this.target.section || this.target.section.comments.slice(this.target.section.comments.indexOf(this.target)).some(comment => comment.parent === this.target); if (this.target.isOpeningSection || !hasReplies) { const selected = !!dataToRestore && dataToRestore.delete; [this.deleteField, this.deleteCheckbox] = checkboxField({                       value: "delete",                        selected: selected,                        label: cd.s("cf-delete"),                        tabIndex: String(this.id) + "26"                    }); }           }            switch (this.scriptSettingsButton = new OO.ui.ButtonWidget({ framed: !1, icon: "settings", label: cd.s("cf-settings-tooltip"), invisibleLabel: !0, title: cd.s("cf-settings-tooltip"), classes: [ "cd-button", "cd-scriptSettingsButton" ], tabIndex: String(this.id) + "27" }), this.horizontalLayout = new OO.ui.HorizontalLayout({ classes: [ "cd-checkboxesContainer" ] }), this.horizontalLayout.addItems([ this.minorField, this.watchField, this.watchSectionField, this.pingField, this.smallField, this.noSignatureField, this.deleteField, this.scriptSettingsButton ].filter(defined)),            this.$buttonsContainer = $(" ").addClass("cd-buttonsContainer"), this.$leftButtonsContainer = $(" ").addClass("cd-leftButtonsContainer"),             this.$rightButtonsContainer = $(" ").addClass("cd-rightButtonsContainer"), this.mode) { case "edit": classPrivateFieldSet_default(this, _standardSubmitButtonLabel, cd.s("cf-save")), classPrivateFieldSet_default(this, _shortSubmitButtonLabel, cd.s("cf-save")); break;

case "addSection": classPrivateFieldSet_default(this, _standardSubmitButtonLabel, cd.s("cf-addtopic")), classPrivateFieldSet_default(this, _shortSubmitButtonLabel, cd.s("cf-addtopic-short")); break;

case "addSubsection": classPrivateFieldSet_default(this, _standardSubmitButtonLabel, cd.s("cf-addsubsection")), classPrivateFieldSet_default(this, _shortSubmitButtonLabel, cd.s("cf-addsubsection-short")); break;

default: classPrivateFieldSet_default(this, _standardSubmitButtonLabel, cd.s("cf-reply")), classPrivateFieldSet_default(this, _shortSubmitButtonLabel, cd.s("cf-reply-short")); }           this.settingsButton = new OO.ui.ButtonWidget({                label: cd.s("cf-settings"),                framed: !1,                classes: [ "cd-button", "cd-settingsButton" ],                tabIndex: String(this.id) + "30"            }), cd.g.$popupsOverlay || (cd.g.$popupsOverlay = $(" ").addClass("cd-popupsOverlay").appendTo(document.body)), this.helpPopupButton = new OO.ui.PopupButtonWidget({               label: cd.s("cf-help"),                framed: !1,                classes: [ "cd-button" ],                popup: {                    head: !0,                    $content: cd.util.wrapInElement(cd.s("cf-help-content"), "div"),                    padded: !0,                    align: "center"                },                $overlay: cd.g.$popupsOverlay,                tabIndex: String(this.id) + "31"            }), this.cancelButton = new OO.ui.ButtonWidget({                label: cd.s("cf-cancel"),                flags: "destructive",                framed: !1,                classes: [ "cd-button", "cd-cancelButton" ],                tabIndex: String(this.id) + "32"            }), this.viewChangesButton = new OO.ui.ButtonWidget({                label: cd.s("cf-viewchanges"),                classes: [ "cd-viewChangesButton" ], tabIndex: String(this.id) + "33" }), cd.settings.autopreview || (this.previewButton = new OO.ui.ButtonWidget({               label: cd.s("cf-preview"),                classes: [ "cd-previewButton" ],                tabIndex: String(this.id) + "34"            })), this.submitButton = new OO.ui.ButtonInputWidget({ type: "submit", label: classPrivateFieldGet_default(this, _standardSubmitButtonLabel), flags: [ "progressive", "primary" ], classes: [ "cd-submitButton" ], tabIndex: String(this.id) + "35" }), this.deleteCheckbox && this.deleteCheckbox.isSelected && this.updateFormOnDeleteCheckboxChange(!0),            this.$settings.append(this.summaryInput.$element, this.$summaryPreview, this.horizontalLayout.$element),             this.$leftButtonsContainer.append(this.settingsButton.$element, this.helpPopupButton.$element),             this.$rightButtonsContainer.append(...[ this.cancelButton.$element, this.viewChangesButton && this.viewChangesButton.$element, this.previewButton && this.previewButton.$element, this.submitButton.$element ].filter(defined)),             this.$buttonsContainer.append(this.$leftButtonsContainer, this.$rightButtonsContainer),             this.$form = $(" "), this.$form.append(...[ this.headlineInput && this.headlineInput.$element, this.commentInput.$element, this.$settings, this.$buttonsContainer ].filter(defined)),             this.$innerWrapper.append(this.$messageArea, this.$form), "edit" === this.mode || cd.settings.alwaysExpandSettings || this.$settings.hide, this.$previewArea = $(" ").addClass("cd-previewArea"), cd.settings.autopreview ? this.$previewArea.addClass("cd-previewArea-below").appendTo(this.$innerWrapper) : this.$previewArea.addClass("cd-previewArea-above").prependTo(this.$innerWrapper), this.target && this.isInNumberedList && "webkit" !== $.client.profile.layout && $(" ").html(" ").addClass("cd-commentForm-dummyElement").prependTo(this.$innerWrapper), cd.settings.showToolbar && this.addToolbar, cd.settings.insertButtons.length && (this.$insertButtons = $(" ").addClass("cd-insertButtons").insertAfter(this.commentInput.$element),            cd.settings.insertButtons.forEach(button => { let text, displayedText; Array.isArray(button) ? (text = button[0], displayedText = button[1]) : text = button, this.addInsertButton(text, displayedText); }));       }        addToPage { switch (mw.config.get("wgArticleId") || cd.g.$root.empty, this.mode) { case "reply": this.$element.insertAfter(this.target.$elements.last); break;

case "edit": this.target.isOpeningSection ? this.$element.insertAfter(this.target.$elements.last) : this.$element.insertBefore(this.target.$elements.first); break;

case "replyInSection": this.$element.appendTo(this.target.$replyWrapper), this.target.$replyWrapper.addClass("cd-replyWrapper-hasCommentForm"); break;

case "addSection": this.newTopicOnTop = this.$addSectionLink && this.$addSectionLink.is('[href*="section=0"]'), this.newTopicOnTop && cd.sections[0] ? this.$element.insertBefore(cd.sections[0].$heading) : this.$element.appendTo(cd.g.$root); break;

case "addSubsection": {                   const headingLevelRegexp = new RegExp("\\bcd-commentForm-addSubsection-[".concat(this.target.level, "-6]\\b")); let $target, $tested = this.target.$elements.last; do { $target = $tested, $tested = $tested.next; } while ($tested.is(".cd-sectionButtonContainer") || $tested.length && $tested.get(0).className.match(headingLevelRegexp)); this.$element.insertAfter($target); break; }           }            this.adjustLabels; }       addEvents { const saveSessionEventHandler = => { saveSession; }, preview = => { this.preview; }, previewFalse = => { this.preview(!1); }, textReactions = [ { pattern: new RegExp(cd.g.SIGN_CODE + "\\s*$"), message: cd.s("cf-reaction-signature", cd.g.SIGN_CODE), class: "signatureNotNeeded", type: "notice" }, {               pattern: / {               e.preventDefault, this.submit;            }).on("keydown", e => {                !e.ctrlKey || e.shiftKey || e.altKey || 13 !== e.keyCode || this.submit, e.ctrlKey || e.shiftKey || e.altKey || 27 !== e.keyCode || this.cancel;            }).on("focusin",  => {                this.lastFocused = new Date;            }), this.headlineInput && this.headlineInput.on("change", headline => {                this.updateAutoSummary(!0, !0), headline.includes("{{") ? this.showMessage(cd.s("cf-reaction-templateinheadline"), "warning", "templateInHeadline") : this.hideMessage("templateInHeadline");            }).on("change", preview).on("change", saveSessionEventHandler), this.commentInput.on("change", text => {                this.updateAutoSummary(!0, !0), textReactions.forEach(reaction => { reaction.pattern.test(text) && ("function" != typeof reaction.checkFunc || reaction.checkFunc) ? this.showMessage(reaction.message, reaction.type, reaction.class) : this.hideMessage(reaction.class); });           }).on("change", preview).on("change", saveSessionEventHandler), this.summaryInput.on("change",  => {                classPrivateFieldGet_default(this, _dontAutopreview) || preview;            }).on("change", saveSessionEventHandler), this.summaryInput.$element.on("keypress",  => {                this.summaryAltered = !0, classPrivateFieldSet_default(this, _dontAutopreview, !1);            }), this.minorCheckbox && this.minorCheckbox.on("change", saveSessionEventHandler), this.watchCheckbox.on("change", saveSessionEventHandler), this.watchSectionCheckbox && this.watchSectionCheckbox.on("change", saveSessionEventHandler), this.pingCheckbox && this.pingCheckbox.on("change", previewFalse).on("change", saveSessionEventHandler), this.smallCheckbox && this.smallCheckbox.on("change", previewFalse).on("change", saveSessionEventHandler), this.noSignatureCheckbox && this.noSignatureCheckbox.on("change", previewFalse).on("change", saveSessionEventHandler), this.deleteCheckbox && this.deleteCheckbox.on("change", selected => {               this.updateAutoSummary, this.updateFormOnDeleteCheckboxChange(selected);            }).on("change", selected => {                selected && cd.settings.autopreview && this.$previewArea.empty;            }).on("change", saveSessionEventHandler), this.scriptSettingsButton.on("click",  => {                settingsDialog;            }), this.settingsButton.on("click",  => {                this.toggleSettings;            }), this.cancelButton.on("click",  => {                this.cancel;            }), this.viewChangesButton.on("click",  => {                this.viewChanges;            }), this.previewButton && this.previewButton.on("click",  => {                this.preview(!0, !1);            }); }       toggleSettings { this.$settings.is(":hidden") ? this.$settings.show : this.$settings.hide; }       adjustLabels { let formWidth = this.$innerWrapper.width; this.$element.hasClass("cd-commentForm-short") ? formWidth >= classPrivateFieldGet_default(this, _standardButtonsTotalWidth) + 7 && (this.$element.removeClass("cd-commentForm-short"),            this.submitButton.setLabel(classPrivateFieldGet_default(this, _standardSubmitButtonLabel)),             this.previewButton && this.previewButton.setLabel(cd.s("cf-preview")), this.viewChangesButton && this.viewChangesButton.setLabel(cd.s("cf-viewchanges")),             this.cancelButton.setLabel(cd.s("cf-cancel"))) : (classPrivateFieldSet_default(this, _standardButtonsTotalWidth, this.submitButton.$element.outerWidth(!0) + (this.previewButton ? this.previewButton.$element.outerWidth(!0) : 0) + (this.viewChangesButton ? this.viewChangesButton.$element.outerWidth(!0) : 0) + this.settingsButton.$element.outerWidth(!0) + this.helpPopupButton.$element.outerWidth(!0) + this.cancelButton.$element.outerWidth(!0)),             formWidth < classPrivateFieldGet_default(this, _standardButtonsTotalWidth) + 7 && (this.$element.addClass("cd-commentForm-short"), this.submitButton.setLabel(classPrivateFieldGet_default(this, _shortSubmitButtonLabel)), this.previewButton && this.previewButton.setLabel(cd.s("cf-preview-short")), this.viewChangesButton && this.viewChangesButton.setLabel(cd.s("cf-viewchanges-short")), this.cancelButton.setLabel(cd.s("cf-cancel-short")))); }       pushPending(blockButtons = !1) { this.commentInput.pushPending, this.summaryInput.pushPending, this.headlineInput && this.headlineInput.pushPending, blockButtons && (this.submitButton.setDisabled(!0), this.previewButton && this.previewButton.setDisabled(!0),            this.viewChangesButton && this.viewChangesButton.setDisabled(!0), this.cancelButton.setDisabled(!0)); }       popPending(unblockButtons = !1) { this.commentInput.popPending, this.summaryInput.popPending, this.headlineInput && this.headlineInput.popPending, unblockButtons && (this.submitButton.setDisabled(!1), this.previewButton && this.previewButton.setDisabled(!1),            this.viewChangesButton && this.viewChangesButton.setDisabled(!1), this.cancelButton.setDisabled(!1)); }       showMessage(html, type = "notice", className) { if (this.destroyed || className && this.$messageArea.children(".cd-message-".concat(className)).length) return; const $label = html instanceof $ ? html : cd.util.wrapInElement(html), classes = [ "cd-message" ]; className && classes.push("cd-message-".concat(className)); const message = new OO.ui.MessageWidget({               type: type,                inline: !0,                label: $label,                classes: classes            }); this.$messageArea.append(message.$element).cdAddCloseButton.cdScrollIntoView("top"); }       hideMessage(className) { const $info = this.$messageArea.children(".cd-message-".concat(className)); $info.length && $info.remove; }       abort({message: message, messageType: messageType = "error", logMessage: logMessage, retryFunc: retryFunc, tearDown: tearDown = !1, isRawMessage: isRawMessage = !1, currentOperation: currentOperation}) { if (currentOperation && this.closeOperation(currentOperation), !this.destroyed) { if (logMessage && console.warn(logMessage), currentOperation && "preview" === currentOperation.type && cd.settings.autopreview || (isRawMessage ? this.$messageArea.append(message) : this.showMessage(message, messageType)),                retryFunc || tearDown) { this.$innerWrapper.children(":not(.cd-messageArea)").remove; const cancelLink = new OO.ui.ButtonWidget({                       label: cd.s("cf-error-cancel"),                        framed: !1                    }); cancelLink.on("click", => {                        this.cancel(!1);                    }); const $div = $(" ").append(cancelLink.$element).appendTo(this.$messageArea); if (retryFunc) { const retryLink = new OO.ui.ButtonWidget({                           label: cd.s("cf-error-tryagain"),                            framed: !1                        }); retryLink.on("click", => {                            this.$messageArea.empty, retryFunc.call(this);                        }), $div.append(retryLink.$element); }               }                this.$messageArea.cdScrollIntoView("top"); }       }        unknownApiErrorText(errorCode, errorInfo) { return asyncToGenerator_default((function* { let text; if (errorCode && (text = "".concat(cd.s("error-api"), ": ").concat(errorCode, ". "), errorInfo)) try { const {html: html} = yield parseCode(errorInfo); text += html; } catch (e) { text += errorInfo; }               return text; }));       }        handleError({type: type, code: code, apiData: apiData, message: message, messageType: messageType, logMessage: logMessage, retryFunc: retryFunc, tearDown: tearDown = !1, isRawMessage: isRawMessage = !1, currentOperation: currentOperation}) { var _this = this; return asyncToGenerator_default((function* { switch (type) { case "parse": {                       switch (code) { case "couldntLocateComment": message = cd.s("error-locatecomment"); break;

case "couldntLocateSection": message = cd.s("error-locatesection"); break;

case "numberedList": message = cd.s("cf-error-numberedlist"); break;

case "findPlace": message = "".concat(cd.s("cf-error-findplace"), "."); break;

case "findPlace-unexpectedHeading": message = "".concat(cd.s("cf-error-findplace"), " (").concat(cd.s("cf-error-findplace-unexpectedheading"), ")."); break;

case "delete-repliesToComment": message = cd.s("cf-error-delete-repliestocomment"); break;

case "delete-repliesInSection": message = cd.s("cf-error-delete-repliesinsection"); }                       const $message = animateLink(message, "cd-message-reloadPage", asyncToGenerator_default((function* {                            _this.reloadPage({}, null, !0);                        }))); _this.abort({                           message: $message,                            messageType: messageType,                            retryFunc: retryFunc,                            tearDown: tearDown,                            isRawMessage: isRawMessage,                            currentOperation: currentOperation                        }); break; }

case "api": {                       switch (code) { case "missing": message = cd.s("cf-error-pagedoesntexist"); break;

case "error": {                               const {code: errorCode, info: errorInfo} = apiData.error; switch (errorCode) { case "missingtitle": message = cd.s("cf-error-pagedoesntexist"); break;

default: message = yield _this.unknownApiErrorText(errorCode, errorInfo); }                               break; }                       }                        const $message = cd.util.wrapInElement(message); $message.find(".mw-parser-output").css("display", "inline"), _this.abort({                           message: $message,                            messageType: messageType,                            isRawMessage: isRawMessage,                            logMessage: logMessage || [ code, apiData ],                            retryFunc: retryFunc,                            tearDown: tearDown,                            currentOperation: currentOperation                        }); break; }

case "network": message = (message ? "".concat(message, " ") : "") + cd.s("error-network"), _this.abort({                       message: message,                        isRawMessage: isRawMessage,                        logMessage: logMessage,                        retryFunc: retryFunc,                        tearDown: tearDown,                        currentOperation: currentOperation                    }); break;

case "javascript": _this.abort({                       message: cd.s("error-javascript"),                        logMessage: logMessage,                        tearDown: tearDown,                        currentOperation: currentOperation                    }); }           }));        }        commentTextToCode(action) { let indentationChars, replyIndentationChars, text = this.commentInput.getValue; this.target instanceof Comment_Comment && (indentationChars = this.target.inCode.indentationChars,            replyIndentationChars = this.target.inCode.replyIndentationChars), indentationChars = indentationChars || "", "reply" === this.mode ? indentationChars = replyIndentationChars : "replyInSection" === this.mode && (indentationChars = this.target.inCode.lastCommentFirstIndentationChar || cd.config.defaultIndentationChar); const isZeroLevel = "preview" === action || [ "addSection", "addSubsection" ].includes(this.mode) || "edit" === this.mode && !indentationChars, newLineIndentationChars = indentationChars.replace(/\*/g, ":"); let hidden, code = text.trim, useColonsForNewLines = /^[:*#]+/.test(code), hasTable = !1; ({code: code, hidden: hidden} = hideSensitiveCode(code, isTable => { isTable && this.willCommentBeIndented && (useColonsForNewLines = !0, hasTable = !0); }));           let signature, implicitSmall = !1; if (this.smallCheckbox && (code = code.replace(/^ ([^]*)<\/small>$/i, (s, m1) => (implicitSmall = !0, m1))), code = code.replace(/^ +[\s\uFEFF\xA0]+[^\s\uFEFF\xA0]/gm, s => / [^\s\uFEFF\xA0]$/.test(s) ? s : s.replace(/^ +/gm, "")),            signature = this.noSignatureCheckbox && this.noSignatureCheckbox.isSelected ? "" : "edit" === this.mode ? this.target.inCode.signature : cd.settings.mySignature,             !signature || "edit" === this.mode && /^[ \t]*\n/.test(signature) || !/\n[:*#].*$/.test(code) || (code += "\n", "edit" === this.mode && (signature = signature.replace(/^\s+/, ""))), isZeroLevel || (code = code.replace(/\n([:*#]+)/g, (s, m1) => (useColonsForNewLines = !0, "\n" + newLineIndentationChars + m1)), useColonsForNewLines && indentationChars && (code = code.replace(/\n(?![:#\x03])/g, => { if ("#" === newLineIndentationChars) throw new CdError({                   type: "parse",                    code: "numberedList"                }); return "\n".concat(newLineIndentationChars) + (cd.config.spaceAfterIndentationChar ? " " : ""); }))), this.willCommentBeIndented) { const replacement = cd.config.paragraphTemplates.length ? "") : " ";                code = code.replace(/\n\n(?![:*#])/g, replacement);            }            this.willCommentBeIndented && (code = code.replace(/^ +/gm, ""));            const thisLinePnieRegexp = new RegExp("(?:\\x04|<".concat(cd.g.PNIE_PATTERN, "(?: [\\w ]+?=[^<>]+?| ?\\/?)>|)$"), "i"), nextLinePnieRegexp = new RegExp("^(?:|<").concat(cd.g.PNIE_PATTERN, ")"), "i");            if (code = code.replace(/^(.*[^\n])\n(?![\n:*# \x03])(?=(.*))/gm, (s, m1, m2) => m1 + (/^[:*# ]/.test(m1) || /^\x01.*?\x02 *$/.test(m1) || /^\x01.*?\x02 *$/.test(m2) || thisLinePnieRegexp.test(m1) || nextLinePnieRegexp.test(m2) ? "" : " ") + (!this.willCommentBeIndented || /^[:*#]/.test(m1) ? "\n" : "")), code = code.replace(/\s*~{3,}$/, ""), this.pingCheckbox && this.pingCheckbox.isSelected) {               let separator;                separator = /^[:*#]/.test(code) ? "\n" + (isZeroLevel ? "" : newLineIndentationChars) : " ",                code = "" + separator + code;            }            if (!isZeroLevel && /^#/gm.test(code) && (indentationChars = newLineIndentationChars), this.headlineInput) {               let level;                level = "addSection" === this.mode ? 2 : "addSubsection" === this.mode ? this.target.level + 1 : this.target.inCode.headingLevel;                const equalSigns = "=".repeat(level);                classPrivateFieldGet_default(this, _editingSectionOpeningComment) && /^\n/.test(this.target.inCode.code) && (code = "\n" + code),                 code = "".concat(equalSigns, " ").concat(this.headlineInput.getValue.trim, " ").concat(equalSigns, "\n").concat(code);            }            if ("preview" === action && signature && (signature = ' '.concat(signature, " ")), /^\s/.test(signature) || !code || /[\s>]$/.test(code) || (code += " "), /(?:^|\n) .*$/.test(code) && (code += "\n"), code += signature, this.smallCheckbox && (this.smallCheckbox.isSelected || implicitSmall)) {               const indentation = newLineIndentationChars + (/^[:*#]/.test(code) || !cd.config.spaceAfterIndentationChar ? "" : " "), before = /^[:*# ]/.test(code) ? "\n".concat(indentation) : "";               code = cd.config.blockSmallTemplate && !/^[:*#]/m.test(code) ? "") : " ".concat(before).concat(code, " "); }           let imitateList; return "edit" !== this.mode && (code += "\n"), "submit" === action && ("reply" !== this.mode && "replyInSection" !== this.mode || (code = indentationChars + (indentationChars && !/^[:*#]/.test(code) && cd.config.spaceAfterIndentationChar ? " " : "") + code),            this.willCommentBeIndented && "edit" === this.mode && /^[:*]/.test(this.target.inCode.code) && !/^[:*]/.test(code) && (code = " " + code),             "addSubsection" === this.mode && (code += "\n")), "preview" === action && this.willCommentBeIndented && this.commentInput.getValue.trim && !hasTable ? (code = code.replace(/^/gm, ":"),            imitateList = !0) : imitateList = !1, code = unhideSensitiveCode(code, hidden), cd.config.customCodeTransformations && (code = cd.config.customCodeTransformations(code, this)), {               code: code, imitateList: imitateList };       }        tryPrepareNewPageCode(action) { var _this2 = this; return asyncToGenerator_default((function* { let page, newPageCode; try { page = yield getLastRevision(_this2.targetPage); } catch (e) { return void (e instanceof CdError ? _this2.handleError(Object.assign({}, {                       message: cd.s("cf-error-getpagecode")                    }, e.data)) : _this2.handleError({ type: "javascript", logMessage: e                   })); }               try { newPageCode = _this2.prepareNewPageCode(page.code, action); } catch (e) { return void (e instanceof CdError ? _this2.handleError(e.data) : _this2.handleError({ type: "javascript", logMessage: e                   })); }               return { page: page, newPageCode: newPageCode };           }));        }        prepareNewPageCode(pageCode, action) { let targetInCode, currentIndex; if (pageCode += "\n", this.target && (this.target.locateInCode(pageCode), targetInCode = this.target.inCode, "edit" === this.mode && (this.willCommentBeIndented = this.target.inCode.indentationChars)),            "reply" === this.mode) { currentIndex = targetInCode.endIndex; const succeedingText = pageCode.slice(currentIndex), properPlaceMatch = new RegExp("^([^]*?(?:" + mw.util.escapeRegExp(targetInCode.signature) + "|" + cd.g.TIMESTAMP_REGEXP.source + ".*)\\n)\\n*" + (targetInCode.indentationChars.length > 0 ? "[:*#]{0,".concat(targetInCode.indentationChars.length, "}") : "") + "(?![:*#\\n])").exec(succeedingText); if (!properPlaceMatch) throw new CdError({                   type: "parse",                    code: "findPlace"                }); const textBeforeInsertion = properPlaceMatch[1], changedIndentationCharsMatch = textBeforeInsertion.match(/\n([:*#]{2,}).*\n$/), changedIndentationChars = changedIndentationCharsMatch && changedIndentationCharsMatch[1]; changedIndentationChars && (changedIndentationChars.length > targetInCode.indentationChars.length ? targetInCode.replyIndentationChars = changedIndentationChars.slice(0, targetInCode.replyIndentationChars.length).replace(/:$/, cd.config.defaultIndentationChar) : targetInCode.indentationChars = changedIndentationChars.slice(0, targetInCode.indentationChars.length).replace(/:$/, cd.config.defaultIndentationChar)); const adjustedTextBeforeInsertion = textBeforeInsertion.replace(//g, ""); if (/\n(=+).*?\1[ \t]*\n/.test(adjustedTextBeforeInsertion)) throw new CdError({                   type: "parse",                    code: "findPlace-unexpectedHeading"                }); currentIndex += textBeforeInsertion.length; }           "replyInSection" === this.mode && this.isInNumberedList && /\n#.*\n+$/.test(targetInCode.firstChunkCode) && (targetInCode.lastCommentFirstIndentationChar = "#"); const isDelete = this.deleteCheckbox && this.deleteCheckbox.isSelected; let commentCode, newPageCode, before; if (!isDelete) try { ({code: commentCode} = this.commentTextToCode("submit")); } catch (e) { return void (e instanceof CdError ? this.handleError(e.data) : this.handleError({ type: "javascript", logMessage: e               })); }           switch (this.mode) { case "reply": before = pageCode.slice(0, currentIndex), newPageCode = before + commentCode + pageCode.slice(currentIndex); break;

case "edit": if (isDelete) { let startIndex, endIndex; if (this.target.isOpeningSection && void 0 !== targetInCode.headingStartIndex) { this.target.section.locateInCode(pageCode); const targetInCode = this.target.section.inCode; if (extractSignatures(targetInCode.code).length > 1) throw new CdError({                           type: "parse",                            code: "delete-repliesInSection"                        }); ({startIndex: startIndex, contentEndIndex: endIndex} = targetInCode); } else { endIndex = targetInCode.endIndex + targetInCode.dirtySignature.length + 1; const succeedingText = pageCode.slice(targetInCode.endIndex); if (new RegExp("^.+\\n+[:*#]{".concat(targetInCode.indentationChars.length + 1, ",}")).exec(succeedingText)) throw new CdError({                           type: "parse",                            code: "delete-repliesToComment"                        }); startIndex = targetInCode.lineStartIndex; }                   newPageCode = pageCode.slice(0, startIndex) + pageCode.slice(endIndex); } else { const startIndex = this.target.isOpeningSection && void 0 !== targetInCode.headingStartIndex ? targetInCode.headingStartIndex : targetInCode.startIndex; before = pageCode.slice(0, startIndex), newPageCode = before + commentCode + pageCode.slice(targetInCode.endIndex + targetInCode.dirtySignature.length); }               break;

case "replyInSection": before = pageCode.slice(0, targetInCode.firstChunkContentEndIndex), newPageCode = before + commentCode + pageCode.slice(targetInCode.firstChunkContentEndIndex); break;

case "addSection": if (this.newTopicOnTop) { const firstSectionIndex = hideHtmlComments(pageCode).search(/^(=+).*?\1/m); before = pageCode.slice(0, firstSectionIndex), newPageCode = before + commentCode + "\n" + pageCode.slice(firstSectionIndex); } else before = (pageCode + "\n").trimStart, newPageCode = before + commentCode; break;

case "addSubsection": before = pageCode.slice(0, targetInCode.contentEndIndex).replace(/([^\n])\n$/, "$1\n\n"), newPageCode = before + commentCode + pageCode.slice(targetInCode.contentEndIndex); }           return "submit" !== action || isDelete || extractSignatures(before, !0), newPageCode; }       registerOperation(operation) { this.operations.push(operation), operation.closed = !1, "preview" === operation.type && cd.settings.autopreview || (this.$messageArea.empty,            this.pushPending("submit" === operation.type)); }       closeOperationIfNecessary(operation, condition) { if (operation.closed) return !0; const otherOperationIndex = function(arr, callback) { for (let i = arr.length - 1; i >= 0; i--) if (callback(arr[i])) return i;               return null; }(this.operations, op => operation !== op && [ "preview", "viewChanges" ].includes(op.type) && !op.delayed); return !!(null !== otherOperationIndex && otherOperationIndex > this.operations.indexOf(operation) || condition) && (this.closeOperation(operation),            !0); }       closeOperation(operation) { operation.closed = !0, "preview" === operation.type && cd.settings.autopreview || this.popPending("submit" === operation.type); }       unregisterOperation(operation) { this.operations.includes(operation) && this.operations.splice(this.operations.indexOf(operation), 1); }       isBeingSubmitted { return this.operations.some(op => "submit" === op.type && !op.closed); }       preview(maySummaryHaveChanged = !0, auto = !0, operation) { var _this3 = this; return asyncToGenerator_default((function* { if (!1 === _this3.textLoaded || _this3.target && !_this3.target.inCode && _this3.checkCodeRequest && "resolved" === _this3.checkCodeRequest.state || _this3.isBeingSubmitted || auto && !cd.settings.autopreview) return void (operation && _this3.closeOperation(operation)); let currentOperation; if (operation ? currentOperation = operation : (currentOperation = { type: "preview" }, _this3.registerOperation(currentOperation)), auto) { const isTooEarly = Date.now - classPrivateFieldGet_default(_this3, _lastPreviewTimestamp) < 1e3; if (isTooEarly || _this3.operations.some(op => !op.closed && "preview" === op.type && op !== currentOperation)) return void (classPrivateFieldGet_default(_this3, _previewTimeout) ? _this3.unregisterOperation(currentOperation) : (currentOperation.delayed = !0, classPrivateFieldSet_default(_this3, _previewTimeout, setTimeout( => { classPrivateFieldSet_default(_this3, _previewTimeout, null), _this3.preview(maySummaryHaveChanged, !0, currentOperation); }, isTooEarly ? 1e3 - (Date.now - classPrivateFieldGet_default(_this3, _lastPreviewTimestamp)) : 100)))); classPrivateFieldSet_default(_this3, _lastPreviewTimestamp, Date.now); }               if (_this3.closeOperationIfNecessary(currentOperation)) return; if (_this3.target && !_this3.target.inCode && (yield _this3.checkCode, _this3.closeOperationIfNecessary(currentOperation, !_this3.target.inCode))) return; const emptyPreview = !(_this3.commentInput.getValue.trim || _this3.headlineInput && _this3.headlineInput.getValue.trim); if (emptyPreview && !maySummaryHaveChanged) return void _this3.closeOperation(currentOperation); const {code: commentCode, imitateList: imitateList} = _this3.commentTextToCode("preview"); let html, parsedSummary; try { ({html: html, parsedSummary: parsedSummary} = yield parseCode(commentCode, { title: _this3.targetPage, summary: cd.util.buildEditSummary({                           text: _this3.summaryInput.getValue                        }) }));               } catch (e) { return void (e instanceof CdError ? _this3.handleError(Object.assign({}, e.data, {                       message: cd.s("cf-error-preview"),                        currentOperation: currentOperation                    })) : _this3.handleError({ type: "javascript", logMessage: e,                       currentOperation: currentOperation }));               }                if (!_this3.closeOperationIfNecessary(currentOperation)) { if (html) { if (auto && emptyPreview || _this3.deleteCheckbox && _this3.deleteCheckbox.isSelected) _this3.$previewArea.empty; else { const $label = $(" ").addClass("cd-commentForm-blockLabel").text(cd.s("cf-block-preview")); _this3.$previewArea.html(html).prepend($label).cdAddCloseButton, imitateList ? _this3.$previewArea.addClass("cd-previewArea-indentedComment") : _this3.$previewArea.removeClass("cd-previewArea-indentedComment"); }                       const $parsedsummary = parsedSummary && cd.util.wrapInElement(parsedSummary); $parsedsummary.length && _this3.$element.find(".cd-summaryPreview").html("".concat(cd.s("cf-summary-preview"), ': ').concat($parsedsummary.html, " ")), auto || mw.hook("wikipage.content").fire(_this3.$previewArea); }                   _this3.$previewArea.hasClass("cd-previewArea-above") && _this3.$previewArea.cdScrollIntoView("top"), _this3.closeOperation(currentOperation); }           }));        }        viewChanges { var _this4 = this; return asyncToGenerator_default((function* { if (_this4.isBeingSubmitted) return; const currentOperation = { type: "viewChanges" };               _this4.registerOperation(currentOperation); const {page: page, newPageCode: newPageCode} = (yield _this4.tryPrepareNewPageCode("viewChanges")) || {}; if (_this4.closeOperationIfNecessary(currentOperation, void 0 === newPageCode)) return; let resp; mw.loader.load("mediawiki.diff.styles"); try { const options = { action: "compare", toslots: "main", "totext-main": newPageCode, prop: "diff", formatversion: 2 };                   mw.config.get("wgArticleId") ? options.fromrev = page.revisionId : (options.fromslots = "main",                    options["fromtext-main"] = ""), resp = yield cd.g.api.post(options).catch(handleApiReject); } catch (e) { return void (e instanceof CdError ? _this4.handleError(Object.assign({}, e.data, {                       message: cd.s("cf-error-viewchanges"),                        currentOperation: currentOperation                    })) : _this4.handleError({ type: "javascript", logMessage: e,                       currentOperation: currentOperation }));               }                if (_this4.closeOperationIfNecessary(currentOperation)) return; let html = resp && resp.compare && resp.compare.body; if (html) { html = ' ";                   const $label = $(" ").addClass("cd-commentForm-blockLabel").text(cd.s("cf-block-viewchanges"));                    _this4.$previewArea.html(html).prepend($label).cdAddCloseButton;                } else _this4.$previewArea.empty, void 0 !== html && _this4.showMessage(cd.s("cf-message-nochanges"));                _this4.$previewArea.cdScrollIntoView(_this4.$previewArea.hasClass("cd-previewArea-above") ? "top" : "bottom"),                 _this4.closeOperation(currentOperation);            }));        }        reloadPage(keptData, currentOperation, confirmClose = !1) {            var _this5 = this;            return asyncToGenerator_default((function* {                if (!confirmClose || (yield _this5.confirmClose)) {                    _this5.forget(!1);                    try {                        yield reloadPage(keptData); } catch (e) { e instanceof CdError ? _this5.handleError(Object.assign({}, e.data, { message: cd.s("error-reloadpage"), retryFunc: => { _this5.reloadPage(keptData); },                           tearDown: !0, currentOperation: currentOperation })) : _this5.handleError({                           type: "javascript",                            logMessage: e,                            tearDown: !0,                            currentOperation: currentOperation                        }), removeLoadingOverlay; }               }            }));        }        runChecks({isDelete: isDelete}) { var _this6 = this; return asyncToGenerator_default((function* { const checks = [ { condition: _this6.headlineInput && "" === _this6.headlineInput.getValue, confirmation: (_confirmation = asyncToGenerator_default((function* {                       const headingPurpose = classPrivateFieldGet_default(_this6, _headlineInputPurpose) === cd.s("cf-headline-topic") ? cd.s("cf-headline-topic-lowercase") : cd.s("cf-headline-subsection-lowercase");                        return yield OO.ui.confirm(cd.s("cf-confirm-noheadline", headingPurpose));                    })), function {                        return _confirmation.apply(this, arguments);                    }) }, {                   condition: !(_this6.commentInput.getValue.trim || cd.config.noConfirmPostEmptyCommentPageRegexp && cd.config.noConfirmPostEmptyCommentPageRegexp.test(cd.g.CURRENT_PAGE)), confirmation: (_confirmation2 = asyncToGenerator_default((function* {                       return yield OO.ui.confirm(cd.s("cf-confirm-empty"));                    })), function {                        return _confirmation2.apply(this, arguments);                    }) }, {                   condition: _this6.commentInput.getValue.trim.length > cd.config.longCommentThreshold, confirmation: (_confirmation3 = asyncToGenerator_default((function* {                       return yield OO.ui.confirm(cd.s("cf-confirm-long", cd.config.longCommentThreshold));                    })), function {                        return _confirmation3.apply(this, arguments);                    }) }, {                   condition: /^==[^=]/m.test(_this6.commentInput.getValue) && "edit" !== _this6.mode, confirmation: (_confirmation4 = asyncToGenerator_default((function* {                       return yield OO.ui.confirm(cd.s("cf-confirm-secondlevelheading"));                    })), function {                        return _confirmation4.apply(this, arguments);                    }) }, {                   condition: isDelete, confirmation: (_confirmation5 = asyncToGenerator_default((function* {                       return yield confirmDestructive("cf-confirm-delete");                    })), function {                        return _confirmation5.apply(this, arguments);                    }) } ];               var _confirmation5, _confirmation4, _confirmation3, _confirmation2, _confirmation; for (const check of checks) if (check.condition && !(yield check.confirmation)) return _this6.commentInput.focus, !1;               return !0; }));       }        tryEditPage(page, newPageCode, currentOperation) { var _this7 = this; return asyncToGenerator_default((function* { let resp; try { resp = yield cd.g.api.postWithToken("csrf", {                       action: "edit",                        title: _this7.targetPage,                        text: newPageCode,                        summary: cd.util.buildEditSummary({ text: _this7.summaryInput.getValue }),                       tags: cd.config.tagName,                        baserevid: page.revisionId,                        starttimestamp: page.queryTimestamp,                        minor: _this7.minorCheckbox && _this7.minorCheckbox.isSelected,                        watchlist: _this7.watchCheckbox.isSelected ? "watch" : "unwatch",                        formatversion: 2                    }).catch(handleApiReject); } catch (e) { if (e instanceof CdError) { const {type: type, apiData: apiData} = e.data; if ("network" === type) _this7.handleError({                           type: type,                            message: cd.s("cf-error-couldntedit"),                            currentOperation: currentOperation                        }); else { const error = apiData && apiData.error; let message, messageType, logMessage, isRawMessage = !1; if (error) { switch (error.code) { case "spamblacklist": message = cd.s("cf-error-spamblacklist", error.spamblacklist.matches[0]); break;

case "titleblacklist": message = cd.s("cf-error-titleblacklist"); break;

case "abusefilter-warning": case "abusefilter-disallowed": yield cd.g.api.loadMessagesIfMissing([ error.code ]), ({html: message} = (yield parseCode(mw.message(error.code, error.abusefilter.description).plain)) || {}), message ? isRawMessage = !0 : message = cd.s("cf-error-abusefilter", error.abusefilter.description); break;

case "editconflict": message = cd.s("cf-error-editconflict"), messageType = "notice", _this7.submit; break;

case "blocked": message = cd.s("cf-error-blocked"); break;

case "missingtitle": message = cd.s("cf-error-pagedeleted"); break;

default: message = cd.s("cf-error-pagenotedited") + " " + (yield _this7.unknownApiErrorText(error.code, error.info)); }                               logMessage = [ error.code, apiData ]; } else logMessage = apiData; _this7.handleError({                               type: type,                                message: message,                                messageType: messageType,                                isRawMessage: isRawMessage,                                logMessage: logMessage,                                currentOperation: currentOperation                            }); }                   } else _this7.handleError({                        type: "javascript",                        logMessage: e,                        currentOperation: currentOperation                    }); return null; }               return resp; }));       }        submit { var _this8 = this; return asyncToGenerator_default((function* { const isDelete = _this8.deleteCheckbox && _this8.deleteCheckbox.isSelected; if (!(yield _this8.runChecks({                   isDelete: isDelete                }))) return; const currentOperation = { type: "submit" };               _this8.registerOperation(currentOperation); const {page: page, newPageCode: newPageCode} = (yield _this8.tryPrepareNewPageCode("submit")) || {}; if (void 0 === newPageCode) return void _this8.closeOperation(currentOperation); let watchSectionAfterGettingArticleId, keptData = {}; if (_this8.watchSectionCheckbox) if (_this8.watchSectionCheckbox.isSelected) { const isHeadlineAltered = classPrivateFieldGet_default(_this8, _editingSectionOpeningComment) && _this8.headlineInput.getValue !== _this8.originalHeadline; if ("addSection" === _this8.mode || "addSubsection" === _this8.mode || isHeadlineAltered) { const headline = removeWikiMarkup(_this8.headlineInput.getValue); if (mw.config.get("wgArticleId")) { if (Section_Section.watchSection(headline, !0), isHeadlineAltered) { const originalHeadline = removeWikiMarkup(_this8.originalHeadline); Section_Section.unwatchSection(originalHeadline, !0); }                       } else watchSectionAfterGettingArticleId = headline; keptData.justWatchedSection = headline; } else { const section = _this8.targetSection; section && !section.watched && (section.watch(!0), keptData.justWatchedSection = section.headline); }               } else { const section = _this8.targetSection; section && section.watched && (section.unwatch(!0), keptData.justUnwatchedSection = section.headline); }               const resp = yield _this8.tryEditPage(page, newPageCode, currentOperation); resp && (_this8.watchCheckbox.isSelected && $("#ca-watch").length && $("#ca-watch").attr("id", "cd-unwatch"),                !_this8.watchCheckbox.isSelected && $("#ca-unwatch").length && $("#ca-unwatch").attr("id", "cd-watch"),                 mw.config.get("wgArticleId") || (mw.config.set("wgArticleId", resp.edit.pageid), keptData.createdPage = !0, watchSectionAfterGettingArticleId && Section_Section.watchSection(watchSectionAfterGettingArticleId, !0)),                isDelete || (keptData.commentAnchor = "edit" === _this8.mode ? _this8.target.anchor : generateCommentAnchor(new Date(resp.edit.newtimestamp), cd.g.CURRENT_USER_NAME, !0)),                _this8.reloadPage(keptData, currentOperation)); }));       }        confirmClose { var _this9 = this; return asyncToGenerator_default((function* { return !_this9.isAltered || (yield confirmDestructive("cf-confirm-close")); }));       }        cancel(confirmClose = !0) { var _this10 = this; return asyncToGenerator_default((function* { if (!_this10.beingCancelled && !_this10.isBeingSubmitted) { if (_this10.beingCancelled = !0, confirmClose && !(yield _this10.confirmClose)) return _this10.commentInput.focus, void (_this10.beingCancelled = !1); _this10.destroy, _this10.beingCancelled = !1, "reply" === _this10.mode ? _this10.target.scrollIntoView("top") : "replyInSection" === _this10.mode ? (_this10.target.$replyButton.show,                    _this10.target.$replyWrapper.removeClass("cd-replyWrapper-hasCommentForm")) : "edit" === _this10.mode && (_this10.target.$elements.removeClass("cd-hidden"),                     _this10.target.scrollIntoView("top"), _this10.target.configureLayers); }           }));        }        destroy { this.operations.filter(op => !op.closed).forEach(this.closeOperation.bind(this)), this.forget, this.$element.remove, this.destroyed = !0; }       forget(removeCommentProperty = !0) { this.target && removeCommentProperty && delete this.target[CommentForm_CommentForm.modeToProperty(this.mode) + "Form"], cd.commentForms.includes(this) && cd.commentForms.splice(cd.commentForms.indexOf(this), 1), "addSection" === this.mode && (cd.g.addSectionForm = null), saveSession; }       isAltered { return void 0 !== this.originalComment && this.originalComment !== this.commentInput.getValue || this.autoSummary !== this.summaryInput.getValue || this.headlineInput && void 0 !== this.originalHeadline && this.originalHeadline !== this.headlineInput.getValue; }       formUserName(targetComment, {genitive: genitive = !1, returnUnknown: returnUnknown = !0, callback: callback = ( => {})} = {}) { let toUser; if (null === targetComment.author.gender && cd.g.GENDER_AFFECTS_USER_STRING) if (targetComment.author.registered) { if (classPrivateFieldSet_default(this, _genderRequestCallbackList, classPrivateFieldGet_default(this, _genderRequestCallbackList) || []),                callback && (!this.genderRequest || !classPrivateFieldGet_default(this, _genderRequestCallbackList).includes(callback))) { let errorCallback; this.genderRequest || (this.genderRequest = getUserGenders([ targetComment.author ]),                    errorCallback = e => {                        console.warn("Couldn't find out the gender of user ".concat(targetComment.author.name, "."), e);                    }), classPrivateFieldGet_default(this, _genderRequestCallbackList).includes(callback) || (this.genderRequest.then(callback, errorCallback),                     classPrivateFieldGet_default(this, _genderRequestCallbackList).push(callback)); }               returnUnknown && (toUser = genitive ? cd.s("user-unknown-genitive") : cd.s("user-unknown-dative")); } else toUser = genitive ? cd.s("user-unknown-genitive") : cd.s("user-unknown-dative"); else toUser = "male" === targetComment.author.gender ? genitive ? cd.s("user-male-genitive") : cd.s("user-male-dative") : "female" === targetComment.author.gender ? genitive ? cd.s("user-female-genitive") : cd.s("user-female-dative") : genitive ? cd.s("user-unknown-genitive") : cd.s("user-unknown-dative"); return void 0 === toUser ? "" : "".concat(toUser, " ").concat(targetComment.author.name).trim; }       updateAutoSummary(set = !0, dontAutopreview = !1) { if (this.summaryAltered) return; classPrivateFieldSet_default(this, _dontAutopreview, dontAutopreview); const text = this.autoText, section = this.headlineInput && "addSubsection" !== this.mode ? removeWikiMarkup(this.headlineInput.getValue) : classPrivateFieldGet_default(this, _sectionHeadline); let optionalText; if ([ "reply", "replyInSection" ].includes(this.mode)) { const commentText = this.commentInput.getValue.trim.replace(/\s+/g, " "); commentText && commentText.length <= cd.config.summaryCommentTextLengthLimit && (optionalText = ": ".concat(commentText, " (-)")); } else if ("addSubsection" === this.mode) { const subsection = removeWikiMarkup(this.headlineInput.getValue); subsection && (optionalText = ": /* ".concat(subsection, " */")); }           this.autoSummary = cd.util.buildEditSummary({                text: text,                section: section,                optionalText: optionalText,                addPostfix: !1            }), set && this.summaryInput.setValue(this.autoSummary); }       autoText { const callback = this.updateAutoSummary.bind(this); switch (this.mode) { case "reply": if (this.target.isOpeningSection) return cd.s("es-reply"); {                   const userName = this.formUserName(this.target, {                        callback: callback                    }); return this.target.own ? cd.s("es-addition") : cd.s("es-reply-to", userName).replace(/ +/g, " "); }

case "edit": {                   const editOrDeleteText = (action, topicGenitive, subsectionGenitive) => { let object; if (this.target.own) if (this.target.parent) if (0 === this.target.parent.level) object = cd.s("es-reply-genitive"); else { const userName = this.formUserName(this.target.parent, {                               callback: callback                            }); object = this.target.parent.own ? cd.s("es-addition") : cd.s("es-reply-by-genitive", userName); } else object = this.target.isOpeningSection ? this.target.section.level <= 2 ? cd.s("es-topic-genitive") : cd.s("es-subsection-genitive") : cd.s("es-comment-genitive"); else if (this.target.isOpeningSection) object = this.target.section.level <= 2 ? topicGenitive : subsectionGenitive; else { const userName = this.formUserName(this.target, {                               callback: callback,                                genitive: !0                            }); object = cd.s("es-comment-by-genitive", userName); }                       return cd.s("es-action-to", action, object); };                   return this.deleteCheckbox && this.deleteCheckbox.isSelected ? editOrDeleteText(cd.s("es-delete"), cd.s("es-topic-genitive"), cd.s("es-subsection-genitive")) : editOrDeleteText(cd.s("es-edit"), cd.s("es-topic-openingcomment-genitive"), cd.s("es-subsection-openingcomment-genitive")); }

case "replyInSection": return cd.s("es-reply");

case "addSection": {                   let newTopicSummary; if (this.$addSectionLink) { const summary = new mw.Uri(this.$addSectionLink.attr("href")).query.summary; newTopicSummary = summary && summary.replace(/^.+?\*\/ */, ""); }                   return newTopicSummary || cd.s("es-new-topic"); }

case "addSubsection": return cd.s("es-new-subsection"); }       }        updateFormOnDeleteCheckboxChange(selected) { selected ? (this.initialMinorCheckboxSelected = this.minorCheckbox.isSelected,            this.minorCheckbox.setSelected(!1), this.commentInput.setDisabled(!0), this.headlineInput && this.headlineInput.setDisabled(!0),             this.minorCheckbox.setDisabled(!0), this.smallCheckbox && this.smallCheckbox.setDisabled(!0),             this.noSignatureCheckbox && this.noSignatureCheckbox.setDisabled(!0), this.$element.addClass("cd-commentForm-disabled"),             classPrivateFieldSet_default(this, _standardSubmitButtonLabel, cd.s("cf-delete-button")),             classPrivateFieldSet_default(this, _shortSubmitButtonLabel, cd.s("cf-delete-button-short")),             this.submitButton.clearFlags.setFlags([ "destructive", "primary" ]).setLabel(this.$element.hasClass("cd-commentForm-short") ? classPrivateFieldGet_default(this, _standardSubmitButtonLabel) : classPrivateFieldGet_default(this, _shortSubmitButtonLabel))) : (this.minorCheckbox.setSelected(this.initialMinorCheckboxSelected),            this.commentInput.setDisabled(!1), this.headlineInput && this.headlineInput.setDisabled(!1),             this.minorCheckbox.setDisabled(!1), this.smallCheckbox && this.smallCheckbox.setDisabled(!1),             this.noSignatureCheckbox && this.noSignatureCheckbox.setDisabled(!1), this.$element.removeClass("cd-commentForm-disabled"),             classPrivateFieldSet_default(this, _standardSubmitButtonLabel, cd.s("cf-save")),             classPrivateFieldSet_default(this, _shortSubmitButtonLabel, cd.s("cf-save-short")),             this.submitButton.clearFlags.setFlags([ "progressive", "primary" ]).setLabel(this.$element.hasClass("cd-commentForm-short") ? classPrivateFieldGet_default(this, _standardSubmitButtonLabel) : classPrivateFieldGet_default(this, _shortSubmitButtonLabel))); }       quote(ignoreEmptySelection = !1) { const selectionText = isInputFocused ? document.activeElement.value.substring(document.activeElement.selectionStart, document.activeElement.selectionEnd) : window.getSelection.toString.trim; if (selectionText || !ignoreEmptySelection) { const isCommentInputFocused = this.commentInput.$input.is(":focus"), range = this.commentInput.getRange, cursorIndex = range.to, rangeStart = Math.min(range.to, range.from), rangeEnd = Math.max(range.to, range.from), value = this.commentInput.getValue, quotePre = cd.config.quoteFormatting[0], quotePost = cd.config.quoteFormatting[1], quotation = quotePre + (selectionText || cd.s("cf-quote-placeholder")) + quotePost, newRangeStart = (isCommentInputFocused ? rangeStart : cursorIndex) + (selectionText ? quotation.length : quotePre.length), newRangeEnd = selectionText ? newRangeStart : newRangeStart + cd.s("cf-quote-placeholder").length, newValue = isCommentInputFocused ? value.slice(0, rangeStart) + quotation + value.slice(rangeEnd) : value.slice(0, cursorIndex) + quotation + value.slice(cursorIndex); this.commentInput.setValue(newValue), this.commentInput.selectRange(newRangeStart, newRangeEnd); }       }        static modeToProperty(mode) { return "replyInSection" === mode ? "addReply" : mode; }       static getLastActiveCommentForm { return cd.commentForms.slice.sort(lastFocused)[0] || null; }       static getLastActiveAlteredCommentForm { return cd.commentForms.slice.sort(lastFocused).find(commentForm => commentForm.isAltered) || null; }   }    var _sectionHeadline = new WeakMap, _standardButtonsTotalWidth = new WeakMap, _standardSubmitButtonLabel = new WeakMap, _shortSubmitButtonLabel = new WeakMap, _lastPreviewTimestamp = new WeakMap, _previewTimeout = new WeakMap, _genderRequestCallbackList = new WeakMap, _dontAutopreview = new WeakMap, _editingSectionOpeningComment = new WeakMap, _headlineInputPurpose = new WeakMap; var CommentSkeleton_parser = new WeakMap, _cachedSection = new WeakMap; function calculateWordsOverlap(s1, s2) { const regexp = new RegExp("[".concat(cd.g.LETTER_PATTERN, "]{3,}"), "g"), words1 = removeDuplicates(s1.match(regexp)), words2 = removeDuplicates(s2.match(regexp)); if (!words1 || !words2) return 0; let total = words2.length, overlap = 0; return words1.forEach(word1 => {           words2.some(word2 => word2 === word1) ? overlap++ : total++;        }), overlap / total; }   class Comment_Comment extends class { constructor(parser, signature) { CommentSkeleton_parser.set(this, {               writable: !0,                value: void 0            }), _cachedSection.set(this, {                writable: !0,                value: void 0            }), classPrivateFieldSet_default(this, CommentSkeleton_parser, parser); let parts = classPrivateFieldGet_default(this, CommentSkeleton_parser).collectParts(signature.element); parts = classPrivateFieldGet_default(this, CommentSkeleton_parser).removeNestedParts(parts), parts = classPrivateFieldGet_default(this, CommentSkeleton_parser).encloseInlineParts(parts, signature.element), parts = classPrivateFieldGet_default(this, CommentSkeleton_parser).filterParts(parts), parts.reverse, parts = classPrivateFieldGet_default(this, CommentSkeleton_parser).replaceListsWithItems(parts, signature.element), this.id = cd.comments.length, this.date = signature.date || null, this.timestamp = signature.timestampText, this.authorName = signature.authorName, this.own = this.authorName === cd.g.CURRENT_USER_NAME, this.anchor = signature.anchor, this.unsigned = signature.unsigned, this.parts = parts, this.elements = this.parts.map(part => part.node); if (this.highlightables = this.elements.filter(el => !/^H[1-6]$/.test(el.tagName) && !cd.g.UNHIGHLIGHTABLE_ELEMENTS_CLASSES.some(name => el.classList.contains(name)) && !/float: *(?:left|right)/.test(el.getAttribute("style"))),            !this.highlightables.length) throw new CdError; if (this.addAttributes, this.setLevels, this.parts[0].isHeading ? (this.followsHeading = !0, 0 !== this.level && (this.parts.splice(0, 1), this.elements.splice(0, 1))) : this.followsHeading = !0,            this.parts[0].isHeading) { this.isOpeningSection = !0; const headingLevelMatch = this.parts[0].node.tagName.match(/^H([1-6])$/); this.openingSectionOfLevel = headingLevelMatch && Number(headingLevelMatch[1]); } else this.isOpeningSection = !1; }       addAttributes { this.anchor && !this.elements[0].getAttribute("id") && this.elements[0].setAttribute("id", this.anchor), this.elements[0].classList.add("cd-commentPart-first"), this.elements[this.elements.length - 1].classList.add("cd-commentPart-last"), this.elements.forEach(el => {               el.classList.add("cd-commentPart"), el.setAttribute("data-comment-id", String(this.id));            }); }       setLevels { const levelElements = {}; levelElements.top = classPrivateFieldGet_default(this, CommentSkeleton_parser).getLevelsUpTree(this.highlightables[0]), levelElements.bottom = this.highlightables.length > 1 ? classPrivateFieldGet_default(this, CommentSkeleton_parser).getLevelsUpTree(this.highlightables[this.highlightables.length - 1]) : levelElements.top, this.level = Math.min(levelElements.top.length, levelElements.bottom.length); for (let i = 0; i < this.level; i++) levelElements.top[i] && levelElements.top[i].classList.add("cd-commentLevel", "cd-commentLevel-".concat(i + 1)), levelElements.bottom[i] && levelElements.bottom[i] !== levelElements.top[i] && levelElements.bottom[i].classList.add("cd-commentLevel", "cd-commentLevel-".concat(i + 1)); }       getSection { return cd.sections.slice.reverse.find(section => section.comments.includes(this)) || null; }       get section { return void 0 === classPrivateFieldGet_default(this, _cachedSection) && classPrivateFieldSet_default(this, _cachedSection, this.getSection), classPrivateFieldGet_default(this, _cachedSection); }       get sourcePage { return this.section ? this.section.sourcePage : cd.g.CURRENT_PAGE; }   } {        constructor(parser, signature) { super(parser, signature), Comment_elementPrototypes.set(this, {               writable: !0,                value: void 0            }), _firstWidth.set(this, {                writable: !0,                value: void 0            }), _underlay.set(this, {                writable: !0,                value: void 0            }), _layersTop.set(this, {                writable: !0,                value: void 0            }), _layersLeft.set(this, {                writable: !0,                value: void 0            }), _layersWidth.set(this, {                writable: !0,                value: void 0            }), _layersHeight.set(this, {                writable: !0,                value: void 0            }), _overlay.set(this, {                writable: !0,                value: void 0            }), _overlayInnerWrapper.set(this, {                writable: !0,                value: void 0 }), _overlayContent.set(this, { writable: !0, value: void 0 }), _overlayGradient.set(this, { writable: !0, value: void 0 }), _unhighlightTimeout.set(this, { writable: !0, value: void 0 }), Comment_cached$elements.set(this, { writable: !0, value: void 0 }), _cachedCommentText.set(this, { writable: !0, value: void 0 }), _cachedParent.set(this, { writable: !0, value: void 0 }), _cachedUnderlayContainer.set(this, { writable: !0, value: void 0 }), classPrivateFieldSet_default(this, Comment_elementPrototypes, cd.g.COMMENT_ELEMENT_PROTOTYPES),            this.author = userRegistry.getUser(this.authorName), delete this.authorName, this.signatureElement = signature.element,             this.timestampElement = signature.timestampElement;            const frozen = !cd.g.isPageActive || cd.g.specialElements.closedDiscussions.some(el => el.contains(this.elements[0]));            this.actionable = !frozen, this.highlightables.forEach(el => { this.bindEvents(el); });       }        bindEvents(el) {            el.onmouseenter = this.highlightFocused.bind(this), el.onmouseleave = this.unhighlightFocused.bind(this),             el.ontouchstart = this.highlightFocused.bind(this);        }        getPositions(config = {}) {            if (void 0 === config.considerFloating && (config.considerFloating = !1), this.positions = null, this.editForm) return;           let rectTop = config.rectTop || this.highlightables[0].getBoundingClientRect, rectBottom = config.rectBottom || (1 === this.elements.length ? rectTop : this.highlightables[this.highlightables.length - 1].getBoundingClientRect);           if (0 === rectTop.left) return;            const top = window.pageYOffset + rectTop.top, bottom = window.pageYOffset + rectBottom.bottom;            if (config.considerFloating) {                const intersectsFloating = (config.floatingRects || cd.g.specialElements.floating.map(el => {                    const nativeRect = el.getBoundingClientRect;                    return {                        top: nativeRect.top - Number(el.getAttribute("data-margin-top")),                        bottom: nativeRect.bottom + Number(el.getAttribute("data-margin-bottom"))                    };                })).some(rect => { const floatingTop = window.pageYOffset + rect.top, floatingBottom = window.pageYOffset + rect.bottom; return bottom > floatingTop && bottom < floatingBottom + cd.g.REGULAR_LINE_HEIGHT; }), initialOverflows = [];               if (intersectsFloating) for (let i = 0; i < this.elements.length; i++) initialOverflows[i] = this.elements[i].style.overflow,                 this.elements[i].style.overflow = "hidden";                if (rectTop = this.highlightables[0].getBoundingClientRect, rectBottom = 1 === this.elements.length ? rectTop : this.highlightables[this.highlightables.length - 1].getBoundingClientRect, intersectsFloating) for (let i = 0; i < this.elements.length; i++) this.elements[i].style.overflow = initialOverflows[i];           }            const left = window.pageXOffset + Math.min(rectTop.left, rectBottom.left), right = window.pageXOffset + Math.max(rectTop.right, rectBottom.right), downplayedBottom = bottom - top > window.innerHeight - 200 ? top + (window.innerHeight - 200) : bottom;            this.positions = {                top: top,                bottom: bottom,                left: left,                right: right,                downplayedBottom: downplayedBottom            };        }        calculateLayersPositions(config = {}) {            if (this.getPositions(Object.assign({}, config, { considerFloating: !0 })), !this.positions) return null;           classPrivateFieldSet_default(this, _firstWidth, this.highlightables[0].offsetWidth);            const layersContainerOffset = this.getLayersContainerOffset;            return {                underlayTop: -layersContainerOffset.top + this.positions.top,                underlayLeft: -layersContainerOffset.left + this.positions.left - cd.g.COMMENT_UNDERLAY_SIDE_MARGIN,                underlayWidth: this.positions.right - this.positions.left + 2 * cd.g.COMMENT_UNDERLAY_SIDE_MARGIN,                underlayHeight: this.positions.bottom - this.positions.top            };        }        createLayers {            if (classPrivateFieldSet_default(this, _underlay, classPrivateFieldGet_default(this, Comment_elementPrototypes).underlay.cloneNode(!0)), this.newness && classPrivateFieldGet_default(this, _underlay).classList.add("cd-commentUnderlay-new"), cd.settings.highlightOwnComments && this.own && classPrivateFieldGet_default(this, _underlay).classList.add("cd-commentUnderlay-own"), classPrivateFieldGet_default(this, _underlay).cdTarget = this, commentLayers.underlays.push(classPrivateFieldGet_default(this, _underlay)), classPrivateFieldSet_default(this, _overlay, classPrivateFieldGet_default(this, Comment_elementPrototypes).overlay.cloneNode(!0)), classPrivateFieldSet_default(this, _overlayInnerWrapper, classPrivateFieldGet_default(this, _overlay).firstChild), classPrivateFieldGet_default(this, _overlayInnerWrapper).oncontextmenu = e => { e.preventDefault, classPrivateFieldGet_default(this, _overlay).style.display = "none"; }, classPrivateFieldSet_default(this, _overlayGradient, classPrivateFieldGet_default(this, _overlayInnerWrapper).firstChild), classPrivateFieldSet_default(this, _overlayContent, classPrivateFieldGet_default(this, _overlayInnerWrapper).lastChild), this.parent && (this.goToParentButton = classPrivateFieldGet_default(this, Comment_elementPrototypes).goToParentButton.cloneNode(!0),            this.goToParentButton.firstChild.onclick =  => {                this.goToParent;            }, classPrivateFieldGet_default(this, _overlayContent).appendChild(this.goToParentButton)), !this.anchor || cd.g.IS_ARCHIVE_PAGE && "diff" === cd.settings.defaultCommentLinkType || (this.linkButton = classPrivateFieldGet_default(this, Comment_elementPrototypes).linkButton.cloneNode(!0),            this.linkButton.firstChild.onclick = this.copyLink.bind(this), classPrivateFieldGet_default(this, _overlayContent).appendChild(this.linkButton)), this.author.registered && this.date && !this.own && !cd.g.IS_ARCHIVE_PAGE && (this.thankButton = classPrivateFieldGet_default(this, Comment_elementPrototypes).thankButton.cloneNode(!0),            this.thankButton.firstChild.onclick =  => {                this.thank;            }, classPrivateFieldGet_default(this, _overlayContent).appendChild(this.thankButton)), this.actionable) (this.own || cd.settings.allowEditOthersComments) && (this.editButton = classPrivateFieldGet_default(this, Comment_elementPrototypes).editButton.cloneNode(!0), this.editButton.firstChild.onclick = => { this.edit; }, classPrivateFieldGet_default(this, _overlayContent).appendChild(this.editButton)),            this.replyButton = classPrivateFieldGet_default(this, Comment_elementPrototypes).replyButton.cloneNode(!0),             this.replyButton.firstChild.onclick =  => {                this.replyForm ? this.replyForm.cancel : this.reply;            }, classPrivateFieldGet_default(this, _overlayContent).appendChild(this.replyButton); else {                const treeWalker = new treeWalker_ElementsTreeWalker(this.elements[this.elements.length - 1]);                for (treeWalker.parentNode; ) {                    const backgroundColor = window.getComputedStyle(treeWalker.currentNode).backgroundColor;                    if (backgroundColor.includes("rgb(")) { this.backgroundColor = backgroundColor; break; }               }            }            this.$underlay = $(classPrivateFieldGet_default(this, _underlay)), this.$overlay = $(classPrivateFieldGet_default(this, _overlay)), this.$overlayContent = $(classPrivateFieldGet_default(this, _overlayContent)), this.$overlayGradient = $(classPrivateFieldGet_default(this, _overlayGradient)); }       configureLayers(doSet = !0, floatingRects) { if (this.editForm) return null; const config = { doSet: doSet, floatingRects: floatingRects };           config.rectTop = this.highlightables[0].getBoundingClientRect, config.rectBottom = 1 === this.elements.length ? config.rectTop : this.highlightables[this.highlightables.length - 1].getBoundingClientRect; const layersContainerOffset = this.getLayersContainerOffset, isMoved = classPrivateFieldGet_default(this, _underlay) && (-layersContainerOffset.top + window.pageYOffset + config.rectTop.top !== classPrivateFieldGet_default(this, _layersTop) || config.rectBottom.bottom - config.rectTop.top !== classPrivateFieldGet_default(this, _layersHeight) || this.highlightables[0].offsetWidth !== classPrivateFieldGet_default(this, _firstWidth)); if (!classPrivateFieldGet_default(this, _underlay) || isMoved) { const positions = this.calculateLayersPositions(config); positions && (classPrivateFieldSet_default(this, _layersTop, positions.underlayTop),                classPrivateFieldSet_default(this, _layersLeft, positions.underlayLeft), classPrivateFieldSet_default(this, _layersWidth, positions.underlayWidth),                 classPrivateFieldSet_default(this, _layersHeight, positions.underlayHeight)); }           return void 0 === classPrivateFieldGet_default(this, _layersLeft) ? null : classPrivateFieldGet_default(this, _underlay) ? (this.newness && !classPrivateFieldGet_default(this, _underlay).classList.contains("cd-commentUnderlay-new") && classPrivateFieldGet_default(this, _underlay).classList.add("cd-commentUnderlay-new"),            isMoved && config.doSet && this.updateLayersPositions, isMoved) : (this.createLayers,             config.doSet && this.addLayers, !1); }       addLayers { classPrivateFieldGet_default(this, _underlay) && (this.updateLayersPositions,            this.getLayersContainer.appendChild(classPrivateFieldGet_default(this, _underlay)),             this.getLayersContainer.appendChild(classPrivateFieldGet_default(this, _overlay))); }       updateLayersPositions { classPrivateFieldGet_default(this, _underlay).style.top = classPrivateFieldGet_default(this, _overlay).style.top = classPrivateFieldGet_default(this, _layersTop) + "px", classPrivateFieldGet_default(this, _underlay).style.left = classPrivateFieldGet_default(this, _overlay).style.left = classPrivateFieldGet_default(this, _layersLeft) + "px", classPrivateFieldGet_default(this, _underlay).style.width = classPrivateFieldGet_default(this, _overlay).style.width = classPrivateFieldGet_default(this, _layersWidth) + "px", classPrivateFieldGet_default(this, _underlay).style.height = classPrivateFieldGet_default(this, _overlay).style.height = classPrivateFieldGet_default(this, _layersHeight) + "px"; }       highlightFocused { cd.util.isPageOverlayOn || !this.configureLayers && classPrivateFieldGet_default(this, _underlay) && (classPrivateFieldGet_default(this, _underlay).classList.add("cd-commentUnderlay-focused"),            classPrivateFieldGet_default(this, _overlay).classList.add("cd-commentOverlay-focused")); }       unhighlightFocused { classPrivateFieldGet_default(this, _underlay) && (classPrivateFieldGet_default(this, _underlay).classList.remove("cd-commentUnderlay-focused"),            classPrivateFieldGet_default(this, _overlay).classList.remove("cd-commentOverlay-focused"),             classPrivateFieldGet_default(this, _overlay).style.display = ""); }       highlightTarget { if (this.configureLayers, !this.$underlay) return; const $elementsToAnimate = this.$underlay.add(this.$overlayContent).add(this.$overlayGradient).css("background-image", "none").css("background-color", ""); let initialColor = window.getComputedStyle(this.$underlay.get(0)).backgroundColor; "rgba(0, 0, 0, 0)" === initialColor && this.backgroundColor && (initialColor = this.backgroundColor), this.$underlay.addClass("cd-commentUnderlay-target"); const targetColor = window.getComputedStyle(this.$underlay.get(0)).backgroundColor; this.$underlay.removeClass("cd-commentUnderlay-target"), $elementsToAnimate.stop.css("background-color", targetColor), clearTimeout(classPrivateFieldGet_default(this, _unhighlightTimeout)), classPrivateFieldSet_default(this, _unhighlightTimeout, setTimeout( => { this.newness && (initialColor = cd.g.COMMENT_UNDERLAY_NEW_COLOR), $elementsToAnimate.animate({                   backgroundColor: initialColor                }, 400, "swing", (function { $(this).css("background-image", "").css("background-color", ""); }));           }, 1500));        }        scrollIntoView(alignment) { (this.editForm ? this.editForm.$element : this.$elements).cdScrollIntoView(alignment); }       scrollToAndHighlightTarget(smooth = !0) { (this.editForm ? this.editForm.$element : this.$elements).cdScrollTo(this.isOpeningSection || this.editForm ? "top" : "center", smooth), this.highlightTarget; }       replaceButton(button, replacement, buttonName) { classPrivateFieldGet_default(this, _overlayContent).insertBefore(replacement, button), button.parentNode.removeChild(button), this[buttonName + "Button"] = replacement; }       goToParent { if (!this.parent) return void console.error("This comment has no parent."); this.parent.scrollToAndHighlightTarget("center"); const goToChildButton = new OO.ui.ButtonWidget({               label: cd.s("cm-gotochild"),                title: cd.s("cm-gotochild-tooltip"),                framed: !1,                classes: [ "cd-button", "cd-commentButton" ]            }); goToChildButton.on("click", => {                this.parent.goToChild;            }), this.parent.$underlay || this.parent.configureLayers, this.parent.goToChildButton && this.parent.goToChildButton.$element.remove, this.parent.$overlayContent.prepend(goToChildButton.$element), this.parent.goToChildButton = goToChildButton, this.parent.childToScrollBackTo = this; }       goToChild { this.childToScrollBackTo ? this.childToScrollBackTo.scrollToAndHighlightTarget("center") : console.error("This comment has no child from which the user has navigated earlier."); }       copyLink(e) { const linkButton = this.linkButton; this.replaceButton(this.linkButton, classPrivateFieldGet_default(this, Comment_elementPrototypes).pendingLinkButton.cloneNode(!0), "link"), copyLink(this, e.shiftKey, => {                this.replaceButton(this.linkButton, linkButton, "link");            }); }       findAddingEdit(singleTimestamp = !1) { var _this = this; return asyncToGenerator_default((function* { if (singleTimestamp && _this.addingEditOneTimestamp) return _this.addingEditOneTimestamp; if (!singleTimestamp && _this.addingEdit) return _this.addingEdit; const rvstart = new Date(_this.date.getTime - 2 * cd.g.MILLISECONDS_IN_A_MINUTE).toISOString, rvend = new Date(_this.date.getTime + 2 * cd.g.MILLISECONDS_IN_A_MINUTE).toISOString, revisionsRequest = cd.g.api.get({                   action: "query",                    titles: _this.sourcePage,                    prop: "revisions",                    rvprop: [ "ids", "flags", "comment", "timestamp" ],                    rvdir: "newer",                    rvstart: rvstart,                    rvend: rvend,                    rvuser: _this.author.name,                    rvlimit: 500,                    redirects: !0,                    formatversion: 2                }).catch(handleApiReject); let [revisionsResp] = yield Promise.all([ revisionsRequest, _this.author.registered ? getUserGenders([ _this.author ]) : void 0 ].filter(defined)); const revisions = revisionsResp && revisionsResp.query && revisionsResp.query.pages && revisionsResp.query.pages[0] && revisionsResp.query.pages[0].revisions; if (!revisions) throw new CdError({                   type: "api",                    code: "noData"                }); const compareRequests = revisions.map(revision => cd.g.api.get({ action: "compare", fromtitle: _this.sourcePage, fromrev: revision.revid, torelative: "prev", prop: "diff|diffsize", formatversion: 2 }).catch(handleApiReject)), compareData = yield Promise.all(compareRequests), regexp = /&#160;<\/td>\s*<td class="diff-marker">\+<\/td>\s*<td class="diff-addedline"> (?!=)(.+?)<\/div><\/td>\s*<\/tr>/g, thisTextAndSignature = _this.getText(!1) + " ".concat(_this.signatureElement.innerText); let bestMatch; if (compareData.map((data, i) => { const body = data && data.compare && data.compare.body; if (!body) return null; let match, text = "", bestDiffPartOverlap = 0; for (match = regexp.exec(body); ) { const diffPartText = removeWikiMarkup(decodeHtmlEntities(match[1])), diffPartOverlap = calculateWordsOverlap(diffPartText, thisTextAndSignature); diffPartOverlap > .66 && (!bestDiffPartOverlap || diffPartOverlap > bestDiffPartOverlap) && (bestDiffPartOverlap = diffPartOverlap), text += diffPartText + "\n"; }                   if (text = text.trim, !text) return null; const timestamp = new Date(revisions[i].timestamp).getTime, thisCommentTimestamp = _this.date.getTime + 3e4, overlap = calculateWordsOverlap(text, thisTextAndSignature), timezoneMatch = text.match(cd.g.TIMEZONE_REGEXP); return { revision: revisions[i], overlap: Math.max(bestDiffPartOverlap, overlap), dateProximity: Math.abs(thisCommentTimestamp - timestamp), minor: revisions[i].minor, moreThanOneTimestamp: text.includes("\n") && timezoneMatch && timezoneMatch.length > 1 };               }).filter(notNull).forEach(match => { match.overlap < .66 || ((!bestMatch || match.overlap > bestMatch.overlap) && (bestMatch = match),                    bestMatch && match.overlap === bestMatch.overlap && (match.dateProximity > bestMatch.dateProximity && (bestMatch = match), match.dateProximity === bestMatch.dateProximity && !match.minor && bestMatch.minor && (bestMatch = match))); }), singleTimestamp && bestMatch && bestMatch.moreThanOneTimestamp) throw new CdError({                   type: "parse",                    code: "moreThanOneTimestamp",                    data: {                        edit: bestMatch.revision                    }                }); if (!bestMatch) throw new CdError({                   type: "parse"                }); const result = bestMatch.revision; return singleTimestamp ? _this.addingEditOneTimestamp = result : _this.addingEdit = result, result; }));       }        getDiffLink { var _this2 = this; return asyncToGenerator_default((function* { const edit = yield _this2.findAddingEdit, urlEnding = decodeURI(mw.util.getUrl(cd.g.CURRENT_PAGE, { diff: edit.revid }));               return "https:".concat(mw.config.get("wgServer")).concat(urlEnding); }));       }        thank { var _this3 = this; return asyncToGenerator_default((function* { const thankButton = _this3.thankButton; _this3.replaceButton(_this3.thankButton, classPrivateFieldGet_default(_this3, Comment_elementPrototypes).pendingThankButton.cloneNode(!0), "thank"); const thankFail = e => { const {type: type, code: code, data: data} = e.data; let text; switch (type) { case "parse": if ("moreThanOneTimestamp" === code) { const url = mw.util.getUrl(_this3.sourcePage, {                               diff: data.edit.revid                            }); return text = cd.util.wrapInElement(cd.s("thank-error-multipletimestamps", url)), void OO.ui.alert(text); }                       {                            const url = mw.util.getUrl(_this3.sourcePage, {                                action: "history"                            }); text = cd.s("thank-error-diffnotfound", url); }                       break;

case "api": default: if ("noData" === code) { const url = mw.util.getUrl(_this3.sourcePage, {                               action: "history"                            }); text = cd.s("thank-error-diffnotfound", url); } else text = cd.s("thank-error"), console.warn(e); break;

case "network": text = cd.s("thank-error-network"); }                   mw.notify(cd.util.wrapInElement(text), {                        type: "error"                    }), _this3.replaceButton(_this3.thankButton, thankButton, "thank"); };               let edit; try { edit = yield _this3.findAddingEdit(!0); } catch (e) { return void thankFail(e); }               const url = mw.util.getUrl(_this3.sourcePage, {                    diff: edit.revid                }), text = cd.util.wrapInElement(cd.s("thank-confirm", _this3.author.name, _this3.author, url)); if (yield OO.ui.confirm(text)) { try { yield cd.g.api.postWithEditToken({                           action: "thank",                            rev: edit.revid,                            source: cd.config.scriptCodeName                        }).catch(handleApiReject); } catch (e) { return void thankFail(e); }                   mw.notify(cd.s("thank-success")), _this3.replaceButton(_this3.thankButton, classPrivateFieldGet_default(_this3, Comment_elementPrototypes).disabledThankButton.cloneNode(!0), "thank"); } else _this3.replaceButton(_this3.thankButton, thankButton, "thank"); }));       }        locateInCode(pageCode) { this.inCode = null, cd.debug.startTimer("locate comment"); const matches = this.searchInCode(pageCode); let bestMatch; if (matches.forEach(match => { (match.overlap > .66 || 0 === this.id && match.previousCommentsMatched && match.headlineMatched) && (!bestMatch || match.overlap > bestMatch.overlap || !bestMatch.headlineMatched && match.headlineMatched || bestMatch.headlineMatched === match.headlineMatched && !bestMatch.previousCommentMatched && match.previousCommentMatched) && (bestMatch = match); }), bestMatch || (bestMatch = matches.find(match => 0 !== this.id && match.previousCommentsMatched)),            !bestMatch) throw new CdError({                type: "parse",                code: "couldntLocateComment"            }); this.inCode = this.adjustCommentCodeData({               lineStartIndex: bestMatch.lineStartIndex,                startIndex: bestMatch.commentStartIndex,                endIndex: bestMatch.signatureStartIndex,                code: bestMatch.commentCode,                dirtySignature: bestMatch.dirtySignature,                indentationChars: bestMatch.indentationChars,                headingStartIndex: bestMatch.headingStartIndex,                headingLevel: bestMatch.headingLevel,                headlineCode: bestMatch.headlineCode            }), cd.debug.stopTimer("locate comment"); }       reply(dataToRestore) { this.replyForm || (this.replyForm = dataToRestore instanceof CommentForm_CommentForm ? dataToRestore : new CommentForm_CommentForm({ mode: "reply", target: this, dataToRestore: dataToRestore }));       }        edit(dataToRestore) { this.editForm || (this.editForm = dataToRestore instanceof CommentForm_CommentForm ? dataToRestore : new CommentForm_CommentForm({ mode: "edit", target: this, dataToRestore: dataToRestore })), this.$elements.addClass("cd-hidden"), this.removeLayers; }       codeToText { if (!this.inCode) return void console.error("The Comment.prototype.inCode property should contain an object with the comment code data."); let hidden, {code: code, indentationChars: indentationChars} = this.inCode; if (void 0 === code || void 0 === indentationChars) return void console.error('No "code" or "indentationChars" property is set for Comment.prototype.inCode.'); ({code: code, hidden: hidden} = hideSensitiveCode(code)); let text = code; if (0 === this.level && (text = text.replace(/^(.*[^}|>\n\x02\x04] *)\n(?![{|<:*# \n\x01\x03])/gm, (s, m1) => m1 + (/^[:*# ]/.test(m1) || /(?:\x02|<\w+(?: [\w ]+?=[^<>]+?| ?\/?)>|<\/\w+ ?>)$/.test(m1) ? "\n" : " "))),            text = text.replace(/^(?![:*# ]).*<br[ \n]*\/?>.*$/gim, s => s.replace(/<br[ \n]*\/?>\n? */gi,  => "\n")).replace(/\n([:*#]*[:*])([ \t]*)/g, (s, m1, m2) => "\n" + (m1.length >= indentationChars.length ? m1.slice(indentationChars.length) + (m1.length > indentationChars.length ? m2 : "") : m1 + m2)),            text = unhideSensitiveCode(text, hidden), cd.config.paragraphTemplates.length) { const pattern = cd.config.paragraphTemplates.map(caseInsensitiveFirstCharPattern).join("|"), regexp = new RegExp("^((?!:|\\*|#).*)\\{\\{(?:".concat(pattern, ")\\}\\}"), "gm"); text = text.replace(regexp, "$1\n\n"); }           return text.trim; }       getCode { var _this4 = this; return asyncToGenerator_default((function* { try { const page = yield getLastRevision(_this4.sourcePage); _this4.locateInCode(page.code); } catch (e) { throw e instanceof CdError ? new CdError(Object.assign({}, { message: cd.s("cf-error-getpagecode") }, e.data)) : e;               } return { commentText: _this4.codeToText, headline: _this4.inCode.headlineCode };           }));        }        registerSeen(registerAllInDirection, highlight = !1) { if ("unseen" === this.newness && (this.newness = "new", js_navPanel.decrementUnseenCommentCount, highlight && this.highlightTarget), registerAllInDirection && !js_navPanel.areAllCommentsSeen) { const nextComment = cd.comments[this.id + ("forward" === registerAllInDirection ? 1 : -1)]; nextComment && nextComment.isInViewport(!0) && nextComment.registerSeen(registerAllInDirection, highlight); }       }        isInViewport(updatePositions = !1, partially = !1) { const viewportTop = window.pageYOffset, viewportBottom = viewportTop + window.innerHeight; return !updatePositions && this.positions || this.getPositions, this.positions ? partially ? this.positions.downplayedBottom > viewportTop && this.positions.top < viewportBottom : this.positions.top >= viewportTop && this.positions.downplayedBottom <= viewportBottom : null; }       removeLayers { classPrivateFieldGet_default(this, _underlay) && (commentLayers.underlays.splice(commentLayers.underlays.indexOf(classPrivateFieldGet_default(this, _underlay)), 1),            classPrivateFieldGet_default(this, _underlay).parentElement.removeChild(classPrivateFieldGet_default(this, _underlay)),             classPrivateFieldSet_default(this, _underlay, null), this.$underlay = null, classPrivateFieldGet_default(this, _overlay).parentElement.removeChild(classPrivateFieldGet_default(this, _overlay)),             classPrivateFieldSet_default(this, _overlay, null), this.$overlay = null); }       get $elements { return void 0 === classPrivateFieldGet_default(this, Comment_cached$elements) && classPrivateFieldSet_default(this, Comment_cached$elements, $(this.elements)), classPrivateFieldGet_default(this, Comment_cached$elements); }       get text { return void 0 === classPrivateFieldGet_default(this, _cachedCommentText) && classPrivateFieldSet_default(this, _cachedCommentText, this.getText), classPrivateFieldGet_default(this, _cachedCommentText); }       get parent { return void 0 === classPrivateFieldGet_default(this, _cachedParent) && classPrivateFieldSet_default(this, _cachedParent, this.getParent), classPrivateFieldGet_default(this, _cachedParent); }       getParent { let level = this.level; if (cd.g.specialElements.pageHasOutdents) { const treeWalker = new treeWalker_ElementsTreeWalker(this.elements[0]); let found; for (!found && treeWalker.previousNode && !treeWalker.currentNode.classList.contains("cd-commentPart"); ) found = treeWalker.currentNode.classList.contains("outdent-template"); if (found && cd.comments[this.id - 1]) return cd.comments[this.id - 1]; }           return 0 === level ? null : cd.comments.slice(0, this.id).reverse.find(comment => comment.section === this.section && comment.level < level) || null; }       getText(doCleanUp = !0) { const $clone = this.$elements.not("h1, h2, h3, h4, h5, h6").clone.removeClass("cd-hidden"), $dummy = $(" ").append($clone), selector = [ ".cd-signature", cd.config.unsignedClass ? ".".concat(cd.config.unsignedClass) : void 0 ].filter(defined).join(", "); $dummy.find(selector).remove; let text = $dummy.cdGetText; return doCleanUp && (cd.config.signatureEndingRegexp && (text = text.replace(cd.config.signatureEndingRegexp, "")),            cd.config.signaturePrefixRegexp && (text = text.replace(cd.config.signaturePrefixRegexp, ""))), text; }       adjustCommentBeginning(commentCode, commentStartIndex) { let indentationChars = "", lineStartIndex = commentStartIndex; const headingMatch = commentCode.match(/(^[^]*(?:^|\n))(=+)(.*?)\2[ \t]*(?:[ \t]*)*\n/); let headingStartIndex, headingLevel, headlineCode; if (headingMatch && (headingStartIndex = commentStartIndex + headingMatch[1].length, headingLevel = headingMatch[2].length, headlineCode = headingMatch[3].trim, commentStartIndex += headingMatch[0].length, commentCode = commentCode.slice(headingMatch[0].length)), cd.config.signatureEndingRegexp) { const regexp = new RegExp(cd.config.signatureEndingRegexp.source, "m"), linesRegexp = /^.+$/gm; let line, indent; for (line = linesRegexp.exec(commentCode); ) if (regexp.test(removeWikiMarkup(line[0]))) { let testIndent = line.index + line[0].length; for ("\n" === commentCode[testIndent]; ) testIndent++; if (testIndent === commentCode.length) break; indent = testIndent; }               indent && (commentCode = commentCode.slice(indent), lineStartIndex += indent, commentStartIndex += indent); }           if (this.level > 0) { const replaceIndentationChars = (s, m1, m2) => (indentationChars = m2, lineStartIndex += m1.length,                commentStartIndex += s.length, ""), indentationCharsPattern = cd.config.customIndentationCharsPattern || "\\n*([:*#]*) *"; commentCode = commentCode.replace(new RegExp("^".concat(indentationCharsPattern)), replaceIndentationChars), "" === indentationChars && (commentCode = commentCode.replace(new RegExp("(^[^]*?(?:^|\n))".concat(indentationCharsPattern, "(?![^]*\\n[^:*#])")), replaceIndentationChars)); }           return cd.g.BAD_COMMENT_BEGINNINGS.forEach(pattern => {                "^" !== pattern.source[0] && console.debug('Regexps in cd.config.customBadCommentBeginnings should have "^" as the first character.');                const match = commentCode.match(pattern);                match && (commentStartIndex += match[0].length, commentCode = commentCode.slice(match[0].length));            }), { commentCode: commentCode, lineStartIndex: lineStartIndex, commentStartIndex: commentStartIndex, headingMatch: headingMatch, headingStartIndex: headingStartIndex, headingLevel: headingLevel, headlineCode: headlineCode, indentationChars: indentationChars };       }        adjustCommentCodeData(originalData) { const data = Object.assign({}, originalData), movePartToSignature = s => (data.dirtySignature = s + data.dirtySignature,            data.endIndex -= s.length, ""); this.own && cd.g.CURRENT_USER_SIGNATURE_PREFIX_REGEXP && (data.code = data.code.replace(cd.g.CURRENT_USER_SIGNATURE_PREFIX_REGEXP, movePartToSignature)); const tagRegexp = /(<(?:small|span|sup|sub)(?: [\w ]+?=[^<>]+?)?> *)+$/i; var code; data.code = (code = data.code, [ cd.config.signaturePrefixRegexp, tagRegexp, cd.config.signaturePrefixRegexp, tagRegexp, / .*$/, /<!-- *Template:Unsigned.*$/, cd.config.signaturePrefixRegexp ].forEach(regexp => { code = code.replace(regexp, movePartToSignature); }), code); const smallWrappers = [ { start: /^ /, end: /<\/small>[ \u00A0\t]*$/ } ];           if (cd.config.blockSmallTemplate && smallWrappers.push({ start: new RegExp("^(?:\\{\\{".concat(cd.config.blockSmallTemplate, "\\|1=)")), end: /\}\}[ \u00A0\t]*$/ }), data.signature = data.dirtySignature, data.inSmallFont = !1, smallWrappers.some(wrapper => { if (wrapper.start.test(data.code) && wrapper.end.test(data.signature)) return data.inSmallFont = !0, data.code = data.code.replace(wrapper.start, ""), data.signature = data.signature.replace(wrapper.end, ""), !0;           }), data.replyIndentationChars = data.indentationChars, !this.isOpeningSection) { const match = data.code.match(/\n([:*#]*[:*]).*$/); if (match && (data.replyIndentationChars = match[1], data.replyIndentationChars.length < data.indentationChars.length)) { const prefix = data.indentationChars.slice(data.replyIndentationChars.length) + " "; data.code = prefix + data.code, data.indentationChars = data.indentationChars.slice(0, data.replyIndentationChars.length), data.startIndex -= prefix.length; }           }            return data.replyIndentationChars += cd.config.defaultIndentationChar, data; }       searchInCode(pageCode) { const signatures = extractSignatures(pageCode), matches = signatures.filter(sig => sig.author === this.author && (this.timestamp === sig.timestamp || this.timestamp && this.timestamp.startsWith(sig.timestamp))); const previousComments = cd.comments.slice(Math.max(0, this.id - 2), this.id).reverse; return matches.forEach(match => {               if (match.commentCode = pageCode.slice(match.commentStartIndex, match.signatureStartIndex), previousComments.length) for (let i = 0; i < previousComments.length; i++) {                   const signature = signatures[match.id - 1 - i];                    if (match.previousCommentsMatched = signature && signature.timestamp === previousComments[i].timestamp && signature.author === previousComments[i].author, 0 === i && (match.previousCommentMatched = match.previousCommentsMatched), !match.previousCommentsMatched) break;               } else match.previousCommentsMatched = 0 === match.id, match.previousCommentMatched = 0 === match.id;                Object.assign(match, this.adjustCommentBeginning(match.commentCode, match.commentStartIndex)),                 match.headlineMatched = this.followsHeading ? match.headingMatch && this.section && this.section.headline && normalizeCode(removeWikiMarkup(match.headlineCode)) === normalizeCode(this.section.headline) : !match.headingMatch;                const commentCodeToCompare = removeWikiMarkup(match.commentCode);                match.overlap = calculateWordsOverlap(this.text, commentCodeToCompare);            }), matches; }       getLayersContainer { if (void 0 === classPrivateFieldGet_default(this, _cachedUnderlayContainer)) { let offsetParent; const treeWalker = new TreeWalker(document.body, null, !0, this.elements[0]); for (treeWalker.parentNode; ) { let style = treeWalker.currentNode.cdStyle; if (style || (style = window.getComputedStyle(treeWalker.currentNode), treeWalker.currentNode.cdStyle = style),                    [ "absolute", "relative" ].includes(style.position)) { offsetParent = treeWalker.currentNode; break; }                   if (style.backgroundColor.includes("rgb(")) {                        offsetParent = treeWalker.currentNode, offsetParent.classList.add("cd-commentLayersContainerParent");                        break;                    }                }                offsetParent || (offsetParent = document.body);                let container = offsetParent.firstElementChild;                container.classList.contains("cd-commentLayersContainer") || (container = document.createElement("div"), container.classList.add("cd-commentLayersContainer"), offsetParent.insertBefore(container, offsetParent.firstChild)),                classPrivateFieldSet_default(this, _cachedUnderlayContainer, container), commentLayers.layersContainers.includes(container) || commentLayers.layersContainers.push(container);            }            return classPrivateFieldGet_default(this, _cachedUnderlayContainer);        }        getLayersContainerOffset {            let offsetParent, el = this.getLayersContainer, top = 0, left = 0;            for (offsetParent = el.offsetParent; ) top += offsetParent.offsetTop, left += offsetParent.offsetLeft,             el = offsetParent;            return {                top: top,                left: left            };        }        static findInViewport(findClosestDirection) {            const viewportTop = window.pageYOffset, viewportBottom = viewportTop + window.innerHeight, isVisible = comment => (comment.getPositions, comment.positions), findVisible = (direction, startIndex = 0) => reorderArray(cd.comments, startIndex, "backward" === direction).find(isVisible) || null, firstVisibleComment = findVisible("forward"), lastVisibleComment = findVisible("backward", cd.comments.length - 1);           if (!firstVisibleComment) return null;            let foundComment, searchArea = {                top: firstVisibleComment,                bottom: lastVisibleComment            }, currentComment = searchArea.top;            const findClosest = (direction, searchArea, reverse = !1) => "forward" === direction ? findVisible(direction, reverse ? searchArea.top.id : searchArea.bottom.id) : "backward" === direction ? findVisible(direction, reverse ? searchArea.bottom.id : searchArea.top.id) : null;           for (let i = 0; i < cd.comments.length; i++) {                if (currentComment.isInViewport(!0)) {                    foundComment = currentComment;                    break;                }                if (currentComment.positions && currentComment === firstVisibleComment && viewportBottom < currentComment.positions.downplayedBottom || currentComment === lastVisibleComment && viewportTop > currentComment.positions.top) {                    foundComment = findClosest(findClosestDirection, searchArea, !0);                    break;                }                if (searchArea.top === searchArea.bottom) {                    foundComment = findClosest(findClosestDirection, searchArea);                    break;                }                if (currentComment.positions) if (currentComment === firstVisibleComment) currentComment = searchArea.bottom; else { if (searchArea[viewportTop > currentComment.positions.top ? "top" : "bottom"] = currentComment,                    searchArea.bottom.id - searchArea.top.id <= 1) { foundComment = findClosest(findClosestDirection, searchArea); break; }                   const higherTop = searchArea.top.positions.top, proportion = (viewportTop - higherTop) / (searchArea.bottom.positions.downplayedBottom - viewportBottom + (viewportTop - higherTop)); (proportion < 0 || proportion >= 1) && console.warn("The proportion shouldn't be more than 0 or less or equal to 1.", "proportion", proportion, "searchArea", searchArea), currentComment = cd.comments[Math.round((searchArea.bottom.id - searchArea.top.id - 1) * proportion + searchArea.top.id + .5)]; } else currentComment = cd.comments[searchArea.top.id + 1], searchArea.top = currentComment; }           return foundComment || null; }       static getCommentByAnchor(anchor) { return cd.comments && anchor && cd.comments.find(comment => comment.anchor === anchor) || null; }   }    var Comment_elementPrototypes = new WeakMap, _firstWidth = new WeakMap, _underlay = new WeakMap, _layersTop = new WeakMap, _layersLeft = new WeakMap, _layersWidth = new WeakMap, _layersHeight = new WeakMap, _overlay = new WeakMap, _overlayInnerWrapper = new WeakMap, _overlayContent = new WeakMap, _overlayGradient = new WeakMap, _unhighlightTimeout = new WeakMap, Comment_cached$elements = new WeakMap, _cachedCommentText = new WeakMap, _cachedParent = new WeakMap, _cachedUnderlayContainer = new WeakMap, worker = __webpack_require__(9), worker_default = __webpack_require__.n(worker); let colonMoved, goToCommentToYou, goToCommentWatchedSection, currentUserRegexp, $wrapperRegularPrototype, $wrapperInterestingPrototype, commentLinks_watchedSections, commentLinks_thisPageWatchedSections, switchInterestingButton, processDiffFirstRun = !0; function commentLinks_prepare(_x) { return js_commentLinks_prepare.apply(this, arguments); }   function js_commentLinks_prepare { return (js_commentLinks_prepare = asyncToGenerator_default((function*({messagesRequest: messagesRequest}) {           initTimestampParsingTools, cd.g.api = cd.g.api || new mw.Api;            const watchedSectionsRequest = getWatchedSections(!0).catch(e => { console.warn("Couldn't load the settings from the server.", e); });           let watchedSectionsResult;            messagesRequest = messagesRequest || loadMessages;            try {                [watchedSectionsResult] = yield Promise.all([ watchedSectionsRequest, messagesRequest ]);            } catch (e) {                throw [ "Couldn't load the messages required for the script.", e ];            }            ({watchedSections: commentLinks_watchedSections, thisPageWatchedSections: commentLinks_thisPageWatchedSections} = watchedSectionsResult || {}),             cd.g.nanoCss = Object(nano_css.create), cd.g.nanoCss.put(".cd-commentLink-innerWrapper", { "::before": { content: '"'.concat(mw.msg("parentheses-start"), '"') },               "::after": { content: '"'.concat(mw.msg("parentheses-end"), '"') }           }), cd.g.QQX_MODE = "qqx" === mw.util.getParamValue("uselang"), colonMoved = ":  ".concat(cd.s("es-moved")),             goToCommentToYou = "".concat(cd.s("lp-comment-tooltip"), " ").concat(mw.msg("parentheses", cd.s("lp-comment-toyou"))),             goToCommentWatchedSection = "".concat(cd.s("lp-comment-tooltip"), " ").concat(mw.msg("parentheses", cd.s("lp-comment-watchedsection")));            const $aRegularPrototype = $("").text(cd.s("lp-comment")).attr("title", cd.s("lp-comment-tooltip")), $spanRegularPrototype = $(" ").addClass("cd-commentLink-innerWrapper").append($aRegularPrototype);            $wrapperRegularPrototype = $(" ").addClass("cd-commentLink").append($spanRegularPrototype)[cd.g.IS_DIFF_PAGE ? "append" : "prepend"](document.createTextNode(" ")),             $wrapperInterestingPrototype = $wrapperRegularPrototype.clone.addClass("cd-commentLink-interesting"); const currentUserNamePattern = caseInsensitiveFirstCharPattern(cd.g.CURRENT_USER_NAME).replace(/ /g, "[ _]"); currentUserRegexp = new RegExp("(?:^|[^".concat(cd.g.LETTER_PATTERN, "])").concat(currentUserNamePattern, "(?![").concat(cd.g.LETTER_PATTERN, "])")); }))).apply(this, arguments);   }    function addWatchlistMenu {        mw.hook("wikipage.content").add( => { switchInterestingButton && switchInterestingButton.setFlags({               progressive: !1            }); });       const $menu = $(" ").addClass("cd-watchlistMenu"), $legend = $(" ").addClass("cd-watchlistMenu-legend").appendTo($menu);        $("").attr("href", mw.util.getUrl(cd.config.helpWikilink)).html(cd.s("script-name-short")).appendTo($legend),         switchInterestingButton = new OO.ui.ButtonWidget({ framed: !1, icon: "speechBubble", label: cd.s("wl-button-switchinteresting-tooltip"), invisibleLabel: !0, title: cd.s("wl-button-switchinteresting-tooltip"), classes: [ "cd-watchlistMenu-button", "cd-watchlistMenu-button-switchInteresting" ], disabled: !commentLinks_watchedSections }), switchInterestingButton.on("click", => { !function { const isEnhanced = !$(".mw-changeslist").find("ul.special").length, $collapsibles = cd.g.$content.find(".mw-changeslist .mw-collapsible:not(.mw-changeslist-legend)"), $lines = cd.g.$content.find(".mw-changeslist-line:not(.mw-collapsible)"); switchInterestingButton.hasFlag("progressive") ? (isEnhanced ? $lines.filter("table").show : $lines.not(":has(.cd-commentLink-interesting)").show,                $collapsibles.not(":has(.cd-commentLink-interesting)").find(".mw-rcfilters-ui-highlights-enhanced-toplevel").show,                 $collapsibles.not(".mw-collapsed").find(".mw-enhancedchanges-arrow").click) : ($collapsibles.not(".mw-collapsed").find(".mw-enhancedchanges-arrow").click,                 $collapsibles.has(".cd-commentLink-interesting").find(".mw-enhancedchanges-arrow").click,                 $collapsibles.not(":has(.cd-commentLink-interesting)").find(".mw-rcfilters-ui-highlights-enhanced-toplevel").hide,                 $lines.not(":has(.cd-commentLink-interesting)").hide), switchInterestingButton.setFlags({                    progressive: !switchInterestingButton.hasFlag("progressive")                }); };       }), switchInterestingButton.$element.appendTo($menu);        const editWatchedSectionsButton = new OO.ui.ButtonWidget({ framed: !1, icon: "listBullet", label: cd.s("wl-button-editwatchedsections-tooltip"), invisibleLabel: !0, title: cd.s("wl-button-editwatchedsections-tooltip"), classes: [ "cd-watchlistMenu-button", "cd-watchlistMenu-button-editWatchedSections" ] });       editWatchedSectionsButton.on("click", editWatchedSections), editWatchedSectionsButton.$element.appendTo($menu);        const scriptSettingsButton = new OO.ui.ButtonWidget({ framed: !1, icon: "settings", label: cd.s("wl-button-scriptsettings-tooltip"), invisibleLabel: !0, title: cd.s("wl-button-scriptsettings-tooltip"), classes: [ "cd-watchlistMenu-button", "cd-watchlistMenu-button-scriptSettings" ] });       scriptSettingsButton.on("click",  => { settingsDialog; }), scriptSettingsButton.$element.appendTo($menu), cd.g.$content.find(".mw-rcfilters-ui-changesLimitAndDateButtonWidget").prepend($menu),        cd.g.$content.find("#mw-watchlist-options .mw-changeslist-legend").after($menu);    }    function extractAuthor(line) {        const authorElement = line.querySelector(".mw-userlink");        if (!authorElement) return null;        let author = authorElement.textContent;        return "MediaWiki message delivery" === author ? null : (mw.util.isIPv6Address(author) && (author = author.toUpperCase), author);   }    function processWatchlist($content) {        "Watchlist" !== mw.config.get("wgCanonicalSpecialPageName") || cd.g.$content.find(".cd-watchlistMenu").length || (initSettings, mw.user.options.get("wlenhancedfilters-disable") ? addWatchlistMenu : mw.hook("structuredChangeFilters.ui.initialized").add( => {           addWatchlistMenu;        }), $(".mw-rcfilters-ui-filterWrapperWidget-showNewChanges a").on("click", asyncToGenerator_default((function* {            try {                ({watchedSections: commentLinks_watchedSections} = yield getWatchedSections);            } catch (e) {                console.warn("Couldn't load the settings from the server.", e);            }        })))), $content.get(0).querySelectorAll(".mw-changeslist-line:not(.mw-collapsible)").forEach(line => { const nsMatch = line.className.match(/mw-changeslist-ns(\d+)/), nsNumber = nsMatch && Number(nsMatch[1]); if (null === nsNumber) return; const linkElement = ("TR" === line.tagName ? line.parentElement : line).querySelector(".mw-changeslist-title"); if (!linkElement) return; if (!isProbablyTalkPage(linkElement.textContent, nsNumber)) return; if (line.querySelector(".minoredit")) return; const summaryElement = line.querySelector(".comment"), summary = summaryElement && summaryElement.textContent; if (summary && (isCommentEdit(summary) || isUndo(summary) || summary.includes(colonMoved))) return; const bytesAddedElement = line.querySelector(".mw-plusminus-pos"); if (!bytesAddedElement) return; if ("STRONG" !== bytesAddedElement.tagName) { const bytesAddedMatch = bytesAddedElement.textContent.match(/\d+/), bytesAdded = bytesAddedMatch && Number(bytesAddedMatch[0]); if (!bytesAdded || bytesAdded < cd.config.bytesToDeemComment) return; }           let timestamp = line.getAttribute("data-mw-ts"); if (timestamp = timestamp && timestamp.slice(0, 12), !timestamp) return; const author = extractAuthor(line); if (!author) return; const anchor = timestamp + "_" + spacesToUnderlines(author), link = linkElement.href; if (!link) return; let wrapper; if (summary && currentUserRegexp.test(" ".concat(summary, " "))) wrapper = $wrapperInterestingPrototype.get(0).cloneNode(!0), wrapper.lastChild.lastChild.title = goToCommentToYou; else { let watched = !1; if (summary) { const curLink = line.querySelector(".mw-changeslist-diff-cur") || line.querySelector(".mw-changeslist-history"), curIdMatch = curLink && curLink.href && curLink.href.match(/[&?]curid=(\d+)/), curId = curIdMatch && Number(curIdMatch[1]); if (curId) { const thisPageWatchedSections = commentLinks_watchedSections && commentLinks_watchedSections[curId] || []; if (thisPageWatchedSections.length) { for (let j = 0; j < thisPageWatchedSections.length; j++) if (summary.includes("\u2192\u200e" + thisPageWatchedSections[j])) { watched = !0; break; }                           watched && (wrapper = $wrapperInterestingPrototype.get(0).cloneNode(!0), wrapper.lastChild.lastChild.title = goToCommentWatchedSection); }                   }                }                watched || (wrapper = $wrapperRegularPrototype.get(0).cloneNode(!0)); }           wrapper.lastChild.lastChild.href = "".concat(link, "#").concat(anchor); const destination = line.querySelector(".mw-usertoollinks"); destination && destination.parentElement.insertBefore(wrapper, destination.nextSibling); });   }    function processContributions($content) {        const timezone = mw.user.options.get("timecorrection"), timezoneParts = timezone && timezone.split("|"), timezoneOffset = timezoneParts && Number(timezoneParts[1]);        if (null == timezoneOffset || isNaN(timezoneOffset)) return;        const list = $content.get(0).querySelector(".mw-contributions-list");        Array.from(list.children).forEach(line => { const linkElement = line.querySelector(".mw-contributions-title"); if (!linkElement) return; if (!isProbablyTalkPage(linkElement.textContent)) return; const link = linkElement.href; if (!link) return; if (line.querySelector(".minoredit")) return; const summaryElement = line.querySelector(".comment"), summary = summaryElement && summaryElement.textContent; if (summary && (isCommentEdit(summary) || isUndo(summary) || summary.includes(colonMoved))) return; const bytesAddedElement = line.querySelector(".mw-plusminus-pos"); if (!bytesAddedElement) return; if ("STRONG" !== bytesAddedElement.tagName) { const bytesAddedMatch = bytesAddedElement.textContent.match(/\d+/), bytesAdded = bytesAddedMatch && Number(bytesAddedMatch[0]); if (!bytesAdded || bytesAdded < cd.config.bytesToDeemComment) return; }           const dateElement = line.querySelector(".mw-changeslist-date"); if (!dateElement) return; const {date: date} = parseTimestamp(dateElement.textContent, timezoneOffset) || {}; if (!date) return; const anchor = generateCommentAnchor(date, mw.config.get("wgRelevantUserName")); let wrapper; summary && currentUserRegexp.test(" ".concat(summary, " ")) ? (wrapper = $wrapperInterestingPrototype.get(0).cloneNode(!0),            wrapper.lastChild.lastChild.title = goToCommentToYou) : wrapper = $wrapperRegularPrototype.get(0).cloneNode(!0), wrapper.lastChild.lastChild.href = "".concat(link, "#").concat(anchor), linkElement.nextSibling && (linkElement.nextSibling.textContent = linkElement.nextSibling.textContent.replace(/^\s/, "")), linkElement.parentElement.insertBefore(wrapper, linkElement.nextSibling); });   }    function processHistory($content) {        const timezone = mw.user.options.get("timecorrection"), timezoneParts = timezone && timezone.split("|"), timezoneOffset = timezoneParts && Number(timezoneParts[1]);        if (null == timezoneOffset || isNaN(timezoneOffset)) return;        const list = $content.get(0).querySelector("#pagehistory"), lines = Array.from(list.children), link = mw.util.getUrl(cd.g.CURRENT_PAGE);        lines.forEach(line => { if (line.querySelector(".minoredit")) return; const summaryElement = line.querySelector(".comment"), summary = summaryElement && summaryElement.textContent; if (summary && (isCommentEdit(summary) || isUndo(summary) || summary.includes(colonMoved))) return; const bytesAddedElement = line.querySelector(".mw-plusminus-pos"); if (!bytesAddedElement) return; if ("STRONG" !== bytesAddedElement.tagName) { const bytesAddedMatch = bytesAddedElement.textContent.match(/\d+/), bytesAdded = bytesAddedMatch && Number(bytesAddedMatch[0]); if (!bytesAdded || bytesAdded < cd.config.bytesToDeemComment) return; }           const dateElement = line.querySelector(".mw-changeslist-date"); if (!dateElement) return; const {date: date} = parseTimestamp(dateElement.textContent, timezoneOffset) || {}; if (!date) return; const author = extractAuthor(line); if (!author) return; const anchor = generateCommentAnchor(date, author); let wrapper; if (summary && currentUserRegexp.test(" ".concat(summary, " "))) wrapper = $wrapperInterestingPrototype.get(0).cloneNode(!0), wrapper.lastChild.lastChild.title = goToCommentToYou; else { let watched = !1; if (summary) { const thisPageWatchedSections = commentLinks_watchedSections && commentLinks_watchedSections[mw.config.get("wgArticleId")] || []; if (thisPageWatchedSections.length) { for (let j = 0; j < thisPageWatchedSections.length; j++) if (summary.includes("\u2192\u200e" + thisPageWatchedSections[j])) { watched = !0; break; }                       watched && (wrapper = $wrapperInterestingPrototype.get(0).cloneNode(!0), wrapper.lastChild.lastChild.title = goToCommentWatchedSection); }               }                watched || (wrapper = $wrapperRegularPrototype.get(0).cloneNode(!0)); }           wrapper.lastChild.lastChild.href = "".concat(link, "#").concat(anchor); const separators = line.querySelectorAll(".mw-changeslist-separator"), destination = separators && separators[separators.length - 1]; destination && destination.parentElement.insertBefore(wrapper, destination.nextSibling); });   }    function processDiff {        return _processDiff.apply(this, arguments);    }    function _processDiff {        return (_processDiff = asyncToGenerator_default((function* { if (!processDiffFirstRun) return; const timezone = mw.user.options.get("timecorrection"), timezoneParts = timezone && timezone.split("|"), timezoneOffset = timezoneParts && Number(timezoneParts[1]); null == timezoneOffset || isNaN(timezoneOffset) || ([ document.querySelector(".diff-otitle"), document.querySelector(".diff-ntitle") ].filter(notNull).forEach(area => { if (area.querySelector(".minoredit")) return; const summaryElement = area.querySelector(".comment"), summary = summaryElement && summaryElement.textContent; if (summary && (isCommentEdit(summary) || isUndo(summary) || summary.includes(colonMoved) || summary.includes("Archiving"))) return; const dateElement = area.querySelector("#mw-diff-otitle1 a, #mw-diff-ntitle1 a"); if (!dateElement) return; const {date: date} = parseTimestamp(dateElement.textContent, timezoneOffset) || {}; if (!date) return; const author = extractAuthor(area); if (!author) return; const anchor = generateCommentAnchor(date, author); let comment = Comment_Comment.getCommentByAnchor(anchor); if (!comment) { let commentAnchorToCheck; for (let gap = 1; !comment && gap <= 5; gap++) { commentAnchorToCheck = generateCommentAnchor(new Date(date.getTime - cd.g.MILLISECONDS_IN_A_MINUTE * gap), author), comment = Comment_Comment.getCommentByAnchor(commentAnchorToCheck); }               }                if (comment) { let wrapper; if (summary && currentUserRegexp.test(" ".concat(summary, " "))) wrapper = $wrapperInterestingPrototype.get(0).cloneNode(!0), wrapper.firstChild.lastChild.title = goToCommentToYou; else { let watched = !1; if (summary && commentLinks_thisPageWatchedSections.length) { for (let j = 0; j < commentLinks_thisPageWatchedSections.length; j++) if (summary.includes("\u2192\u200e" + commentLinks_thisPageWatchedSections[j])) { watched = !0; break; }                           watched && (wrapper = $wrapperInterestingPrototype.get(0).cloneNode(!0), wrapper.firstChild.lastChild.title = goToCommentWatchedSection); }                       watched || (wrapper = $wrapperRegularPrototype.get(0).cloneNode(!0)); }                   wrapper.firstChild.lastChild.href = "#".concat(anchor), wrapper.onclick = function(e) { e.preventDefault, comment.scrollToAndHighlightTarget(!1); };                   const destination = area.querySelector("#mw-diff-otitle3, #mw-diff-ntitle3"); if (!destination) return; destination.insertBefore(wrapper, destination.firstChild); }           }), mw.hook("convenientDiscussions.commentLinksCreated").fire(cd), processDiffFirstRun = !1); }))).apply(this, arguments);   }    function addCommentLinks(_x2) {        return _addCommentLinks.apply(this, arguments);    }    function _addCommentLinks {        return (_addCommentLinks = asyncToGenerator_default((function*($content) { $content.parent.length && ([ "Recentchanges", "Watchlist" ].includes(mw.config.get("wgCanonicalSpecialPageName")) ? processWatchlist($content) : "Contributions" === mw.config.get("wgCanonicalSpecialPageName") ? processContributions($content) : "history" === mw.config.get("wgAction") && isProbablyTalkPage(cd.g.CURRENT_PAGE, cd.g.CURRENT_NAMESPACE_NUMBER) && processHistory($content),            mw.hook("convenientDiscussions.commentLinksCreated").fire(cd)); }))).apply(this, arguments);   }    function _commentLinks {        return (_commentLinks = asyncToGenerator_default((function*({messagesRequest: messagesRequest}) { try { yield commentLinks_prepare({                   messagesRequest: messagesRequest                }); } catch (e) { return void console.warn(...e); }           cd.g.IS_DIFF_PAGE ? mw.hook("convenientDiscussions.pageReady").add(processDiff) : mw.hook("wikipage.content").add(addCommentLinks); }))).apply(this, arguments);   }    var debug = {        init {            this.timerTotal = {}, this.timerStartTimestamps = {}, this.timerRunCount = {}, this.timerAllRunsTotal = {},             this.initCounters, this.array = [], this.object = {};        },        initCounters {            this.counters = "undefined" == typeof Proxy ? {} : new Proxy({}, { get: (obj, prop) => prop in obj ? obj[prop] : 0 });       },        startTimer(label) {            this.timerStartTimestamps[label] = Date.now;        },        stopTimer(label) {            if (void 0 === this.timerStartTimestamps[label]) return;            void 0 === this.timerTotal[label] && (this.timerTotal[label] = 0);            const thisTime = Date.now - this.timerStartTimestamps[label];            this.timerTotal[label] += thisTime, delete this.timerStartTimestamps[label], void 0 === this.timerAllRunsTotal[label] && (this.timerAllRunsTotal[label] = 0, this.timerRunCount[label] = 0), this.timerAllRunsTotal[label] += thisTime, this.timerRunCount[label]++;       },        resetTimer(label) {            void 0 !== this.timerStartTimestamps[label] && this.stopTimer(label), delete this.timerTotal[label];        },        fullResetTimer(label) {            this.resetTimer(label), delete this.timerAllRunsTotal[label], delete this.timerRunCount[label];        },        logAndResetTimer(label) {            void 0 !== this.timerStartTimestamps[label] && this.stopTimer(label), void 0 !== this.timerTotal[label] && (console.debug("".concat(label, ": ").concat(this.timerTotal[label])), this.resetTimer(label));       },        logAndResetEverything(sort) {            const timerLabels = Object.keys(this.timerTotal);            sort && timerLabels.sort, timerLabels.forEach(label => { this.logAndResetTimer(label); });           const counterLabels = Object.keys(this.counters);            sort && counterLabels.sort, counterLabels.forEach(label => { console.debug("counter ".concat(label, ": ").concat(this.counters[label])); }), this.initCounters, this.array.length && (console.debug("array: ", this.array), this.array = []), Object.keys(this.object).length && (console.debug("object: ", this.object), this.object = {});       },        averageTimerTime(label) {            if (!this.timerAllRunsTotal[label]) return void console.error("No data for timer ".concat(label));            const average = this.timerAllRunsTotal[label] / this.timerRunCount[label];            console.debug("".concat(label, ": ").concat(average.toFixed(1), " average for ").concat(this.timerRunCount[label], " runs"));        },        incrementCounter(label) {            this.counters[label]++;        }    }, defaultConfig = {        messages: {},        contribsPage: null,        localTimezoneOffset: null,        customTalkNamespaces: mw.config.get("wgExtraSignatureNamespaces"),        pageWhiteListRegexp: null,        pageBlackListRegexp: null,        archivePathRegexp: null,        pagesWithoutArchivesRegexp: null,        idleFragments: [],        defaultIndentationChar: ":",        spaceAfterIndentationChar: !0, signaturePrefixRegexp: /(?:\s+>+)?(?:\xb7|-|\u2013|\u2014|~|\/|\u2192|\u21d2|\s|&mdash;|–|&rarr;|&middot;| |&#32;)*'*$/, signatureEndingRegexp: null, tagName: null, scriptCodeName: "convenient-discussions", optionsPrefix: "convenientDiscussions", helpWikilink: "meta:User:JWBTH/CD", unsignedTemplates: [], unsignedClass: "autosigned", pairQuoteTemplates: [], blockSmallTemplate: null, paragraphTemplates: [], pingTemplate: "ping", quoteFormatting: [ "> ", "\n" ], elementsToExcludeClasses: [], templatesToExclude: [], commentAntipatterns: [], customBadCommentBeginnings: [], keepInSectionEnding: [ /\n+(?:\s*)+$/ ], signatureScanLimit: 80, foreignElementsInHeadlinesClasses: [], customFloatingElementsSelectors: [], closedDiscussionsClasses: [], customUnhighlightableElementsClasses: [], customAddTopicLinkSelectors: [], defaultInsertButtons: [ [ "" ], [ "+" ], [ "" ], [ "+" ], [ "<+></>", "</>" ], [ ""+"", " " ], [ " ", " ', " " ], [ " + ", " " ] ],       logoDataUrl: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUQAAAAoCAYAAACGq4NTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAL0AAAC9ABdzF0jwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAA+hSURBVHic7Z17tFdFFcc/916RhyKpUYSaCSKEhs8UzEzFQtOrheYrM8oytcxaqJiP0pYVlavI1HybhkqW4fKRj7Q0zeyh+VZQQAmEEFBEeXNvf3zPrDNnn8fv/O793d8PuPNda9b9zZk9c/aZM7Nnz957zgVhGDAVeBto7+K0ELgWeB8BAQEB6xiGAW/S9YLQpleAzevwfAEBAQGlMZX6C0OXflCH5wsICAgojXpsk/PSP+rwfAEBAQGl0Az0beD9N2vgvXs38N7rO/oCxwNjgR4N5mVdwnbAicA+jWZkHcFI4CvAkEYzUg0qaXHPAJOB10rQtgNtwAPAFGBpBdoX6/B8DiOAi4HngHej+y8HpgGXEwZxWWwGTCd+h38FNmooRx3HAGBGQXoGjeVLgVagZ0FbewHLiPvl+13G9fqBbxP3xUrgk41lpzyKBNaVSIsEaVSPVqBvB4712h4MLCqgrYdA7AvcAKwtwfvdBO93JRxPut8+3lCOJKhagc8BO1dRb2uqM/HMRhpPU0Zbvza07wItVT/JhoPZJPvjj41lpzyKBsBAQ3tYBfosAfeLKulriQFola9m0P+pi3la35E1BkY0lCM42ePlZ1XUq1YgujSFtMnlEkMzn2zB2V3wHMn+uKWx7JRH0YsfYGgPr0D/XEb7dqBkCcQdvWsLkGa6ZSefqwfwSMY9FwM3AxOj+7zkla0AduvkfTd0NKPB3Y607h81lh0AfkvtBOJlwIQoXYiE35IMultICryBxEJgCZor3RkHoLnWjkwsgxvLTnkUCbjLiF96H7IFjE1Hem1vT7kt844ZZS/QOYfPaRlt3gq8x9A1AUcBjwMndOJ+3Q1b0/lFq1aYS+0E4sgMui2B2zJo7XhpQRO/TxU8bMjojWTAemM6aEIvtghPoW3n/sA2JdpsA+5HDpWDKBZqLwEfRgIxS7s8j47FKm4EvAps5V37O7AvsKYD7Q1CW8WPoOdZBPwbuAN4I4P+ZKAfsBppEvOAUcBnUR8uBu4E7o3om4BvARtH+YXI7ml57Q18MWobtPJO9cr7R/fYHQW9LwQeQ5N5uWmrFRiO3v99wNNo8B4LDAVWIYfJTdFzOGwEjPfyy4BfZvTB5sgLvQcSKIvRovN74B1DOwbYJfr9IOrbbYHPo/GxFtmvJyMtHtRXuyJn2MVeW48Cd0W/3amoPGwN/NdcGxXxadECPAx8zLs2C9gBvaftgSO8shfQO/axC9Ict0fvfA4y0fyZ7HnYL6LfE73bd4Dn0ft8zaM7i1hxWU16URhP7PhqA35qyj+AlIKdgU2A/6FxcyeyhfrYOOJpn6jeUuBZ4HY05xwOAD7q5e9BcsRiN+AQtJD0RPPJvcNlhrYnmidEfF2LxsOhyGkzAPXLFOCJjHuBxtNYNMZb0Nx8EMmstdAxG0qtUpGG2A78JeehKmHvjLYO7EA7vdG2ek0Of++QHIwOMz2aKcCNOfVvJnZaWQ3k5Ax+zjU0J3llp5Pv1Z8HjDZt3eSVT4ueY2VG3SdIaoK9TPmCDD6/Sv7ppzfQAPZxhVc+F2n3yzPqPo8mIcB+Oe37KWuR9VFWQ3TYJ4P+E1FZq7l+k1evB1rg8vh8Es0BHyeQv7tahUw+TvPyHYZ2sYFkX64yZacioZJ1n/kkhfwI5H3Pol2NzGPOE/8zU/4Vc98ByNGS1yfzzL1BEQ4+zUS0aNu6bcA5pm4zWrjbcu73Alq8qxJgtU6VBGKelK+Ec0w7S6lebe+BBHKZ57jY1J1Zsl478I2oziHm+n0ZPD3llS8j3v5fWOI+y5Hm6HBTiTouTfbqVRKIZ5RobxVJz/QVJeq4dEdUZ/cStLUWiCDtyad3O5gigTixBK8nevRfK9kX+0f0HRWIY8gXEC7dHNFugrTpItoFwHsj+iKB2J9yc6SNpFnCCsRKdff16p5Vos6ZRfFjS5CxurMYRMe0s85gK5OfTqQOV4HxSAtxmI+2GjPRSnIG8Wo4Hk3Uv+a09Sayx74EHENSQzoFxbndiwacM0vsjwTeW1F+O5IhJbdGZXsB53vXZ6MJ9XTE51VoNe4F/JzkIPGxBrgGbVf2BL7plR0d5Rfn1HXYiaSTZX7Ey7+QdnF19Hw9UPRBngOrDYWxPBS1eSaxFn4oEmRPou3tkSS38LchAQvp7V4t8DzJ0KwPVqBvQX3gMAeNgUVoSzkOeB24LirfGphk2rgRmV76IJPGEUjb+UvV3CdxCnG/tqOQqn+iQOovoDHntqitEW8ON6B3vRnaQrcC30Nmikq4JGrb4Vk0PxZGbX0hut4E/AqZFebltDUT7eJeR+PAmV6aUL+7OXmqV2cRMhHMjejHod3Rz6FYwlYT05WHWwvu0VUa4mTTTp6gykMzaU3ACnW7fb3dK7Or3zCvbBPiwHDXz84I/wNT72iv3pmmzAk227+fMnyeaMqdwLUa4jhT73FT7rSRIg3xGlNmtzxHmfLh0XWrIZ5m6t1vyg8reL6ucKr4uMPQOzthnoa4pbn+L4oD2b9v6O/KoNmSpJmmoxrif7zrK0lHlfiYYPg6pYAW8jXEbQy/K0mH9/3e1L0wum41xIXApl69XU35S9H1ZpKa8HRie30CzVkXIzShAV4UnV8Jh5P0OtcLS0y+2iOCO5PUAuYiw6uP35j8aPK35f6q+S7SEhyaiLe+TqA4+KEbn/V+z0Qef0ieAGhDWuEEL+1CEjbvsMjkp5u89c5nwZ5G2Mnwsqcp37ULeekq2LFUSWteQtI5sAcSRN8m20lpbb3XZNA422Jn4WtdGyOnx0Sy38t8k/8lso8fjhbJshhNUu48gLQ7Hzea/JictlaQXACmmXL3Na02pOA4DEHmlAkkNdVCgQh6eXcT2wWqwVGkY7XqhbkmP5TqXtq2Ju+OLfqYQ9ILvCnlw1DaTN710SyS2uyn0UDdCm2NHa6O+OlLUjg0Iy1zope+QRL9KAdrYqg0VppJmyouMLyMN+VlF6pqeekqNCEh7+PVCnXWoKOhPnZCGtSraGcxyCv7kKF9uRoGq4SNDuiPhMSTUfIXuKkkPfItaAdze3T9XMqda8+aWxb2mq2Th7x5BTLR+BiCxuQMZK7aEcoNrNFI8n6XysGVvZCN5x5kf2zUBxQeMflewGeqqG+3NNYzB+p8GxaTqYZXCT9MpB9yPhxC/K7WEK+gfjiMK5tZkKaRHfpQC7SRFFxtFXiZjjSl9QkHkF707i9R73xkI7SLajPSsJ4k1lTs2LPvuJa4By2YNiQLpCXeh45Dgr6KdRhpbR2kMF1EudMoZebWSpOvxQdELkZCMUtojkGmjI+UXWm3QPv4V5D29RiypVyPOuEB5AFdgmwqB3WS+c7icdJG2ItI2huK8D+Tz7KtbE5S61xLdkxitbiN5Jb/0yS3DPcSbzFWIIeNQztyXgzOScPoOoEIyT5vQlptHi9DyY73W1fRA2kUPl6m3DOsQLbOHYGfkNYq+yENC9Je+zKxv53BZcgxNJ705/iaEL8OT6FnGAv8jrQgPYJyXnof78+gsfPNbtc7gjXIQbQDkgVWsPcGLuzI1mMg8u61IkP8MUiL3JnaaEi1wGrSKvJgtJoPSpPzCaSm34Ge4d/EAcCgybu9qWOF/j9Jr2wdwTKSK+2BJO1K1yXJedj73YO0I8OhHqYLf7vfRNIpVC9euqLtgWih38NcP4/qohdeRFvSQSjA3ofTEP9urmfZ4O0z+oKpD9WflFmItvAjkefft+ltS3InuQZtn49C/eIfDID0lt/iMZM/kLSf4mCTtzu+zmAG0tiHIu3c1xi3a5QtxuHtLmx7Eukt2Sg0KO9HK+M1aFV8CK2SrchDvYqkUGpC2rA7hjSKtLZgBVVn4Lc1gtjut4C01/Eqk5+EFqlNkUf7YKTBr6A6s0FHYHn5EZr4m6FJeiAKxl2BQjxqgbdMfm8kXKy3vSxOJbZ5/gLZ0F8hbdi/Dnn4y2AfNN5GRXnnPfa3w87RZh0KX45Szyidgp75Co/G13aakHmrL7JVTiHffj4QhXwdRyz0niJpK3wdCY0m4GwUWrNFVPYWCtPyMYdi/Idk9Mh7UdjM+5EyMpZkiEw7tZlbu6N3cIB37UEUo+wwx92wUckFtdY67MZhEBrM1fDktMSBaAtoy1dnXHuUpJ3Dht1Yp9SLptw6IyAZhO2SPXLlkHXONiu9TbwdsWE3rabN60250zwrBWbbenlpObFWZMNujjNt2i8mjfPKhhXcY2yqp5Lo6NduriW9G8oLu9mCZAjX00gYzjX0vsDNClVbSfrE1DER/dlV8O7b7O71rs9Gwv9ZQ++2zF/yrr2DYiAfIDkfZhDbCIsCs0eSfToma25d6dWzYTdW+OaNzT7IYemuv4DewauG/jiq6Mhap5eJ3eKjcmg6KxBB4TM2rikrrUETz1ffi44qufQw8s75qIVAPD3jXsMz6ECa4B8q8LkK+LpXp6sEYi/ScaBZfX2WV6czAhHkHMi6zxyKHXvVCsRp5JsB8gTiflT+UPKPTVt9kUOjqM5U79l6I8dMFt0i4G9e3gnE/mgOVhrbm0T0lU4TLSIZVlXp6N4hVP7ndteTnI8dFYi7E395Jy9dBTQ14kvHC5EW9h1ih0BXnmRZgOwwe6LBPBqdh90COUHcAfub0SkEH8+gbcdJKA5wOPFHE55AE/9W0p6r50jGp1lv9PMkT1FkeRIno22lsxdNRytbFt5F2tChaHs1kvhjAC+jgX0pyXCGWSQXHLv1fM2Uu3fVlnPdwW2Hb0BnmvdGi9IytFA4XmZ4dWabNm1s339NuY1TPBIZyo9AW6/X0Lu7lGwPqsMqihfd5WiMvIi0oUfI/zjIW6atWdHfh5Cp5avIfPFhZM5YgBwyl6OPO/hYGtEejzSzXdFkd3WuJXm0czkKnL+AuA/mIfPED9GCfAnSlBz/b6CPlXye+IMg/dH7fBbNh1979CcjIT8ORT5sE5XNQgvSJJJOtTmmP+wJlruRg+O06FmHIME+H9kZryJ9EmetadMuxnlj84mo/S+jOTIchau9gbzLV+OZooqk5gS6HkPIXylqoSEGBAQElEaeMDy7i+/bH6nRCwp4CAIxICCgrsgSROdFZX1yyuuVgkAMCAioK/KEIQSBGBAQ0M2QJwxBsUmraIwwDAIxICCg7nDC5/yc8kru/yAQAwICNhi0o8j2PIygchxVEIgBAQEbBL5XgmYndJaz3oIxCMSAgIBugxb0odUgEAMCAgIoFopBIAYEBHQ75AnFIBADAgK6JVpIfxQgCMSAgIBuixaSX2EJAjEgIKBbwxeKQSAGBATUDY34/FclrAVOQJ+9GtpgXgICAgLWCfQAzmk0EwEBAd0H/wd1jJzKq1cF/QAAAABJRU5ErkJggg==", logoWidth: "324px", logoHeight: "40px", longCommentThreshold: 1e4, bytesToDeemComment: 50, summaryCommentTextLengthLimit: 50, noConfirmPostEmptyCommentPageRegexp: null, customIndentationCharsPattern: null, undoTexts: [], customTextReactions: [], customCommentFormModules: [], defaultCommentLinkType: "diff", commentInputEmptyPlaceholder: !1, getArchivePrefix: null, customSectionNotFoundHandler: null, transformSummary: null, customCodeTransformations: null, customBeforeParse: null, customForeignComponentChecker: null, areNewTopicsOnTop: null }, staticGlobals = { LETTER_PATTERN: "A-Za-z\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC", COMMENT_UNDERLAY_FOCUSED_COLOR: "#eaf3ff", COMMENT_UNDERLAY_TARGET_COLOR: "#ffedb8", COMMENT_UNDERLAY_NEW_COLOR: "#e8ffd1", COMMENT_UNDERLAY_OWN_COLOR: "#f7ebff", COMMENT_UNDERLAY_SIDE_MARGIN: 5, HIGHLIGHT_NEW_COMMENTS_INTERVAL: 15, CHECK_FOR_NEW_COMMENTS_INTERVAL: 15, BACKGROUND_CHECK_FOR_NEW_COMMENTS_INTERVAL: 60, SECONDS_IN_A_DAY: 86400, MILLISECONDS_IN_A_MINUTE: 6e4, POPULAR_NOT_INLINE_ELEMENTS: [ "BLOCKQUOTE", "DD", "DIV", "DL", "FORM", "H2", "H3", "H4", "H5", "H6", "HR", "INPUT", "LI", "OL", "P", "PRE", "TABLE", "TBODY", "TR", "TH", "TD", "UL" ], POPULAR_INLINE_ELEMENTS: [ "A", "ABBR", "B", "BIG", "BR", "CITE", "CODE", "EM", "FONT", "I", "IMG", "KBD", "S", "SMALL", "SPAN", "STRIKE", "STRONG", "SUB", "SUP", "TT", "U", "VAR" ], UNHIGHLIGHTABLE_ELEMENTS_CLASSES: [ "mw-empty-elt", "tleft", "tright", "floatleft", "floatright" ], BAD_COMMENT_BEGINNINGS: [ /^ *\n*/, /^(?:+| ) *\n*/, /^\{\|.*?\|\} *\n*(?=[*:#])/ ], FLOATING_ELEMENTS_SELECTORS: [ ".cd-floating", ".tright", ".floatright", '*[style*="float:right"]', '*[style*="float: right"]', '*[style*="float:left"]', '*[style*="float: left"]' ], SIGN_CODE: "".concat("") }, globalUtil = { wrapInElement: (html, tagName = "span") => $($.parseHTML(html)).wrapAll("<".concat(tagName, ">")).parent, buildEditSummary(options) { void 0 === options.addPostfix && (options.addPostfix = !0); let wasOptionalTextAdded, text = (options.section ? "/* ".concat(options.section, " */ ") : "") + options.text.trim; if (options.optionalText) { let projectedText = text + options.optionalText; cd.config.transformSummary && (projectedText = cd.config.transformSummary(projectedText)), projectedText.length <= cd.g.SUMMARY_LENGTH_LIMIT && (text = projectedText, wasOptionalTextAdded = !0); }           return wasOptionalTextAdded || (cd.config.transformSummary && (text = cd.config.transformSummary(text)),             text.length > cd.g.SUMMARY_LENGTH_LIMIT && (text = text.slice(0, cd.g.SUMMARY_LENGTH_LIMIT - 1) + "\u2026")), options.addPostfix && (text += cd.g.SUMMARY_POSTFIX), text; },       isPageOverlayOn:  => document.body.classList.contains("oo-ui-windowManager-modal-active") || Boolean($loadingPopup[0] && "block" === $loadingPopup[0].style.display) };   function app_s(name, ...params) { if (!name) return null; const fullName = "convenientdiscussions-".concat(name); if (cd.g.QQX_MODE || "string" != typeof mw.messages.get(fullName)) { const paramsString = params.length ? ": ".concat(params.join(", ")) : ""; return "(".concat(fullName).concat(paramsString, ")"); }       {            const message = mw.message(fullName, ...params); return "object" == typeof params[params.length - 1] && params[params.length - 1].plain ? message.plain : message.toString; }   }    function go { if (!cd.strings) return void console.warn("Convenient Discussions can't run: localization strings couldn't be found."); Object.keys(cd.strings).forEach(name => {           mw.messages.set("convenientdiscussions-".concat(name), cd.strings[name]);        }), cd.g.SETTINGS_OPTION_FULL_NAME = "userjs-".concat(cd.config.optionsPrefix, "-settings"), cd.g.VISITS_OPTION_FULL_NAME = "userjs-".concat(cd.config.optionsPrefix, "-visits"); const watchedSectionsOptionName = "ru.wikipedia.org" === location.host ? "watchedTopics" : "watchedSections"; if (cd.g.WATCHED_SECTIONS_OPTION_FULL_NAME = "userjs-".concat(cd.config.optionsPrefix, "-").concat(watchedSectionsOptionName),        cd.g.$content = $("#mw-content-text"), cd.g.IS_DIFF_PAGE = mw.config.get("wgIsArticle") && /[?&]diff=[^&]/.test(location.search),         cd.g.CURRENT_PAGE = underlinesToSpaces(mw.config.get("wgPageName")), cd.g.CURRENT_NAMESPACE_NUMBER = mw.config.get("wgNamespaceNumber"),         cd.g.CURRENT_USER_NAME = mw.config.get("wgUserName"), mw.config.get("wgIsArticle") && (isProbablyTalkPage(cd.g.CURRENT_PAGE, cd.g.CURRENT_NAMESPACE_NUMBER) || cd.g.$content.find(".cd-talkPage").length)) { let messagesRequest; cd.g.firstRun = !0, cd.g.nanoCss = Object(nano_css.create), cd.g.nanoCss.put(".cd-loadingPopup", {               width: cd.config.logoWidth            }), cd.g.nanoCss.put(".cd-loadingPopup-logo", {                width: cd.config.logoWidth,                height: cd.config.logoHeight            }), setLoadingOverlay, cd.debug.stopTimer("start"), cd.debug.startTimer("loading data"), cd.g.worker = new worker_default.a, "ready" === mw.loader.getState("mediawiki.api") && (cd.g.api = new mw.Api,            messagesRequest = loadMessages, getUserInfo.catch(e => { console.warn(e); }));           const modulesRequest = $.when(...[ mw.loader.using([ "jquery.color", "jquery.client", "mediawiki.Title", "mediawiki.api", "mediawiki.cookie", "mediawiki.jqueryMsg", "mediawiki.notification", "mediawiki.user", "mediawiki.util", "mediawiki.widgets.visibleLengthLimit", "oojs", "oojs-ui", "oojs-ui.styles.icons-alerts", "oojs-ui.styles.icons-content", "oojs-ui.styles.icons-interactions", "user.options" ]), messagesRequest ].filter(defined)).then( => {                try {                    processPage({ messagesRequest: messagesRequest });               } catch (e) {                    mw.notify(cd.s("error-processpage"), { type: "error" }), removeLoadingOverlay, console.error(e);               }            }, e => {                mw.notify(cd.s("error-loaddata"), { type: "error" }), removeLoadingOverlay, console.warn(e);           }); setTimeout( => {               "resolved" !== modulesRequest.state && (removeLoadingOverlay, console.warn('The promise is in the "pending" state for 10 seconds; removing the loading overlay.'));            }, 1e4), cd.g.REGULAR_LINE_HEIGHT = parseFloat(window.getComputedStyle(cd.g.$content.get(0)).lineHeight), initTalkPageCss, __webpack_require__(7), __webpack_require__(13), __webpack_require__(15), __webpack_require__(17), __webpack_require__(19), __webpack_require__(21), __webpack_require__(23), __webpack_require__(25); }       if ([ "Watchlist", "Contributions", "Recentchanges" ].includes(mw.config.get("wgCanonicalSpecialPageName")) || "history" === mw.config.get("wgAction") && isProbablyTalkPage(cd.g.CURRENT_PAGE, cd.g.CURRENT_NAMESPACE_NUMBER) || cd.g.IS_DIFF_PAGE) { let messagesRequest; "ready" === mw.loader.getState("mediawiki.api") && (cd.g.api = new mw.Api, messagesRequest = loadMessages,            getUserInfo.catch(e => { console.warn(e); })), mw.loader.using([ "user.options", "mediawiki.Title", "mediawiki.api", "mediawiki.jqueryMsg", "mediawiki.util", "mediawiki.user", "oojs", "oojs-ui", "oojs-ui.styles.icons-interactions", "oojs-ui.styles.icons-editing-list", "oojs-ui.styles.icons-alerts" ]).then( => {               !function(_x3) {                    _commentLinks.apply(this, arguments);                }({ messagesRequest: messagesRequest }), __webpack_require__(7), __webpack_require__(27);           }, e => {                console.warn(e);            }); }   }    $((function { if (!location.host.endsWith(".m.wikipedia.org")) if (cd.running) console.warn("One instance of Convenient Discussions is already running."); else if (cd.running = !0,        cd.config = Object.assign(defaultConfig, cd.config), cd.debug = debug, cd.g = staticGlobals,         cd.s = app_s, cd.util = globalUtil, cd.getCommentByAnchor = Comment_Comment.getCommentByAnchor,         cd.getSectionByAnchor = Section_Section.getSectionByAnchor, cd.getSectionsByHeadline = Section_Section.getSectionsByHeadline,         cd.getLastActiveCommentForm = CommentForm_CommentForm.getLastActiveCommentForm,         cd.getLastActiveAlteredCommentForm = CommentForm_CommentForm.getLastActiveAlteredCommentForm,         cd.util.parseCommentAnchor = parseCommentAnchor, cd.util.formatDate = formatDate,         cd.util.setVisits = setVisits, cd.debug.init, cd.debug.startTimer("total time"),         cd.debug.startTimer("start"), mw.hook("convenientDiscussions.launched").fire(cd), cd.strings) go; else {           let match = location.host.match(/^([a-z-]+)\.(?:wikipedia|wikibooks|wikinews|wikiquote|wikisource|wikiversity|wikivoyage|wiktionary)\.org$/);            match || (match = location.host.match(/^([a-z]{2})\.wikimedia\.org$/));            const lang = match ? match[1] : "en";            mw.loader.getScript("https://www.mediawiki.org/w/index.php?title=User:Jack_who_built_the_house/convenientDiscussions/strings-".concat(lang, ".js&action=raw&ctype=text/javascript")).then(go, e => { console.warn(e); });       }    })); } ]);