Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
!function(e) {
    var t = {};
    function n(i) {
        if (t[i]) return t[i].exports;
        var o = t[i] = {
            i: i,
            l: !1,
            exports: {}
        };
        return e[i].call(o.exports, o, o.exports, n), o.l = !0, o.exports;
    }
    n.m = e, n.c = t, n.d = function(e, t, i) {
        n.o(e, t) || Object.defineProperty(e, t, {
            enumerable: !0,
            get: i
        });
    }, n.r = function(e) {
        "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
            value: "Module"
        }), Object.defineProperty(e, "__esModule", {
            value: !0
        });
    }, n.t = function(e, t) {
        if (1 & t && (e = n(e)), 8 & t) return e;
        if (4 & t && "object" == typeof e && e && e.__esModule) return e;
        var i = Object.create(null);
        if (n.r(i), Object.defineProperty(i, "default", {
            enumerable: !0,
            value: e
        }), 2 & t && "string" != typeof e) for (var o in e) n.d(i, o, function(t) {
            return e[t];
        }.bind(null, o));
        return i;
    }, n.n = function(e) {
        var t = e && e.__esModule ? function() {
            return e.default;
        } : function() {
            return e;
        };
        return n.d(t, "a", t), t;
    }, n.o = function(e, t) {
        return Object.prototype.hasOwnProperty.call(e, t);
    }, n.p = "", n(n.s = 34);
}([ function(e, t) {
    e.exports = function(e, t) {
        var n = t.get(e);
        if (!n) throw new TypeError("attempted to get private field on non-instance");
        return n.get ? n.get.call(e) : n.value;
    };
}, function(e, t) {
    function n(e, t, n, i, o, s, r) {
        try {
            var a = e[s](r), c = a.value;
        } catch (e) {
            return void n(e);
        }
        a.done ? t(c) : Promise.resolve(c).then(i, o);
    }
    e.exports = function(e) {
        return function() {
            var t = this, i = arguments;
            return new Promise((function(o, s) {
                var r = e.apply(t, i);
                function a(e) {
                    n(r, o, s, a, c, "next", e);
                }
                function c(e) {
                    n(r, o, s, a, c, "throw", e);
                }
                a(void 0);
            }));
        };
    };
}, function(e, t) {
    e.exports = function(e, t, n) {
        var i = t.get(e);
        if (!i) throw new TypeError("attempted to set private field on non-instance");
        if (i.set) i.set.call(e, n); else {
            if (!i.writable) throw new TypeError("attempted to set read only private field");
            i.value = n;
        }
        return n;
    };
}, function(e, t, n) {
    "use strict";
    var i, o = function() {
        return void 0 === i && (i = Boolean(window && document && document.all && !window.atob)), 
        i;
    }, s = function() {
        var e = {};
        return function(t) {
            if (void 0 === e[t]) {
                var n = document.querySelector(t);
                if (window.HTMLIFrameElement && n instanceof window.HTMLIFrameElement) try {
                    n = n.contentDocument.head;
                } catch (e) {
                    n = null;
                }
                e[t] = n;
            }
            return e[t];
        };
    }(), r = [];
    function a(e) {
        for (var t = -1, n = 0; n < r.length; n++) if (r[n].identifier === e) {
            t = n;
            break;
        }
        return t;
    }
    function c(e, t) {
        for (var n = {}, i = [], o = 0; o < e.length; o++) {
            var s = e[o], c = t.base ? s[0] + t.base : s[0], u = n[c] || 0, l = "".concat(c, " ").concat(u);
            n[c] = u + 1;
            var d = a(l), h = {
                css: s[1],
                media: s[2],
                sourceMap: s[3]
            };
            -1 !== d ? (r[d].references++, r[d].updater(h)) : r.push({
                identifier: l,
                updater: f(h, t),
                references: 1
            }), i.push(l);
        }
        return i;
    }
    function u(e) {
        var t = document.createElement("style"), i = e.attributes || {};
        if (void 0 === i.nonce) {
            var o = n.nc;
            o && (i.nonce = o);
        }
        if (Object.keys(i).forEach((function(e) {
            t.setAttribute(e, i[e]);
        })), "function" == typeof e.insert) e.insert(t); else {
            var r = s(e.insert || "head");
            if (!r) throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
            r.appendChild(t);
        }
        return t;
    }
    var l, d = (l = [], function(e, t) {
        return l[e] = t, l.filter(Boolean).join("\n");
    });
    function h(e, t, n, i) {
        var o = n ? "" : i.media ? "@media ".concat(i.media, " {").concat(i.css, "}") : i.css;
        if (e.styleSheet) e.styleSheet.cssText = d(t, o); else {
            var s = document.createTextNode(o), r = e.childNodes;
            r[t] && e.removeChild(r[t]), r.length ? e.insertBefore(s, r[t]) : e.appendChild(s);
        }
    }
    function m(e, t, n) {
        var i = n.css, o = n.media, s = n.sourceMap;
        if (o ? e.setAttribute("media", o) : e.removeAttribute("media"), s && btoa && (i += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(s)))), " */")), 
        e.styleSheet) e.styleSheet.cssText = i; else {
            for (;e.firstChild; ) e.removeChild(e.firstChild);
            e.appendChild(document.createTextNode(i));
        }
    }
    var p = null, g = 0;
    function f(e, t) {
        var n, i, o;
        if (t.singleton) {
            var s = g++;
            n = p || (p = u(t)), i = h.bind(null, n, s, !1), o = h.bind(null, n, s, !0);
        } else n = u(t), i = m.bind(null, n, t), o = function() {
            !function(e) {
                if (null === e.parentNode) return !1;
                e.parentNode.removeChild(e);
            }(n);
        };
        return i(e), function(t) {
            if (t) {
                if (t.css === e.css && t.media === e.media && t.sourceMap === e.sourceMap) return;
                i(e = t);
            } else o();
        };
    }
    e.exports = function(e, t) {
        (t = t || {}).singleton || "boolean" == typeof t.singleton || (t.singleton = o());
        var n = c(e = e || [], t);
        return function(e) {
            if (e = e || [], "[object Array]" === Object.prototype.toString.call(e)) {
                for (var i = 0; i < n.length; i++) {
                    var o = a(n[i]);
                    r[o].references--;
                }
                for (var s = c(e, t), u = 0; u < n.length; u++) {
                    var l = a(n[u]);
                    0 === r[l].references && (r[l].updater(), r.splice(l, 1));
                }
                n = s;
            }
        };
    };
}, function(e, t, n) {
    "use strict";
    e.exports = function(e) {
        var t = [];
        return t.toString = function() {
            return this.map((function(t) {
                var n = function(e, t) {
                    var n = e[1] || "", i = e[3];
                    if (!i) return n;
                    if (t && "function" == typeof btoa) {
                        var o = (r = i, a = btoa(unescape(encodeURIComponent(JSON.stringify(r)))), c = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(a), 
                        "/*# ".concat(c, " */")), s = i.sources.map((function(e) {
                            return "/*# sourceURL=".concat(i.sourceRoot || "").concat(e, " */");
                        }));
                        return [ n ].concat(s).concat([ o ]).join("\n");
                    }
                    var r, a, c;
                    return [ n ].join("\n");
                }(t, e);
                return t[2] ? "@media ".concat(t[2], " {").concat(n, "}") : n;
            })).join("");
        }, t.i = function(e, n, i) {
            "string" == typeof e && (e = [ [ null, e, "" ] ]);
            var o = {};
            if (i) for (var s = 0; s < this.length; s++) {
                var r = this[s][0];
                null != r && (o[r] = !0);
            }
            for (var a = 0; a < e.length; a++) {
                var c = [].concat(e[a]);
                i && o[c[0]] || (n && (c[2] ? c[2] = "".concat(n, " and ").concat(c[2]) : c[2] = n), 
                t.push(c));
            }
        }, t;
    };
}, function(e, t, n) {
    var i, o = function() {
        var e = String.fromCharCode, t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", n = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$", i = {};
        function o(e, t) {
            if (!i[e]) {
                i[e] = {};
                for (var n = 0; n < e.length; n++) i[e][e.charAt(n)] = n;
            }
            return i[e][t];
        }
        var s = {
            compressToBase64: function(e) {
                if (null == e) return "";
                var n = s._compress(e, 6, (function(e) {
                    return t.charAt(e);
                }));
                switch (n.length % 4) {
                  default:
                  case 0:
                    return n;

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

                  case 2:
                    return n + "==";

                  case 3:
                    return n + "=";
                }
            },
            decompressFromBase64: function(e) {
                return null == e ? "" : "" == e ? null : s._decompress(e.length, 32, (function(n) {
                    return o(t, e.charAt(n));
                }));
            },
            compressToUTF16: function(t) {
                return null == t ? "" : s._compress(t, 15, (function(t) {
                    return e(t + 32);
                })) + " ";
            },
            decompressFromUTF16: function(e) {
                return null == e ? "" : "" == e ? null : s._decompress(e.length, 16384, (function(t) {
                    return e.charCodeAt(t) - 32;
                }));
            },
            compressToUint8Array: function(e) {
                for (var t = s.compress(e), n = new Uint8Array(2 * t.length), i = 0, o = t.length; i < o; i++) {
                    var r = t.charCodeAt(i);
                    n[2 * i] = r >>> 8, n[2 * i + 1] = r % 256;
                }
                return n;
            },
            decompressFromUint8Array: function(t) {
                if (null == t) return s.decompress(t);
                for (var n = new Array(t.length / 2), i = 0, o = n.length; i < o; i++) n[i] = 256 * t[2 * i] + t[2 * i + 1];
                var r = [];
                return n.forEach((function(t) {
                    r.push(e(t));
                })), s.decompress(r.join(""));
            },
            compressToEncodedURIComponent: function(e) {
                return null == e ? "" : s._compress(e, 6, (function(e) {
                    return n.charAt(e);
                }));
            },
            decompressFromEncodedURIComponent: function(e) {
                return null == e ? "" : "" == e ? null : (e = e.replace(/ /g, "+"), s._decompress(e.length, 32, (function(t) {
                    return o(n, e.charAt(t));
                })));
            },
            compress: function(t) {
                return s._compress(t, 16, (function(t) {
                    return e(t);
                }));
            },
            _compress: function(e, t, n) {
                if (null == e) return "";
                var i, o, s, r = {}, a = {}, c = "", u = "", l = "", d = 2, h = 3, m = 2, p = [], g = 0, f = 0;
                for (s = 0; s < e.length; s += 1) if (c = e.charAt(s), Object.prototype.hasOwnProperty.call(r, c) || (r[c] = h++, 
                a[c] = !0), u = l + c, Object.prototype.hasOwnProperty.call(r, u)) l = u; else {
                    if (Object.prototype.hasOwnProperty.call(a, l)) {
                        if (l.charCodeAt(0) < 256) {
                            for (i = 0; i < m; i++) g <<= 1, f == t - 1 ? (f = 0, p.push(n(g)), g = 0) : f++;
                            for (o = l.charCodeAt(0), i = 0; i < 8; i++) g = g << 1 | 1 & o, f == t - 1 ? (f = 0, 
                            p.push(n(g)), g = 0) : f++, o >>= 1;
                        } else {
                            for (o = 1, i = 0; i < m; i++) g = g << 1 | o, f == t - 1 ? (f = 0, p.push(n(g)), 
                            g = 0) : f++, o = 0;
                            for (o = l.charCodeAt(0), i = 0; i < 16; i++) g = g << 1 | 1 & o, f == t - 1 ? (f = 0, 
                            p.push(n(g)), g = 0) : f++, o >>= 1;
                        }
                        0 == --d && (d = Math.pow(2, m), m++), delete a[l];
                    } else for (o = r[l], i = 0; i < m; i++) g = g << 1 | 1 & o, f == t - 1 ? (f = 0, 
                    p.push(n(g)), g = 0) : f++, o >>= 1;
                    0 == --d && (d = Math.pow(2, m), m++), r[u] = h++, l = String(c);
                }
                if ("" !== l) {
                    if (Object.prototype.hasOwnProperty.call(a, l)) {
                        if (l.charCodeAt(0) < 256) {
                            for (i = 0; i < m; i++) g <<= 1, f == t - 1 ? (f = 0, p.push(n(g)), g = 0) : f++;
                            for (o = l.charCodeAt(0), i = 0; i < 8; i++) g = g << 1 | 1 & o, f == t - 1 ? (f = 0, 
                            p.push(n(g)), g = 0) : f++, o >>= 1;
                        } else {
                            for (o = 1, i = 0; i < m; i++) g = g << 1 | o, f == t - 1 ? (f = 0, p.push(n(g)), 
                            g = 0) : f++, o = 0;
                            for (o = l.charCodeAt(0), i = 0; i < 16; i++) g = g << 1 | 1 & o, f == t - 1 ? (f = 0, 
                            p.push(n(g)), g = 0) : f++, o >>= 1;
                        }
                        0 == --d && (d = Math.pow(2, m), m++), delete a[l];
                    } else for (o = r[l], i = 0; i < m; i++) g = g << 1 | 1 & o, f == t - 1 ? (f = 0, 
                    p.push(n(g)), g = 0) : f++, o >>= 1;
                    0 == --d && (d = Math.pow(2, m), m++);
                }
                for (o = 2, i = 0; i < m; i++) g = g << 1 | 1 & o, f == t - 1 ? (f = 0, p.push(n(g)), 
                g = 0) : f++, o >>= 1;
                for (;;) {
                    if (g <<= 1, f == t - 1) {
                        p.push(n(g));
                        break;
                    }
                    f++;
                }
                return p.join("");
            },
            decompress: function(e) {
                return null == e ? "" : "" == e ? null : s._decompress(e.length, 32768, (function(t) {
                    return e.charCodeAt(t);
                }));
            },
            _decompress: function(t, n, i) {
                var o, s, r, a, c, u, l, d = [], h = 4, m = 4, p = 3, g = "", f = [], b = {
                    val: i(0),
                    position: n,
                    index: 1
                };
                for (o = 0; o < 3; o += 1) d[o] = o;
                for (r = 0, c = Math.pow(2, 2), u = 1; u != c; ) a = b.val & b.position, b.position >>= 1, 
                0 == b.position && (b.position = n, b.val = i(b.index++)), r |= (a > 0 ? 1 : 0) * u, 
                u <<= 1;
                switch (r) {
                  case 0:
                    for (r = 0, c = Math.pow(2, 8), u = 1; u != c; ) a = b.val & b.position, b.position >>= 1, 
                    0 == b.position && (b.position = n, b.val = i(b.index++)), r |= (a > 0 ? 1 : 0) * u, 
                    u <<= 1;
                    l = e(r);
                    break;

                  case 1:
                    for (r = 0, c = Math.pow(2, 16), u = 1; u != c; ) a = b.val & b.position, b.position >>= 1, 
                    0 == b.position && (b.position = n, b.val = i(b.index++)), r |= (a > 0 ? 1 : 0) * u, 
                    u <<= 1;
                    l = e(r);
                    break;

                  case 2:
                    return "";
                }
                for (d[3] = l, s = l, f.push(l); ;) {
                    if (b.index > t) return "";
                    for (r = 0, c = Math.pow(2, p), u = 1; u != c; ) a = b.val & b.position, b.position >>= 1, 
                    0 == b.position && (b.position = n, b.val = i(b.index++)), r |= (a > 0 ? 1 : 0) * u, 
                    u <<= 1;
                    switch (l = r) {
                      case 0:
                        for (r = 0, c = Math.pow(2, 8), u = 1; u != c; ) a = b.val & b.position, b.position >>= 1, 
                        0 == b.position && (b.position = n, b.val = i(b.index++)), r |= (a > 0 ? 1 : 0) * u, 
                        u <<= 1;
                        d[m++] = e(r), l = m - 1, h--;
                        break;

                      case 1:
                        for (r = 0, c = Math.pow(2, 16), u = 1; u != c; ) a = b.val & b.position, b.position >>= 1, 
                        0 == b.position && (b.position = n, b.val = i(b.index++)), r |= (a > 0 ? 1 : 0) * u, 
                        u <<= 1;
                        d[m++] = e(r), l = m - 1, h--;
                        break;

                      case 2:
                        return f.join("");
                    }
                    if (0 == h && (h = Math.pow(2, p), p++), d[l]) g = d[l]; else {
                        if (l !== m) return null;
                        g = s + s.charAt(0);
                    }
                    f.push(g), d[m++] = s + g.charAt(0), s = g, 0 == --h && (h = Math.pow(2, p), p++);
                }
            }
        };
        return s;
    }();
    void 0 === (i = function() {
        return o;
    }.call(t, n, t, e)) || (e.exports = i);
}, function(e, t, n) {
    "use strict";
    var i = /[A-Z]/g;
    t.create = function(e) {
        var t = (e = e || {}).assign || Object.assign;
        var n = t({
            raw: "",
            pfx: "_",
            client: "object" == typeof window,
            assign: t,
            stringify: JSON.stringify,
            kebab: function(e) {
                return e.replace(i, "-$&").toLowerCase();
            },
            decl: function(e, t) {
                return (e = n.kebab(e)) + ":" + t + ";";
            },
            hash: function(e) {
                return function(e) {
                    for (var t = 5381, n = e.length; n; ) t = 33 * t ^ e.charCodeAt(--n);
                    return "_" + (t >>> 0).toString(36);
                }(n.stringify(e));
            },
            selector: function(e, t) {
                return e + (":" === t[0] ? "" : " ") + t;
            },
            putRaw: function(e) {
                n.raw += e;
            }
        }, e);
        return n.client && (n.sh || document.head.appendChild(n.sh = document.createElement("style")), 
        n.putRaw = function(e) {
            var t = n.sh.sheet;
            try {
                t.insertRule(e, t.cssRules.length);
            } catch (e) {}
        }), n.put = function(e, t, i) {
            var o, s, r = "", a = [];
            for (o in t) (s = t[o]) instanceof Object && !(s instanceof Array) ? a.push(o) : r += n.decl(o, s, e, i);
            r && (r = e + "{" + r + "}", n.putRaw(i ? i + "{" + r + "}" : r));
            for (var c = 0; c < a.length; c++) "@" === (o = a[c])[0] && "@font-face" !== o ? n.putAt(e, t[o], o) : n.put(n.selector(e, o), t[o], i);
        }, n.putAt = n.put, n;
    };
}, function(e) {
    e.exports = JSON.parse('{"ru.wikipedia.org":"https://ru.wikipedia.org/w/index.php?title=\u0423\u0447\u0430\u0441\u0442\u043d\u0438\u043a:Jack_who_built_the_house/convenientDiscussions-ru.js&action=raw&ctype=text/javascript"}');
}, function(e, t, n) {
    var i = n(3), o = n(17);
    "string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
    var s = {
        insert: "head",
        singleton: !1
    };
    i(o, s);
    e.exports = o.locals || {};
}, function(e) {
    e.exports = JSON.parse('{"script-name":"Convenient Discussions","script-name-short":"CD","cm-gotoparent":"\u25b2","cm-gotoparent-tooltip":"Go to the parent comment","cm-gotochild":"\u25bc","cm-gotochild-tooltip":"Go back to the child comment","cm-copylink":"#","cm-copylink-tooltip-diff":"Copy a link to the diff.","cm-copylink-tooltip-wikilink":"Copy a wikilink.","cm-copylink-tooltip-link":"Copy a link.","cm-thank":"Thank","cm-thank-tooltip":"Thank for the edit that added this comment","cm-thank-disabled-tooltip":"You have already thanked the user for this comment","cm-edit":"Edit","cm-reply":"Reply","sm-editopeningcomment":"edit opening comment","sm-editopeningcomment-tooltip":"Edit the comment opening the section","sm-addsubsection":"add subsection","sm-addsubsection-tooltip":"Add a subsection to this section","sm-move":"move","sm-move-tooltip":"Move the topic to another page","sm-watch":"watch","sm-watch-tooltip":"Add the section to the watchlist. This affects notifications and bolding in the watchlist","sm-unwatch":"unwatch","sm-unwatch-tooltip":"Remove the section from the watchlist","sm-copylink":"#","sm-copylink-tooltip-wikilink":"Copy a wikilink.","sm-copylink-tooltip-link":"Copy a link.","section-reply":"Reply","section-addsubsection-to":"Add subsection to \\"$1\\"","section-newcomments":"There are new comments in this section. Click to update the page.","section-watch-success":"The section \\"$1\\" has been added to your watchlist.","section-unwatch-success":"The section \\"$1\\" has been removed from your watchlist.","section-unwatch-stillwatched":"<strong>Note:</strong> you are still watching this section as it is included in the section \\"$1\\" that you watch.","section-watch-pagenotwatched":"<strong>Note:</strong> you watch the section but not the page. In order for new comments to be highlighted on your watchlist page, add the page to the watchlist.","section-watch-error-load":"Couldn\'t load the settings from the server.","section-watch-error-save":"Couldn\'t save the settings to the server.","section-watch-error-maxsize":"Couldn\'t update the settings: the size of the watched sections list exceeds the maximum size. <a class=\\"cd-notification-editWatchedSections\\">Edit the sections list</a> to fix this.","cld-invitation":"Click while holding Shift to choose a different type of link","cld-diff":"Diff link","cld-diff-error":"Couldn\'t find","cld-diff-error-network":"Couldn\'t find (network error)","cld-diff-error-unknown":"Couldn\'t find (unknown error)","cld-wikilink":"Wikilink","cld-help-onlycd":"This link will work only for users that have Convenient Discussions installed.","cld-currentpagewikilink":"Wikilink from the same page","cld-link":"Regular link","cld-close":"Close","cld-copy":"Copy","copylink-copied":"The link has been copied to the clipboard.","copylink-copied-url":"<a href=\\"$1\\" target=\\"_blank\\">The link</a> has been copied to the clipboard.","copylink-error":"Couldn\'t copy the link.","thank-confirm":"Thank {{gender:$2|}} $1 for <a href=\\"$3\\" target=\\"_blank\\">this edit</a>?","thank-error":"Couldn\'t send the thank you.","thank-error-multipletimestamps":"Looks like <a href=\\"$1\\" target=\\"_blank\\">the edit</a> that added this comment has more than one comment in it. Please decide for yourself if you\'re gonna thank for it.","thank-success":"\\"Thank you\\" notification has been sent.","es-reply":"reply","es-reply-to":"reply to {{gender:$2|}} $1","es-addition":"addition","es-edit-reply":"edit the reply","es-edit-reply-to":"edit the reply to {{gender:$2|}} $1","es-edit-addition":"edit the addition","es-edit-topic":"edit the opening comment","es-edit-subsection":"edit the opening comment","es-edit-comment":"edit the comment","es-edit-comment-by":"edit the comment by {{gender:$2|}} $1","es-delete-reply":"delete the reply","es-delete-reply-to":"delete the reply to {{gender:$2|}} $1","es-delete-addition":"delete the addition","es-delete-topic":"delete the topic","es-delete-subsection":"delete the subsection","es-delete-comment":"delete the comment","es-delete-comment-by":"delete the comment by {{gender:$2|}} $1","es-new-topic":"new topic","es-new-subsection":"new subsection","es-move-from":"move from [[$1]]","es-move-to":"move to [[$1]]","cf-headline-topic":"Topic subject/headline","cf-headline-subsection":"Subject/headline of subsection of \\"$1\\"","cf-comment-placeholder-replytosection":"Reply to \\"$1\\"","cf-comment-placeholder-replytocomment":"Reply to {{gender:$2|}} $1","cf-summary-placeholder":"Edit summary","cf-summary-preview":"Edit summary preview","cf-save":"Save","cf-save-short":"Save","cf-delete-button":"Delete","cf-delete-button-short":"Delete","cf-addtopic":"Add topic","cf-addtopic-short":"Add","cf-addsubsection":"Add subsection","cf-addsubsection-short":"Add","cf-reply":"Reply","cf-reply-short":"Reply","cf-preview":"Preview","cf-preview-short":"Preview","cf-viewchanges":"View changes","cf-viewchanges-short":"Changes","cf-cancel":"Cancel","cf-cancel-short":"Cancel","cf-settings":"Settings","cf-scriptsettings-tooltip":"Convenient Discussions settings","cf-help":"?","cf-help-short":"?","cf-help-content":"<p>Type <kbd>@<kbd> to <a href=\\"https://www.mediawiki.org/wiki/Help:Notifications/Mention\\" target=\\"_blank\\">mention</a> a user. Type <kbd>##</kbd> to link a comment from this section.</p>\\n<p><a href=\\"https://commons.wikimedia.org/wiki/Special:MyLanguage/User:Jack_who_built_the_house/Convenient_Discussions\\" target=\\"_blank\\">Script documentation</a></p>\\n<p>Hotkeys:</p>\\n<ul>\\n<li><b>Ctrl+Enter</b> \u2014 post</li>\\n<li><b>Esc</b> \u2014 cancel</li>\\n<li><b>Q</b> (<b>Ctrl+Alt+Q</b>) \u2014 quote the selected text</li>\\n</ul>","cf-quote-tooltip":"Quote the selected text","cf-quote-placeholder":"Quoted text","cf-minor":"Minor edit","cf-watch":"Watch this page","cf-watchsection-topic":"Watch this topic","cf-watchsection-subsection":"Watch this subsection","cf-watchsection-tooltip":"Add this section to the watchlist. This affects notifications and bolding in the watchlist","cf-nosignature":"No signature","cf-delete":"Delete","cf-block-preview":"Preview","cf-block-viewchanges":"Changes","cf-block-close":"Close","cf-reaction-templateinheadline":"Don\'t use templates in headlines: this breaks section links.","cf-reaction-signature":"No need to enter <kbd>$1</kbd>: the signature will be added automatically.","cf-reaction-pre":"<code>&lt;pre&gt;</code> tags can break the layout\u2014better use <code>&lt;syntaxhighlight&gt;</code>.","cf-reaction-mention-edit":"Since you are <em>editing</em> a comment, a <a href=\\"https://www.mediawiki.org/wiki/Help:Notifications/Mention#How_to_mention_another_editor_and_trigger_a_notification\\" target=\\"_blank\\">mention notification</a> will not be sent.","cf-reaction-mention-nosignature":"Since you\'ve opted not to include a signature in your comment, a <a href=\\"https://www.mediawiki.org/wiki/Help:Notifications/Mention#How_to_mention_another_editor_and_trigger_a_notification\\" target=\\"_blank\\">mention notification</a> will not be sent.","cf-notice-nochanges":"No changes.","cf-notice-editconflict-retrying":"Trying again\u2026","cf-error-getpagecode":"Couldn\'t get the page code.","cf-error-findplace":"Couldn\'t find the proper place in the code to insert the comment into.","cf-error-findplace-unexpectedheading":"Couldn\'t find the proper place in the code to insert the comment into (unexpected heading).","cf-error-commentlinks-commentnotfound":"Couldn\'t find the comment with ID $1, linked from the comment, on the page.","cf-error-numberedlist":"It\'s impossible to form the comment correctly without distorting the numbered list markup.","cf-error-numberedlist-list":"Remove lists from the comment.","cf-error-numberedlist-table":"Remove tables from the comment.","cf-error-delete-repliestocomment":"Can\'t delete the comment because it has replies.","cf-error-delete-repliesinsection":"Can\'t delete the section because it has replies.","cf-error-preview":"Couldn\'t preview the comment.","cf-error-viewchanges":"Couldn\'t get the changes.","cf-error-couldntedit":"Couldn\'t edit the page.","cf-error-pagedoesntexist":"The page doesn\'t exist.","cf-confirm-noheadline-topic":"You didn\'t enter the topic subject/headline.","cf-confirm-noheadline-subsection":"You didn\'t enter the section subject/headline.","cf-confirm-noheadline-question":"Are you sure you want to post the comment?","cf-confirm-empty":"Are you sure you want to post an empty comment?","cf-confirm-long":"This comment is longer than $1 characters. Are you sure you want to post it?","cf-confirm-secondlevelheading":"The comment contains the code of the second level section. If you are moving the source code, it\'s better to use the standard edit source function, otherwise it could be altered unpredictably. Are you sure you want to post the comment?","cf-confirm-delete":"Are you sure you want to delete the comment?","cf-confirm-delete-yes":"Delete","cf-confirm-delete-no":"Cancel","cf-confirm-close":"Are you sure you want to close the form? The input will be lost.","cf-confirm-close-yes":"Close","cf-confirm-close-no":"Cancel","cf-mentions-tooltip":"Mention a user","cf-mentions-notemplatedata":"Couldn\'t load TemplateData for this template.","cf-mentions-commentlinktext":"$1 @ $2","dn-confirm":"Do you want Convenient Discussions to send you desktop notifications about new comments on currently open pages if they are addressed to you or posted in sections that you watch? You can disable this feature in the settings.","dn-confirm-yes":"Yes","dn-confirm-no":"No","dn-grantpermission":"Grant a permission to the site.","dn-grantpermission-again":"You have the desktop notifications switched on, but the site is not allowed to send them. Grant a permission to the site to receive notifications or deny to prevent this message from showing up again.","deadanchor-section-title":"Section not found","deadanchor-section-text":"It could be moved or archived.","deadanchor-comment-title":"Comment not found","deadanchor-comment-text":"It could be moved or archived.","deadanchor-searchinarchive":"Do you want to search in the archive?","restore-restored-title":"Session restored","restore-restored-text":"The unsent comment forms have been automatically recovered.","rd-intro":"Couldn\'t find the comments or sections on the page that some of the opened forms were related to. Below is the restored content of these forms. Copy it if you need.","rd-headline":"Subject/headline","rd-comment":"Comment","rd-summary":"Edit summary","rd-close":"Close","navpanel-refresh":"Refresh page","navpanel-previous":"Go to the previous new comment","navpanel-next":"Go to the next new comment","navpanel-firstunseen":"Go to the first unseen comment","navpanel-commentform":"Go to the next comment form out of sight","navpanel-newcomments-count":"$1 new {{plural:$1|comment|comments}}. Click to update the page","navpanel-newcomments-insection":"Section \\"$1\\":","navpanel-newcomments-outsideofsections":"Outside of sections","newpanel-newcomments-reply":"$1 \u2192 $2","navpanel-newcomments-unknowndate":"unknown date","notification-toyou":"$1 {{gender:$2|replied}} to your comment$3.","notification-toyou-desktop":"$1 {{gender:$2|replied}} to your comment$3 on page \\"$4\\".","notification-insection":"$1 {{gender:$2|replied}} in section \\"$3\\".","notification-insection-desktop":"$1 {{gender:$2|replied}} in section \\"$3\\" on page \\"$4\\".","notification-newcomments":"$1 new {{plural:$1|comment|comments}}$2$3.","notification-newcomments-desktop":"$1 new {{plural:$1|comment|comments}}$2 on page \\"$3\\"$4.","notification-newcomments-maybeinteresting":"that may be interesting to you","notification-reload":"<a href=\\"$1\\" class=\\"cd-notification-reloadPage\\">Reload the page</a>$2.","notification-formdata":"form data will not be lost","notification-part-insection":"in section \\"$1\\"","notification-part-onthispage":"on this page","sd-title":"Convenient Discussions settings","sd-save":"Save","sd-reload":"Reload","sd-page-talkpage":"Talk page","sd-page-commentform":"Comment form","sd-page-notifications":"Notifications","sd-page-dataremoval":"Data removal","sd-close-confirm":"The settings were not saved. Are you sure you want to close the window?","sd-close-confirm-yes":"Close","sd-close-confirm-no":"Cancel","sd-saved":"The settings have been saved successfully. Reload the page to apply them.","sd-reset":"Reset settings (in all sections)","sd-reset-confirm":"Are you sure you want to reset the settings? (Click \\"{{int:convenient-discussions-sd-save}}\\" after resetting.)","sd-removedata":"Remove all script data","sd-removedata-description":"Delete the data that Convenient Discussions has collected: your settings, talk page last visits, watched sections, and drafts of unsent comments","sd-removedata-help":"Note that everything except the settings is removed for the current domain only. See <a href=\\"https://commons.wikimedia.org/wiki/Special:MyLanguage/User:Jack_who_built_the_house/Convenient_Discussions#Data\\" target=\\"_blank\\">the script\'s homepage</a> for the clarifications on what, why, and how the script stores and instructions on how to delete each piece of data individually.","sd-removedata-confirm":"This will permanently delete your settings, talk page last visits, watched sections, and drafts of unsent comments. Do you want to proceed?","sd-removedata-confirm-yes":"Yes","sd-removedata-confirm-no":"No","sd-dataremoved":"Your data has been successfully removed.","sd-error-removedata":"Couldn\'t remove the data on the server.","sd-localsetting":"<i>This setting is individual for each wiki.</i>","sd-alloweditotherscomments":"Show a link to edit other users\' comments","sd-alwaysexpandsettings":"Expand the comment settings when replying","sd-autopreview":"Preview the comment as I type","sd-notifications":"Ordinary notifications","sd-notifications-radio-all":"Notify me about replies to my comments and comments in sections that I watch","sd-notifications-radio-tome":"Notify me about replies to my comments only","sd-notifications-radio-none":"Don\'t notify me","sd-notifications-help":"Notifications are small popups in the top right corner of the page.","sd-desktopnotifications":"Desktop notifications","sd-desktopnotifications-radio-all":"Notify me about replies to my comments and comments in sections that I watch","sd-desktopnotifications-radio-tome":"Notify me about replies to my comments only","sd-desktopnotifications-radio-none":"Don\'t notify me","sd-desktopnotifications-help":"Desktop notifications inform about events on pages that are open but hidden. To receive them, you must grant a premission to $1.","sd-highlightowncomments":"Highlight my comments","sd-insertbuttons":"Text insert buttons","sd-insertbuttons-multiselect-placeholder":"Add a button","sd-insertbuttons-help":"Use <code>+</code> to specify a place where the caret should be put after inserting the text; for example, <code>&#123;&#123;+&#125;&#125;</code>. Use <code>;</code> to specify displayed text if you want it to be different from the one inserted; for example, <code>&lt;code&gt;+&lt;/code&gt;;&lt;code /&gt;</code>. Use <code>&#92;</code> before the aforementioned characters to insert them as is; for example, <code>2&#92;+2</code>. The buttons can be dragged and dropped.","sd-notificationsblacklist":"Don\'t notify about comments of these users","sd-notificationsblacklist-multiselect-placeholder":"Add a user","sd-signatureprefix":"Signature prefix","sd-signatureprefix-help":"Text that is added before the signature.","sd-showtoolbar":"Show the edit toolbar","sd-defaultcommentlinktype":"Default link type to copy when clicking \\"{{int:convenient-discussions-cm-copylink}}\\" in a comment menu","sd-defaultcommentlinktype-radio-diff":"Diff link","sd-defaultcommentlinktype-radio-wikilink":"Wikilink","sd-defaultcommentlinktype-radio-link":"Regular link","sd-defaultcommentlinktype-help":"To copy a link of a different type, click \\"{{int:convenient-discussions-cm-copylink}}\\" while holding Shift.","sd-defaultcommentlinktype-help-notdifflinks":"Links other than diff links will work only for users that have Convenient Discussions installed.","sd-defaultsectionlinktype":"Default link type to copy when clicking \\"{{int:convenient-discussions-sm-copylink}}\\" in a section menu","sd-defaultsectionlinktype-radio-wikilink":"Wikilink","sd-defaultsectionlinktype-radio-link":"Regular link","sd-defaultsectionlinktype-help":"To copy a link of a different type, click \\"{{int:convenient-discussions-sm-copylink}}\\" while holding Shift.","sd-watchonreply":"Watch pages that I reply on","sd-watchsectiononreply":"Watch sections that I reply in","ewsd-title":"Edit watched sections list","ewsd-save":"Save","ewsd-saved":"The watched sections list has been successfully saved.","ewsd-error-maxsize":"Couldn\'t update the settings: the size of the watched sections list exceeds the maximum size. Reduce the size of the list to fix this.","ewsd-error-processing":"An error occurred while processing the watched sections list.","ewsd-close-confirm":"The watched sections list wasn\'t saved. Are you sure you want to close the window?","ewsd-close-confirm-yes":"Close","ewsd-close-confirm-no":"Cancel","msd-title":"Move topic","msd-move":"Move","msd-reload":"Reload","msd-targetpage":"Enter the name of the discussion page to move the topic to:","msd-summaryending":"Edit summary (will be added to the standard one)","msd-error-wrongpage":"Wrong page.","msd-error-sourcepagedeleted":"The current page was deleted.","msd-error-targetpagedoesntexist":"The target page doesn\'t exist.","msd-error-invalidpagename":"Invalid page name.","msd-error-editconflict-retry":"Just click \\"{{int:ooui-dialog-process-retry}}\\".","msd-error-editingtargetpage":"Couldn\'t edit the target page.","msd-error-editingsourcepage":"Couldn\'t edit the source page. You will have to edit it manually.","msd-moved":"The topic has been successfully moved. You may reload the page or go to <a href=\\"$1\\">the page where the topic was moved to</a>.","msd-bottom":"The code may be different if the page would be updated while the window is idle.","move-sourcepagecode":"\'\'Moved to [[$1]]. $2\'\'","move-targetpagecode":"\'\'Moved from [[$1]]. $2\'\'","error-loaddata":"{{int:convenient-discussions-script-name}}: Couldn\'t load the data required by the script.","error-processpage":"{{int:convenient-discussions-script-name}}: Couldn\'t process the page.","error-settings-load":"Couldn\'t load the settings from the server.","error-settings-save":"Couldn\'t save the settings to the server.","error-reloadpage":"Couldn\'t reload the page.","error-reloadpage-saved":"The page was saved, but couldn\'t reload the page.","error-api":"API error: $1.","error-network":"Network error.","error-nodata":"The server response lacks the requested data.","error-unknown":"Unknown error.","error-javascript":"A JavaScript error occurred. See the details in the JavaScript console (F12 \u2192 Console).","error-locatecomment":"Couldn\'t locate the comment in the code. This may be caused by the complexity of the comment code, the script flaw of the fact that the comment was deleted or heavily edited. You can try to <a class=\\"cd-message-reloadPage\\">reload the page</a> or <a href=\\"$1\\" class=\\"cd-message-editSection\\">edit the section source the standard way</a>.","error-locatesection":"Couldn\'t locate the section in the code. This may be caused by the complexity of the section\'s first comment code, the script flaw of the fact that the section was deleted. You can try to <a class=\\"cd-message-reloadPage\\">reload the page</a> or <a href=\\"$1\\" class=\\"cd-message-editPage\\">edit the page source the standard way</a>.","error-spamblacklist":"You are trying to add a URL with the domain name $1 that is blacklisted. The page was not edited.","error-titleblacklist":"The page name is blacklisted. The page was not edited.","error-abusefilter":"Your edit was automatically rejected by abuse filter \\"$1\\".","error-editconflict":"Edit conflict.","error-blocked":"You are blocked from editing. The page was not edited.","error-pagedeleted":"The page was deleted.","error-pagenotedited":"The page was not edited.","error-diffnotfound":"Couldn\'t find the edit that added this comment.","error-diffnotfound-history":"You can look for it in the <a href=\\"$1\\" target=\\"_blank\\">revision history</a> for yourself.","wl-button-switchinteresting-tooltip":"Show only comments in sections that I watch and comments addressed to me","wl-button-editwatchedsections-tooltip":"Edit sections that I watch","wl-button-scriptsettings-tooltip":"Convenient Discussions settings","lp-comment":"comment","lp-comment-tooltip":"Go to comment","lp-comment-toyou":"the comment is addressed to you","lp-comment-watchedsection":"you are watching this section","loading-ellipsis":"Loading\u2026","addtopicbutton-tooltip":"Open in a new tab to create a new topic on the standard page, not in Convenient Discussions"}');
}, function(e, t, n) {
    "use strict";
    e.exports = function(e, t) {
        var i = n(13), o = "", s = "", r = "";
        o = e.toString();
        var a = i("HTML_ENTITIES", t);
        if (!1 === a) return !1;
        for (r in delete a["&"], a["&"] = "&amp;", a) s = a[r], o = o.split(s).join(r);
        return o = o.split("&#039;").join("'");
    };
}, function(e, t, n) {
    e.exports = function() {
        "use strict";
        function e(e, t) {
            if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");
        }
        function t(e, t) {
            for (var n = 0; n < t.length; n++) {
                var i = t[n];
                i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), 
                Object.defineProperty(e, i.key, i);
            }
        }
        function n(e, n, i) {
            return n && t(e.prototype, n), i && t(e, i), e;
        }
        function i(e, t) {
            return function(e) {
                if (Array.isArray(e)) return e;
            }(e) || function(e, t) {
                if ("undefined" != typeof Symbol && Symbol.iterator in Object(e)) {
                    var n = [], i = !0, o = !1, s = void 0;
                    try {
                        for (var r, a = e[Symbol.iterator](); !(i = (r = a.next()).done) && (n.push(r.value), 
                        !t || n.length !== t); i = !0) ;
                    } catch (e) {
                        o = !0, s = e;
                    } finally {
                        try {
                            i || null == a.return || a.return();
                        } finally {
                            if (o) throw s;
                        }
                    }
                    return n;
                }
            }(e, t) || function(e, t) {
                if (e) {
                    if ("string" == typeof e) return o(e, t);
                    var n = Object.prototype.toString.call(e).slice(8, -1);
                    return "Object" === n && e.constructor && (n = e.constructor.name), "Map" === n || "Set" === n ? Array.from(n) : "Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? o(e, t) : void 0;
                }
            }(e, t) || function() {
                throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
            }();
        }
        function o(e, t) {
            (null == t || t > e.length) && (t = e.length);
            for (var n = 0, i = new Array(t); n < t; n++) i[n] = e[n];
            return i;
        }
        if (Array.prototype.find || (Array.prototype.find = function(e) {
            if (null === this) throw new TypeError("Array.prototype.find called on null or undefined");
            if ("function" != typeof e) throw new TypeError("predicate must be a function");
            for (var t, n = Object(this), i = n.length >>> 0, o = arguments[1], s = 0; s < i; s++) if (t = n[s], 
            e.call(o, t, s, n)) return t;
        }), window && "function" != typeof window.CustomEvent) {
            var s = function(e, t) {
                t = t || {
                    bubbles: !1,
                    cancelable: !1,
                    detail: void 0
                };
                var n = document.createEvent("CustomEvent");
                return n.initCustomEvent(e, t.bubbles, t.cancelable, t.detail), n;
            };
            void 0 !== window.Event && (s.prototype = window.Event.prototype), window.CustomEvent = s;
        }
        var r = function() {
            function t(n) {
                e(this, t), this.tribute = n, this.tribute.events = this;
            }
            return n(t, [ {
                key: "bind",
                value: function(e) {
                    e.boundKeydown = this.keydown.bind(e, this), e.boundKeyup = this.keyup.bind(e, this), 
                    e.boundInput = this.input.bind(e, this), e.addEventListener("keydown", e.boundKeydown, !1), 
                    e.addEventListener("keyup", e.boundKeyup, !1), e.addEventListener("input", e.boundInput, !1);
                }
            }, {
                key: "unbind",
                value: function(e) {
                    e.removeEventListener("keydown", e.boundKeydown, !1), e.removeEventListener("keyup", e.boundKeyup, !1), 
                    e.removeEventListener("input", e.boundInput, !1), delete e.boundKeydown, delete e.boundKeyup, 
                    delete e.boundInput;
                }
            }, {
                key: "keydown",
                value: function(e, n) {
                    var i = this;
                    e.commandEvent = !1, t.keys().forEach((function(t) {
                        t.key === n.keyCode && (e.commandEvent = !0, e.callbacks()[t.value.toLowerCase()](n, i));
                    }));
                }
            }, {
                key: "input",
                value: function(e, t) {
                    e.inputEvent = !0, e.keyup.call(this, e, t);
                }
            }, {
                key: "click",
                value: function(e, t) {
                    var n = e.tribute;
                    if (n.menu && n.menu.contains(t.target)) {
                        var i = t.target;
                        for (t.preventDefault(), t.stopPropagation(); "li" !== i.nodeName.toLowerCase(); ) if (!(i = i.parentNode) || i === n.menu) return;
                        n.selectItemAtIndex(i.getAttribute("data-index"), t), n.hideMenu();
                    } else n.current.element && !n.current.externalTrigger && (n.current.externalTrigger = !1, 
                    setTimeout((function() {
                        return n.hideMenu();
                    })));
                }
            }, {
                key: "keyup",
                value: function(e, t) {
                    if (e.inputEvent && (e.inputEvent = !1), e.updateSelection(this), 27 !== t.keyCode) {
                        if (e.tribute.doDropMenu) return e.tribute.isActive = !1, e.tribute.hideMenu(), 
                        void (e.tribute.doDropMenu = !1);
                        if (!e.tribute.allowSpaces && e.tribute.hasTrailingSpace) return e.tribute.hasTrailingSpace = !1, 
                        e.commandEvent = !0, void e.callbacks().space(t, this);
                        if (!e.tribute.isActive) if (e.tribute.autocompleteMode) e.callbacks().triggerChar(t, this, ""); else {
                            var n = e.getKeyCode(e, this, t);
                            if (isNaN(n) || !n) return;
                            var i = e.tribute.triggers().find((function(e) {
                                return e.charCodeAt(0) === n;
                            }));
                            void 0 !== i && e.callbacks().triggerChar(t, this, i);
                        }
                        e.tribute.current.mentionText.length < e.tribute.current.collection.menuShowMinLength || ((e.tribute.current.trigger || e.tribute.autocompleteMode) && !1 === e.commandEvent || e.tribute.isActive && 8 === t.keyCode) && e.tribute.showMenuFor(this, !0);
                    }
                }
            }, {
                key: "getKeyCode",
                value: function(e, t, n) {
                    var i = e.tribute, o = i.range.getTriggerInfo(!1, i.hasTrailingSpace, !0, i.allowSpaces, i.autocompleteMode);
                    return !!o && o.mentionTriggerChar.charCodeAt(0);
                }
            }, {
                key: "updateSelection",
                value: function(e) {
                    this.tribute.current.element = e;
                    var t = this.tribute.range.getTriggerInfo(!1, this.tribute.hasTrailingSpace, !0, this.tribute.allowSpaces, this.tribute.autocompleteMode);
                    t && (this.tribute.current.selectedPath = t.mentionSelectedPath, this.tribute.current.mentionText = t.mentionText, 
                    this.tribute.current.selectedOffset = t.mentionSelectedOffset);
                }
            }, {
                key: "callbacks",
                value: function() {
                    var e = this;
                    return {
                        triggerChar: function(t, n, i) {
                            var o = e.tribute;
                            o.current.trigger = i;
                            var s = o.collection.find((function(e) {
                                return e.trigger === i;
                            }));
                            o.current.collection = s, o.current.mentionText.length >= o.current.collection.menuShowMinLength && o.inputEvent && o.showMenuFor(n, !0);
                        },
                        enter: function(t, n) {
                            e.tribute.isActive && e.tribute.current.filteredItems && (t.preventDefault(), t.stopPropagation(), 
                            setTimeout((function() {
                                e.tribute.selectItemAtIndex(e.tribute.menuSelected, t), e.tribute.hideMenu();
                            }), 0));
                        },
                        escape: function(t, n) {
                            e.tribute.isActive && (t.preventDefault(), t.stopPropagation(), e.tribute.isActive = !1, 
                            e.tribute.hideMenu());
                        },
                        tab: function(t, n) {
                            e.callbacks().enter(t, n);
                        },
                        up: function(t, n) {
                            if (e.tribute.isActive && e.tribute.current.filteredItems) {
                                t.preventDefault(), t.stopPropagation();
                                var i = e.tribute.current.filteredItems.length, o = e.tribute.menuSelected;
                                i > o && o > 0 ? (e.tribute.menuSelected--, e.setActiveLi()) : 0 === o && (e.tribute.menuSelected = i - 1, 
                                e.setActiveLi(), e.tribute.menu.scrollTop = e.tribute.menu.scrollHeight);
                            }
                        },
                        down: function(t, n) {
                            if (e.tribute.isActive && e.tribute.current.filteredItems) {
                                t.preventDefault(), t.stopPropagation();
                                var i = e.tribute.current.filteredItems.length - 1, o = e.tribute.menuSelected;
                                i > o ? (e.tribute.menuSelected++, e.setActiveLi()) : i === o && (e.tribute.menuSelected = 0, 
                                e.setActiveLi(), e.tribute.menu.scrollTop = 0);
                            }
                        }
                    };
                }
            }, {
                key: "setActiveLi",
                value: function(e) {
                    var t = this.tribute.menu.querySelectorAll("li"), n = t.length >>> 0;
                    e && (this.tribute.menuSelected = parseInt(e));
                    for (var i = 0; i < n; i++) {
                        var o = t[i];
                        if (i === this.tribute.menuSelected) {
                            o.classList.add(this.tribute.current.collection.selectClass);
                            var s = o.getBoundingClientRect(), r = this.tribute.menu.getBoundingClientRect();
                            if (s.bottom > r.bottom) {
                                var a = s.bottom - r.bottom;
                                this.tribute.menu.scrollTop += a;
                            } else if (s.top < r.top) {
                                var c = r.top - s.top;
                                this.tribute.menu.scrollTop -= c;
                            }
                        } else o.classList.remove(this.tribute.current.collection.selectClass);
                    }
                }
            }, {
                key: "getFullHeight",
                value: function(e, t) {
                    var n = e.getBoundingClientRect().height;
                    if (t) {
                        var i = e.currentStyle || window.getComputedStyle(e);
                        return n + parseFloat(i.marginTop) + parseFloat(i.marginBottom);
                    }
                    return n;
                }
            } ], [ {
                key: "keys",
                value: function() {
                    return [ {
                        key: 9,
                        value: "TAB"
                    }, {
                        key: 13,
                        value: "ENTER"
                    }, {
                        key: 27,
                        value: "ESCAPE"
                    }, {
                        key: 38,
                        value: "UP"
                    }, {
                        key: 40,
                        value: "DOWN"
                    } ];
                }
            } ]), t;
        }(), a = function() {
            function t(n) {
                e(this, t), this.tribute = n, this.tribute.menuEvents = this, this.menu = this.tribute.menu;
            }
            return n(t, [ {
                key: "bind",
                value: function(e) {
                    var t = this;
                    this.menuClickEvent = this.tribute.events.click.bind(null, this), this.menuContainerScrollEvent = this.debounce((function() {
                        t.tribute.isActive && t.tribute.showMenuFor(t.tribute.current.element, !1);
                    }), 300, !1), this.windowResizeEvent = this.debounce((function() {
                        t.tribute.isActive && t.tribute.range.positionMenuAtCaret(!0);
                    }), 300, !1), this.tribute.range.getDocument().addEventListener("MSPointerDown", this.menuClickEvent, !1), 
                    this.tribute.range.getDocument().addEventListener("mousedown", this.menuClickEvent, !1), 
                    window.addEventListener("resize", this.windowResizeEvent), this.menuContainer ? this.menuContainer.addEventListener("scroll", this.menuContainerScrollEvent, !1) : window.addEventListener("scroll", this.menuContainerScrollEvent);
                }
            }, {
                key: "unbind",
                value: function(e) {
                    this.tribute.range.getDocument().removeEventListener("mousedown", this.menuClickEvent, !1), 
                    this.tribute.range.getDocument().removeEventListener("MSPointerDown", this.menuClickEvent, !1), 
                    window.removeEventListener("resize", this.windowResizeEvent), this.menuContainer ? this.menuContainer.removeEventListener("scroll", this.menuContainerScrollEvent, !1) : window.removeEventListener("scroll", this.menuContainerScrollEvent);
                }
            }, {
                key: "debounce",
                value: function(e, t, n) {
                    var i, o = arguments, s = this;
                    return function() {
                        var r = s, a = o, c = n && !i;
                        clearTimeout(i), i = setTimeout((function() {
                            i = null, n || e.apply(r, a);
                        }), t), c && e.apply(r, a);
                    };
                }
            } ]), t;
        }(), c = function() {
            function t(n) {
                e(this, t), this.tribute = n, this.tribute.range = this;
            }
            return n(t, [ {
                key: "getDocument",
                value: function() {
                    var e;
                    return this.tribute.current.collection && (e = this.tribute.current.collection.iframe), 
                    e ? e.contentWindow.document : document;
                }
            }, {
                key: "positionMenuAtCaret",
                value: function(e) {
                    var t, n = this, i = this.tribute.current, o = this.getTriggerInfo(!1, this.tribute.hasTrailingSpace, !0, this.tribute.allowSpaces, this.tribute.autocompleteMode);
                    if (void 0 !== o) {
                        if (!this.tribute.positionMenu) return void (this.tribute.menu.style.cssText = "display: block;");
                        t = this.isContentEditable(i.element) ? this.getContentEditableCaretPosition(o.mentionPosition) : this.getTextAreaOrInputUnderlinePosition(this.tribute.current.element, o.mentionPosition), 
                        this.tribute.menu.style.cssText = "top: ".concat(t.top, "px;\n                                     left: ").concat(t.left, "px;\n                                     right: ").concat(t.right, "px;\n                                     bottom: ").concat(t.bottom, "px;\n                                     position: absolute;\n                                     display: block;"), 
                        "auto" === t.left && (this.tribute.menu.style.left = "auto"), "auto" === t.top && (this.tribute.menu.style.top = "auto"), 
                        e && this.scrollIntoView(), window.setTimeout((function() {
                            var i = {
                                width: n.tribute.menu.offsetWidth,
                                height: n.tribute.menu.offsetHeight
                            }, o = n.isMenuOffScreen(t, i), s = window.innerWidth > i.width && (o.left || o.right), r = window.innerHeight > i.height && (o.top || o.bottom);
                            (s || r) && (n.tribute.menu.style.cssText = "display: none", n.positionMenuAtCaret(e));
                        }), 0);
                    } else this.tribute.menu.style.cssText = "display: none";
                }
            }, {
                key: "selectElement",
                value: function(e, t, n) {
                    var i, o = e;
                    if (t) for (var s = 0; s < t.length; s++) {
                        if (void 0 === (o = o.childNodes[t[s]])) return;
                        for (;o.length < n; ) n -= o.length, o = o.nextSibling;
                        0 !== o.childNodes.length || o.length || (o = o.previousSibling);
                    }
                    var r = this.getWindowSelection();
                    (i = this.getDocument().createRange()).setStart(o, n), i.setEnd(o, n), i.collapse(!0);
                    try {
                        r.removeAllRanges();
                    } catch (e) {}
                    r.addRange(i), e.focus();
                }
            }, {
                key: "replaceTriggerText",
                value: function(e, t, n, i, o) {
                    var s = this.getTriggerInfo(!0, n, t, this.tribute.allowSpaces, this.tribute.autocompleteMode);
                    if (void 0 !== s) {
                        var r = this.tribute.current, a = new CustomEvent("tribute-replaced", {
                            detail: {
                                item: o,
                                instance: r,
                                context: s,
                                event: i
                            }
                        });
                        if (this.isContentEditable(r.element)) {
                            e += "string" == typeof this.tribute.replaceTextSuffix ? this.tribute.replaceTextSuffix : "\xa0";
                            var c = s.mentionPosition + s.mentionText.length;
                            this.tribute.autocompleteMode || (c += s.mentionTriggerChar.length), this.pasteHtml(e, s.mentionPosition, c);
                        } else {
                            var u = this.tribute.current.element;
                            e += "string" == typeof this.tribute.replaceTextSuffix ? this.tribute.replaceTextSuffix : " ";
                            var l = s.mentionPosition, d = s.mentionPosition + s.mentionText.length;
                            this.tribute.autocompleteMode || (d += s.mentionTriggerChar.length), u.value = u.value.substring(0, l) + e + u.value.substring(d, u.value.length), 
                            u.selectionStart = l + e.length, u.selectionEnd = l + e.length;
                        }
                        r.element.dispatchEvent(new CustomEvent("input", {
                            bubbles: !0
                        })), r.element.dispatchEvent(a);
                    }
                }
            }, {
                key: "pasteHtml",
                value: function(e, t, n) {
                    var i, o;
                    o = this.getWindowSelection(), (i = this.getDocument().createRange()).setStart(o.anchorNode, t), 
                    i.setEnd(o.anchorNode, n), i.deleteContents();
                    var s = this.getDocument().createElement("div");
                    s.innerHTML = e;
                    for (var r, a, c = this.getDocument().createDocumentFragment(); r = s.firstChild; ) a = c.appendChild(r);
                    i.insertNode(c), a && ((i = i.cloneRange()).setStartAfter(a), i.collapse(!0), o.removeAllRanges(), 
                    o.addRange(i));
                }
            }, {
                key: "getWindowSelection",
                value: function() {
                    return this.tribute.collection.iframe ? this.tribute.collection.iframe.contentWindow.getSelection() : window.getSelection();
                }
            }, {
                key: "getNodePositionInParent",
                value: function(e) {
                    if (null === e.parentNode) return 0;
                    for (var t = 0; t < e.parentNode.childNodes.length; t++) if (e.parentNode.childNodes[t] === e) return t;
                }
            }, {
                key: "getContentEditableSelectedPath",
                value: function(e) {
                    var t = this.getWindowSelection(), n = t.anchorNode, i = [];
                    if (null != n) {
                        for (var o, s = n.contentEditable; null !== n && "true" !== s; ) o = this.getNodePositionInParent(n), 
                        i.push(o), null !== (n = n.parentNode) && (s = n.contentEditable);
                        return i.reverse(), {
                            selected: n,
                            path: i,
                            offset: t.getRangeAt(0).startOffset
                        };
                    }
                }
            }, {
                key: "getTextPrecedingCurrentSelection",
                value: function() {
                    var e = this.tribute.current, t = "";
                    if (this.isContentEditable(e.element)) {
                        var n = this.getWindowSelection().anchorNode;
                        if (null != n) {
                            var i = n.textContent, o = this.getWindowSelection().getRangeAt(0).startOffset;
                            i && o >= 0 && (t = i.substring(0, o));
                        }
                    } else {
                        var s = this.tribute.current.element;
                        if (s) {
                            var r = s.selectionStart;
                            s.value && r >= 0 && (t = s.value.substring(0, r));
                        }
                    }
                    return t;
                }
            }, {
                key: "getLastWordInText",
                value: function(e) {
                    var t;
                    return e = e.replace(/\u00A0/g, " "), (t = this.tribute.autocompleteSeparator ? e.split(this.tribute.autocompleteSeparator) : e.split(/\s+/))[t.length - 1].trim();
                }
            }, {
                key: "getTriggerInfo",
                value: function(e, t, n, i, o) {
                    var s, r, a, c = this, u = this.tribute.current;
                    if (this.isContentEditable(u.element)) {
                        var l = this.getContentEditableSelectedPath(u);
                        l && (s = l.selected, r = l.path, a = l.offset);
                    } else s = this.tribute.current.element;
                    var d = this.getTextPrecedingCurrentSelection(), h = this.getLastWordInText(d);
                    if (o) return {
                        mentionPosition: d.length - h.length,
                        mentionText: h,
                        mentionSelectedElement: s,
                        mentionSelectedPath: r,
                        mentionSelectedOffset: a
                    };
                    if (null != d) {
                        var m, p, g, f = -1;
                        this.tribute.collection.forEach((function(e) {
                            var t = e.trigger, i = e.requireLeadingSpace ? c.lastIndexWithLeadingSpace(d, t) : d.lastIndexOf(t);
                            i > f && (f = i, m = t, n = e.requireLeadingSpace);
                        }));
                        var b = f >= 0 && (0 === f || !n || /[\xA0\s]/g.test(d.substring(f - 1, f)));
                        if (b) {
                            p = d.substring(f + m.length, d.length), m = d.substring(f, f + m.length);
                            var y = p.substring(0, 1);
                            g = p.length > 0 && (" " === y || "\xa0" === y), t && (p = p.trim());
                            var w = i ? /[^\S ]/g : /[\xA0\s]/g;
                            this.tribute.hasTrailingSpace = w.test(p);
                        }
                        if (-1 === f || p && !p[0].trim() || s.selectionStart !== s.selectionEnd) return void (this.tribute.doDropMenu = !0);
                        if (b && !g && (e || !w.test(p))) return {
                            mentionPosition: f,
                            mentionText: p,
                            mentionSelectedElement: s,
                            mentionSelectedPath: r,
                            mentionSelectedOffset: a,
                            mentionTriggerChar: m
                        };
                    }
                }
            }, {
                key: "lastIndexWithLeadingSpace",
                value: function(e, t) {
                    for (var n = e.split("").reverse().join(""), i = -1, o = 0, s = e.length; o < s; o++) {
                        for (var r = o === e.length - 1, a = /\s/.test(n[o + 1]), c = !0, u = t.length - 1; u >= 0; u--) if (t[u] !== n[o - u]) {
                            c = !1;
                            break;
                        }
                        if (c && (r || a)) {
                            i = e.length - 1 - o;
                            break;
                        }
                    }
                    return i;
                }
            }, {
                key: "isContentEditable",
                value: function(e) {
                    return "INPUT" !== e.nodeName && "TEXTAREA" !== e.nodeName;
                }
            }, {
                key: "isMenuOffScreen",
                value: function(e, t) {
                    var n = window.innerWidth, i = window.innerHeight, o = document.documentElement, s = (window.pageXOffset || o.scrollLeft) - (o.clientLeft || 0), r = (window.pageYOffset || o.scrollTop) - (o.clientTop || 0), a = "number" == typeof e.top ? e.top : r + i - e.bottom - t.height, c = "number" == typeof e.right ? e.right : e.left + t.width, u = "number" == typeof e.bottom ? e.bottom : e.top + t.height, l = "number" == typeof e.left ? e.left : s + n - e.right - t.width;
                    return {
                        top: a < Math.floor(r),
                        right: c > Math.ceil(s + n),
                        bottom: u > Math.ceil(r + i),
                        left: l < Math.floor(s)
                    };
                }
            }, {
                key: "getMenuDimensions",
                value: function() {
                    var e = {
                        width: null,
                        height: null
                    };
                    return this.tribute.menu.style.cssText = "top: 0px;\n                                 left: 0px;\n                                 position: fixed;\n                                 display: block;\n                                 visibility; hidden;", 
                    e.width = this.tribute.menu.offsetWidth, e.height = this.tribute.menu.offsetHeight, 
                    this.tribute.menu.style.cssText = "display: none;", e;
                }
            }, {
                key: "getTextAreaOrInputUnderlinePosition",
                value: function(e, t, n) {
                    var i = null !== window.mozInnerScreenX, o = this.getDocument().createElement("div");
                    o.id = "input-textarea-caret-position-mirror-div", this.getDocument().body.appendChild(o);
                    var s = o.style, r = window.getComputedStyle ? getComputedStyle(e) : e.currentStyle;
                    s.whiteSpace = "pre-wrap", "INPUT" !== e.nodeName && (s.wordWrap = "break-word"), 
                    s.position = "absolute", s.visibility = "hidden", [ "direction", "boxSizing", "width", "height", "overflowX", "overflowY", "borderTopWidth", "borderRightWidth", "borderBottomWidth", "borderLeftWidth", "paddingTop", "paddingRight", "paddingBottom", "paddingLeft", "fontStyle", "fontVariant", "fontWeight", "fontStretch", "fontSize", "fontSizeAdjust", "lineHeight", "fontFamily", "textAlign", "textTransform", "textIndent", "textDecoration", "letterSpacing", "wordSpacing" ].forEach((function(e) {
                        s[e] = r[e];
                    })), i ? (s.width = "".concat(parseInt(r.width) - 2, "px"), e.scrollHeight > parseInt(r.height) && (s.overflowY = "scroll")) : s.overflow = "hidden", 
                    o.textContent = e.value.substring(0, t), "INPUT" === e.nodeName && (o.textContent = o.textContent.replace(/\s/g, "\xa0"));
                    var a = this.getDocument().createElement("span");
                    a.textContent = e.value.substring(t) || ".", o.appendChild(a);
                    var c = e.getBoundingClientRect(), u = document.documentElement, l = (window.pageXOffset || u.scrollLeft) - (u.clientLeft || 0), d = (window.pageYOffset || u.scrollTop) - (u.clientTop || 0), h = 0, m = 0;
                    this.menuContainerIsBody && (h = c.top, m = c.left);
                    var p = {
                        top: h + d + a.offsetTop + parseInt(r.borderTopWidth) + parseInt(r.fontSize) - e.scrollTop,
                        left: m + l + a.offsetLeft + parseInt(r.borderLeftWidth)
                    }, g = window.innerWidth, f = window.innerHeight, b = this.getMenuDimensions(), y = this.isMenuOffScreen(p, b);
                    y.right && (p.right = g - p.left, p.left = "auto");
                    var w = this.tribute.menuContainer ? this.tribute.menuContainer.offsetHeight : this.getDocument().body.offsetHeight;
                    if (y.bottom) {
                        var E = w - (f - (this.tribute.menuContainer ? this.tribute.menuContainer.getBoundingClientRect() : this.getDocument().body.getBoundingClientRect()).top);
                        p.bottom = E + (f - c.top - a.offsetTop), p.top = "auto";
                    }
                    return (y = this.isMenuOffScreen(p, b)).left && (p.left = g > b.width ? l + g - b.width : l, 
                    delete p.right), y.top && (p.top = f > b.height ? d + f - b.height : d, delete p.bottom), 
                    this.getDocument().body.removeChild(o), p;
                }
            }, {
                key: "getContentEditableCaretPosition",
                value: function(e) {
                    var t, n = this.getWindowSelection();
                    (t = this.getDocument().createRange()).setStart(n.anchorNode, e), t.setEnd(n.anchorNode, e), 
                    t.collapse(!1);
                    var i = t.getBoundingClientRect(), o = document.documentElement, s = (window.pageXOffset || o.scrollLeft) - (o.clientLeft || 0), r = (window.pageYOffset || o.scrollTop) - (o.clientTop || 0), a = {
                        left: i.left + s,
                        top: i.top + i.height + r
                    }, c = window.innerWidth, u = window.innerHeight, l = this.getMenuDimensions(), d = this.isMenuOffScreen(a, l);
                    d.right && (a.left = "auto", a.right = c - i.left - s);
                    var h = this.tribute.menuContainer ? this.tribute.menuContainer.offsetHeight : this.getDocument().body.offsetHeight;
                    if (d.bottom) {
                        var m = h - (u - (this.tribute.menuContainer ? this.tribute.menuContainer.getBoundingClientRect() : this.getDocument().body.getBoundingClientRect()).top);
                        a.top = "auto", a.bottom = m + (u - i.top);
                    }
                    return (d = this.isMenuOffScreen(a, l)).left && (a.left = c > l.width ? s + c - l.width : s, 
                    delete a.right), d.top && (a.top = u > l.height ? r + u - l.height : r, delete a.bottom), 
                    this.menuContainerIsBody || (a.left = a.left ? a.left - this.tribute.menuContainer.offsetLeft : a.left, 
                    a.top = a.top ? a.top - this.tribute.menuContainer.offsetTop : a.top), a;
                }
            }, {
                key: "scrollIntoView",
                value: function(e) {
                    var t, n = this.menu;
                    if (void 0 !== n) {
                        for (;void 0 === t || 0 === t.height; ) if (0 === (t = n.getBoundingClientRect()).height && (void 0 === (n = n.childNodes[0]) || !n.getBoundingClientRect)) return;
                        var i = t.top, o = i + t.height;
                        if (i < 0) window.scrollTo(0, window.pageYOffset + t.top - 20); else if (o > window.innerHeight) {
                            var s = window.pageYOffset + t.top - 20;
                            s - window.pageYOffset > 100 && (s = window.pageYOffset + 100);
                            var r = window.pageYOffset - (window.innerHeight - o);
                            r > s && (r = s), window.scrollTo(0, r);
                        }
                    }
                }
            }, {
                key: "menuContainerIsBody",
                get: function() {
                    return this.tribute.menuContainer === document.body || !this.tribute.menuContainer;
                }
            } ]), t;
        }(), u = function() {
            function t(n) {
                e(this, t), this.tribute = n, this.tribute.search = this;
            }
            return n(t, [ {
                key: "simpleFilter",
                value: function(e, t) {
                    var n = this;
                    return t.filter((function(t) {
                        return n.test(e, t);
                    }));
                }
            }, {
                key: "test",
                value: function(e, t) {
                    return null !== this.match(e, t);
                }
            }, {
                key: "match",
                value: function(e, t, n) {
                    n = n || {}, t.length;
                    var i = n.pre || "", o = n.post || "", s = n.caseSensitive && t || t.toLowerCase();
                    if (n.skip) return {
                        rendered: t,
                        score: 0
                    };
                    e = n.caseSensitive && e || e.toLowerCase();
                    var r = this.traverse(s, e, 0, 0, []);
                    return r ? {
                        rendered: this.render(t, r.cache, i, o),
                        score: r.score
                    } : null;
                }
            }, {
                key: "traverse",
                value: function(e, t, n, i, o) {
                    if (this.tribute.autocompleteSeparator && (t = t.split(this.tribute.autocompleteSeparator).splice(-1)[0]), 
                    t.length === i) return {
                        score: this.calculateScore(o),
                        cache: o.slice()
                    };
                    if (!(e.length === n || t.length - i > e.length - n)) {
                        for (var s, r, a = t[i], c = e.indexOf(a, n); c > -1; ) {
                            if (o.push(c), r = this.traverse(e, t, c + 1, i + 1, o), o.pop(), !r) return s;
                            (!s || s.score < r.score) && (s = r), c = e.indexOf(a, c + 1);
                        }
                        return s;
                    }
                }
            }, {
                key: "calculateScore",
                value: function(e) {
                    var t = 0, n = 1;
                    return e.forEach((function(i, o) {
                        o > 0 && (e[o - 1] + 1 === i ? n += n + 1 : n = 1), t += n;
                    })), t;
                }
            }, {
                key: "render",
                value: function(e, t, n, i) {
                    var o = e.substring(0, t[0]);
                    return t.forEach((function(s, r) {
                        o += n + e[s] + i + e.substring(s + 1, t[r + 1] ? t[r + 1] : e.length);
                    })), o;
                }
            }, {
                key: "filter",
                value: function(e, t, n) {
                    var i = this;
                    return n = n || {}, t.reduce((function(t, o, s, r) {
                        var a = o;
                        n.extract && ((a = n.extract(o)) || (a = ""));
                        var c = i.match(e, a, n);
                        return null != c && (t[t.length] = {
                            string: c.rendered,
                            score: c.score,
                            index: s,
                            original: o
                        }), t;
                    }), []).sort((function(e, t) {
                        var n = t.score - e.score;
                        return n || e.index - t.index;
                    }));
                }
            } ]), t;
        }();
        /**
   * Tribute.js
   * Native ES6 JavaScript @mention Plugin
   * @license
   * The MIT License (MIT)
   *
   * Copyright (c) 2017-2020 ZURB, Inc.
   * Copyright (c) 2014 Jeff Collins
   * Copyright (c) 2012 Matt York
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
   * and associated documentation files (the "Software"), to deal in the Software without
   * restriction, including without limitation the rights to use, copy, modify, merge, publish,
   * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
   * Software is furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in all copies or
   * substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
   * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
   * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
   * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   **/
        return function() {
            function t(n) {
                var i, o = this, s = n.values, l = void 0 === s ? null : s, d = n.loadingItemTemplate, h = void 0 === d ? null : d, m = n.iframe, p = void 0 === m ? null : m, g = n.selectClass, f = void 0 === g ? "highlight" : g, b = n.containerClass, y = void 0 === b ? "tribute-container" : b, w = n.itemClass, E = void 0 === w ? "" : w, v = n.trigger, _ = void 0 === v ? "@" : v, C = n.autocompleteMode, x = void 0 !== C && C, T = n.autocompleteSeparator, A = void 0 === T ? null : T, S = n.selectTemplate, k = void 0 === S ? null : S, N = n.menuItemTemplate, O = void 0 === N ? null : N, I = n.lookup, P = void 0 === I ? "key" : I, L = n.fillAttr, F = void 0 === L ? "value" : L, M = n.collection, R = void 0 === M ? null : M, B = n.menuContainer, D = void 0 === B ? null : B, j = n.noMatchTemplate, H = void 0 === j ? null : j, U = n.requireLeadingSpace, Y = void 0 === U || U, $ = n.allowSpaces, q = void 0 !== $ && $, W = n.replaceTextSuffix, G = void 0 === W ? null : W, V = n.positionMenu, z = void 0 === V || V, K = n.spaceSelectsMatch, X = void 0 !== K && K, J = n.searchOpts, Q = void 0 === J ? {} : J, Z = n.menuItemLimit, ee = void 0 === Z ? null : Z, te = n.menuShowMinLength, ne = void 0 === te ? 0 : te;
                if (e(this, t), this.autocompleteMode = x, this.autocompleteSeparator = A, this.menuSelected = 0, 
                this.current = {}, this.inputEvent = !1, this.isActive = !1, this.menuContainer = D, 
                this.allowSpaces = q, this.replaceTextSuffix = G, this.positionMenu = z, this.hasTrailingSpace = !1, 
                this.spaceSelectsMatch = X, this.autocompleteMode && (_ = "", q = !1), l) this.collection = [ {
                    trigger: _,
                    iframe: p,
                    selectClass: f,
                    containerClass: y,
                    itemClass: E,
                    selectTemplate: (k || t.defaultSelectTemplate).bind(this),
                    menuItemTemplate: (O || t.defaultMenuItemTemplate).bind(this),
                    noMatchTemplate: (i = H, "string" == typeof i ? "" === i.trim() ? null : i : "function" == typeof i ? i.bind(o) : H || function() {
                        return "<li>No Match Found!</li>";
                    }.bind(o)),
                    lookup: P,
                    fillAttr: F,
                    values: l,
                    loadingItemTemplate: h,
                    requireLeadingSpace: Y,
                    searchOpts: Q,
                    menuItemLimit: ee,
                    menuShowMinLength: ne
                } ]; else {
                    if (!R) throw new Error("[Tribute] No collection specified.");
                    this.autocompleteMode && console.warn("Tribute in autocomplete mode does not work for collections"), 
                    this.collection = R.map((function(e) {
                        return {
                            trigger: e.trigger || _,
                            iframe: e.iframe || p,
                            selectClass: e.selectClass || f,
                            containerClass: e.containerClass || y,
                            itemClass: e.itemClass || E,
                            selectTemplate: (e.selectTemplate || t.defaultSelectTemplate).bind(o),
                            menuItemTemplate: (e.menuItemTemplate || t.defaultMenuItemTemplate).bind(o),
                            noMatchTemplate: function(e) {
                                return "string" == typeof e ? "" === e.trim() ? null : e : "function" == typeof e ? e.bind(o) : H || function() {
                                    return "<li>No Match Found!</li>";
                                }.bind(o);
                            }(H),
                            lookup: e.lookup || P,
                            fillAttr: e.fillAttr || F,
                            values: e.values,
                            loadingItemTemplate: e.loadingItemTemplate,
                            requireLeadingSpace: e.requireLeadingSpace,
                            searchOpts: e.searchOpts || Q,
                            menuItemLimit: e.menuItemLimit || ee,
                            menuShowMinLength: e.menuShowMinLength || ne
                        };
                    }));
                }
                new c(this), new r(this), new a(this), new u(this);
            }
            return n(t, [ {
                key: "triggers",
                value: function() {
                    return this.collection.map((function(e) {
                        return e.trigger;
                    }));
                }
            }, {
                key: "attach",
                value: function(e) {
                    if (!e) throw new Error("[Tribute] Must pass in a DOM node or NodeList.");
                    if ("undefined" != typeof jQuery && e instanceof jQuery && (e = e.get()), e.constructor === NodeList || e.constructor === HTMLCollection || e.constructor === Array) for (var t = e.length, n = 0; n < t; ++n) this._attach(e[n]); else this._attach(e);
                }
            }, {
                key: "_attach",
                value: function(e) {
                    e.hasAttribute("data-tribute") && console.warn("Tribute was already bound to " + e.nodeName), 
                    this.ensureEditable(e), this.events.bind(e), e.setAttribute("data-tribute", !0);
                }
            }, {
                key: "ensureEditable",
                value: function(e) {
                    if (-1 === t.inputTypes().indexOf(e.nodeName)) {
                        if (!e.contentEditable) throw new Error("[Tribute] Cannot bind to " + e.nodeName);
                        e.contentEditable = !0;
                    }
                }
            }, {
                key: "createMenu",
                value: function(e) {
                    var t = this.range.getDocument().createElement("div"), n = this.range.getDocument().createElement("ul");
                    return t.className = e, t.appendChild(n), this.menuContainer ? this.menuContainer.appendChild(t) : this.range.getDocument().body.appendChild(t);
                }
            }, {
                key: "showMenuFor",
                value: function(e, t) {
                    var n = this;
                    if (!this.isActive || this.current.element !== e || this.current.mentionText !== this.currentMentionTextSnapshot) {
                        this.currentMentionTextSnapshot = this.current.mentionText, this.menu || (this.menu = this.createMenu(this.current.collection.containerClass), 
                        e.tributeMenu = this.menu, this.menuEvents.bind(this.menu)), this.isActive = !0, 
                        this.menuSelected = 0, this.current.mentionText || (this.current.mentionText = "");
                        var o = function(e) {
                            if (n.isActive) {
                                var o = n.search.filter(n.current.mentionText, e, {
                                    pre: n.current.collection.searchOpts.pre || "<span>",
                                    post: n.current.collection.searchOpts.post || "</span>",
                                    skip: n.current.collection.searchOpts.skip,
                                    extract: function(e) {
                                        if ("string" == typeof n.current.collection.lookup) return e[n.current.collection.lookup];
                                        if ("function" == typeof n.current.collection.lookup) return n.current.collection.lookup(e, n.current.mentionText);
                                        throw new Error("Invalid lookup attribute, lookup must be string or function.");
                                    }
                                });
                                n.current.collection.menuItemLimit && (o = o.slice(0, n.current.collection.menuItemLimit)), 
                                n.current.filteredItems = o;
                                var s = n.menu.querySelector("ul");
                                if (n.range.positionMenuAtCaret(t), !o.length) {
                                    var r = new CustomEvent("tribute-no-match", {
                                        detail: n.menu
                                    });
                                    return n.current.element.dispatchEvent(r), void ("function" == typeof n.current.collection.noMatchTemplate && !n.current.collection.noMatchTemplate() || !n.current.collection.noMatchTemplate ? n.hideMenu() : "function" == typeof n.current.collection.noMatchTemplate ? s.innerHTML = n.current.collection.noMatchTemplate() : s.innerHTML = n.current.collection.noMatchTemplate);
                                }
                                s.innerHTML = "";
                                var a = n.range.getDocument().createDocumentFragment();
                                o.forEach((function(e, t) {
                                    var o = n.range.getDocument().createElement("li");
                                    o.setAttribute("data-index", t), o.className = n.current.collection.itemClass, o.addEventListener("mousemove", (function(e) {
                                        var t = i(n._findLiTarget(e.target), 2), o = (t[0], t[1]);
                                        0 !== e.movementY && n.events.setActiveLi(o);
                                    })), n.menuSelected === t && o.classList.add(n.current.collection.selectClass), 
                                    o.innerHTML = n.current.collection.menuItemTemplate(e), a.appendChild(o);
                                })), s.appendChild(a);
                            }
                        };
                        "function" == typeof this.current.collection.values ? (this.current.collection.loadingItemTemplate && (this.menu.querySelector("ul").innerHTML = this.current.collection.loadingItemTemplate, 
                        this.range.positionMenuAtCaret(t)), this.current.collection.values(this.current.mentionText, o)) : o(this.current.collection.values);
                    }
                }
            }, {
                key: "_findLiTarget",
                value: function(e) {
                    if (!e) return [];
                    var t = e.getAttribute("data-index");
                    return t ? [ e, t ] : this._findLiTarget(e.parentNode);
                }
            }, {
                key: "showMenuForCollection",
                value: function(e, t) {
                    e !== document.activeElement && this.placeCaretAtEnd(e), this.current.collection = this.collection[t || 0], 
                    this.current.externalTrigger = !0, this.current.element = e, e.isContentEditable ? this.insertTextAtCursor(this.current.collection.trigger) : this.insertAtCaret(e, this.current.collection.trigger), 
                    this.showMenuFor(e);
                }
            }, {
                key: "placeCaretAtEnd",
                value: function(e) {
                    if (e.focus(), void 0 !== window.getSelection && void 0 !== document.createRange) {
                        var t = document.createRange();
                        t.selectNodeContents(e), t.collapse(!1);
                        var n = window.getSelection();
                        n.removeAllRanges(), n.addRange(t);
                    } else if (void 0 !== document.body.createTextRange) {
                        var i = document.body.createTextRange();
                        i.moveToElementText(e), i.collapse(!1), i.select();
                    }
                }
            }, {
                key: "insertTextAtCursor",
                value: function(e) {
                    var t, n;
                    (n = (t = window.getSelection()).getRangeAt(0)).deleteContents();
                    var i = document.createTextNode(e);
                    n.insertNode(i), n.selectNodeContents(i), n.collapse(!1), t.removeAllRanges(), t.addRange(n);
                }
            }, {
                key: "insertAtCaret",
                value: function(e, t) {
                    var n = e.scrollTop, i = e.selectionStart, o = e.value.substring(0, i), s = e.value.substring(e.selectionEnd, e.value.length);
                    e.value = o + t + s, i += t.length, e.selectionStart = i, e.selectionEnd = i, e.focus(), 
                    e.scrollTop = n;
                }
            }, {
                key: "hideMenu",
                value: function() {
                    this.menu && (this.menu.style.cssText = "display: none;", this.isActive = !1, this.menuSelected = 0, 
                    this.current = {});
                }
            }, {
                key: "selectItemAtIndex",
                value: function(e, t) {
                    if ("number" == typeof (e = parseInt(e)) && !isNaN(e)) {
                        var n = this.current.filteredItems[e], i = this.current.collection.selectTemplate(n);
                        null !== i && this.replaceText(i, t, n);
                    }
                }
            }, {
                key: "replaceText",
                value: function(e, t, n) {
                    this.range.replaceTriggerText(e, !0, !0, t, n);
                }
            }, {
                key: "_append",
                value: function(e, t, n) {
                    if ("function" == typeof e.values) throw new Error("Unable to append to values, as it is a function.");
                    e.values = n ? t : e.values.concat(t);
                }
            }, {
                key: "append",
                value: function(e, t, n) {
                    var i = parseInt(e);
                    if ("number" != typeof i) throw new Error("please provide an index for the collection to update.");
                    var o = this.collection[i];
                    this._append(o, t, n);
                }
            }, {
                key: "appendCurrent",
                value: function(e, t) {
                    if (!this.isActive) throw new Error("No active state. Please use append instead and pass an index.");
                    this._append(this.current.collection, e, t);
                }
            }, {
                key: "detach",
                value: function(e) {
                    if (!e) throw new Error("[Tribute] Must pass in a DOM node or NodeList.");
                    if ("undefined" != typeof jQuery && e instanceof jQuery && (e = e.get()), e.constructor === NodeList || e.constructor === HTMLCollection || e.constructor === Array) for (var t = e.length, n = 0; n < t; ++n) this._detach(e[n]); else this._detach(e);
                }
            }, {
                key: "_detach",
                value: function(e) {
                    var t = this;
                    this.events.unbind(e), e.tributeMenu && this.menuEvents.unbind(e.tributeMenu), setTimeout((function() {
                        e.removeAttribute("data-tribute"), t.isActive = !1, e.tributeMenu && e.tributeMenu.remove();
                    }));
                }
            }, {
                key: "isActive",
                get: function() {
                    return this._isActive;
                },
                set: function(e) {
                    if (this._isActive != e && (this._isActive = e, this.current.element)) {
                        var t = new CustomEvent("tribute-active-".concat(e));
                        this.current.element.dispatchEvent(t);
                    }
                }
            } ], [ {
                key: "defaultSelectTemplate",
                value: function(e) {
                    return void 0 === e ? "".concat(this.current.collection.trigger).concat(this.current.mentionText) : this.range.isContentEditable(this.current.element) ? '<span class="tribute-mention">' + (this.current.collection.trigger + e.original[this.current.collection.fillAttr]) + "</span>" : this.current.collection.trigger + e.original[this.current.collection.fillAttr];
                }
            }, {
                key: "defaultMenuItemTemplate",
                value: function(e) {
                    return e.string;
                }
            }, {
                key: "inputTypes",
                value: function() {
                    return [ "TEXTAREA", "INPUT" ];
                }
            } ]), t;
        }();
    }();
}, function(e, t, n) {
    e.exports = function() {
        return n(16)('!function(t) {\n    var e = {};\n    function r(n) {\n        if (e[n]) return e[n].exports;\n        var i = e[n] = {\n            i: n,\n            l: !1,\n            exports: {}\n        };\n        return t[n].call(i.exports, i, i.exports, r), i.l = !0, i.exports;\n    }\n    r.m = t, r.c = e, r.d = function(t, e, n) {\n        r.o(t, e) || Object.defineProperty(t, e, {\n            enumerable: !0,\n            get: n\n        });\n    }, r.r = function(t) {\n        "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, {\n            value: "Module"\n        }), Object.defineProperty(t, "__esModule", {\n            value: !0\n        });\n    }, r.t = function(t, e) {\n        if (1 & e && (t = r(t)), 8 & e) return t;\n        if (4 & e && "object" == typeof t && t && t.__esModule) return t;\n        var n = Object.create(null);\n        if (r.r(n), Object.defineProperty(n, "default", {\n            enumerable: !0,\n            value: t\n        }), 2 & e && "string" != typeof t) for (var i in t) r.d(n, i, function(e) {\n            return t[e];\n        }.bind(null, i));\n        return n;\n    }, r.n = function(t) {\n        var e = t && t.__esModule ? function() {\n            return t.default;\n        } : function() {\n            return t;\n        };\n        return r.d(e, "a", e), e;\n    }, r.o = function(t, e) {\n        return Object.prototype.hasOwnProperty.call(t, e);\n    }, r.p = "", r(r.s = 33);\n}([ function(t, e, r) {\n    "use strict";\n    const n = "undefined" == typeof window ? self : window;\n    n.convenientDiscussions = n.convenientDiscussions || {}, "object" != typeof n.convenientDiscussions && (n.convenientDiscussions = {}), \n    e.a = n.convenientDiscussions;\n}, function(t, e, r) {\n    "use strict";\n    r.d(e, "a", (function() {\n        return n;\n    }));\n    class n extends Error {\n        constructor(t) {\n            let e;\n            t ? (e = t.type, t.code && (e += "/".concat(t.code)), t.apiData && t.apiData.error && t.apiData.error.code && (e += "/".concat(t.apiData.error.code))) : e = "", \n            super(e), this.name = "CdError", this.data = t;\n        }\n    }\n}, function(t, e, r) {\n    "use strict";\n    r.d(e, "g", (function() {\n        return s;\n    })), r.d(e, "a", (function() {\n        return o;\n    })), r.d(e, "c", (function() {\n        return a;\n    })), r.d(e, "e", (function() {\n        return u;\n    })), r.d(e, "i", (function() {\n        return c;\n    })), r.d(e, "h", (function() {\n        return l;\n    })), r.d(e, "b", (function() {\n        return h;\n    })), r.d(e, "d", (function() {\n        return d;\n    })), r.d(e, "f", (function() {\n        return p;\n    }));\n    var n = r(1), i = (r(3), r(0));\n    r(9), r(11), r(10);\n    r(5);\n    function s(t, e) {\n        return !(!e || t.nodeType !== Node.TEXT_NODE) || (t.nodeType !== Node.ELEMENT_NODE ? null : !!i.a.g.POPULAR_INLINE_ELEMENTS.includes(t.tagName) || !i.a.g.POPULAR_NOT_INLINE_ELEMENTS.includes(t.tagName) && ("undefined" != typeof window ? (console.warn("Expensive operation: isInline() called for:", t), \n        "inline" === window.getComputedStyle(t).display) : null));\n    }\n    function o(t) {\n        return void 0 !== t;\n    }\n    function a(t) {\n        return [].concat(...t);\n    }\n    function u(t, e) {\n        throw "http" === t ? new n.a({\n            type: "network"\n        }) : new n.a({\n            type: "api",\n            code: "error",\n            apiData: e\n        });\n    }\n    function c(t) {\n        return t.replace(/_/g, " ");\n    }\n    function l(t) {\n        return t.replace(/ /g, "_");\n    }\n    function h(t) {\n        return t.length ? t[0].toUpperCase() + t.slice(1) : "";\n    }\n    function d(t) {\n        return t.map(mw.msg);\n    }\n    function p(t, e, r, n) {\n        return t.replace(e, (t, e, i) => ("number" == typeof e && (e = "", i = ""), (e || "") + (n ? "\\x03" : "\\x01") + r.push(i || t) + (n ? "\\x04" : "\\x02")));\n    }\n}, function(t, e) {\n    function r(t, e, r, n, i, s, o) {\n        try {\n            var a = t[s](o), u = a.value;\n        } catch (t) {\n            return void r(t);\n        }\n        a.done ? e(u) : Promise.resolve(u).then(n, i);\n    }\n    t.exports = function(t) {\n        return function() {\n            var e = this, n = arguments;\n            return new Promise((function(i, s) {\n                var o = t.apply(e, n);\n                function a(t) {\n                    r(o, i, s, a, u, "next", t);\n                }\n                function u(t) {\n                    r(o, i, s, a, u, "throw", t);\n                }\n                a(void 0);\n            }));\n        };\n    };\n}, function(t, e) {\n    t.exports = function(t, e) {\n        var r = e.get(t);\n        if (!r) throw new TypeError("attempted to get private field on non-instance");\n        return r.get ? r.get.call(t) : r.value;\n    };\n}, function(t, e, r) {\n    "use strict";\n    r.d(e, "b", (function() {\n        return a;\n    })), r.d(e, "a", (function() {\n        return c;\n    })), r.d(e, "c", (function() {\n        return h;\n    })), r.d(e, "d", (function() {\n        return d;\n    }));\n    var n = r(0), i = r(2);\n    let s, o;\n    function a(t, e) {\n        s || (s = new RegExp("^([^]*)(".concat(n.a.g.TIMESTAMP_REGEXP.source, ")"))), o || (o = new RegExp("^([^]*)(".concat(n.a.g.TIMESTAMP_REGEXP_NO_TIMEZONE.source, ")")));\n        const r = void 0 === e ? s : o, i = t.match(r);\n        if (!i) return null;\n        let a = n.a.g.TIMESTAMP_PARSER(i, n.a.g.TIMESTAMP_MATCHING_GROUPS, n.a.g.DIGITS, n.a.g.LOCAL_TIMEZONE_OFFSET);\n        return e && (a = new Date(a.getTime() - e * n.a.g.MILLISECONDS_IN_A_MINUTE)), {\n            date: a,\n            match: i\n        };\n    }\n    function u(t, e) {\n        return ("0000" + t).slice(-e);\n    }\n    function c(t, e, r = !1) {\n        let n = t.getUTCFullYear(), s = t.getUTCMonth(), o = t.getUTCDate(), a = t.getUTCHours(), c = t.getUTCMinutes(), h = u(n, 4) + u(s + 1, 2) + u(o, 2) + u(a, 2) + u(c, 2) + (e ? "_" + Object(i.h)(e) : "");\n        if (r && l.includes(h)) {\n            let t = 2;\n            const e = h;\n            do {\n                h = "".concat(e, "_").concat(t), t++;\n            } while (l.includes(h));\n        }\n        return h;\n    }\n    let l = [];\n    function h(t) {\n        t && l.push(t);\n    }\n    function d() {\n        l = [];\n    }\n}, function(t, e, r) {\n    "use strict";\n    function n(t) {\n        for (var r in t) e.hasOwnProperty(r) || (e[r] = t[r]);\n    }\n    var i = this && this.__importStar || function(t) {\n        if (t && t.__esModule) return t;\n        var e = {};\n        if (null != t) for (var r in t) Object.hasOwnProperty.call(t, r) && (e[r] = t[r]);\n        return e.default = t, e;\n    };\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    });\n    var s = r(16);\n    e.Parser = s.Parser;\n    var o = r(20);\n    e.DomHandler = o.DomHandler, e.DefaultHandler = o.DomHandler, e.parseDOM = function(t, e) {\n        var r = new o.DomHandler(void 0, e);\n        return new s.Parser(r, e).end(t), r.dom;\n    }, e.createDomStream = function(t, e, r) {\n        var n = new o.DomHandler(t, e, r);\n        return new s.Parser(n, e);\n    };\n    var a = r(17);\n    e.Tokenizer = a.default;\n    var u = i(r(15));\n    e.ElementType = u, e.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    }, n(r(21)), n(r(45)), n(r(46));\n    var c = i(r(22));\n    e.DomUtils = c;\n    var l = r(21);\n    e.RssHandler = l.FeedHandler;\n}, function(t, e, r) {\n    "use strict";\n    r.d(e, "c", (function() {\n        return i;\n    })), r.d(e, "b", (function() {\n        return s;\n    })), r.d(e, "a", (function() {\n        return o;\n    }));\n    var n = r(0);\n    class i {\n        constructor(t, e, r = !1, n = t) {\n            this.acceptNode = e, this.root = t, this.currentNode = n, r ? (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(t) {\n            let e = this.currentNode;\n            if (e === this.root && !t.includes("Child")) return null;\n            do {\n                e = e[t];\n            } while (e && this.acceptNode && !this.acceptNode(e));\n            return e && (this.currentNode = e), e || 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 t = this.currentNode;\n            do {\n                if (t[this.firstChildProperty]) t = t[this.firstChildProperty]; else {\n                    for (;t && !t[this.nextSiblingProperty] && t.parentNode !== this.root; ) t = t.parentNode;\n                    t && (t = t[this.nextSiblingProperty]);\n                }\n            } while (t && this.acceptNode && !this.acceptNode(t));\n            return t && (this.currentNode = t), t;\n        }\n        previousNode() {\n            let t = this.currentNode;\n            if (t !== this.root) {\n                do {\n                    if (t[this.previousSiblingProperty]) for (t = t[this.previousSiblingProperty]; t[this.lastChildProperty]; ) t = t[this.lastChildProperty]; else t = t.parentNode;\n                } while (t && this.acceptNode && !this.acceptNode(t));\n                return t && (this.currentNode = t), t;\n            }\n        }\n    }\n    class s extends i {\n        constructor(t) {\n            super(n.a.g.rootElement, t => ![ "STYLE", "LINK" ].includes(t.tagName), !0), t && (this.currentNode = t);\n        }\n    }\n    class o extends i {\n        constructor(t) {\n            super(n.a.g.rootElement, t => t.nodeType === Node.TEXT_NODE || t.nodeType === Node.ELEMENT_NODE && ![ "STYLE", "LINK" ].includes(t.tagName)), \n            t && (this.currentNode = t);\n        }\n    }\n}, function(t, e) {\n    t.exports = function(t, e, r) {\n        var n = e.get(t);\n        if (!n) throw new TypeError("attempted to set private field on non-instance");\n        if (n.set) n.set.call(t, r); else {\n            if (!n.writable) throw new TypeError("attempted to set read only private field");\n            n.value = r;\n        }\n        return r;\n    };\n}, function(t, e, r) {\n    "use strict";\n    r.d(e, "c", (function() {\n        return u;\n    })), r.d(e, "b", (function() {\n        return c;\n    })), r.d(e, "a", (function() {\n        return l;\n    }));\n    var n = r(31), i = r.n(n), s = r(0), o = r(10), a = r(5);\n    r(2);\n    function u(t) {\n        return t.replace(/\x3c!--([^]*?)--\x3e/g, (t, e) => "\\x3c!--" + " ".repeat(e.length) + "--\\x3e");\n    }\n    function c(t) {\n        const e = function(t, e) {\n            const r = u(t).replace(s.a.g.QUOTE_REGEXP, (t, e, r, n) => e + " ".repeat(r.length) + n).replace(s.a.g.COMMENT_ANTIPATTERNS_REGEXP, t => " ".repeat(t.length));\n            let n = function(t) {\n                const e = new RegExp("^((.*)(".concat(s.a.g.TIMESTAMP_REGEXP.source, ")(?:\\\\}\\\\}|</small>)?).*(?:\\n*|$)"), "igm"), r = new RegExp("^((.*)(".concat(s.a.g.CAPTURE_USER_NAME_PATTERN, ".{1,").concat(251, "}((").concat(s.a.g.TIMESTAMP_REGEXP.source, ")(?:\\\\}\\\\}|</small>)?)).*)(\\n*|$)"), "igm"), n = new RegExp(s.a.g.CAPTURE_USER_NAME_PATTERN, "ig");\n                let i, a = [];\n                for (;i = e.exec(t); ) {\n                    const e = i[0];\n                    r.lastIndex = 0;\n                    const s = r.exec(e);\n                    let u, c, h, d, p, f;\n                    if (s) {\n                        let e;\n                        u = o.a.getUser(l(s[4])), c = s[7], h = i.index + s[2].length, d = i.index + s[1].length, \n                        p = i.index + s[0].length, f = s[3], n.lastIndex = 0;\n                        const r = Math.max(0, s[0].length - s[6].length - s[s.length - 1].length - 251), a = s[0].slice(r);\n                        for (;e = n.exec(a); ) {\n                            if (e[2]) continue;\n                            if (o.a.getUser(l(e[1])) === u) {\n                                h = i.index + r + e.index, f = t.slice(h, d);\n                                break;\n                            }\n                        }\n                    } else c = i[3], h = i.index + i[2].length, d = i.index + i[1].length, p = i.index + i[0].length, \n                    f = c;\n                    a.push({\n                        author: u,\n                        timestamp: c,\n                        startIndex: h,\n                        endIndex: d,\n                        dirtyCode: f,\n                        nextCommentStartIndex: p\n                    });\n                }\n                return a;\n            }(r);\n            const i = function(t, e) {\n                const r = [];\n                if (s.a.g.UNSIGNED_TEMPLATES_REGEXP) {\n                    let n;\n                    for (;n = s.a.g.UNSIGNED_TEMPLATES_REGEXP.exec(t); ) {\n                        let t, i;\n                        s.a.g.TIMESTAMP_REGEXP_NO_TIMEZONE.test(n[2]) ? (i = n[2], t = n[3]) : s.a.g.TIMESTAMP_REGEXP_NO_TIMEZONE.test(n[3]) ? (i = n[3], \n                        t = n[2]) : t = n[2], t = o.a.getUser(l(t));\n                        let a = n.index;\n                        const u = n.index + n[1].length;\n                        let c = n[1];\n                        const h = n.index + n[0].length, d = e.findIndex(t => t.nextCommentStartIndex === h);\n                        -1 !== d && e.splice(d, 1), r.push({\n                            author: t,\n                            timestamp: i,\n                            startIndex: a,\n                            endIndex: u,\n                            dirtyCode: c,\n                            nextCommentStartIndex: h\n                        });\n                    }\n                }\n                return r;\n            }(r, n);\n            n.push(...i), i.length && n.sort((t, e) => t.startIndex > e.startIndex ? 1 : -1);\n            n = n.filter(t => t.author), n.forEach((t, e) => {\n                t.commentStartIndex = 0 === e ? 0 : n[e - 1].nextCommentStartIndex;\n            }), e && Object(a.d)();\n            return n.forEach((t, r) => {\n                const {date: n} = t.timestamp && Object(a.b)(t.timestamp) || {};\n                if (t.id = r, t.date = n, delete t.nextCommentStartIndex, e) {\n                    const e = n ? Object(a.a)(n, t.author.name, !0) : void 0;\n                    t.anchor = e, Object(a.c)(e);\n                }\n            }), n;\n        }(t);\n        return e.length ? e[0].timestamp : null;\n    }\n    function l(t) {\n        if (-1 === t.indexOf("&")) return t;\n        {\n            let e = t;\n            return -1 !== e.indexOf("&#38;amp;") && (e = e.replace(/&#38;amp;/g, "&amp;amp;")), \n            e = -1 === e.indexOf("&#") ? e : e.replace(/&#(\\d+);/g, (t, e) => String.fromCharCode(e)), \n            -1 === e.indexOf("&") ? e : i()(e);\n        }\n    }\n}, function(t, e, r) {\n    "use strict";\n    var n = r(8), i = r.n(n), s = r(4), o = r.n(s), a = r(0), u = r(2);\n    e.a = {\n        users: {},\n        getUser(t) {\n            if (t.includes("#") && (t = t.slice(0, t.indexOf("#"))), t = Object(u.i)(Object(u.b)(t)).trim(), \n            !this.users[t]) {\n                const e = t === a.a.g.CURRENT_USER_NAME ? {\n                    gender: a.a.g.CURRENT_USER_GENDER\n                } : {};\n                this.users[t] = new l(t, e);\n            }\n            return this.users[t];\n        }\n    };\n    var c = new WeakMap;\n    class l {\n        constructor(t, e = {}) {\n            c.set(this, {\n                writable: !0,\n                value: void 0\n            }), this.name = t, this.options = new mw.Map, Object.keys(e).forEach(t => {\n                this[t] = e[t];\n            });\n        }\n        get registered() {\n            return void 0 === o()(this, c) && i()(this, c, !mw.util.isIPAddress(this.name)), \n            o()(this, c);\n        }\n        set gender(t) {\n            this.options.set("gender", t);\n        }\n        get gender() {\n            return this.options.get("gender");\n        }\n    }\n}, function(t, e, r) {\n    var n, i = function() {\n        var t = String.fromCharCode, e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", r = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$", n = {};\n        function i(t, e) {\n            if (!n[t]) {\n                n[t] = {};\n                for (var r = 0; r < t.length; r++) n[t][t.charAt(r)] = r;\n            }\n            return n[t][e];\n        }\n        var s = {\n            compressToBase64: function(t) {\n                if (null == t) return "";\n                var r = s._compress(t, 6, (function(t) {\n                    return e.charAt(t);\n                }));\n                switch (r.length % 4) {\n                  default:\n                  case 0:\n                    return r;\n\n                  case 1:\n                    return r + "===";\n\n                  case 2:\n                    return r + "==";\n\n                  case 3:\n                    return r + "=";\n                }\n            },\n            decompressFromBase64: function(t) {\n                return null == t ? "" : "" == t ? null : s._decompress(t.length, 32, (function(r) {\n                    return i(e, t.charAt(r));\n                }));\n            },\n            compressToUTF16: function(e) {\n                return null == e ? "" : s._compress(e, 15, (function(e) {\n                    return t(e + 32);\n                })) + " ";\n            },\n            decompressFromUTF16: function(t) {\n                return null == t ? "" : "" == t ? null : s._decompress(t.length, 16384, (function(e) {\n                    return t.charCodeAt(e) - 32;\n                }));\n            },\n            compressToUint8Array: function(t) {\n                for (var e = s.compress(t), r = new Uint8Array(2 * e.length), n = 0, i = e.length; n < i; n++) {\n                    var o = e.charCodeAt(n);\n                    r[2 * n] = o >>> 8, r[2 * n + 1] = o % 256;\n                }\n                return r;\n            },\n            decompressFromUint8Array: function(e) {\n                if (null == e) return s.decompress(e);\n                for (var r = new Array(e.length / 2), n = 0, i = r.length; n < i; n++) r[n] = 256 * e[2 * n] + e[2 * n + 1];\n                var o = [];\n                return r.forEach((function(e) {\n                    o.push(t(e));\n                })), s.decompress(o.join(""));\n            },\n            compressToEncodedURIComponent: function(t) {\n                return null == t ? "" : s._compress(t, 6, (function(t) {\n                    return r.charAt(t);\n                }));\n            },\n            decompressFromEncodedURIComponent: function(t) {\n                return null == t ? "" : "" == t ? null : (t = t.replace(/ /g, "+"), s._decompress(t.length, 32, (function(e) {\n                    return i(r, t.charAt(e));\n                })));\n            },\n            compress: function(e) {\n                return s._compress(e, 16, (function(e) {\n                    return t(e);\n                }));\n            },\n            _compress: function(t, e, r) {\n                if (null == t) return "";\n                var n, i, s, o = {}, a = {}, u = "", c = "", l = "", h = 2, d = 3, p = 2, f = [], _ = 0, m = 0;\n                for (s = 0; s < t.length; s += 1) if (u = t.charAt(s), Object.prototype.hasOwnProperty.call(o, u) || (o[u] = d++, \n                a[u] = !0), c = l + u, Object.prototype.hasOwnProperty.call(o, c)) l = c; else {\n                    if (Object.prototype.hasOwnProperty.call(a, l)) {\n                        if (l.charCodeAt(0) < 256) {\n                            for (n = 0; n < p; n++) _ <<= 1, m == e - 1 ? (m = 0, f.push(r(_)), _ = 0) : m++;\n                            for (i = l.charCodeAt(0), n = 0; n < 8; n++) _ = _ << 1 | 1 & i, m == e - 1 ? (m = 0, \n                            f.push(r(_)), _ = 0) : m++, i >>= 1;\n                        } else {\n                            for (i = 1, n = 0; n < p; n++) _ = _ << 1 | i, m == e - 1 ? (m = 0, f.push(r(_)), \n                            _ = 0) : m++, i = 0;\n                            for (i = l.charCodeAt(0), n = 0; n < 16; n++) _ = _ << 1 | 1 & i, m == e - 1 ? (m = 0, \n                            f.push(r(_)), _ = 0) : m++, i >>= 1;\n                        }\n                        0 == --h && (h = Math.pow(2, p), p++), delete a[l];\n                    } else for (i = o[l], n = 0; n < p; n++) _ = _ << 1 | 1 & i, m == e - 1 ? (m = 0, \n                    f.push(r(_)), _ = 0) : m++, i >>= 1;\n                    0 == --h && (h = Math.pow(2, p), p++), o[c] = d++, l = String(u);\n                }\n                if ("" !== l) {\n                    if (Object.prototype.hasOwnProperty.call(a, l)) {\n                        if (l.charCodeAt(0) < 256) {\n                            for (n = 0; n < p; n++) _ <<= 1, m == e - 1 ? (m = 0, f.push(r(_)), _ = 0) : m++;\n                            for (i = l.charCodeAt(0), n = 0; n < 8; n++) _ = _ << 1 | 1 & i, m == e - 1 ? (m = 0, \n                            f.push(r(_)), _ = 0) : m++, i >>= 1;\n                        } else {\n                            for (i = 1, n = 0; n < p; n++) _ = _ << 1 | i, m == e - 1 ? (m = 0, f.push(r(_)), \n                            _ = 0) : m++, i = 0;\n                            for (i = l.charCodeAt(0), n = 0; n < 16; n++) _ = _ << 1 | 1 & i, m == e - 1 ? (m = 0, \n                            f.push(r(_)), _ = 0) : m++, i >>= 1;\n                        }\n                        0 == --h && (h = Math.pow(2, p), p++), delete a[l];\n                    } else for (i = o[l], n = 0; n < p; n++) _ = _ << 1 | 1 & i, m == e - 1 ? (m = 0, \n                    f.push(r(_)), _ = 0) : m++, i >>= 1;\n                    0 == --h && (h = Math.pow(2, p), p++);\n                }\n                for (i = 2, n = 0; n < p; n++) _ = _ << 1 | 1 & i, m == e - 1 ? (m = 0, f.push(r(_)), \n                _ = 0) : m++, i >>= 1;\n                for (;;) {\n                    if (_ <<= 1, m == e - 1) {\n                        f.push(r(_));\n                        break;\n                    }\n                    m++;\n                }\n                return f.join("");\n            },\n            decompress: function(t) {\n                return null == t ? "" : "" == t ? null : s._decompress(t.length, 32768, (function(e) {\n                    return t.charCodeAt(e);\n                }));\n            },\n            _decompress: function(e, r, n) {\n                var i, s, o, a, u, c, l, h = [], d = 4, p = 4, f = 3, _ = "", m = [], g = {\n                    val: n(0),\n                    position: r,\n                    index: 1\n                };\n                for (i = 0; i < 3; i += 1) h[i] = i;\n                for (o = 0, u = Math.pow(2, 2), c = 1; c != u; ) a = g.val & g.position, g.position >>= 1, \n                0 == g.position && (g.position = r, g.val = n(g.index++)), o |= (a > 0 ? 1 : 0) * c, \n                c <<= 1;\n                switch (o) {\n                  case 0:\n                    for (o = 0, u = Math.pow(2, 8), c = 1; c != u; ) a = g.val & g.position, g.position >>= 1, \n                    0 == g.position && (g.position = r, g.val = n(g.index++)), o |= (a > 0 ? 1 : 0) * c, \n                    c <<= 1;\n                    l = t(o);\n                    break;\n\n                  case 1:\n                    for (o = 0, u = Math.pow(2, 16), c = 1; c != u; ) a = g.val & g.position, g.position >>= 1, \n                    0 == g.position && (g.position = r, g.val = n(g.index++)), o |= (a > 0 ? 1 : 0) * c, \n                    c <<= 1;\n                    l = t(o);\n                    break;\n\n                  case 2:\n                    return "";\n                }\n                for (h[3] = l, s = l, m.push(l); ;) {\n                    if (g.index > e) return "";\n                    for (o = 0, u = Math.pow(2, f), c = 1; c != u; ) a = g.val & g.position, g.position >>= 1, \n                    0 == g.position && (g.position = r, g.val = n(g.index++)), o |= (a > 0 ? 1 : 0) * c, \n                    c <<= 1;\n                    switch (l = o) {\n                      case 0:\n                        for (o = 0, u = Math.pow(2, 8), c = 1; c != u; ) a = g.val & g.position, g.position >>= 1, \n                        0 == g.position && (g.position = r, g.val = n(g.index++)), o |= (a > 0 ? 1 : 0) * c, \n                        c <<= 1;\n                        h[p++] = t(o), l = p - 1, d--;\n                        break;\n\n                      case 1:\n                        for (o = 0, u = Math.pow(2, 16), c = 1; c != u; ) a = g.val & g.position, g.position >>= 1, \n                        0 == g.position && (g.position = r, g.val = n(g.index++)), o |= (a > 0 ? 1 : 0) * c, \n                        c <<= 1;\n                        h[p++] = t(o), l = p - 1, d--;\n                        break;\n\n                      case 2:\n                        return m.join("");\n                    }\n                    if (0 == d && (d = Math.pow(2, f), f++), h[l]) _ = h[l]; else {\n                        if (l !== p) return null;\n                        _ = s + s.charAt(0);\n                    }\n                    m.push(_), h[p++] = s + _.charAt(0), s = _, 0 == --d && (d = Math.pow(2, f), f++);\n                }\n            }\n        };\n        return s;\n    }();\n    void 0 === (n = function() {\n        return i;\n    }.call(e, r, e, t)) || (t.exports = n);\n}, function(t, e, r) {\n    "use strict";\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    });\n    var n = r(15);\n    e.isTag = function(t) {\n        return n.isTag(t);\n    }, e.isCDATA = function(t) {\n        return "cdata" === t.type;\n    }, e.isText = function(t) {\n        return "text" === t.type;\n    }, e.isComment = function(t) {\n        return "comment" === t.type;\n    }, e.hasChildren = function(t) {\n        return Object.prototype.hasOwnProperty.call(t, "children");\n    };\n}, function(t) {\n    t.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(t) {\n    t.exports = JSON.parse(\'{"amp":"&","apos":"\\\'","gt":">","lt":"<","quot":"\\\\""}\');\n}, function(t, e, r) {\n    "use strict";\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    }), e.isTag = function(t) {\n        return "tag" === t.type || "script" === t.type || "style" === t.type;\n    }, e.Text = "text", e.Directive = "directive", e.Comment = "comment", e.Script = "script", \n    e.Style = "style", e.Tag = "tag", e.CDATA = "cdata", e.Doctype = "doctype";\n}, function(t, e, r) {\n    "use strict";\n    var n, i = this && this.__extends || (n = function(t, e) {\n        return (n = Object.setPrototypeOf || {\n            __proto__: []\n        } instanceof Array && function(t, e) {\n            t.__proto__ = e;\n        } || function(t, e) {\n            for (var r in e) e.hasOwnProperty(r) && (t[r] = e[r]);\n        })(t, e);\n    }, function(t, e) {\n        function r() {\n            this.constructor = t;\n        }\n        n(t, e), t.prototype = null === e ? Object.create(e) : (r.prototype = e.prototype, \n        new r);\n    }), s = this && this.__importDefault || function(t) {\n        return t && t.__esModule ? t : {\n            default: t\n        };\n    };\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    });\n    var o = s(r(17)), a = r(35), u = new Set([ "input", "option", "optgroup", "select", "button", "datalist", "textarea" ]), c = new Set([ "p" ]), l = {\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: c,\n        h1: c,\n        h2: c,\n        h3: c,\n        h4: c,\n        h5: c,\n        h6: c,\n        select: u,\n        input: u,\n        output: u,\n        button: u,\n        datalist: u,\n        textarea: u,\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: c,\n        article: c,\n        aside: c,\n        blockquote: c,\n        details: c,\n        div: c,\n        dl: c,\n        fieldset: c,\n        figcaption: c,\n        figure: c,\n        footer: c,\n        form: c,\n        header: c,\n        hr: c,\n        main: c,\n        nav: c,\n        ol: c,\n        pre: c,\n        section: c,\n        table: c,\n        ul: c,\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    }, h = new Set([ "area", "base", "basefont", "br", "col", "command", "embed", "frame", "hr", "img", "input", "isindex", "keygen", "link", "meta", "param", "source", "track", "wbr" ]), d = new Set([ "math", "svg" ]), p = new Set([ "mi", "mo", "mn", "ms", "mtext", "annotation-xml", "foreignObject", "desc", "title" ]), f = /\\s|\\//, _ = function(t) {\n        function e(r, n) {\n            var i = t.call(this) || this;\n            return i._tagname = "", i._attribname = "", i._attribvalue = "", i._attribs = null, \n            i._stack = [], i._foreignContext = [], i.startIndex = 0, i.endIndex = null, i.parseChunk = e.prototype.write, \n            i.done = e.prototype.end, i._options = n || {}, i._cbs = r || {}, i._tagname = "", \n            i._attribname = "", i._attribvalue = "", i._attribs = null, i._stack = [], i._foreignContext = [], \n            i.startIndex = 0, i.endIndex = null, i._lowerCaseTagNames = "lowerCaseTags" in i._options ? !!i._options.lowerCaseTags : !i._options.xmlMode, \n            i._lowerCaseAttributeNames = "lowerCaseAttributeNames" in i._options ? !!i._options.lowerCaseAttributeNames : !i._options.xmlMode, \n            i._tokenizer = new (i._options.Tokenizer || o.default)(i._options, i), i._cbs.onparserinit && i._cbs.onparserinit(i), \n            i;\n        }\n        return i(e, t), e.prototype._updatePosition = function(t) {\n            null === this.endIndex ? this._tokenizer._sectionStart <= t ? this.startIndex = 0 : this.startIndex = this._tokenizer._sectionStart - t : this.startIndex = this.endIndex + 1, \n            this.endIndex = this._tokenizer.getAbsoluteIndex();\n        }, e.prototype.ontext = function(t) {\n            this._updatePosition(1), this.endIndex--, this._cbs.ontext && this._cbs.ontext(t);\n        }, e.prototype.onopentagname = function(t) {\n            if (this._lowerCaseTagNames && (t = t.toLowerCase()), this._tagname = t, !this._options.xmlMode && Object.prototype.hasOwnProperty.call(l, t)) for (var e = void 0; l[t].has(e = this._stack[this._stack.length - 1]); this.onclosetag(e)) ;\n            !this._options.xmlMode && h.has(t) || (this._stack.push(t), d.has(t) ? this._foreignContext.push(!0) : p.has(t) && this._foreignContext.push(!1)), \n            this._cbs.onopentagname && this._cbs.onopentagname(t), this._cbs.onopentag && (this._attribs = {});\n        }, e.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 && h.has(this._tagname) && this._cbs.onclosetag(this._tagname), \n            this._tagname = "";\n        }, e.prototype.onclosetag = function(t) {\n            if (this._updatePosition(1), this._lowerCaseTagNames && (t = t.toLowerCase()), (d.has(t) || p.has(t)) && this._foreignContext.pop(), \n            !this._stack.length || !this._options.xmlMode && h.has(t)) this._options.xmlMode || "br" !== t && "p" !== t || (this.onopentagname(t), \n            this._closeCurrentTag()); else {\n                var e = this._stack.lastIndexOf(t);\n                if (-1 !== e) if (this._cbs.onclosetag) for (e = this._stack.length - e; e--; ) this._cbs.onclosetag(this._stack.pop()); else this._stack.length = e; else "p" !== t || this._options.xmlMode || (this.onopentagname(t), \n                this._closeCurrentTag());\n            }\n        }, e.prototype.onselfclosingtag = function() {\n            this._options.xmlMode || this._options.recognizeSelfClosing || this._foreignContext[this._foreignContext.length - 1] ? this._closeCurrentTag() : this.onopentagend();\n        }, e.prototype._closeCurrentTag = function() {\n            var t = this._tagname;\n            this.onopentagend(), this._stack[this._stack.length - 1] === t && (this._cbs.onclosetag && this._cbs.onclosetag(t), \n            this._stack.pop());\n        }, e.prototype.onattribname = function(t) {\n            this._lowerCaseAttributeNames && (t = t.toLowerCase()), this._attribname = t;\n        }, e.prototype.onattribdata = function(t) {\n            this._attribvalue += t;\n        }, e.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        }, e.prototype._getInstructionName = function(t) {\n            var e = t.search(f), r = e < 0 ? t : t.substr(0, e);\n            return this._lowerCaseTagNames && (r = r.toLowerCase()), r;\n        }, e.prototype.ondeclaration = function(t) {\n            if (this._cbs.onprocessinginstruction) {\n                var e = this._getInstructionName(t);\n                this._cbs.onprocessinginstruction("!" + e, "!" + t);\n            }\n        }, e.prototype.onprocessinginstruction = function(t) {\n            if (this._cbs.onprocessinginstruction) {\n                var e = this._getInstructionName(t);\n                this._cbs.onprocessinginstruction("?" + e, "?" + t);\n            }\n        }, e.prototype.oncomment = function(t) {\n            this._updatePosition(4), this._cbs.oncomment && this._cbs.oncomment(t), this._cbs.oncommentend && this._cbs.oncommentend();\n        }, e.prototype.oncdata = function(t) {\n            this._updatePosition(1), this._options.xmlMode || this._options.recognizeCDATA ? (this._cbs.oncdatastart && this._cbs.oncdatastart(), \n            this._cbs.ontext && this._cbs.ontext(t), this._cbs.oncdataend && this._cbs.oncdataend()) : this.oncomment("[CDATA[" + t + "]]");\n        }, e.prototype.onerror = function(t) {\n            this._cbs.onerror && this._cbs.onerror(t);\n        }, e.prototype.onend = function() {\n            if (this._cbs.onclosetag) for (var t = this._stack.length; t > 0; this._cbs.onclosetag(this._stack[--t])) ;\n            this._cbs.onend && this._cbs.onend();\n        }, e.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        }, e.prototype.parseComplete = function(t) {\n            this.reset(), this.end(t);\n        }, e.prototype.write = function(t) {\n            this._tokenizer.write(t);\n        }, e.prototype.end = function(t) {\n            this._tokenizer.end(t);\n        }, e.prototype.pause = function() {\n            this._tokenizer.pause();\n        }, e.prototype.resume = function() {\n            this._tokenizer.resume();\n        }, e;\n    }(a.EventEmitter);\n    e.Parser = _;\n}, function(t, e, r) {\n    "use strict";\n    var n = this && this.__importDefault || function(t) {\n        return t && t.__esModule ? t : {\n            default: t\n        };\n    };\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    });\n    var i = n(r(18)), s = n(r(13)), o = n(r(19)), a = n(r(14));\n    function u(t) {\n        return " " === t || "\\n" === t || "\\t" === t || "\\f" === t || "\\r" === t;\n    }\n    function c(t, e, r) {\n        var n = t.toLowerCase();\n        return t === n ? function(t, i) {\n            i === n ? t._state = e : (t._state = r, t._index--);\n        } : function(i, s) {\n            s === n || s === t ? i._state = e : (i._state = r, i._index--);\n        };\n    }\n    function l(t, e) {\n        var r = t.toLowerCase();\n        return function(n, i) {\n            i === r || i === t ? n._state = e : (n._state = 3, n._index--);\n        };\n    }\n    var h = c("C", 23, 16), d = c("D", 24, 16), p = c("A", 25, 16), f = c("T", 26, 16), _ = c("A", 27, 16), m = l("R", 34), g = l("I", 35), b = l("P", 36), E = l("T", 37), y = c("R", 39, 1), v = c("I", 40, 1), A = c("P", 41, 1), C = c("T", 42, 1), T = l("Y", 44), x = l("L", 45), D = l("E", 46), N = c("Y", 48, 1), O = c("L", 49, 1), w = c("E", 50, 1), S = c("#", 52, 53), L = c("X", 55, 54), M = function() {\n        function t(t, e) {\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 = e, \n            this._xmlMode = !(!t || !t.xmlMode), this._decodeEntities = !(!t || !t.decodeEntities);\n        }\n        return t.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        }, t.prototype._stateText = function(t) {\n            "<" === t ? (this._index > this._sectionStart && this._cbs.ontext(this._getSection()), \n            this._state = 2, this._sectionStart = this._index) : this._decodeEntities && 1 === this._special && "&" === t && (this._index > this._sectionStart && this._cbs.ontext(this._getSection()), \n            this._baseState = 1, this._state = 51, this._sectionStart = this._index);\n        }, t.prototype._stateBeforeTagName = function(t) {\n            "/" === t ? this._state = 5 : "<" === t ? (this._cbs.ontext(this._getSection()), \n            this._sectionStart = this._index) : ">" === t || 1 !== this._special || u(t) ? this._state = 1 : "!" === t ? (this._state = 15, \n            this._sectionStart = this._index + 1) : "?" === t ? (this._state = 17, this._sectionStart = this._index + 1) : (this._state = this._xmlMode || "s" !== t && "S" !== t ? 3 : 31, \n            this._sectionStart = this._index);\n        }, t.prototype._stateInTagName = function(t) {\n            ("/" === t || ">" === t || u(t)) && (this._emitToken("onopentagname"), this._state = 8, \n            this._index--);\n        }, t.prototype._stateBeforeClosingTagName = function(t) {\n            u(t) || (">" === t ? this._state = 1 : 1 !== this._special ? "s" === t || "S" === t ? this._state = 32 : (this._state = 1, \n            this._index--) : (this._state = 6, this._sectionStart = this._index));\n        }, t.prototype._stateInClosingTagName = function(t) {\n            (">" === t || u(t)) && (this._emitToken("onclosetag"), this._state = 7, this._index--);\n        }, t.prototype._stateAfterClosingTagName = function(t) {\n            ">" === t && (this._state = 1, this._sectionStart = this._index + 1);\n        }, t.prototype._stateBeforeAttributeName = function(t) {\n            ">" === t ? (this._cbs.onopentagend(), this._state = 1, this._sectionStart = this._index + 1) : "/" === t ? this._state = 4 : u(t) || (this._state = 9, \n            this._sectionStart = this._index);\n        }, t.prototype._stateInSelfClosingTag = function(t) {\n            ">" === t ? (this._cbs.onselfclosingtag(), this._state = 1, this._sectionStart = this._index + 1) : u(t) || (this._state = 8, \n            this._index--);\n        }, t.prototype._stateInAttributeName = function(t) {\n            ("=" === t || "/" === t || ">" === t || u(t)) && (this._cbs.onattribname(this._getSection()), \n            this._sectionStart = -1, this._state = 10, this._index--);\n        }, t.prototype._stateAfterAttributeName = function(t) {\n            "=" === t ? this._state = 11 : "/" === t || ">" === t ? (this._cbs.onattribend(), \n            this._state = 8, this._index--) : u(t) || (this._cbs.onattribend(), this._state = 9, \n            this._sectionStart = this._index);\n        }, t.prototype._stateBeforeAttributeValue = function(t) {\n            \'"\' === t ? (this._state = 12, this._sectionStart = this._index + 1) : "\'" === t ? (this._state = 13, \n            this._sectionStart = this._index + 1) : u(t) || (this._state = 14, this._sectionStart = this._index, \n            this._index--);\n        }, t.prototype._stateInAttributeValueDoubleQuotes = function(t) {\n            \'"\' === t ? (this._emitToken("onattribdata"), this._cbs.onattribend(), this._state = 8) : this._decodeEntities && "&" === t && (this._emitToken("onattribdata"), \n            this._baseState = this._state, this._state = 51, this._sectionStart = this._index);\n        }, t.prototype._stateInAttributeValueSingleQuotes = function(t) {\n            "\'" === t ? (this._emitToken("onattribdata"), this._cbs.onattribend(), this._state = 8) : this._decodeEntities && "&" === t && (this._emitToken("onattribdata"), \n            this._baseState = this._state, this._state = 51, this._sectionStart = this._index);\n        }, t.prototype._stateInAttributeValueNoQuotes = function(t) {\n            u(t) || ">" === t ? (this._emitToken("onattribdata"), this._cbs.onattribend(), this._state = 8, \n            this._index--) : this._decodeEntities && "&" === t && (this._emitToken("onattribdata"), \n            this._baseState = this._state, this._state = 51, this._sectionStart = this._index);\n        }, t.prototype._stateBeforeDeclaration = function(t) {\n            this._state = "[" === t ? 22 : "-" === t ? 18 : 16;\n        }, t.prototype._stateInDeclaration = function(t) {\n            ">" === t && (this._cbs.ondeclaration(this._getSection()), this._state = 1, this._sectionStart = this._index + 1);\n        }, t.prototype._stateInProcessingInstruction = function(t) {\n            ">" === t && (this._cbs.onprocessinginstruction(this._getSection()), this._state = 1, \n            this._sectionStart = this._index + 1);\n        }, t.prototype._stateBeforeComment = function(t) {\n            "-" === t ? (this._state = 19, this._sectionStart = this._index + 1) : this._state = 16;\n        }, t.prototype._stateInComment = function(t) {\n            "-" === t && (this._state = 20);\n        }, t.prototype._stateAfterComment1 = function(t) {\n            this._state = "-" === t ? 21 : 19;\n        }, t.prototype._stateAfterComment2 = function(t) {\n            ">" === t ? (this._cbs.oncomment(this._buffer.substring(this._sectionStart, this._index - 2)), \n            this._state = 1, this._sectionStart = this._index + 1) : "-" !== t && (this._state = 19);\n        }, t.prototype._stateBeforeCdata6 = function(t) {\n            "[" === t ? (this._state = 28, this._sectionStart = this._index + 1) : (this._state = 16, \n            this._index--);\n        }, t.prototype._stateInCdata = function(t) {\n            "]" === t && (this._state = 29);\n        }, t.prototype._stateAfterCdata1 = function(t) {\n            this._state = "]" === t ? 30 : 28;\n        }, t.prototype._stateAfterCdata2 = function(t) {\n            ">" === t ? (this._cbs.oncdata(this._buffer.substring(this._sectionStart, this._index - 2)), \n            this._state = 1, this._sectionStart = this._index + 1) : "]" !== t && (this._state = 28);\n        }, t.prototype._stateBeforeSpecial = function(t) {\n            "c" === t || "C" === t ? this._state = 33 : "t" === t || "T" === t ? this._state = 43 : (this._state = 3, \n            this._index--);\n        }, t.prototype._stateBeforeSpecialEnd = function(t) {\n            2 !== this._special || "c" !== t && "C" !== t ? 3 !== this._special || "t" !== t && "T" !== t ? this._state = 1 : this._state = 47 : this._state = 38;\n        }, t.prototype._stateBeforeScript5 = function(t) {\n            ("/" === t || ">" === t || u(t)) && (this._special = 2), this._state = 3, this._index--;\n        }, t.prototype._stateAfterScript5 = function(t) {\n            ">" === t || u(t) ? (this._special = 1, this._state = 6, this._sectionStart = this._index - 6, \n            this._index--) : this._state = 1;\n        }, t.prototype._stateBeforeStyle4 = function(t) {\n            ("/" === t || ">" === t || u(t)) && (this._special = 3), this._state = 3, this._index--;\n        }, t.prototype._stateAfterStyle4 = function(t) {\n            ">" === t || u(t) ? (this._special = 1, this._state = 6, this._sectionStart = this._index - 5, \n            this._index--) : this._state = 1;\n        }, t.prototype._parseNamedEntityStrict = function() {\n            if (this._sectionStart + 1 < this._index) {\n                var t = this._buffer.substring(this._sectionStart + 1, this._index), e = this._xmlMode ? a.default : s.default;\n                Object.prototype.hasOwnProperty.call(e, t) && (this._emitPartial(e[t]), this._sectionStart = this._index + 1);\n            }\n        }, t.prototype._parseLegacyEntity = function() {\n            var t = this._sectionStart + 1, e = this._index - t;\n            for (e > 6 && (e = 6); e >= 2; ) {\n                var r = this._buffer.substr(t, e);\n                if (Object.prototype.hasOwnProperty.call(o.default, r)) return this._emitPartial(o.default[r]), \n                void (this._sectionStart += e + 1);\n                e--;\n            }\n        }, t.prototype._stateInNamedEntity = function(t) {\n            ";" === t ? (this._parseNamedEntityStrict(), this._sectionStart + 1 < this._index && !this._xmlMode && this._parseLegacyEntity(), \n            this._state = this._baseState) : (t < "a" || t > "z") && (t < "A" || t > "Z") && (t < "0" || t > "9") && (this._xmlMode || this._sectionStart + 1 === this._index || (1 !== this._baseState ? "=" !== t && this._parseNamedEntityStrict() : this._parseLegacyEntity()), \n            this._state = this._baseState, this._index--);\n        }, t.prototype._decodeNumericEntity = function(t, e) {\n            var r = this._sectionStart + t;\n            if (r !== this._index) {\n                var n = this._buffer.substring(r, this._index), s = parseInt(n, e);\n                this._emitPartial(i.default(s)), this._sectionStart = this._index;\n            } else this._sectionStart--;\n            this._state = this._baseState;\n        }, t.prototype._stateInNumericEntity = function(t) {\n            ";" === t ? (this._decodeNumericEntity(2, 10), this._sectionStart++) : (t < "0" || t > "9") && (this._xmlMode ? this._state = this._baseState : this._decodeNumericEntity(2, 10), \n            this._index--);\n        }, t.prototype._stateInHexEntity = function(t) {\n            ";" === t ? (this._decodeNumericEntity(3, 16), this._sectionStart++) : (t < "a" || t > "f") && (t < "A" || t > "F") && (t < "0" || t > "9") && (this._xmlMode ? this._state = this._baseState : this._decodeNumericEntity(3, 16), \n            this._index--);\n        }, t.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        }, t.prototype.write = function(t) {\n            this._ended && this._cbs.onerror(Error(".write() after done!")), this._buffer += t, \n            this._parse();\n        }, t.prototype._parse = function() {\n            for (;this._index < this._buffer.length && this._running; ) {\n                var t = this._buffer.charAt(this._index);\n                1 === this._state ? this._stateText(t) : 12 === this._state ? this._stateInAttributeValueDoubleQuotes(t) : 9 === this._state ? this._stateInAttributeName(t) : 19 === this._state ? this._stateInComment(t) : 8 === this._state ? this._stateBeforeAttributeName(t) : 3 === this._state ? this._stateInTagName(t) : 6 === this._state ? this._stateInClosingTagName(t) : 2 === this._state ? this._stateBeforeTagName(t) : 10 === this._state ? this._stateAfterAttributeName(t) : 13 === this._state ? this._stateInAttributeValueSingleQuotes(t) : 11 === this._state ? this._stateBeforeAttributeValue(t) : 5 === this._state ? this._stateBeforeClosingTagName(t) : 7 === this._state ? this._stateAfterClosingTagName(t) : 31 === this._state ? this._stateBeforeSpecial(t) : 20 === this._state ? this._stateAfterComment1(t) : 14 === this._state ? this._stateInAttributeValueNoQuotes(t) : 4 === this._state ? this._stateInSelfClosingTag(t) : 16 === this._state ? this._stateInDeclaration(t) : 15 === this._state ? this._stateBeforeDeclaration(t) : 21 === this._state ? this._stateAfterComment2(t) : 18 === this._state ? this._stateBeforeComment(t) : 32 === this._state ? this._stateBeforeSpecialEnd(t) : 38 === this._state ? y(this, t) : 39 === this._state ? v(this, t) : 40 === this._state ? A(this, t) : 33 === this._state ? m(this, t) : 34 === this._state ? g(this, t) : 35 === this._state ? b(this, t) : 36 === this._state ? E(this, t) : 37 === this._state ? this._stateBeforeScript5(t) : 41 === this._state ? C(this, t) : 42 === this._state ? this._stateAfterScript5(t) : 43 === this._state ? T(this, t) : 28 === this._state ? this._stateInCdata(t) : 44 === this._state ? x(this, t) : 45 === this._state ? D(this, t) : 46 === this._state ? this._stateBeforeStyle4(t) : 47 === this._state ? N(this, t) : 48 === this._state ? O(this, t) : 49 === this._state ? w(this, t) : 50 === this._state ? this._stateAfterStyle4(t) : 17 === this._state ? this._stateInProcessingInstruction(t) : 53 === this._state ? this._stateInNamedEntity(t) : 22 === this._state ? h(this, t) : 51 === this._state ? S(this, t) : 23 === this._state ? d(this, t) : 24 === this._state ? p(this, t) : 29 === this._state ? this._stateAfterCdata1(t) : 30 === this._state ? this._stateAfterCdata2(t) : 25 === this._state ? f(this, t) : 26 === this._state ? _(this, t) : 27 === this._state ? this._stateBeforeCdata6(t) : 55 === this._state ? this._stateInHexEntity(t) : 54 === this._state ? this._stateInNumericEntity(t) : 52 === this._state ? L(this, t) : this._cbs.onerror(Error("unknown _state"), this._state), \n                this._index++;\n            }\n            this._cleanup();\n        }, t.prototype.pause = function() {\n            this._running = !1;\n        }, t.prototype.resume = function() {\n            this._running = !0, this._index < this._buffer.length && this._parse(), this._ended && this._finish();\n        }, t.prototype.end = function(t) {\n            this._ended && this._cbs.onerror(Error(".end() after done!")), t && this.write(t), \n            this._ended = !0, this._running && this._finish();\n        }, t.prototype._finish = function() {\n            this._sectionStart < this._index && this._handleTrailingData(), this._cbs.onend();\n        }, t.prototype._handleTrailingData = function() {\n            var t = this._buffer.substr(this._sectionStart);\n            28 === this._state || 29 === this._state || 30 === this._state ? this._cbs.oncdata(t) : 19 === this._state || 20 === this._state || 21 === this._state ? this._cbs.oncomment(t) : 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(t) : (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        }, t.prototype.getAbsoluteIndex = function() {\n            return this._bufferOffset + this._index;\n        }, t.prototype._getSection = function() {\n            return this._buffer.substring(this._sectionStart, this._index);\n        }, t.prototype._emitToken = function(t) {\n            this._cbs[t](this._getSection()), this._sectionStart = -1;\n        }, t.prototype._emitPartial = function(t) {\n            1 !== this._baseState ? this._cbs.onattribdata(t) : this._cbs.ontext(t);\n        }, t;\n    }();\n    e.default = M;\n}, function(t, e, r) {\n    "use strict";\n    var n = this && this.__importDefault || function(t) {\n        return t && t.__esModule ? t : {\n            default: t\n        };\n    };\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    });\n    var i = n(r(34));\n    e.default = function(t) {\n        if (t >= 55296 && t <= 57343 || t > 1114111) return "\\ufffd";\n        t in i.default && (t = i.default[t]);\n        var e = "";\n        return t > 65535 && (t -= 65536, e += String.fromCharCode(t >>> 10 & 1023 | 55296), \n        t = 56320 | 1023 & t), e += String.fromCharCode(t);\n    };\n}, function(t) {\n    t.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(t, e, r) {\n    "use strict";\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    });\n    var n = r(36);\n    e.Node = n.Node, e.Element = n.Element, e.DataNode = n.DataNode, e.NodeWithChildren = n.NodeWithChildren;\n    var i = /\\s+/g, s = {\n        normalizeWhitespace: !1,\n        withStartIndices: !1,\n        withEndIndices: !1\n    }, o = function() {\n        function t(t, e, r) {\n            this.dom = [], this._done = !1, this._tagStack = [], this._lastNode = null, this._parser = null, \n            "function" == typeof e && (r = e, e = s), "object" == typeof t && (e = t, t = void 0), \n            this._callback = t || null, this._options = e || s, this._elementCB = r || null;\n        }\n        return t.prototype.onparserinit = function(t) {\n            this._parser = t;\n        }, t.prototype.onreset = function() {\n            this.dom = [], this._done = !1, this._tagStack = [], this._lastNode = null, this._parser = this._parser || null;\n        }, t.prototype.onend = function() {\n            this._done || (this._done = !0, this._parser = null, this.handleCallback(null));\n        }, t.prototype.onerror = function(t) {\n            this.handleCallback(t);\n        }, t.prototype.onclosetag = function() {\n            this._lastNode = null;\n            var t = this._tagStack.pop();\n            t && this._parser && (this._options.withEndIndices && (t.endIndex = this._parser.endIndex), \n            this._elementCB && this._elementCB(t));\n        }, t.prototype.onopentag = function(t, e) {\n            var r = new n.Element(t, e);\n            this.addNode(r), this._tagStack.push(r);\n        }, t.prototype.ontext = function(t) {\n            var e = this._options.normalizeWhitespace, r = this._lastNode;\n            if (r && "text" === r.type) e ? r.data = (r.data + t).replace(i, " ") : r.data += t; else {\n                e && (t = t.replace(i, " "));\n                var s = new n.DataNode("text", t);\n                this.addNode(s), this._lastNode = s;\n            }\n        }, t.prototype.oncomment = function(t) {\n            if (this._lastNode && "comment" === this._lastNode.type) this._lastNode.data += t; else {\n                var e = new n.DataNode("comment", t);\n                this.addNode(e), this._lastNode = e;\n            }\n        }, t.prototype.oncommentend = function() {\n            this._lastNode = null;\n        }, t.prototype.oncdatastart = function() {\n            var t = new n.DataNode("text", ""), e = new n.NodeWithChildren("cdata", [ t ]);\n            this.addNode(e), t.parent = e, this._lastNode = t;\n        }, t.prototype.oncdataend = function() {\n            this._lastNode = null;\n        }, t.prototype.onprocessinginstruction = function(t, e) {\n            var r = new n.ProcessingInstruction(t, e);\n            this.addNode(r);\n        }, t.prototype.handleCallback = function(t) {\n            if ("function" == typeof this._callback) this._callback(t, this.dom); else if (t) throw t;\n        }, t.prototype.addNode = function(t) {\n            var e = this._tagStack[this._tagStack.length - 1], r = e ? e.children : this.dom, n = r[r.length - 1];\n            this._parser && (this._options.withStartIndices && (t.startIndex = this._parser.startIndex), \n            this._options.withEndIndices && (t.endIndex = this._parser.endIndex)), r.push(t), \n            n && (t.prev = n, n.next = t), e && (t.parent = e), this._lastNode = null;\n        }, t.prototype.addDataNode = function(t) {\n            this.addNode(t), this._lastNode = t;\n        }, t;\n    }();\n    e.DomHandler = o, e.default = o;\n}, function(t, e, r) {\n    "use strict";\n    var n, i = this && this.__extends || (n = function(t, e) {\n        return (n = Object.setPrototypeOf || {\n            __proto__: []\n        } instanceof Array && function(t, e) {\n            t.__proto__ = e;\n        } || function(t, e) {\n            for (var r in e) e.hasOwnProperty(r) && (t[r] = e[r]);\n        })(t, e);\n    }, function(t, e) {\n        function r() {\n            this.constructor = t;\n        }\n        n(t, e), t.prototype = null === e ? Object.create(e) : (r.prototype = e.prototype, \n        new r);\n    }), s = this && this.__importDefault || function(t) {\n        return t && t.__esModule ? t : {\n            default: t\n        };\n    }, o = this && this.__importStar || function(t) {\n        if (t && t.__esModule) return t;\n        var e = {};\n        if (null != t) for (var r in t) Object.hasOwnProperty.call(t, r) && (e[r] = t[r]);\n        return e.default = t, e;\n    };\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    });\n    var a = s(r(20)), u = o(r(22)), c = r(16), l = function(t) {\n        function e(e, r) {\n            return "object" == typeof e && null !== e && (r = e = void 0), t.call(this, e, r) || this;\n        }\n        return i(e, t), e.prototype.onend = function() {\n            var t = {}, e = d(m, this.dom);\n            if (e) if ("feed" === e.name) {\n                var r = e.children;\n                t.type = "atom", _(t, "id", "id", r), _(t, "title", "title", r);\n                var n = f("href", d("link", r));\n                n && (t.link = n), _(t, "description", "subtitle", r), (i = p("updated", r)) && (t.updated = new Date(i)), \n                _(t, "author", "email", r, !0), t.items = h("entry", r).map((function(t) {\n                    var e = {}, r = t.children;\n                    _(e, "id", "id", r), _(e, "title", "title", r);\n                    var n = f("href", d("link", r));\n                    n && (e.link = n);\n                    var i = p("summary", r) || p("content", r);\n                    i && (e.description = i);\n                    var s = p("updated", r);\n                    return s && (e.pubDate = new Date(s)), e;\n                }));\n            } else {\n                var i;\n                r = d("channel", e.children).children;\n                t.type = e.name.substr(0, 3), t.id = "", _(t, "title", "title", r), _(t, "link", "link", r), \n                _(t, "description", "description", r), (i = p("lastBuildDate", r)) && (t.updated = new Date(i)), \n                _(t, "author", "managingEditor", r, !0), t.items = h("item", e.children).map((function(t) {\n                    var e = {}, r = t.children;\n                    _(e, "id", "guid", r), _(e, "title", "title", r), _(e, "link", "link", r), _(e, "description", "description", r);\n                    var n = p("pubDate", r);\n                    return n && (e.pubDate = new Date(n)), e;\n                }));\n            }\n            this.feed = t, this.handleCallback(e ? null : Error("couldn\'t find root of feed"));\n        }, e;\n    }(a.default);\n    function h(t, e) {\n        return u.getElementsByTagName(t, e, !0);\n    }\n    function d(t, e) {\n        return u.getElementsByTagName(t, e, !0, 1)[0];\n    }\n    function p(t, e, r) {\n        return void 0 === r && (r = !1), u.getText(u.getElementsByTagName(t, e, r, 1)).trim();\n    }\n    function f(t, e) {\n        return e ? e.attribs[t] : null;\n    }\n    function _(t, e, r, n, i) {\n        void 0 === i && (i = !1);\n        var s = p(r, n, i);\n        s && (t[e] = s);\n    }\n    function m(t) {\n        return "rss" === t || "feed" === t || "rdf:RDF" === t;\n    }\n    e.FeedHandler = l;\n    var g = {\n        xmlMode: !0\n    };\n    e.parseFeed = function(t, e) {\n        void 0 === e && (e = g);\n        var r = new l(e);\n        return new c.Parser(r, e).end(t), r.feed;\n    };\n}, function(t, e, r) {\n    "use strict";\n    function n(t) {\n        for (var r in t) e.hasOwnProperty(r) || (e[r] = t[r]);\n    }\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    }), n(r(37)), n(r(41)), n(r(42)), n(r(25)), n(r(43)), n(r(44)), n(r(12));\n}, function(t, e, r) {\n    "use strict";\n    var n = this && this.__importDefault || function(t) {\n        return t && t.__esModule ? t : {\n            default: t\n        };\n    };\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    }), e.decodeHTML = e.decodeHTMLStrict = e.decodeXML = void 0;\n    var i = n(r(13)), s = n(r(19)), o = n(r(14)), a = n(r(18));\n    function u(t) {\n        var e = Object.keys(t).join("|"), r = l(t), n = new RegExp("&(?:" + (e += "|#[xX][\\\\da-fA-F]+|#\\\\d+") + ");", "g");\n        return function(t) {\n            return String(t).replace(n, r);\n        };\n    }\n    e.decodeXML = u(o.default), e.decodeHTMLStrict = u(i.default);\n    var c = function(t, e) {\n        return t < e ? 1 : -1;\n    };\n    function l(t) {\n        return function(e) {\n            if ("#" === e.charAt(1)) {\n                var r = e.charAt(2);\n                return "X" === r || "x" === r ? a.default(parseInt(e.substr(3), 16)) : a.default(parseInt(e.substr(2), 10));\n            }\n            return t[e.slice(1, -1)];\n        };\n    }\n    e.decodeHTML = function() {\n        for (var t = Object.keys(s.default).sort(c), e = Object.keys(i.default).sort(c), r = 0, n = 0; r < e.length; r++) t[n] === e[r] ? (e[r] += ";?", \n        n++) : e[r] += ";";\n        var o = new RegExp("&(?:" + e.join("|") + "|#[xX][\\\\da-fA-F]+;?|#\\\\d+;?)", "g"), a = l(i.default);\n        function u(t) {\n            return ";" !== t.substr(-1) && (t += ";"), a(t);\n        }\n        return function(t) {\n            return String(t).replace(o, u);\n        };\n    }();\n}, function(t, e, r) {\n    "use strict";\n    var n = this && this.__importDefault || function(t) {\n        return t && t.__esModule ? t : {\n            default: t\n        };\n    };\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    }), e.escape = e.encodeHTML = e.encodeXML = void 0;\n    var i = u(n(r(14)).default), s = c(i);\n    e.encodeXML = d(i, s);\n    var o = u(n(r(13)).default), a = c(o);\n    function u(t) {\n        return Object.keys(t).sort().reduce((function(e, r) {\n            return e[t[r]] = "&" + r + ";", e;\n        }), {});\n    }\n    function c(t) {\n        for (var e = [], r = [], n = 0, i = Object.keys(t); n < i.length; n++) {\n            var s = i[n];\n            1 === s.length ? e.push("\\\\" + s) : r.push(s);\n        }\n        e.sort();\n        for (var o = 0; o < e.length - 1; o++) {\n            for (var a = o; a < e.length - 1 && e[a].charCodeAt(1) + 1 === e[a + 1].charCodeAt(1); ) a += 1;\n            var u = 1 + a - o;\n            u < 3 || e.splice(o, u, e[o] + "-" + e[a]);\n        }\n        return r.unshift("[" + e.join("") + "]"), new RegExp(r.join("|"), "g");\n    }\n    e.encodeHTML = d(o, a);\n    var l = /(?:[\\x80-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g;\n    function h(t) {\n        return "&#x" + t.codePointAt(0).toString(16).toUpperCase() + ";";\n    }\n    function d(t, e) {\n        return function(r) {\n            return r.replace(e, (function(e) {\n                return t[e];\n            })).replace(l, h);\n        };\n    }\n    var p = c(i);\n    e.escape = function(t) {\n        return t.replace(p, h).replace(l, h);\n    };\n}, function(t, e, r) {\n    "use strict";\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    });\n    var n = r(12);\n    function i(t, e, r, s) {\n        for (var o = [], a = 0, u = e; a < u.length; a++) {\n            var c = u[a];\n            if (t(c) && (o.push(c), --s <= 0)) break;\n            if (r && n.hasChildren(c) && c.children.length > 0) {\n                var l = i(t, c.children, r, s);\n                if (o.push.apply(o, l), (s -= l.length) <= 0) break;\n            }\n        }\n        return o;\n    }\n    e.filter = function(t, e, r, n) {\n        return void 0 === r && (r = !0), void 0 === n && (n = 1 / 0), Array.isArray(e) || (e = [ e ]), \n        i(t, e, r, n);\n    }, e.find = i, e.findOneChild = function(t, e) {\n        return e.find(t);\n    }, e.findOne = function t(e, r, i) {\n        void 0 === i && (i = !0);\n        for (var s = null, o = 0; o < r.length && !s; o++) {\n            var a = r[o];\n            n.isTag(a) && (e(a) ? s = a : i && a.children.length > 0 && (s = t(e, a.children)));\n        }\n        return s;\n    }, e.existsOne = function t(e, r) {\n        return r.some((function(r) {\n            return n.isTag(r) && (e(r) || r.children.length > 0 && t(e, r.children));\n        }));\n    }, e.findAll = function(t, e) {\n        for (var r, i, s = [], o = e.filter(n.isTag); i = o.shift(); ) {\n            var a = null === (r = i.children) || void 0 === r ? void 0 : r.filter(n.isTag);\n            a && a.length > 0 && o.unshift.apply(o, a), t(i) && s.push(i);\n        }\n        return s;\n    };\n}, function(t, e, r) {\n    "use strict";\n    e.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", "H1", "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", "Q", "S", "SAMP", "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*/, /^(?:----+|<hr>) *\\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(t, e, r) {\n    "use strict";\n    e.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: (t, e) => e in t ? t[e] : 0\n            });\n        },\n        startTimer(t) {\n            this.timerStartTimestamps[t] = Date.now();\n        },\n        stopTimer(t) {\n            if (void 0 === this.timerStartTimestamps[t]) return;\n            void 0 === this.timerTotal[t] && (this.timerTotal[t] = 0);\n            const e = Date.now() - this.timerStartTimestamps[t];\n            this.timerTotal[t] += e, delete this.timerStartTimestamps[t], void 0 === this.timerAllRunsTotal[t] && (this.timerAllRunsTotal[t] = 0, \n            this.timerRunCount[t] = 0), this.timerAllRunsTotal[t] += e, this.timerRunCount[t]++;\n        },\n        resetTimer(t) {\n            void 0 !== this.timerStartTimestamps[t] && this.stopTimer(t), delete this.timerTotal[t];\n        },\n        fullResetTimer(t) {\n            this.resetTimer(t), delete this.timerAllRunsTotal[t], delete this.timerRunCount[t];\n        },\n        logAndResetTimer(t) {\n            void 0 !== this.timerStartTimestamps[t] && this.stopTimer(t), void 0 !== this.timerTotal[t] && (console.debug("".concat(t, ": ").concat(this.timerTotal[t])), \n            this.resetTimer(t));\n        },\n        logAndResetEverything(t) {\n            const e = Object.keys(this.timerTotal);\n            t && e.sort(), e.forEach(t => {\n                this.logAndResetTimer(t);\n            });\n            const r = Object.keys(this.counters);\n            t && r.sort(), r.forEach(t => {\n                console.debug("counter ".concat(t, ": ").concat(this.counters[t]));\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(t) {\n            if (!this.timerAllRunsTotal[t]) return void console.error("No data for timer ".concat(t));\n            const e = this.timerAllRunsTotal[t] / this.timerRunCount[t];\n            console.debug("".concat(t, ": ").concat(e.toFixed(1), " average for ").concat(this.timerRunCount[t], " runs"));\n        },\n        incrementCounter(t) {\n            this.counters[t]++;\n        }\n    };\n}, function(t, e, r) {\n    "use strict";\n    r.d(e, "a", (function() {\n        return h;\n    }));\n    var n = r(4), i = r.n(n), s = r(8), o = r.n(s), a = r(1), u = r(0), c = new WeakMap, l = new WeakMap;\n    class h {\n        constructor(t, e) {\n            c.set(this, {\n                writable: !0,\n                value: void 0\n            }), l.set(this, {\n                writable: !0,\n                value: void 0\n            }), o()(this, c, t);\n            let r = i()(this, c).collectParts(e.element);\n            r = i()(this, c).removeNestedParts(r), r = i()(this, c).encloseInlineParts(r, e.element), \n            r = i()(this, c).filterParts(r), r.reverse(), r = i()(this, c).replaceListsWithItems(r, e.element), \n            this.id = u.a.comments.length, this.date = e.date || null, this.timestamp = e.timestampText, \n            this.authorName = e.authorName, this.own = this.authorName === u.a.g.CURRENT_USER_NAME, \n            this.anchor = e.anchor, this.unsigned = e.unsigned, this.parts = r, this.elements = this.parts.map(t => t.node);\n            if (this.highlightables = this.elements.filter(t => !/^H[1-6]$/.test(t.tagName) && !u.a.g.UNHIGHLIGHTABLE_ELEMENTS_CLASSES.some(e => t.classList.contains(e)) && !/float: *(?:left|right)/.test(t.getAttribute("style"))), \n            !this.highlightables.length) throw new a.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 t = this.parts[0].node.tagName.match(/^H([1-6])$/);\n                this.openingSectionOfLevel = t && Number(t[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(t => {\n                t.classList.add("cd-commentPart"), t.setAttribute("data-comment-id", String(this.id));\n            });\n        }\n        setLevels() {\n            const t = {};\n            t.top = i()(this, c).getLevelsUpTree(this.highlightables[0]), t.bottom = this.highlightables.length > 1 ? i()(this, c).getLevelsUpTree(this.highlightables[this.highlightables.length - 1]) : t.top, \n            this.level = Math.min(t.top.length, t.bottom.length);\n            for (let e = 0; e < this.level; e++) t.top[e] && t.top[e].classList.add("cd-commentLevel", "cd-commentLevel-".concat(e + 1)), \n            t.bottom[e] && t.bottom[e] !== t.top[e] && t.bottom[e].classList.add("cd-commentLevel", "cd-commentLevel-".concat(e + 1));\n        }\n        getSection() {\n            return u.a.sections.slice().reverse().find(t => t.comments.includes(this)) || null;\n        }\n        get section() {\n            return void 0 === i()(this, l) && o()(this, l, this.getSection()), i()(this, l);\n        }\n        get sourcePage() {\n            return this.section ? this.section.sourcePage : u.a.g.CURRENT_PAGE;\n        }\n    }\n}, function(t, e, r) {\n    "use strict";\n    r.d(e, "a", (function() {\n        return h;\n    }));\n    var n = r(4), i = r.n(n), s = r(8), o = r.n(s), a = r(1), u = r(0), c = r(7), l = new WeakMap;\n    class h {\n        constructor(t, e) {\n            if (l.set(this, {\n                writable: !0,\n                value: void 0\n            }), o()(this, l, t), this.headlineElement = i()(this, l).context.getElementByClassName(e, "mw-headline"), \n            !this.headlineElement) throw new a.a;\n            this.anchor = this.headlineElement.getAttribute("id");\n            const r = [ "mw-headline-number", ...u.a.config.foreignElementsInHeadlinesClasses ], n = Array.from(this.headlineElement.childNodes).filter(t => t.nodeType !== Node.ELEMENT_NODE || !Array.from(t.classList).some(t => r.includes(t)));\n            this.headline = n.map(t => t.textContent).join("").trim();\n            const s = e.tagName.match(/^H([2-6])$/);\n            this.level = s && Number(s[1]);\n            const h = new c.c(u.a.g.rootElement, t => ![ "STYLE", "LINK" ].includes(t.tagName) && !t.classList.contains("cd-sectionButtonContainer"), !0, e);\n            for (this.headingNestingLevel = 0; h.parentNode(); ) this.headingNestingLevel++;\n            h.currentNode = e;\n            const d = [ e ], p = new RegExp("^H[1-".concat(this.level, "]$"));\n            let f, _, m = !1;\n            for (;h.nextSibling() && !p.test(h.currentNode.tagName); ) void 0 === this.lastElementInFirstChunk && /^H[3-6]$/.test(h.currentNode.tagName) && (m = !0, \n            this.lastElementInFirstChunk = d[d.length - 1]), d.push(h.currentNode);\n            if (this.lastElementInFirstChunk = this.lastElementInFirstChunk || d[d.length - 1], \n            !d.length) throw new a.a;\n            if (d[1]) {\n                for (h.currentNode = d[d.length - 1]; h.lastChild(); ) ;\n                const t = h.currentNode;\n                h.currentNode = d[1];\n                do {\n                    h.currentNode.classList.contains("cd-commentPart") && (f = h.currentNode);\n                } while (!f && h.currentNode !== t && h.nextNode());\n                h.currentNode = t;\n                do {\n                    h.currentNode.classList.contains("cd-commentPart") && (_ = h.currentNode);\n                } while (!_ && h.currentNode !== d[1] && h.previousNode());\n            }\n            if (f) {\n                const t = Number(f.getAttribute("data-comment-id")), e = Number(_.getAttribute("data-comment-id"));\n                if (this.comments = u.a.comments.slice(t, e + 1), m) {\n                    const t = this.comments.findIndex(t => !(i()(this, l).context.follows(this.lastElementInFirstChunk, t.elements[0]) || this.lastElementInFirstChunk.contains(t.elements[0])));\n                    this.commentsInFirstChunk = this.comments.slice(0, t || 0);\n                }\n            }\n            this.id = u.a.sections.length, this.comments = this.comments || [], this.commentsInFirstChunk = this.commentsInFirstChunk || this.comments, \n            this.elements = d;\n        }\n    }\n}, function(t, e, r) {\n    "use strict";\n    r.d(e, "a", (function() {\n        return a;\n    }));\n    var n = r(6), i = r(0), s = r(9);\n    function o(t, e, r) {\n        if (r && e(t)) return !0;\n        for (let r = t.firstChild; r; r = r.nextSibling) if (o(r, e, !0)) return !0;\n    }\n    function a() {\n        let t = [];\n        return o(i.a.g.rootElement, e => {\n            e.nodeType === Node.TEXT_NODE && t.push(e);\n        }), t;\n    }\n    self.Node = {\n        TEXT_NODE: 3,\n        ELEMENT_NODE: 1\n    };\n    const u = Object(n.parseDOM)("<a>a</a>"), c = u[0].constructor, l = u[0].childNodes[0].constructor, h = Object.getPrototypeOf(l);\n    Object.defineProperty(c.prototype, "childElements", {\n        get: function() {\n            return this.childNodes.filter(t => t.nodeType === Node.ELEMENT_NODE);\n        }\n    }), Object.defineProperty(c.prototype, "previousElementSibling", {\n        get: function() {\n            for (let t = this.previousSibling; t; t = t.previousSibling) if (t.nodeType === Node.ELEMENT_NODE) return t;\n            return null;\n        }\n    }), Object.defineProperty(c.prototype, "nextElementSibling", {\n        get: function() {\n            for (let t = this.nextSibling; t; t = t.nextSibling) if (t.nodeType === Node.ELEMENT_NODE) return t;\n            return null;\n        }\n    }), Object.defineProperty(c.prototype, "firstElementChild", {\n        get: function() {\n            let t;\n            for (t = this.firstChild; t && t.nodeType !== Node.ELEMENT_NODE; t = t.nextSibling) ;\n            return t || null;\n        }\n    }), Object.defineProperty(c.prototype, "lastElementChild", {\n        get: function() {\n            let t;\n            for (t = this.lastChild; t && t.nodeType !== Node.ELEMENT_NODE; t = t.previousSibling) ;\n            return t || null;\n        }\n    }), Object.defineProperty(c.prototype, "textContent", {\n        get: function() {\n            i.a.debug.startTimer("textContent");\n            let t = "";\n            return this.childNodes.forEach(e => {\n                t += e.textContent;\n            }), i.a.debug.stopTimer("textContent"), t;\n        }\n    }), Object.defineProperty(c.prototype, "outerHTML", {\n        get: function() {\n            return n.DomUtils.getOuterHTML(this);\n        }\n    }), c.prototype.getAttribute = function(t) {\n        let e = this.attribs[t];\n        return e && "string" == typeof e && -1 !== e.indexOf("&") && (e = e.replace(/&amp;/g, "&").replace(/&quot;/g, \'"\')), \n        e;\n    }, c.prototype.setAttribute = function(t, e) {\n        e && "string" == typeof e && (-1 !== e.indexOf("&") && (e = e.replace(/&/g, "&amp;")), \n        -1 !== e.indexOf(\'"\') && (e = e.replace(/"/g, "&quot;"))), this.attribs[t] = e || "";\n    }, c.prototype.appendChild = function(t) {\n        i.a.debug.startTimer("appendChild"), t.parentNode && t.remove(), n.DomUtils.appendChild(this, t), \n        i.a.debug.stopTimer("appendChild");\n    }, c.prototype.insertBefore = function(t, e) {\n        i.a.debug.startTimer("insertBefore"), e ? (t.parentNode && t.remove(), n.DomUtils.prepend(e, t)) : this.appendChild(t), \n        i.a.debug.stopTimer("insertBefore");\n    }, c.prototype.removeChild = function(t) {\n        t.parentNode === this && n.DomUtils.removeElement(t);\n    }, c.prototype.contains = function(t) {\n        if (i.a.debug.startTimer("contains"), t === this) return !0;\n        if (!this.childNodes.length) return !1;\n        for (let e = t; e; e = e.parentNode) if (e === this) return !0;\n        return i.a.debug.stopTimer("contains"), !1;\n    }, c.prototype.follows = function(t) {\n        if (i.a.debug.startTimer("follows"), this.startIndex && t.startIndex) return this.startIndex > t.startIndex;\n        if (this === t) return !1;\n        const e = [], r = [];\n        let n, s, o;\n        for (let r = this; r; r = r.parentNode) {\n            if (r === t) return !0;\n            e.unshift(r);\n        }\n        for (let i = t; i; i = i.parentNode) if (r.unshift(i), e.includes(i)) {\n            n = i, s = e[e.indexOf(i) + 1], o = r[1];\n            break;\n        }\n        const a = !n || n.childNodes.indexOf(s) > n.childNodes.indexOf(o);\n        return i.a.debug.stopTimer("follows"), a;\n    }, Object.defineProperty(c.prototype, "tagName", {\n        get: function() {\n            return this.name.toUpperCase();\n        }\n    }), Object.defineProperty(c.prototype, "classList", {\n        get: function() {\n            return this._classList || (this._classList = {\n                list: [],\n                movedFromClassAttr: !1,\n                moveFromClassAttr(t) {\n                    this.list = (t || "").split(" "), this.movedFromClassAttr = !0;\n                },\n                add: (...t) => {\n                    t.forEach(t => {\n                        i.a.debug.startTimer("addClass");\n                        let e = this.getAttribute("class") || "";\n                        e && (e += " "), e += t, this.setAttribute("class", e), this._classList.movedFromClassAttr ? this._classList.list.push(t) : this._classList.moveFromClassAttr(e), \n                        i.a.debug.stopTimer("addClass");\n                    });\n                },\n                contains: t => {\n                    i.a.debug.startTimer("containsClass");\n                    const e = this.getAttribute("class");\n                    if (!e) return i.a.debug.stopTimer("containsClass"), !1;\n                    this._classList.movedFromClassAttr || this._classList.moveFromClassAttr(e);\n                    const r = Boolean(this._classList.list.length) && -1 !== this._classList.list.indexOf(t);\n                    return i.a.debug.stopTimer("containsClass"), r;\n                }\n            }), this._classList;\n        }\n    }), c.prototype.getElementsByClassName = function(t, e, r) {\n        i.a.debug.startTimer("getElementsByClassName");\n        let n = [];\n        return o(this, i => {\n            if (i.nodeType === Node.ELEMENT_NODE) return !(i.nodeType !== Node.ELEMENT_NODE || !i.classList.contains(t, r) || (n.push(i), \n            !e || n.length !== e)) || void 0;\n        }), i.a.debug.stopTimer("getElementsByClassName"), n;\n    }, c.prototype.getElementsByTagName = function(t) {\n        i.a.debug.startTimer("getElementsByTagName");\n        const e = n.DomUtils.getElementsByTagName(t, this);\n        return i.a.debug.stopTimer("getElementsByTagName"), e;\n    }, Object.defineProperty(l.prototype, "textContent", {\n        get: function() {\n            return Object(s.a)(this.data);\n        },\n        set: function(t) {\n            this.data = t;\n        }\n    }), h.prototype.remove = function() {\n        n.DomUtils.removeElement(this), this.prev = null, this.next = null;\n    };\n    class d extends c {\n        constructor(t) {\n            super("body", {});\n            for (const e of t) this.appendChild(e);\n        }\n        createElement(t) {\n            return new c(t, {});\n        }\n        createTextNode(t) {\n            return new l("text", t);\n        }\n    }\n    d.prototype.getElementsByClassName = c.prototype.getElementsByClassName, self.Document = d;\n}, function(t, e, r) {\n    "use strict";\n    t.exports = function(t, e) {\n        var n = r(48), i = "", s = "", o = "";\n        i = t.toString();\n        var a = n("HTML_ENTITIES", e);\n        if (!1 === a) return !1;\n        for (o in delete a["&"], a["&"] = "&amp;", a) s = a[o], i = i.split(s).join(o);\n        return i = i.split("&#039;").join("\'");\n    };\n}, function(t, e, r) {\n    "use strict";\n    r.d(e, "a", (function() {\n        return u;\n    }));\n    var n = r(0), i = r(7), s = r(2), o = r(5);\n    function a(t) {\n        const e = t.getAttribute("href");\n        if (!e) return null;\n        const r = function(t) {\n            if ("undefined" == typeof mw || "/wiki/$1" === mw.config.get("wgArticlePath") && "/w/index.php" === mw.config.get("wgScript")) {\n                t = t.replace(/^(?:https?:)?\\/\\/[^/]+/, "").replace(/^\\/wiki\\//, "").replace(/^\\/w\\/index.php\\?title=/, "").replace(/&action=edit.*/, "").replace(/#.*/, "").replace(/_/g, " ");\n                try {\n                    t = decodeURIComponent(t);\n                } catch (t) {\n                    return null;\n                }\n                return t;\n            }\n            {\n                const e = new mw.Uri(t), r = e.path.match(n.a.g.ARTICLE_PATH_REGEXP);\n                if (r) try {\n                    return decodeURIComponent(r[1]);\n                } catch (t) {\n                    return null;\n                }\n                return e.query.title ? e.query.title : null;\n            }\n        }(e);\n        if (!r) return null;\n        let i;\n        const o = r.match(n.a.g.USER_NAMESPACES_REGEXP);\n        return o ? i = o[1] : r.startsWith(n.a.g.CONTRIBS_PAGE + "/") && (i = r.replace(n.a.g.CONTRIBS_PAGE_LINK_REGEXP, "")), \n        i && Object(s.b)(Object(s.i)(i.replace(/\\/.*/, ""))).trim();\n    }\n    class u {\n        constructor(t) {\n            this.context = t;\n        }\n        createComment(t) {\n            return new this.context.CommentClass(this, t);\n        }\n        createSection(t, e) {\n            return new this.context.SectionClass(this, t, e);\n        }\n        findTimestamps() {\n            const t = [ ...Array.from(n.a.g.rootElement.getElementsByTagName("blockquote")), ...Object(s.c)(n.a.config.elementsToExcludeClasses.map(t => Array.from(n.a.g.rootElement.getElementsByClassName(t)))) ];\n            return this.context.getAllTextNodes().map(e => {\n                const r = e.textContent, {date: n, match: i} = Object(o.b)(r) || {};\n                if (n && !t.some(t => t.contains(e))) return {\n                    node: e,\n                    date: n,\n                    match: i\n                };\n            }).filter(s.a).map(t => {\n                const {node: e, match: r, date: n} = t, i = this.context.document.createElement("span");\n                i.classList.add("cd-timestamp");\n                const s = this.context.document.createTextNode(r[2]);\n                i.appendChild(s);\n                const o = e.textContent.slice(r.index + r[0].length);\n                let a;\n                return o && (a = this.context.document.createTextNode(o)), e.textContent = e.textContent.slice(0, r.index + r[1].length), \n                e.parentNode.insertBefore(i, e.nextSibling), a && e.parentNode.insertBefore(a, i.nextSibling), \n                {\n                    element: i,\n                    date: n\n                };\n            });\n        }\n        findSignatures(t) {\n            const e = t.map(t => {\n                const e = t.date, r = t.element, u = t.element.textContent;\n                let c, l;\n                for (let e = t.element; !l; e = e.parentNode) Object(s.g)(e) ? e.classList.contains(n.a.config.unsignedClass) && (c = e) : l = e;\n                const h = Boolean(c);\n                if (l) {\n                    const e = Array.from(l[this.context.childElementsProperty]), r = new i.b(t.element);\n                    let n = !1;\n                    for (;!n && r.nextNode() && l.contains(r.currentNode) && (!e.includes(r.currentNode) || Object(s.g)(r.currentNode)); ) r.currentNode.classList.contains("cd-timestamp") && (n = !0);\n                    if (n) return;\n                }\n                const d = c || t.element, p = new i.a(d);\n                let f, _, m = 0;\n                const g = [];\n                c ? _ = d : (g.push(d), p.previousSibling());\n                do {\n                    const t = p.currentNode;\n                    if (m += t.textContent.length, t.nodeType === Node.ELEMENT_NODE) {\n                        if (t.classList.contains("cd-timestamp")) break;\n                        let e = !1;\n                        if ("A" === t.tagName) {\n                            const r = a(t);\n                            r && (f || (f = r), f === r && (e = !0));\n                        } else {\n                            Array.from(t.getElementsByTagName("a")).some(t => {\n                                const r = a(t);\n                                if (r && (f || (f = r), f === r)) return e = !0, !0;\n                            });\n                        }\n                        e && (_ = t);\n                    }\n                    g.push(t);\n                } while (p.previousSibling() && m < n.a.config.signatureScanLimit);\n                const b = g.indexOf(_);\n                g.splice(-1 === b ? 1 : b + 1);\n                const E = Object(o.a)(t.date, f, !0);\n                Object(o.c)(E);\n                const y = d.parentNode, v = d.nextSibling, A = this.context.document.createElement("span");\n                if (A.classList.add("cd-signature"), g.reverse().forEach(A.appendChild.bind(A)), \n                y.insertBefore(A, v), f) return {\n                    element: A,\n                    timestampElement: r,\n                    timestampText: u,\n                    date: e,\n                    authorName: f,\n                    anchor: E,\n                    unsigned: h\n                };\n            }).filter(s.a);\n            return n.a.config.unsignedClass && Array.from(n.a.g.rootElement.getElementsByClassName(n.a.config.unsignedClass)).forEach(t => {\n                if (!this.context.getElementByClassName(t, "cd-timestamp")) {\n                    Array.from(t.getElementsByTagName("a")).some(r => {\n                        const n = a(r);\n                        if (n) {\n                            t.classList.add("cd-signature");\n                            const r = !0;\n                            return e.push({\n                                element: t,\n                                authorName: n,\n                                unsigned: r\n                            }), !0;\n                        }\n                    });\n                }\n            }), e.sort((t, e) => this.context.follows(t.element, e.element) ? 1 : -1), e;\n        }\n        collectParts(t) {\n            const e = new i.a(t);\n            let r, o = [];\n            for (;!r; ) {\n                for (;!e.currentNode.nextSibling && e.parentNode(); ) ;\n                if (!e.nextSibling()) break;\n                Object(s.g)(e.currentNode, !0) || (r = e.currentNode);\n            }\n            if (r && t.parentNode.contains(r)) {\n                for (e.currentNode = t; e.nextSibling() && Object(s.g)(e.currentNode, !0); ) o.push({\n                    node: e.currentNode,\n                    isTextNode: e.currentNode.nodeType === Node.TEXT_NODE,\n                    isHeading: !1,\n                    hasCurrentSignature: !1,\n                    hasForeignComponents: !1,\n                    lastStep: "start"\n                });\n                o.reverse(), e.currentNode = t;\n            } else e.currentNode = t.parentNode;\n            o.push({\n                node: e.currentNode,\n                isTextNode: !1,\n                isHeading: !1,\n                hasCurrentSignature: !0,\n                hasForeignComponents: !1,\n                lastStep: "start"\n            });\n            const a = new RegExp(n.a.g.TIMEZONE_REGEXP.source + "\\\\s*$");\n            for (let i = 0; i < 500; i++) {\n                let i;\n                const u = o[o.length - 1];\n                if (!u.isTextNode && !u.hasCurrentSignature) {\n                    const t = u.node.textContent;\n                    if (!Object(s.g)(u.node, !0) && (a.test(t) || n.a.config.signatureEndingRegexp && n.a.config.signatureEndingRegexp.test(t))) {\n                        u.hasForeignComponents = !0;\n                        break;\n                    }\n                }\n                if (!u.hasCurrentSignature && u.hasForeignComponents) {\n                    let t, r = !1;\n                    for (;(t = e.currentNode) && e.lastChild(); ) {\n                        if (Object(s.g)(e.currentNode, !0)) {\n                            e.currentNode = t;\n                            break;\n                        }\n                        r = !0;\n                    }\n                    if (!r) break;\n                    i = "dive";\n                } else if (e.previousSibling()) i = "back"; else {\n                    if (!e.parentNode()) break;\n                    i = "up";\n                }\n                const c = e.currentNode, l = c.nodeType === Node.TEXT_NODE;\n                if ("back" === i && [ "OL", "UL" ].includes(u.node.tagName) && !([ "DL", "OL", "UL" ].includes(c.tagName) || l && c.previousSibling && [ "DL", "OL", "UL" ].includes(c.previousSibling.tagName)) && u.node[this.context.childElementsProperty].length && u.node[this.context.childElementsProperty][0].contains(t)) break;\n                let h = null, d = null, p = null;\n                if (!l) {\n                    if (c.classList.contains("cd-commentPart") || "toc" === c.getAttribute("id") || "TD" === c.tagName || "HR" === c.tagName && c.previousElementSibling && this.context.getElementByClassName(c.previousElementSibling, "cd-signature") || n.a.config.checkForCustomForeignComponents && n.a.config.checkForCustomForeignComponents(c, this.context)) break;\n                    h = /^H[1-6]$/.test(c.tagName), d = c.contains(t), p = c.getElementsByClassName("cd-signature", Number(d) + 1).length - Number(d) > 0 || r && c.contains(r);\n                }\n                if (o.push({\n                    node: c,\n                    isTextNode: l,\n                    isHeading: h,\n                    hasCurrentSignature: d,\n                    hasForeignComponents: p,\n                    lastStep: i\n                }), h) break;\n            }\n            return o;\n        }\n        removeNestedParts(t) {\n            for (let e = t.length - 1; e >= 0; e--) {\n                const r = t[e];\n                if ("up" === r.lastStep && !r.hasForeignComponents) {\n                    let r = 0;\n                    for (let n = e - 1; n > 0; n--) if ("dive" === t[n].lastStep) {\n                        r = n;\n                        break;\n                    }\n                    t.splice(r, e - r), e = r;\n                }\n            }\n            return t;\n        }\n        encloseInlineParts(t, e) {\n            const r = [];\n            let n = null, i = !1;\n            for (let e = 0; e <= t.length; e++) {\n                const o = t[e];\n                if (!o || null !== n && ![ "back", "start" ].includes(o.lastStep) || o.hasForeignComponents || o.isHeading) {\n                    if (null !== n) {\n                        if (i) {\n                            const t = e - 1;\n                            r.push({\n                                start: n,\n                                end: t\n                            });\n                        }\n                        n = null, i = !1;\n                    }\n                } else {\n                    if (null === n) {\n                        if (Object(s.g)(o.node.parentNode)) {\n                            for (let r = e + 1; r < t.length; r++) "up" !== t[r].lastStep || (e = r - 1);\n                            break;\n                        }\n                        n = e;\n                    }\n                    !i && (o.isTextNode && o.node.textContent.trim() || Object(s.g)(o.node)) && (i = !0);\n                }\n            }\n            for (let n = r.length - 1; n >= 0; n--) {\n                const i = r[n], s = this.context.document.createElement("div"), o = t[i.start].node.nextSibling, a = t[i.start].node.parentNode;\n                for (let e = i.end; e >= i.start; e--) s.appendChild(t[e].node);\n                a.insertBefore(s, o);\n                const u = {\n                    node: s,\n                    isTextNode: !1,\n                    isHeading: !1,\n                    hasCurrentSignature: s.contains(e),\n                    hasForeignComponents: !1,\n                    lastStep: "replaced"\n                };\n                t.splice(i.start, i.end - i.start + 1, u);\n            }\n            return t;\n        }\n        filterParts(t) {\n            for (let e = (t = t.filter(t => !t.hasForeignComponents && !t.isTextNode)).length - 1; e > 0; e--) {\n                const r = t[e];\n                if ("P" !== r.node.tagName || r.node.textContent.trim()) break;\n                t.splice(e, 1);\n            }\n            return t;\n        }\n        replaceListsWithItems(t, e) {\n            const r = t[t.length - 1];\n            for (let n = t.length - 1; n >= 0; n--) {\n                const i = t[n];\n                if ([ "UL", "DL", "OL", "LI", "DD" ].includes(i.node.tagName) && ("up" === i.lastStep && (!t[n - 1] || "back" !== t[n - 1].lastStep) || ("DD" === r.node.tagName || "DD" === r.node.parentNode.tagName || "DL" === r.node.tagName) && !t.slice(n + 1).some(t => "P" === t.node.tagName))) {\n                    const r = i.node.textContent.replace(/\\s+/g, "");\n                    let s, o = [ i.node ];\n                    do {\n                        s = o.reduce((t, e) => t.concat(Array.from(e[this.context.childElementsProperty])), []);\n                    } while (s.length && s.every(t => [ "UL", "DL", "OL", "LI", "DD" ].includes(t.tagName)) && s.map(t => t.textContent).join("").replace(/\\s+/g, "") === r && (o = s));\n                    if (o.length > 1) {\n                        const r = o.map(t => ({\n                            node: t,\n                            isTextNode: !1,\n                            hasCurrentSignature: t.contains(e),\n                            hasForeignComponents: !1,\n                            lastStep: "replaced"\n                        }));\n                        t.splice(n, 1, ...r);\n                    } else o[0] !== i.node && Object.assign(i, {\n                        node: o[0],\n                        lastStep: "replaced"\n                    });\n                }\n            }\n            return t;\n        }\n        getLevelsUpTree(t) {\n            const e = [], r = new i.b(t);\n            for (;r.parentNode(); ) {\n                const t = r.currentNode;\n                if ([ "UL", "DL", "OL" ].includes(t.tagName)) {\n                    if (t.classList.contains("cd-commentLevel")) {\n                        const r = t.getAttribute("class").match(/cd-commentLevel-(\\d+)/);\n                        return r && e.unshift(...Array(Number(r[1]))), e;\n                    }\n                    e.unshift(t);\n                }\n            }\n            return e;\n        }\n        findHeadings() {\n            const t = [ ...n.a.g.rootElement.getElementsByTagName("h2"), ...n.a.g.rootElement.getElementsByTagName("h3"), ...n.a.g.rootElement.getElementsByTagName("h4"), ...n.a.g.rootElement.getElementsByTagName("h5"), ...n.a.g.rootElement.getElementsByTagName("h6") ];\n            return t.sort((t, e) => this.context.follows(t, e) ? 1 : -1), t;\n        }\n    }\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__(1), _CommentSkeleton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28), _Parser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32), _SectionSkeleton__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(29), _cd__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(0), _debug__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(27), _staticGlobals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(26), _treeWalker__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(7), _htmlparser2Extended__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(30), _htmlparser2Extended__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(6), _htmlparser2Extended__WEBPACK_IMPORTED_MODULE_9___default = __webpack_require__.n(_htmlparser2Extended__WEBPACK_IMPORTED_MODULE_9__), _timestamp__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(5);\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: (t, e) => t.follows(e),\n        getAllTextNodes: _htmlparser2Extended__WEBPACK_IMPORTED_MODULE_8__.a,\n        getElementByClassName: (t, e) => t.getElementsByClassName(e, 1)[0] || null\n    };\n    let alarmTimeout;\n    function setAlarm(t) {\n        clearTimeout(alarmTimeout), alarmTimeout = setTimeout(() => {\n            postMessage({\n                type: "wakeUp"\n            });\n        }, t);\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 t = new _Parser__WEBPACK_IMPORTED_MODULE_2__.a(context);\n        _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.startTimer("find timestamps");\n        const e = t.findTimestamps();\n        _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.stopTimer("find timestamps"), _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.startTimer("find signatures");\n        const r = t.findSignatures(e);\n        _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.stopTimer("find signatures"), r.forEach(e => {\n            try {\n                const r = t.createComment(e);\n                void 0 !== r.id && _cd__WEBPACK_IMPORTED_MODULE_4__.a.comments.push(r);\n            } catch (t) {\n                t instanceof _CdError__WEBPACK_IMPORTED_MODULE_0__.a || console.error(t);\n            }\n        }), _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.stopTimer("processing comments"), _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.startTimer("processing sections"), \n        t.findHeadings().forEach(e => {\n            try {\n                const r = t.createSection(e);\n                void 0 !== r.id && _cd__WEBPACK_IMPORTED_MODULE_4__.a.sections.push(r);\n            } catch (t) {\n                t instanceof _CdError__WEBPACK_IMPORTED_MODULE_0__.a || console.error(t);\n            }\n        }), _cd__WEBPACK_IMPORTED_MODULE_4__.a.comments.forEach((t, e) => {\n            if (e !== _cd__WEBPACK_IMPORTED_MODULE_4__.a.comments.length - 1) {\n                if (_cd__WEBPACK_IMPORTED_MODULE_4__.a.g.specialElements.pageHasOutdents) {\n                    const e = new _treeWalker__WEBPACK_IMPORTED_MODULE_7__.b(t.elements[t.elements.length - 1]);\n                    let r;\n                    for (;!r && e.nextNode() && !e.currentNode.classList.contains("cd-commentPart"); ) r = e.currentNode.classList.contains("outdent-template");\n                    r && (_cd__WEBPACK_IMPORTED_MODULE_4__.a.comments[t.id + 1].targetComment = t);\n                }\n                _cd__WEBPACK_IMPORTED_MODULE_4__.a.comments[t.id + 1].targetComment !== t && _cd__WEBPACK_IMPORTED_MODULE_4__.a.comments.slice(t.id + 1).some(e => {\n                    if (!(e.section === t.section && e.level > t.level)) return !0;\n                    e.level !== t.level + 1 && e.id !== t.id + 1 || (e.targetComment = t);\n                });\n            }\n            t.section && (t.sectionHeadline = t.section.headline, t.sectionAnchor = t.section.anchor, \n            delete t.section), t.targetComment && (t.targetCommentAuthorName = t.targetComment.authorName, \n            t.toMe = t.targetComment.own, delete t.targetComment), delete t.elements, delete t.parts, \n            delete t.highlightables, delete t.addAttributes, delete t.setLevels, delete t.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"), _cd__WEBPACK_IMPORTED_MODULE_4__.a.debug.logAndResetEverything();\n    }\n    function onMessageFromWindow(e) {\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.checkForCustomForeignComponents;\n            !checker || /^ *function +/.test(checker) || /^.+=>/.test(checker) || (checker = "function " + checker), \n            _cd__WEBPACK_IMPORTED_MODULE_4__.a.config.checkForCustomForeignComponents = 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(t) {\n    t.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(t, e, r) {\n    "use strict";\n    var n, i = "object" == typeof Reflect ? Reflect : null, s = i && "function" == typeof i.apply ? i.apply : function(t, e, r) {\n        return Function.prototype.apply.call(t, e, r);\n    };\n    n = i && "function" == typeof i.ownKeys ? i.ownKeys : Object.getOwnPropertySymbols ? function(t) {\n        return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t));\n    } : function(t) {\n        return Object.getOwnPropertyNames(t);\n    };\n    var o = Number.isNaN || function(t) {\n        return t != t;\n    };\n    function a() {\n        a.init.call(this);\n    }\n    t.exports = a, a.EventEmitter = a, a.prototype._events = void 0, a.prototype._eventsCount = 0, \n    a.prototype._maxListeners = void 0;\n    var u = 10;\n    function c(t) {\n        if ("function" != typeof t) throw new TypeError(\'The "listener" argument must be of type Function. Received type \' + typeof t);\n    }\n    function l(t) {\n        return void 0 === t._maxListeners ? a.defaultMaxListeners : t._maxListeners;\n    }\n    function h(t, e, r, n) {\n        var i, s, o, a;\n        if (c(r), void 0 === (s = t._events) ? (s = t._events = Object.create(null), t._eventsCount = 0) : (void 0 !== s.newListener && (t.emit("newListener", e, r.listener ? r.listener : r), \n        s = t._events), o = s[e]), void 0 === o) o = s[e] = r, ++t._eventsCount; else if ("function" == typeof o ? o = s[e] = n ? [ r, o ] : [ o, r ] : n ? o.unshift(r) : o.push(r), \n        (i = l(t)) > 0 && o.length > i && !o.warned) {\n            o.warned = !0;\n            var u = new Error("Possible EventEmitter memory leak detected. " + o.length + " " + String(e) + " listeners added. Use emitter.setMaxListeners() to increase limit");\n            u.name = "MaxListenersExceededWarning", u.emitter = t, u.type = e, u.count = o.length, \n            a = u, console && console.warn && console.warn(a);\n        }\n        return t;\n    }\n    function d() {\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 p(t, e, r) {\n        var n = {\n            fired: !1,\n            wrapFn: void 0,\n            target: t,\n            type: e,\n            listener: r\n        }, i = d.bind(n);\n        return i.listener = r, n.wrapFn = i, i;\n    }\n    function f(t, e, r) {\n        var n = t._events;\n        if (void 0 === n) return [];\n        var i = n[e];\n        return void 0 === i ? [] : "function" == typeof i ? r ? [ i.listener || i ] : [ i ] : r ? function(t) {\n            for (var e = new Array(t.length), r = 0; r < e.length; ++r) e[r] = t[r].listener || t[r];\n            return e;\n        }(i) : m(i, i.length);\n    }\n    function _(t) {\n        var e = this._events;\n        if (void 0 !== e) {\n            var r = e[t];\n            if ("function" == typeof r) return 1;\n            if (void 0 !== r) return r.length;\n        }\n        return 0;\n    }\n    function m(t, e) {\n        for (var r = new Array(e), n = 0; n < e; ++n) r[n] = t[n];\n        return r;\n    }\n    Object.defineProperty(a, "defaultMaxListeners", {\n        enumerable: !0,\n        get: function() {\n            return u;\n        },\n        set: function(t) {\n            if ("number" != typeof t || t < 0 || o(t)) throw new RangeError(\'The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received \' + t + ".");\n            u = t;\n        }\n    }), a.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    }, a.prototype.setMaxListeners = function(t) {\n        if ("number" != typeof t || t < 0 || o(t)) throw new RangeError(\'The value of "n" is out of range. It must be a non-negative number. Received \' + t + ".");\n        return this._maxListeners = t, this;\n    }, a.prototype.getMaxListeners = function() {\n        return l(this);\n    }, a.prototype.emit = function(t) {\n        for (var e = [], r = 1; r < arguments.length; r++) e.push(arguments[r]);\n        var n = "error" === t, i = this._events;\n        if (void 0 !== i) n = n && void 0 === i.error; else if (!n) return !1;\n        if (n) {\n            var o;\n            if (e.length > 0 && (o = e[0]), o instanceof Error) throw o;\n            var a = new Error("Unhandled error." + (o ? " (" + o.message + ")" : ""));\n            throw a.context = o, a;\n        }\n        var u = i[t];\n        if (void 0 === u) return !1;\n        if ("function" == typeof u) s(u, this, e); else {\n            var c = u.length, l = m(u, c);\n            for (r = 0; r < c; ++r) s(l[r], this, e);\n        }\n        return !0;\n    }, a.prototype.addListener = function(t, e) {\n        return h(this, t, e, !1);\n    }, a.prototype.on = a.prototype.addListener, a.prototype.prependListener = function(t, e) {\n        return h(this, t, e, !0);\n    }, a.prototype.once = function(t, e) {\n        return c(e), this.on(t, p(this, t, e)), this;\n    }, a.prototype.prependOnceListener = function(t, e) {\n        return c(e), this.prependListener(t, p(this, t, e)), this;\n    }, a.prototype.removeListener = function(t, e) {\n        var r, n, i, s, o;\n        if (c(e), void 0 === (n = this._events)) return this;\n        if (void 0 === (r = n[t])) return this;\n        if (r === e || r.listener === e) 0 == --this._eventsCount ? this._events = Object.create(null) : (delete n[t], \n        n.removeListener && this.emit("removeListener", t, r.listener || e)); else if ("function" != typeof r) {\n            for (i = -1, s = r.length - 1; s >= 0; s--) if (r[s] === e || r[s].listener === e) {\n                o = r[s].listener, i = s;\n                break;\n            }\n            if (i < 0) return this;\n            0 === i ? r.shift() : function(t, e) {\n                for (;e + 1 < t.length; e++) t[e] = t[e + 1];\n                t.pop();\n            }(r, i), 1 === r.length && (n[t] = r[0]), void 0 !== n.removeListener && this.emit("removeListener", t, o || e);\n        }\n        return this;\n    }, a.prototype.off = a.prototype.removeListener, a.prototype.removeAllListeners = function(t) {\n        var e, r, n;\n        if (void 0 === (r = this._events)) return this;\n        if (void 0 === r.removeListener) return 0 === arguments.length ? (this._events = Object.create(null), \n        this._eventsCount = 0) : void 0 !== r[t] && (0 == --this._eventsCount ? this._events = Object.create(null) : delete r[t]), \n        this;\n        if (0 === arguments.length) {\n            var i, s = Object.keys(r);\n            for (n = 0; n < s.length; ++n) "removeListener" !== (i = s[n]) && this.removeAllListeners(i);\n            return this.removeAllListeners("removeListener"), this._events = Object.create(null), \n            this._eventsCount = 0, this;\n        }\n        if ("function" == typeof (e = r[t])) this.removeListener(t, e); else if (void 0 !== e) for (n = e.length - 1; n >= 0; n--) this.removeListener(t, e[n]);\n        return this;\n    }, a.prototype.listeners = function(t) {\n        return f(this, t, !0);\n    }, a.prototype.rawListeners = function(t) {\n        return f(this, t, !1);\n    }, a.listenerCount = function(t, e) {\n        return "function" == typeof t.listenerCount ? t.listenerCount(e) : _.call(t, e);\n    }, a.prototype.listenerCount = _, a.prototype.eventNames = function() {\n        return this._eventsCount > 0 ? n(this._events) : [];\n    };\n}, function(t, e, r) {\n    "use strict";\n    var n, i = this && this.__extends || (n = function(t, e) {\n        return (n = Object.setPrototypeOf || {\n            __proto__: []\n        } instanceof Array && function(t, e) {\n            t.__proto__ = e;\n        } || function(t, e) {\n            for (var r in e) e.hasOwnProperty(r) && (t[r] = e[r]);\n        })(t, e);\n    }, function(t, e) {\n        function r() {\n            this.constructor = t;\n        }\n        n(t, e), t.prototype = null === e ? Object.create(e) : (r.prototype = e.prototype, \n        new r);\n    });\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    });\n    var s = new Map([ [ "tag", 1 ], [ "script", 1 ], [ "style", 1 ], [ "directive", 1 ], [ "text", 3 ], [ "cdata", 4 ], [ "comment", 8 ] ]), o = function() {\n        function t(t) {\n            this.type = t, this.parent = null, this.prev = null, this.next = null, this.startIndex = null, \n            this.endIndex = null;\n        }\n        return Object.defineProperty(t.prototype, "nodeType", {\n            get: function() {\n                return s.get(this.type) || 1;\n            },\n            enumerable: !0,\n            configurable: !0\n        }), Object.defineProperty(t.prototype, "parentNode", {\n            get: function() {\n                return this.parent || null;\n            },\n            set: function(t) {\n                this.parent = t;\n            },\n            enumerable: !0,\n            configurable: !0\n        }), Object.defineProperty(t.prototype, "previousSibling", {\n            get: function() {\n                return this.prev || null;\n            },\n            set: function(t) {\n                this.prev = t;\n            },\n            enumerable: !0,\n            configurable: !0\n        }), Object.defineProperty(t.prototype, "nextSibling", {\n            get: function() {\n                return this.next || null;\n            },\n            set: function(t) {\n                this.next = t;\n            },\n            enumerable: !0,\n            configurable: !0\n        }), t;\n    }();\n    e.Node = o;\n    var a = function(t) {\n        function e(e, r) {\n            var n = t.call(this, e) || this;\n            return n.data = r, n;\n        }\n        return i(e, t), Object.defineProperty(e.prototype, "nodeValue", {\n            get: function() {\n                return this.data;\n            },\n            set: function(t) {\n                this.data = t;\n            },\n            enumerable: !0,\n            configurable: !0\n        }), e;\n    }(o);\n    e.DataNode = a;\n    var u = function(t) {\n        function e(e, r) {\n            var n = t.call(this, "directive", r) || this;\n            return n.name = e, n;\n        }\n        return i(e, t), e;\n    }(a);\n    e.ProcessingInstruction = u;\n    var c = function(t) {\n        function e(e, r) {\n            var n = t.call(this, e) || this;\n            return n.children = r, n;\n        }\n        return i(e, t), Object.defineProperty(e.prototype, "firstChild", {\n            get: function() {\n                return this.children[0] || null;\n            },\n            enumerable: !0,\n            configurable: !0\n        }), Object.defineProperty(e.prototype, "lastChild", {\n            get: function() {\n                return this.children[this.children.length - 1] || null;\n            },\n            enumerable: !0,\n            configurable: !0\n        }), Object.defineProperty(e.prototype, "childNodes", {\n            get: function() {\n                return this.children;\n            },\n            set: function(t) {\n                this.children = t;\n            },\n            enumerable: !0,\n            configurable: !0\n        }), e;\n    }(o);\n    e.NodeWithChildren = c;\n    var l = function(t) {\n        function e(e, r) {\n            var n = t.call(this, "script" === e ? "script" : "style" === e ? "style" : "tag", []) || this;\n            return n.name = e, n.attribs = r, n.attribs = r, n;\n        }\n        return i(e, t), Object.defineProperty(e.prototype, "tagName", {\n            get: function() {\n                return this.name;\n            },\n            set: function(t) {\n                this.name = t;\n            },\n            enumerable: !0,\n            configurable: !0\n        }), e;\n    }(c);\n    e.Element = l;\n}, function(t, e, r) {\n    "use strict";\n    var n = this && this.__importDefault || function(t) {\n        return t && t.__esModule ? t : {\n            default: t\n        };\n    };\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    });\n    var i = r(12), s = n(r(38));\n    function o(t, e) {\n        return s.default(t, e);\n    }\n    e.getOuterHTML = o, e.getInnerHTML = function(t, e) {\n        return i.hasChildren(t) ? t.children.map((function(t) {\n            return o(t, e);\n        })).join("") : "";\n    }, e.getText = function t(e) {\n        return Array.isArray(e) ? e.map(t).join("") : i.isTag(e) ? "br" === e.name ? "\\n" : t(e.children) : i.isCDATA(e) ? t(e.children) : i.isText(e) ? e.data : "";\n    };\n}, function(t, e, r) {\n    var n = r(15), i = r(39), s = r(40);\n    s.elementNames.__proto__ = null, s.attributeNames.__proto__ = null;\n    var o = {\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 a = {\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    }, u = t.exports = function(t, e) {\n        Array.isArray(t) || t.cheerio || (t = [ t ]), e = e || {};\n        for (var r = "", i = 0; i < t.length; i++) {\n            var s = t[i];\n            "root" === s.type ? r += u(s.children, e) : n.isTag(s) ? r += l(s, e) : s.type === n.Directive ? r += h(s) : s.type === n.Comment ? r += f(s) : s.type === n.CDATA ? r += p(s) : r += d(s, e);\n        }\n        return r;\n    }, c = [ "mi", "mo", "mn", "ms", "mtext", "annotation-xml", "foreignObject", "desc", "title" ];\n    function l(t, e) {\n        "foreign" === e.xmlMode && (t.name = s.elementNames[t.name] || t.name, t.parent && c.indexOf(t.parent.name) >= 0 && (e = Object.assign({}, e, {\n            xmlMode: !1\n        }))), !e.xmlMode && [ "svg", "math" ].indexOf(t.name) >= 0 && (e = Object.assign({}, e, {\n            xmlMode: "foreign"\n        }));\n        var r = "<" + t.name, n = function(t, e) {\n            if (t) {\n                var r, n = "";\n                for (var o in t) r = t[o], n && (n += " "), "foreign" === e.xmlMode && (o = s.attributeNames[o] || o), \n                n += o, (null !== r && "" !== r || e.xmlMode) && (n += \'="\' + (e.decodeEntities ? i.encodeXML(r) : r.replace(/\\"/g, "&quot;")) + \'"\');\n                return n;\n            }\n        }(t.attribs, e);\n        return n && (r += " " + n), !e.xmlMode || t.children && 0 !== t.children.length ? (r += ">", \n        t.children && (r += u(t.children, e)), a[t.name] && !e.xmlMode || (r += "</" + t.name + ">")) : r += "/>", \n        r;\n    }\n    function h(t) {\n        return "<" + t.data + ">";\n    }\n    function d(t, e) {\n        var r = t.data || "";\n        return !e.decodeEntities || t.parent && t.parent.name in o || (r = i.encodeXML(r)), \n        r;\n    }\n    function p(t) {\n        return "<![CDATA[" + t.children[0].data + "]]>";\n    }\n    function f(t) {\n        return "\\x3c!--" + t.data + "--\\x3e";\n    }\n}, function(t, e, r) {\n    "use strict";\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    }), e.encode = e.decodeStrict = e.decode = void 0;\n    var n = r(23), i = r(24);\n    e.decode = function(t, e) {\n        return (!e || e <= 0 ? n.decodeXML : n.decodeHTML)(t);\n    }, e.decodeStrict = function(t, e) {\n        return (!e || e <= 0 ? n.decodeXML : n.decodeHTMLStrict)(t);\n    }, e.encode = function(t, e) {\n        return (!e || e <= 0 ? i.encodeXML : i.encodeHTML)(t);\n    };\n    var s = r(24);\n    Object.defineProperty(e, "encodeXML", {\n        enumerable: !0,\n        get: function() {\n            return s.encodeXML;\n        }\n    }), Object.defineProperty(e, "encodeHTML", {\n        enumerable: !0,\n        get: function() {\n            return s.encodeHTML;\n        }\n    }), Object.defineProperty(e, "escape", {\n        enumerable: !0,\n        get: function() {\n            return s.escape;\n        }\n    }), Object.defineProperty(e, "encodeHTML4", {\n        enumerable: !0,\n        get: function() {\n            return s.encodeHTML;\n        }\n    }), Object.defineProperty(e, "encodeHTML5", {\n        enumerable: !0,\n        get: function() {\n            return s.encodeHTML;\n        }\n    });\n    var o = r(23);\n    Object.defineProperty(e, "decodeXML", {\n        enumerable: !0,\n        get: function() {\n            return o.decodeXML;\n        }\n    }), Object.defineProperty(e, "decodeHTML", {\n        enumerable: !0,\n        get: function() {\n            return o.decodeHTML;\n        }\n    }), Object.defineProperty(e, "decodeHTMLStrict", {\n        enumerable: !0,\n        get: function() {\n            return o.decodeHTMLStrict;\n        }\n    }), Object.defineProperty(e, "decodeHTML4", {\n        enumerable: !0,\n        get: function() {\n            return o.decodeHTML;\n        }\n    }), Object.defineProperty(e, "decodeHTML5", {\n        enumerable: !0,\n        get: function() {\n            return o.decodeHTML;\n        }\n    }), Object.defineProperty(e, "decodeHTML4Strict", {\n        enumerable: !0,\n        get: function() {\n            return o.decodeHTMLStrict;\n        }\n    }), Object.defineProperty(e, "decodeHTML5Strict", {\n        enumerable: !0,\n        get: function() {\n            return o.decodeHTMLStrict;\n        }\n    }), Object.defineProperty(e, "decodeXMLStrict", {\n        enumerable: !0,\n        get: function() {\n            return o.decodeXML;\n        }\n    });\n}, function(t) {\n    t.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(t, e, r) {\n    "use strict";\n    function n(t) {\n        return t.children || null;\n    }\n    function i(t) {\n        return t.parent || null;\n    }\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    }), e.getChildren = n, e.getParent = i, e.getSiblings = function(t) {\n        var e = i(t);\n        return e ? n(e) : [ t ];\n    }, e.getAttributeValue = function(t, e) {\n        var r;\n        return null === (r = t.attribs) || void 0 === r ? void 0 : r[e];\n    }, e.hasAttrib = function(t, e) {\n        return !!t.attribs && Object.prototype.hasOwnProperty.call(t.attribs, e) && null != t.attribs[e];\n    }, e.getName = function(t) {\n        return t.name;\n    };\n}, function(t, e, r) {\n    "use strict";\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    }), e.removeElement = function(t) {\n        if (t.prev && (t.prev.next = t.next), t.next && (t.next.prev = t.prev), t.parent) {\n            var e = t.parent.children;\n            e.splice(e.lastIndexOf(t), 1);\n        }\n    }, e.replaceElement = function(t, e) {\n        var r = e.prev = t.prev;\n        r && (r.next = e);\n        var n = e.next = t.next;\n        n && (n.prev = e);\n        var i = e.parent = t.parent;\n        if (i) {\n            var s = i.children;\n            s[s.lastIndexOf(t)] = e;\n        }\n    }, e.appendChild = function(t, e) {\n        if (e.parent = t, 1 !== t.children.push(e)) {\n            var r = t.children[t.children.length - 2];\n            r.next = e, e.prev = r, e.next = null;\n        }\n    }, e.append = function(t, e) {\n        var r = t.parent, n = t.next;\n        if (e.next = n, e.prev = t, t.next = e, e.parent = r, n) {\n            if (n.prev = e, r) {\n                var i = r.children;\n                i.splice(i.lastIndexOf(n), 0, e);\n            }\n        } else r && r.children.push(e);\n    }, e.prepend = function(t, e) {\n        var r = t.parent;\n        if (r) {\n            var n = r.children;\n            n.splice(n.lastIndexOf(t), 0, e);\n        }\n        t.prev && (t.prev.next = e), e.parent = r, e.prev = t.prev, e.next = t, t.prev = e;\n    };\n}, function(t, e, r) {\n    "use strict";\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    });\n    var n = r(25), i = r(12);\n    function s(t) {\n        return "text" === t.type;\n    }\n    var o = {\n        tag_name: function(t) {\n            return "function" == typeof t ? function(e) {\n                return i.isTag(e) && t(e.name);\n            } : "*" === t ? i.isTag : function(e) {\n                return i.isTag(e) && e.name === t;\n            };\n        },\n        tag_type: function(t) {\n            return "function" == typeof t ? function(e) {\n                return t(e.type);\n            } : function(e) {\n                return e.type === t;\n            };\n        },\n        tag_contains: function(t) {\n            return "function" == typeof t ? function(e) {\n                return s(e) && t(e.data);\n            } : function(e) {\n                return s(e) && e.data === t;\n            };\n        }\n    };\n    function a(t, e) {\n        return "function" == typeof e ? function(r) {\n            return i.isTag(r) && e(r.attribs[t]);\n        } : function(r) {\n            return i.isTag(r) && r.attribs[t] === e;\n        };\n    }\n    function u(t, e) {\n        return function(r) {\n            return t(r) || e(r);\n        };\n    }\n    function c(t) {\n        var e = Object.keys(t).map((function(e) {\n            var r = t[e];\n            return e in o ? o[e](r) : a(e, r);\n        }));\n        return 0 === e.length ? null : e.reduce(u);\n    }\n    e.testElement = function(t, e) {\n        var r = c(t);\n        return !r || r(e);\n    }, e.getElements = function(t, e, r, i) {\n        void 0 === i && (i = 1 / 0);\n        var s = c(t);\n        return s ? n.filter(s, e, r, i) : [];\n    }, e.getElementById = function(t, e, r) {\n        return void 0 === r && (r = !0), Array.isArray(e) || (e = [ e ]), n.findOne(a("id", t), e, r);\n    }, e.getElementsByTagName = function(t, e, r, i) {\n        return void 0 === i && (i = 1 / 0), n.filter(o.tag_name(t), e, r, i);\n    }, e.getElementsByTagType = function(t, e, r, i) {\n        return void 0 === r && (r = !0), void 0 === i && (i = 1 / 0), n.filter(o.tag_type(t), e, r, i);\n    };\n}, function(t, e, r) {\n    "use strict";\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    });\n    var n = r(12);\n    function i(t, e) {\n        var r = [], i = [];\n        if (t === e) return 0;\n        for (var s = n.hasChildren(t) ? t : t.parent; s; ) r.unshift(s), s = s.parent;\n        for (s = n.hasChildren(e) ? e : e.parent; s; ) i.unshift(s), s = s.parent;\n        for (var o = 0; r[o] === i[o]; ) o++;\n        if (0 === o) return 1;\n        var a = r[o - 1], u = a.children, c = r[o], l = i[o];\n        return u.indexOf(c) > u.indexOf(l) ? a === e ? 20 : 4 : a === t ? 10 : 2;\n    }\n    e.removeSubsets = function(t) {\n        for (var e = t.length; --e >= 0; ) {\n            var r = t[e];\n            if (e > 0 && t.lastIndexOf(r, e - 1) >= 0) t.splice(e, 1); else for (var n = r.parent; n; n = n.parent) if (t.indexOf(n) > -1) {\n                t.splice(e, 1);\n                break;\n            }\n        }\n        return t;\n    }, e.compareDocumentPosition = i, e.uniqueSort = function(t) {\n        return (t = t.filter((function(t, e, r) {\n            return !r.includes(t, e + 1);\n        }))).sort((function(t, e) {\n            var r = i(t, e);\n            return 2 & r ? -1 : 4 & r ? 1 : 0;\n        })), t;\n    };\n}, function(t, e) {}, function(t, e, r) {\n    "use strict";\n    var n, i = this && this.__extends || (n = function(t, e) {\n        return (n = Object.setPrototypeOf || {\n            __proto__: []\n        } instanceof Array && function(t, e) {\n            t.__proto__ = e;\n        } || function(t, e) {\n            for (var r in e) e.hasOwnProperty(r) && (t[r] = e[r]);\n        })(t, e);\n    }, function(t, e) {\n        function r() {\n            this.constructor = t;\n        }\n        n(t, e), t.prototype = null === e ? Object.create(e) : (r.prototype = e.prototype, \n        new r);\n    }), s = this && this.__importDefault || function(t) {\n        return t && t.__esModule ? t : {\n            default: t\n        };\n    };\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    });\n    var o = function(t) {\n        function e(e) {\n            void 0 === e && (e = {});\n            var r = t.call(this, (function(t) {\n                for (var e, n = [], i = 1; i < arguments.length; i++) n[i - 1] = arguments[i];\n                r.events.push([ t ].concat(n)), r._cbs[t] && (e = r._cbs)[t].apply(e, n);\n            })) || this;\n            return r._cbs = e, r.events = [], r;\n        }\n        return i(e, t), e.prototype.onreset = function() {\n            this.events = [], this._cbs.onreset && this._cbs.onreset();\n        }, e.prototype.restart = function() {\n            var t;\n            this._cbs.onreset && this._cbs.onreset();\n            for (var e = 0; e < this.events.length; e++) {\n                var r = this.events[e], n = r[0], i = r.slice(1);\n                this._cbs[n] && (t = this._cbs)[n].apply(t, i);\n            }\n        }, e;\n    }(s(r(47)).default);\n    e.CollectingHandler = o;\n}, function(t, e, r) {\n    "use strict";\n    Object.defineProperty(e, "__esModule", {\n        value: !0\n    });\n    var n = function() {\n        function t(t) {\n            this._func = t;\n        }\n        return t.prototype.onattribute = function(t, e) {\n            this._func("onattribute", t, e);\n        }, t.prototype.oncdatastart = function() {\n            this._func("oncdatastart");\n        }, t.prototype.oncdataend = function() {\n            this._func("oncdataend");\n        }, t.prototype.ontext = function(t) {\n            this._func("ontext", t);\n        }, t.prototype.onprocessinginstruction = function(t, e) {\n            this._func("onprocessinginstruction", t, e);\n        }, t.prototype.oncomment = function(t) {\n            this._func("oncomment", t);\n        }, t.prototype.oncommentend = function() {\n            this._func("oncommentend");\n        }, t.prototype.onclosetag = function(t) {\n            this._func("onclosetag", t);\n        }, t.prototype.onopentag = function(t, e) {\n            this._func("onopentag", t, e);\n        }, t.prototype.onopentagname = function(t) {\n            this._func("onopentagname", t);\n        }, t.prototype.onerror = function(t) {\n            this._func("onerror", t);\n        }, t.prototype.onend = function() {\n            this._func("onend");\n        }, t.prototype.onparserinit = function(t) {\n            this._func("onparserinit", t);\n        }, t.prototype.onreset = function() {\n            this._func("onreset");\n        }, t;\n    }();\n    e.default = n;\n}, function(t, e, r) {\n    "use strict";\n    t.exports = function(t, e) {\n        var r, n, i, s = {}, o = {}, a = {}, u = {};\n        if (a[0] = "HTML_SPECIALCHARS", a[1] = "HTML_ENTITIES", u[0] = "ENT_NOQUOTES", u[2] = "ENT_COMPAT", \n        u[3] = "ENT_QUOTES", n = isNaN(t) ? t ? t.toUpperCase() : "HTML_SPECIALCHARS" : a[t], \n        i = isNaN(e) ? e ? e.toUpperCase() : "ENT_COMPAT" : u[e], "HTML_SPECIALCHARS" !== n && "HTML_ENTITIES" !== n) throw new Error("Table: " + n + " not supported");\n        for (r in s[38] = "&amp;", "HTML_ENTITIES" === n && (s[160] = "&nbsp;", s[161] = "&iexcl;", \n        s[162] = "&cent;", s[163] = "&pound;", s[164] = "&curren;", s[165] = "&yen;", s[166] = "&brvbar;", \n        s[167] = "&sect;", s[168] = "&uml;", s[169] = "&copy;", s[170] = "&ordf;", s[171] = "&laquo;", \n        s[172] = "&not;", s[173] = "&shy;", s[174] = "&reg;", s[175] = "&macr;", s[176] = "&deg;", \n        s[177] = "&plusmn;", s[178] = "&sup2;", s[179] = "&sup3;", s[180] = "&acute;", s[181] = "&micro;", \n        s[182] = "&para;", s[183] = "&middot;", s[184] = "&cedil;", s[185] = "&sup1;", s[186] = "&ordm;", \n        s[187] = "&raquo;", s[188] = "&frac14;", s[189] = "&frac12;", s[190] = "&frac34;", \n        s[191] = "&iquest;", s[192] = "&Agrave;", s[193] = "&Aacute;", s[194] = "&Acirc;", \n        s[195] = "&Atilde;", s[196] = "&Auml;", s[197] = "&Aring;", s[198] = "&AElig;", \n        s[199] = "&Ccedil;", s[200] = "&Egrave;", s[201] = "&Eacute;", s[202] = "&Ecirc;", \n        s[203] = "&Euml;", s[204] = "&Igrave;", s[205] = "&Iacute;", s[206] = "&Icirc;", \n        s[207] = "&Iuml;", s[208] = "&ETH;", s[209] = "&Ntilde;", s[210] = "&Ograve;", s[211] = "&Oacute;", \n        s[212] = "&Ocirc;", s[213] = "&Otilde;", s[214] = "&Ouml;", s[215] = "&times;", \n        s[216] = "&Oslash;", s[217] = "&Ugrave;", s[218] = "&Uacute;", s[219] = "&Ucirc;", \n        s[220] = "&Uuml;", s[221] = "&Yacute;", s[222] = "&THORN;", s[223] = "&szlig;", \n        s[224] = "&agrave;", s[225] = "&aacute;", s[226] = "&acirc;", s[227] = "&atilde;", \n        s[228] = "&auml;", s[229] = "&aring;", s[230] = "&aelig;", s[231] = "&ccedil;", \n        s[232] = "&egrave;", s[233] = "&eacute;", s[234] = "&ecirc;", s[235] = "&euml;", \n        s[236] = "&igrave;", s[237] = "&iacute;", s[238] = "&icirc;", s[239] = "&iuml;", \n        s[240] = "&eth;", s[241] = "&ntilde;", s[242] = "&ograve;", s[243] = "&oacute;", \n        s[244] = "&ocirc;", s[245] = "&otilde;", s[246] = "&ouml;", s[247] = "&divide;", \n        s[248] = "&oslash;", s[249] = "&ugrave;", s[250] = "&uacute;", s[251] = "&ucirc;", \n        s[252] = "&uuml;", s[253] = "&yacute;", s[254] = "&thorn;", s[255] = "&yuml;"), \n        "ENT_NOQUOTES" !== i && (s[34] = "&quot;"), "ENT_QUOTES" === i && (s[39] = "&#39;"), \n        s[60] = "&lt;", s[62] = "&gt;", s) s.hasOwnProperty(r) && (o[String.fromCharCode(r)] = s[r]);\n        return o;\n    };\n} ]);', null);
    };
}, function(e, t, n) {
    "use strict";
    e.exports = function(e, t) {
        var n, i, o, s = {}, r = {}, a = {}, c = {};
        if (a[0] = "HTML_SPECIALCHARS", a[1] = "HTML_ENTITIES", c[0] = "ENT_NOQUOTES", c[2] = "ENT_COMPAT", 
        c[3] = "ENT_QUOTES", i = isNaN(e) ? e ? e.toUpperCase() : "HTML_SPECIALCHARS" : a[e], 
        o = isNaN(t) ? t ? t.toUpperCase() : "ENT_COMPAT" : c[t], "HTML_SPECIALCHARS" !== i && "HTML_ENTITIES" !== i) throw new Error("Table: " + i + " not supported");
        for (n in s[38] = "&amp;", "HTML_ENTITIES" === i && (s[160] = "&nbsp;", s[161] = "&iexcl;", 
        s[162] = "&cent;", s[163] = "&pound;", s[164] = "&curren;", s[165] = "&yen;", s[166] = "&brvbar;", 
        s[167] = "&sect;", s[168] = "&uml;", s[169] = "&copy;", s[170] = "&ordf;", s[171] = "&laquo;", 
        s[172] = "&not;", s[173] = "&shy;", s[174] = "&reg;", s[175] = "&macr;", s[176] = "&deg;", 
        s[177] = "&plusmn;", s[178] = "&sup2;", s[179] = "&sup3;", s[180] = "&acute;", s[181] = "&micro;", 
        s[182] = "&para;", s[183] = "&middot;", s[184] = "&cedil;", s[185] = "&sup1;", s[186] = "&ordm;", 
        s[187] = "&raquo;", s[188] = "&frac14;", s[189] = "&frac12;", s[190] = "&frac34;", 
        s[191] = "&iquest;", s[192] = "&Agrave;", s[193] = "&Aacute;", s[194] = "&Acirc;", 
        s[195] = "&Atilde;", s[196] = "&Auml;", s[197] = "&Aring;", s[198] = "&AElig;", 
        s[199] = "&Ccedil;", s[200] = "&Egrave;", s[201] = "&Eacute;", s[202] = "&Ecirc;", 
        s[203] = "&Euml;", s[204] = "&Igrave;", s[205] = "&Iacute;", s[206] = "&Icirc;", 
        s[207] = "&Iuml;", s[208] = "&ETH;", s[209] = "&Ntilde;", s[210] = "&Ograve;", s[211] = "&Oacute;", 
        s[212] = "&Ocirc;", s[213] = "&Otilde;", s[214] = "&Ouml;", s[215] = "&times;", 
        s[216] = "&Oslash;", s[217] = "&Ugrave;", s[218] = "&Uacute;", s[219] = "&Ucirc;", 
        s[220] = "&Uuml;", s[221] = "&Yacute;", s[222] = "&THORN;", s[223] = "&szlig;", 
        s[224] = "&agrave;", s[225] = "&aacute;", s[226] = "&acirc;", s[227] = "&atilde;", 
        s[228] = "&auml;", s[229] = "&aring;", s[230] = "&aelig;", s[231] = "&ccedil;", 
        s[232] = "&egrave;", s[233] = "&eacute;", s[234] = "&ecirc;", s[235] = "&euml;", 
        s[236] = "&igrave;", s[237] = "&iacute;", s[238] = "&icirc;", s[239] = "&iuml;", 
        s[240] = "&eth;", s[241] = "&ntilde;", s[242] = "&ograve;", s[243] = "&oacute;", 
        s[244] = "&ocirc;", s[245] = "&otilde;", s[246] = "&ouml;", s[247] = "&divide;", 
        s[248] = "&oslash;", s[249] = "&ugrave;", s[250] = "&uacute;", s[251] = "&ucirc;", 
        s[252] = "&uuml;", s[253] = "&yacute;", s[254] = "&thorn;", s[255] = "&yuml;"), 
        "ENT_NOQUOTES" !== o && (s[34] = "&quot;"), "ENT_QUOTES" === o && (s[39] = "&#39;"), 
        s[60] = "&lt;", s[62] = "&gt;", s) s.hasOwnProperty(n) && (r[String.fromCharCode(n)] = s[n]);
        return r;
    };
}, function(e, t, n) {
    var i = n(3), o = n(15);
    "string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
    var s = {
        insert: "head",
        singleton: !1
    };
    i(o, s);
    e.exports = o.locals || {};
}, function(e, t, n) {
    (t = n(4)(!1)).push([ e.i, ".tribute-container {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: auto;\n  max-height: 300px;\n  max-width: 500px;\n  overflow: auto;\n  display: block;\n  z-index: 999999;\n}\n.tribute-container ul {\n  margin: 0;\n  margin-top: 2px;\n  padding: 0;\n  list-style: none;\n  background: #efefef;\n}\n.tribute-container li {\n  padding: 5px 5px;\n  cursor: pointer;\n}\n.tribute-container li.highlight {\n  background: #ddd;\n}\n.tribute-container li span {\n  font-weight: bold;\n}\n.tribute-container li.no-match {\n  cursor: default;\n}\n.tribute-container .menu-highlighted {\n  font-weight: bold;\n}\n", "" ]), 
    e.exports = t;
}, function(e, t, n) {
    "use strict";
    var i = window.URL || window.webkitURL;
    e.exports = function(e, t) {
        try {
            try {
                var n;
                try {
                    (n = new (window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder)).append(e), 
                    n = n.getBlob();
                } catch (t) {
                    n = new Blob([ e ]);
                }
                return new Worker(i.createObjectURL(n));
            } catch (t) {
                return new Worker("data:application/javascript," + encodeURIComponent(e));
            }
        } catch (e) {
            if (!t) throw Error("Inline worker is not supported");
            return new Worker(t);
        }
    };
}, function(e, t, n) {
    (t = n(4)(!1)).push([ e.i, "a:not([href]) {\n  cursor: pointer;\n}\n", "" ]), e.exports = t;
}, function(e, t, n) {
    var i = n(3), o = n(19);
    "string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
    var s = {
        insert: "head",
        singleton: !1
    };
    i(o, s);
    e.exports = o.locals || {};
}, function(e, t, n) {
    (t = n(4)(!1)).push([ e.i, ".cd-commentPart-first {\n  margin-top: 0.5em;\n}\n.cd-commentPart-last {\n  margin-bottom: 0.5em;\n}\nol > li.cd-commentPart-first {\n  margin-top: 0;\n}\nol > li.cd-commentPart-last {\n  margin-bottom: 0.1em;\n}\n.cd-commentLevel.cd-commentLevel:not(ol) {\n  list-style-type: none;\n  list-style-image: none;\n  padding: 0 0 0 1em;\n  margin: 0 0 0 1em;\n  border: 1px solid #c8ccd1;\n  border-width: 0 0 0 1px;\n}\n.mw-content-ltr .cd-commentLevel.cd-commentLevel:not(ol) {\n  padding: 0 0 0 1em;\n  margin: 0 0 0 1em;\n  border-width: 0 0 0 1px;\n}\n.mw-content-rtl .cd-commentLevel.cd-commentLevel:not(ol) {\n  padding: 0 1em 0 0;\n  margin: 0 1em 0 0;\n  border-width: 0 1px 0 0;\n}\ndl.cd-commentLevel > dd {\n  margin-left: 0;\n}\n.mw-content-ltr dl.cd-commentLevel > dd {\n  margin-left: 0;\n}\n.mw-content-rtl dl.cd-commentLevel > dd {\n  margin-right: 0;\n}\n.cd-button-pending.cd-button-pending.cd-button-pending .oo-ui-buttonElement-button {\n  cursor: wait;\n}\n", "" ]), 
    e.exports = t;
}, function(e, t, n) {
    var i = n(3), o = n(21);
    "string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
    var s = {
        insert: "head",
        singleton: !1
    };
    i(o, s);
    e.exports = o.locals || {};
}, function(e, t, n) {
    (t = n(4)(!1)).push([ e.i, '.cd-commentForm.cd-commentForm {\n  display: flow-root;\n  -ms-display: grid;\n  margin: 0.5em 0;\n}\n.cd-commentForm.cd-commentForm.cd-commentLevel {\n  margin-top: 0.5em;\n}\n.cd-commentForm.cd-commentForm-addSection,\n.cd-commentForm.cd-commentForm-addSubsection,\n.cd-commentForm.cd-commentForm-replyInSection:not(.cd-commentForm-inNumberedList),\n.cd-commentForm.cd-commentForm-sectionOpeningComment {\n  margin-top: 1em;\n}\n.cd-commentForm .cd-headlineInput {\n  margin-bottom: 0.25em;\n}\n.cd-commentForm .oo-ui-textInputWidget {\n  max-width: none;\n}\n.cd-commentForm .cd-summaryInput {\n  margin-top: 0.25em;\n}\n.cd-commentForm .cd-checkboxesContainer {\n  margin-top: 0.5em;\n}\n.cd-commentForm .cd-checkboxesContainer .oo-ui-fieldLayout {\n  margin-right: 1em;\n}\n.cd-commentForm .cd-checkboxesContainer .oo-ui-fieldLayout:last-child {\n  margin-right: 0;\n}\n.cd-commentForm .cd-buttonsContainer {\n  margin-top: 0.5em;\n  display: flow-root;\n  -ms-display: grid;\n}\n.cd-commentForm .cd-leftButtonsContainer {\n  float: left;\n}\n.cd-commentForm .cd-rightButtonsContainer {\n  float: right;\n}\n.cd-commentForm .cd-rightButtonsContainer > .oo-ui-buttonWidget:last-child {\n  margin-right: -0.3125em;\n}\n.cd-commentForm .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {\n  vertical-align: middle;\n}\n.cd-commentForm .cd-scriptSettingsButton {\n  margin: -1em 0 0;\n}\n.cd-commentForm table.diff {\n  margin-bottom: 0.5em;\n}\n.cd-commentForm + .cd-commentLevel,\n.cd-commentForm + dd > .cd-commentLevel:first-child,\n.cd-commentForm + li > .cd-commentLevel:first-child {\n  padding-top: 0.1px;\n}\n.cd-commentForm + .cd-commentForm {\n  padding-top: 0.5em;\n}\n.cd-commentForm .wikiEditor-ui-left {\n  float: none;\n}\n.cd-commentForm .wikiEditor-ui-toolbar {\n  z-index: 1;\n}\n.cd-commentForm-innerWrapper {\n  margin-bottom: 0;\n  display: flow-root;\n  -ms-display: grid;\n}\n.cd-commentForm-signature {\n  opacity: 0.67;\n}\n.cd-commentForm-dummyElement {\n  height: 0;\n}\n.ltr .cd-commentForm .cd-summaryInput {\n  margin-right: 8px;\n  margin-left: 0;\n}\n.ltr .cd-commentForm .cd-checkboxesContainer {\n  direction: ltr;\n}\n.ltr .cd-commentForm .cd-checkboxesContainer .oo-ui-fieldLayout {\n  margin-right: 1em;\n  margin-left: 0;\n}\n.ltr .cd-commentForm .cd-checkboxesContainer .oo-ui-fieldLayout:last-child {\n  margin-right: 0;\n}\n.ltr .cd-commentForm .cd-buttonsContainer {\n  direction: ltr;\n}\n.ltr .cd-commentForm .cd-leftButtonsContainer {\n  float: left;\n}\n.ltr .cd-commentForm .cd-rightButtonsContainer {\n  float: right;\n}\n.rtl .cd-commentForm .cd-summaryInput {\n  margin-left: 8px;\n  margin-right: 0;\n}\n.rtl .cd-commentForm .cd-checkboxesContainer {\n  direction: rtl;\n}\n.rtl .cd-commentForm .cd-checkboxesContainer .oo-ui-fieldLayout {\n  margin-left: 1em;\n  margin-right: 0;\n}\n.rtl .cd-commentForm .cd-checkboxesContainer .oo-ui-fieldLayout:last-child {\n  margin-left: 0;\n}\n.rtl .cd-commentForm .cd-buttonsContainer {\n  direction: rtl;\n}\n.rtl .cd-commentForm .cd-leftButtonsContainer {\n  float: right;\n}\n.rtl .cd-commentForm .cd-rightButtonsContainer {\n  float: left;\n}\nol > li.cd-commentForm.cd-commentForm {\n  display: list-item;\n  -ms-display: list-item;\n}\n.cd-replyWrapper,\n.cd-sectionButtonContainer .cd-commentForm.cd-commentForm {\n  margin-top: 0.5em;\n}\n.cd-commentInput {\n  margin-top: 1px;\n  border: 1px solid #a2a9b1;\n}\n.cd-commentInput .wikiEditor-ui .wikiEditor-ui-top {\n  border-color: #a2a9b1;\n}\n.cd-commentInput .wikiEditor-ui .wikiEditor-ui-view {\n  border: 0;\n}\n.ltr .cd-commentInput {\n  margin-right: 8px;\n  margin-left: 0;\n}\n.rtl .cd-commentInput {\n  margin-left: 8px;\n  margin-right: 0;\n}\n.cd-commentInput.oo-ui-textInputWidget .oo-ui-inputWidget-input.oo-ui-inputWidget-input {\n  width: calc(100% + 2px);\n  margin: -1px;\n  position: relative;\n}\nbody:not(.skin-monobook) .cd-commentInput.oo-ui-textInputWidget .oo-ui-inputWidget-input.oo-ui-inputWidget-input {\n  border: 1px solid #a2a9b1;\n  box-shadow: none;\n}\nbody:not(.skin-monobook) .cd-commentInput.oo-ui-textInputWidget .oo-ui-inputWidget-input.oo-ui-inputWidget-input:focus {\n  outline: 2px solid #36c;\n  outline-offset: -2px;\n}\n.cd-previewArea {\n  margin-top: 0.5em;\n  padding: 0.5em 0.75em;\n  background-color: #f8f9fa;\n  display: flow-root;\n  -ms-display: grid;\n}\n.cd-previewArea > .mw-parser-output > *:first-child {\n  margin-top: 0;\n}\n.cd-previewArea > .mw-parser-output > *:last-child {\n  margin-bottom: 0;\n}\n.cd-previewArea .mw-editsection {\n  display: none;\n}\n.cd-previewArea:empty {\n  margin: 0;\n  padding: 0;\n}\n.cd-previewArea-above {\n  margin-top: 0;\n  margin-bottom: 0.5em;\n  width: calc(100% - 1.5em);\n}\n.cd-previewArea-indentedComment > .mw-parser-output > dl > dd {\n  margin-left: 0;\n  margin-bottom: 0;\n}\n.cd-messageArea {\n  width: 100%;\n}\n.cd-previewArea,\n.cd-messageArea {\n  position: relative;\n  clear: both;\n}\n.cd-previewArea .cd-closeButton,\n.cd-messageArea .cd-closeButton {\n  background-color: #f8f9fa;\n}\n.cd-previewArea:hover .cd-closeButton,\n.cd-messageArea:hover .cd-closeButton {\n  opacity: 1;\n}\n.cd-previewArea-above,\n.cd-messageArea {\n  float: left;\n}\n.cd-previewArea-above + *,\n.cd-messageArea + * {\n  clear: both;\n}\n.cd-commentForm-blockLabel {\n  color: #72777d;\n  margin-bottom: 0.5em;\n}\n.cd-closeButton {\n  position: absolute;\n  z-index: 1;\n  top: 0;\n  right: 0;\n  width: 20px;\n  height: 20px;\n  background-image: url(https://upload.wikimedia.org/wikipedia/commons/1/18/OOjs_UI_icon_close-ltr.svg);\n  background-position: center center;\n  background-repeat: no-repeat;\n  opacity: 0;\n  transition: opacity 0.2s ease-in;\n}\n.cd-message {\n  margin-bottom: 0.5em;\n}\n.cd-popupsOverlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 5;\n  font-size: 14px;\n}\n.cd-insertButtons {\n  background-color: #f8f9fa;\n  border-color: #a2a9b1;\n  border-width: 0 1px 1px;\n  border-style: solid;\n  font-size: 0.928571em;\n  line-height: 1.384616em;\n}\n.cd-insertButtons::after {\n  display: block;\n  content: "";\n  clear: both;\n}\n.cd-insertButtons:empty {\n  border: 0;\n}\n.cd-insertButtons-item {\n  color: #222;\n  padding: 2px 0.5em 3px;\n  white-space: nowrap;\n  display: block;\n  float: left;\n}\n.cd-insertButtons-item:hover,\n.cd-insertButtons-item:focus {\n  text-decoration: none;\n  color: #222;\n  background-color: rgba(0, 23, 70, 0.086);\n}\n.cd-toolbarPlaceholder {\n  background-color: #f8f9fa;\n  border-color: #a2a9b1;\n  border-width: 1px 1px 0;\n  border-style: solid;\n  height: 32px;\n  margin: 1px 0 -1px;\n}\n.cd-commentForm-disabled .wikiEditor-ui-top,\n.cd-commentForm-disabled .cd-insertButtons {\n  pointer-events: none;\n}\n.tribute-container.cd-mentionsContainer {\n  font-size: 14px;\n  margin-top: 3px;\n  line-height: 20px;\n  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.25);\n  border: 1px solid #a2a9b1;\n}\n.tribute-container.cd-mentionsContainer ul {\n  background-color: #fff;\n  margin: 0;\n}\n.tribute-container.cd-mentionsContainer li {\n  padding: 5px 7px;\n  margin: 0;\n}\n.tribute-container.cd-mentionsContainer li span {\n  font-weight: normal;\n}\n.tribute-container.cd-mentionsContainer .highlight {\n  background-color: rgba(0, 23, 70, 0.086);\n  font-weight: normal;\n}\n', "" ]), 
    e.exports = t;
}, function(e, t, n) {
    var i = n(3), o = n(23);
    "string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
    var s = {
        insert: "head",
        singleton: !1
    };
    i(o, s);
    e.exports = o.locals || {};
}, function(e, t, n) {
    (t = n(4)(!1)).push([ e.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.mw-content-ltr .cd-replyWrapper:not(.cd-commentForm) {\n  margin-left: -1px;\n  margin-right: 0;\n}\n.mw-content-rtl .cd-replyWrapper:not(.cd-commentForm) {\n  margin-right: -1px;\n  margin-left: 0;\n}\n.cd-sectionButton .oo-ui-buttonElement-button {\n  padding-top: 0;\n}\nol .cd-sectionButton {\n  margin-top: -2px;\n}\n', "" ]), 
    e.exports = t;
}, function(e, t, n) {
    var i = n(3), o = n(25);
    "string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
    var s = {
        insert: "head",
        singleton: !1
    };
    i(o, s);
    e.exports = o.locals || {};
}, function(e, t, n) {
    (t = n(4)(!1)).push([ e.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  justify-content: flex-end;\n}\n.cd-commentOverlay-focused {\n  display: flex;\n}\n.cd-commentOverlay-innerWrapper {\n  position: absolute;\n  z-index: 1;\n  bottom: 0;\n  font-size: 14px;\n  line-height: normal;\n  pointer-events: all;\n  display: flex;\n  flex-direction: row;\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-flex;\n  padding: 0 0.5em 2px;\n  background-color: var(--cd-comment-underlay-focused-color);\n  flex-direction: row;\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.sitedir-ltr .cd-commentOverlay-content .oo-ui-buttonWidget {\n  margin-right: 0;\n}\n.sitedir-ltr .cd-commentOverlay-content .cd-commentButton:not(:first-child) {\n  margin-left: 1em;\n}\n.sitedir-rtl .cd-commentOverlay-content .oo-ui-buttonWidget {\n  margin-left: 0;\n}\n.sitedir-rtl .cd-commentOverlay-content .cd-commentButton:not(:first-child) {\n  margin-right: 1em;\n}\n.cd-commentLayersContainerParent {\n  position: relative;\n  z-index: 0;\n  display: flow-root;\n  -ms-display: grid;\n}\n", "" ]), 
    e.exports = t;
}, function(e, t, n) {
    var i = n(3), o = n(27);
    "string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
    var s = {
        insert: "head",
        singleton: !1
    };
    i(o, s);
    e.exports = o.locals || {};
}, function(e, t, n) {
    (t = n(4)(!1)).push([ e.i, '#cd-navPanel {\n  position: fixed;\n  top: 44%;\n  left: 0;\n  z-index: 5;\n  width: 32px;\n  background-color: #fff;\n  border: 1px solid #a2a9b1;\n  border-left-width: 0;\n  opacity: 0.695;\n  font-size: 13px;\n  line-height: 1.2;\n  color: #000;\n  -moz-user-select: none;\n  -webkit-user-select: none;\n  user-select: none;\n}\n#cd-navPanel:hover {\n  opacity: 1;\n}\n#cd-navPanel-refreshButton {\n  padding: 4px;\n  width: 24px;\n  height: 24px;\n  background-image: url(https://upload.wikimedia.org/wikipedia/commons/1/17/OOjs_UI_icon_reload.svg);\n  background-size: 20px 20px;\n}\n#cd-navPanel-refreshButton:not(:empty) {\n  background-image: none;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  font-weight: bold;\n}\n#cd-navPanel-previousButton {\n  background-image: url(https://upload.wikimedia.org/wikipedia/commons/1/10/OOjs_UI_icon_collapse.svg);\n  background-size: 14px 14px;\n}\n#cd-navPanel-nextButton {\n  background-image: url(https://upload.wikimedia.org/wikipedia/commons/9/90/OOjs_UI_icon_expand.svg);\n  background-size: 14px 14px;\n}\n#cd-navPanel-firstUnseenButton {\n  height: 15px;\n  padding: 7px 0;\n}\n#cd-navPanel-commentFormButton {\n  background-image: url(https://upload.wikimedia.org/wikipedia/commons/a/ac/OOjs_UI_icon_ongoingConversation-ltr.svg);\n  background-size: 16px 16px;\n}\n.sitedir-ltr #cd-navPanel {\n  left: 0;\n  right: unset;\n  border-left-width: 0;\n  border-right-width: 1px;\n}\n.sitedir-rtl #cd-navPanel {\n  right: 0;\n  left: unset;\n  border-left-width: 1px;\n  border-right-width: 0;\n}\n.cd-navPanel-button {\n  display: block;\n  text-align: center;\n  background-position: center center;\n  background-repeat: no-repeat;\n  cursor: pointer;\n}\n.cd-navPanel-button:hover {\n  background-color: #f3f4f5;\n}\n.cd-navPanel-button:not(:first-child) {\n  position: relative;\n  height: 29px;\n  margin-top: 1px;\n}\n.cd-navPanel-button:not(:first-child)::before {\n  position: absolute;\n  top: -1px;\n  left: 4px;\n  margin: 0 auto 1px;\n  width: 24px;\n  height: 0;\n  border-top: 1px solid #a2a9b1;\n  content: "";\n}\n.cd-navPanel-refreshButton-interesting {\n  color: #7d00cc;\n}\n', "" ]), 
    e.exports = t;
}, function(e, t, n) {
    var i = n(3), o = n(29);
    "string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
    var s = {
        insert: "head",
        singleton: !1
    };
    i(o, s);
    e.exports = o.locals || {};
}, function(e, t, n) {
    (t = n(4)(!1)).push([ e.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", "" ]), 
    e.exports = t;
}, function(e, t, n) {
    var i = n(3), o = n(31);
    "string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
    var s = {
        insert: "head",
        singleton: !1
    };
    i(o, s);
    e.exports = o.locals || {};
}, function(e, t, n) {
    (t = n(4)(!1)).push([ e.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  margin-right: 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", "" ]), 
    e.exports = t;
}, function(e, t, n) {
    var i = n(3), o = n(33);
    "string" == typeof (o = o.__esModule ? o.default : o) && (o = [ [ e.i, o, "" ] ]);
    var s = {
        insert: "head",
        singleton: !1
    };
    i(o, s);
    e.exports = o.locals || {};
}, function(e, t, n) {
    (t = n(4)(!1)).push([ e.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.sitedir-ltr .cd-watchlistMenu {\n  margin: -10px 1em 0 0.5em;\n}\n.sitedir-rtl .cd-watchlistMenu {\n  margin: -10px 0.5em 0 1em;\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: 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", "" ]), 
    e.exports = t;
}, function(e, t, n) {
    "use strict";
    n.r(t);
    var i = n(1), o = n.n(i), s = n(6), r = n(0), a = n.n(r), c = n(2), u = n.n(c);
    class l extends Error {
        constructor(e) {
            let t;
            e ? (t = e.type, e.code && (t += "/".concat(e.code)), e.apiData && e.apiData.error && e.apiData.error.code && (t += "/".concat(e.apiData.error.code))) : t = "", 
            super(t), this.name = "CdError", this.data = e;
        }
    }
    var d = n(11), h = n.n(d);
    const m = "undefined" == typeof window ? self : window;
    m.convenientDiscussions = m.convenientDiscussions || {}, "object" != typeof m.convenientDiscussions && (m.convenientDiscussions = {});
    var p = m.convenientDiscussions, g = n(10), f = n.n(g), b = {
        users: {},
        getUser(e) {
            if (e.includes("#") && (e = e.slice(0, e.indexOf("#"))), e = Pe(Re(e)).trim(), !this.users[e]) {
                const t = e === p.g.CURRENT_USER_NAME ? {
                    gender: p.g.CURRENT_USER_GENDER
                } : {};
                this.users[e] = new w(e, t);
            }
            return this.users[e];
        }
    }, y = new WeakMap;
    class w {
        constructor(e, t = {}) {
            y.set(this, {
                writable: !0,
                value: void 0
            }), this.name = e, this.options = new mw.Map, Object.keys(t).forEach(e => {
                this[e] = t[e];
            });
        }
        get registered() {
            return void 0 === a()(this, y) && u()(this, y, !mw.util.isIPAddress(this.name)), 
            a()(this, y);
        }
        set gender(e) {
            this.options.set("gender", e);
        }
        get gender() {
            return this.options.get("gender");
        }
    }
    let E, v;
    function _(e, t) {
        E || (E = new RegExp("^([^]*)(".concat(p.g.TIMESTAMP_REGEXP.source, ")"))), v || (v = new RegExp("^([^]*)(".concat(p.g.TIMESTAMP_REGEXP_NO_TIMEZONE.source, ")")));
        const n = void 0 === t ? E : v, i = e.match(n);
        if (!i) return null;
        let o = p.g.TIMESTAMP_PARSER(i, p.g.TIMESTAMP_MATCHING_GROUPS, p.g.DIGITS, p.g.LOCAL_TIMEZONE_OFFSET);
        return t && (o = new Date(o.getTime() - t * p.g.MILLISECONDS_IN_A_MINUTE)), {
            date: o,
            match: i
        };
    }
    function C(e, t) {
        return ("0000" + e).slice(-t);
    }
    function x(e) {
        const t = p.g.DATE_FORMAT;
        let n = "";
        for (let i = 0; i < t.length; i++) {
            let o = t[i];
            switch ("x" === o && i < t.length - 1 && (o += t[++i]), "xk" === o && i < t.length - 1 && (o += t[++i]), 
            o) {
              case "xx":
                n += "x";
                break;

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

              case "d":
                n += C(e.getUTCDate(), 2);
                break;

              case "D":
                n += Be([ "sun", "mon", "tue", "wed", "thu", "fri", "sat" ])[e.getUTCDay()];
                break;

              case "j":
                n += e.getUTCDate();
                break;

              case "l":
                n += Be([ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" ])[e.getDay()];
                break;

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

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

              case "n":
                n += e.getUTCMonth() + 1;
                break;

              case "Y":
                n += e.getUTCFullYear();
                break;

              case "xkY":
                n += e.getUTCFullYear() + 543;
                break;

              case "G":
                n += e.getUTCHours();
                break;

              case "H":
                n += C(e.getUTCHours(), 2);
                break;

              case "i":
                n += C(e.getUTCMinutes(), 2);
                break;

              case "\\":
                i < t.length - 1 ? n += t[++i] : n += "\\";
                break;

              case '"':
                if (i < t.length - 1) {
                    const e = t.indexOf('"', i + 1);
                    -1 === e ? n += '"' : (n += t.substr(i + 1, e - i - 1), i = e);
                } else n += '"';
                break;

              default:
                n += t[i];
            }
        }
        return n;
    }
    function T(e, t, n = !1) {
        let i = e.getUTCFullYear(), o = e.getUTCMonth(), s = e.getUTCDate(), r = e.getUTCHours(), a = e.getUTCMinutes(), c = C(i, 4) + C(o + 1, 2) + C(s, 2) + C(r, 2) + C(a, 2) + (t ? "_" + Le(t) : "");
        if (n && A.includes(c)) {
            let e = 2;
            const t = c;
            do {
                c = "".concat(t, "_").concat(e), e++;
            } while (A.includes(c));
        }
        return c;
    }
    let A = [];
    function S(e) {
        e && A.push(e);
    }
    function k() {
        A = [];
    }
    function N(e) {
        const t = e.match(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})_(.+)$/);
        if (!t) return null;
        const n = Number(t[1]), i = Number(t[2]) - 1, o = Number(t[3]), s = Number(t[4]), r = Number(t[5]), a = t[6];
        return {
            date: new Date(Date.UTC(n, i, o, s, r)),
            author: a
        };
    }
    function O(e) {
        return e.replace(/<!--([^]*?)-->/g, (e, t) => "\x3c!--" + " ".repeat(t.length) + "--\x3e");
    }
    function I(e) {
        const t = M(e);
        return t.length ? t[0].timestamp : null;
    }
    function P(e) {
        return e.replace(/<!--[^]*?-->/g, "").replace(/(\[\[:?(?:[^|[\]<>\n:]+:)?([^|[\]<>\n]+)\|)(\]\])/g, "$1$2$3").replace(/\[\[:?(?:[^|[\]<>\n]+\|)?(.+?)\]\]/g, "$1").replace(/\{\{:?(?:[^|{}<>\n]+)(?:\|(.+?))?\}\}/g, "$1").replace(/\[https?:\/\/[^[\]<>"\n ]+ *([^\]]*)\]/g, "$1").replace(/'''(.+?)'''/g, "$1").replace(/''(.+?)''/g, "$1").replace(/<br ?\/?>/g, " ").replace(/<\w+(?: [\w ]+?=[^<>]+?| ?\/?)>/g, "").replace(/<\/\w+ ?>/g, "").replace(/ {2,}/g, " ").trim();
    }
    function L(e) {
        return e.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 F(e) {
        return e.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\[/g, "&#91;").replace(/\]/g, "&#93;").replace(/\{/g, "&#123;").replace(/\|/g, "&#124;").replace(/\}/g, "&#125;").replace(/\s+/g, " ");
    }
    function M(e, t) {
        const n = O(e).replace(p.g.QUOTE_REGEXP, (e, t, n, i) => t + " ".repeat(n.length) + i).replace(p.g.COMMENT_ANTIPATTERNS_REGEXP, e => " ".repeat(e.length));
        let i = function(e) {
            const t = new RegExp("^((.*)(".concat(p.g.TIMESTAMP_REGEXP.source, ")(?:\\}\\}|</small>)?).*(?:\n*|$)"), "igm"), n = new RegExp("^((.*)(".concat(p.g.CAPTURE_USER_NAME_PATTERN, ".{1,").concat(251, "}((").concat(p.g.TIMESTAMP_REGEXP.source, ")(?:\\}\\}|</small>)?)).*)(\n*|$)"), "igm"), i = new RegExp(p.g.CAPTURE_USER_NAME_PATTERN, "ig");
            let o, s = [];
            for (;o = t.exec(e); ) {
                const t = o[0];
                n.lastIndex = 0;
                const r = n.exec(t);
                let a, c, u, l, d, h;
                if (r) {
                    let t;
                    a = b.getUser(R(r[4])), c = r[7], u = o.index + r[2].length, l = o.index + r[1].length, 
                    d = o.index + r[0].length, h = r[3], i.lastIndex = 0;
                    const n = Math.max(0, r[0].length - r[6].length - r[r.length - 1].length - 251), s = r[0].slice(n);
                    for (;t = i.exec(s); ) {
                        if (t[2]) continue;
                        if (b.getUser(R(t[1])) === a) {
                            u = o.index + n + t.index, h = e.slice(u, l);
                            break;
                        }
                    }
                } else c = o[3], u = o.index + o[2].length, l = o.index + o[1].length, d = o.index + o[0].length, 
                h = c;
                s.push({
                    author: a,
                    timestamp: c,
                    startIndex: u,
                    endIndex: l,
                    dirtyCode: h,
                    nextCommentStartIndex: d
                });
            }
            return s;
        }(n);
        const o = function(e, t) {
            const n = [];
            if (p.g.UNSIGNED_TEMPLATES_REGEXP) {
                let i;
                for (;i = p.g.UNSIGNED_TEMPLATES_REGEXP.exec(e); ) {
                    let e, o;
                    p.g.TIMESTAMP_REGEXP_NO_TIMEZONE.test(i[2]) ? (o = i[2], e = i[3]) : p.g.TIMESTAMP_REGEXP_NO_TIMEZONE.test(i[3]) ? (o = i[3], 
                    e = i[2]) : e = i[2], e = b.getUser(R(e));
                    let s = i.index;
                    const r = i.index + i[1].length;
                    let a = i[1];
                    const c = i.index + i[0].length, u = t.findIndex(e => e.nextCommentStartIndex === c);
                    -1 !== u && t.splice(u, 1), n.push({
                        author: e,
                        timestamp: o,
                        startIndex: s,
                        endIndex: r,
                        dirtyCode: a,
                        nextCommentStartIndex: c
                    });
                }
            }
            return n;
        }(n, i);
        return i.push(...o), o.length && i.sort((e, t) => e.startIndex > t.startIndex ? 1 : -1), 
        i = i.filter(e => e.author), i.forEach((e, t) => {
            e.commentStartIndex = 0 === t ? 0 : i[t - 1].nextCommentStartIndex;
        }), t && k(), i.forEach((e, n) => {
            const {date: i} = e.timestamp && _(e.timestamp) || {};
            if (e.id = n, e.date = i, delete e.nextCommentStartIndex, t) {
                const t = i ? T(i, e.author.name, !0) : void 0;
                e.anchor = t, S(t);
            }
        }), i;
    }
    function R(e) {
        if (-1 === e.indexOf("&")) return e;
        {
            let t = e;
            return -1 !== t.indexOf("&#38;amp;") && (t = t.replace(/&#38;amp;/g, "&amp;amp;")), 
            t = -1 === t.indexOf("&#") ? t : t.replace(/&#(\d+);/g, (e, t) => String.fromCharCode(t)), 
            -1 === t.indexOf("&") ? t : f()(t);
        }
    }
    function B(e) {
        const t = [], n = (n, i) => {
            e = He(e, n, t, i);
        };
        return (() => {
            n(/\{\{(?:[^{]\{?)+?\}\}/g);
            let i = 0;
            const o = [];
            let s, r, a;
            for (;r = e.indexOf("{{", i), a = e.indexOf("}}", i), -1 !== r || -1 !== a || o.length; ) if (-1 !== r && (r < a || -1 === a)) o.push(r), 
            i = r + 2; else {
                if (r = o.pop(), void 0 === r) {
                    if (-1 === a) {
                        i += 2;
                        continue;
                    }
                    r = 0;
                }
                -1 === a && (a = e.length), a += 2, s = e.substring(r, a), e = e.substring(0, r) + "\x01" + t.push(s) + "\x02" + e.substr(a), 
                i = a - s.length;
            }
        })(), n(/^(:* *)(\{\|[^]*?\n\|\})/gm, !0), ((...e) => {
            e.forEach(e => {
                n(new RegExp("<".concat(e, "(?: [^>]+)?>[\\s\\S]+?<\\/").concat(e, ">"), "gi"));
            });
        })("nowiki", "pre", "source", "syntaxhighlight"), {
            code: e,
            hidden: t
        };
    }
    function D(e) {
        return e.replace(/([^\n])\n?$/, "$1\n\n");
    }
    var j = n(5), H = n.n(j);
    function U(e) {
        return Object.keys(e).map(t => "".concat(t, ",").concat(e[t].join(","), "\n")).join("").trim();
    }
    function Y() {
        return q.apply(this, arguments);
    }
    function q() {
        return (q = o()((function*(e = !1) {
            const {options: t} = yield re(e);
            let n;
            try {
                n = JSON.parse(t[p.g.SETTINGS_OPTION_FULL_NAME]) || {};
            } catch (e) {
                n = p.settings;
            }
            return n;
        }))).apply(this, arguments);
    }
    function W(e) {
        return G.apply(this, arguments);
    }
    function G() {
        return (G = o()((function*(e) {
            e = e || p.settings;
            const t = {}, n = {};
            Object.keys(e).forEach(i => {
                p.localSettingNames.includes(i) ? n[i] = e[i] : t[i] = e[i];
            });
            const i = ge(p.g.LOCAL_SETTINGS_OPTION_FULL_NAME, JSON.stringify(n)), o = be(p.g.SETTINGS_OPTION_FULL_NAME, JSON.stringify(t));
            try {
                yield Promise.all([ i, o ]);
            } catch (e) {
                if (!(e instanceof l && e.data.apiData && "badvalue" === e.data.apiData.error.code)) throw e;
                ge(p.g.SETTINGS_OPTION_FULL_NAME, JSON.stringify(t));
            }
        }))).apply(this, arguments);
    }
    function V() {
        return z.apply(this, arguments);
    }
    function z() {
        return (z = o()((function*(e = !1) {
            const t = yield p.g.firstRun && null === mw.user.options.get(p.g.VISITS_OPTION_FULL_NAME) ? Promise.resolve({}) : re(e).then(e => e.visits), n = mw.config.get("wgArticleId");
            let i;
            return n && (t[n] = t[n] || [], i = t[n]), p.g.visits = t, p.g.thisPageVisits = i, 
            {
                visits: t,
                thisPageVisits: i
            };
        }))).apply(this, arguments);
    }
    function K(e) {
        const t = Object.assign({}, e), n = Object.keys(t).reduce((e, n) => e.concat(t[n]), []);
        n.sort();
        const i = n[Math.floor(n.length / 10)];
        return Object.keys(t).forEach(e => {
            t[e] = t[e].filter(e => e >= i), t[e].length || delete t[e];
        }), t;
    }
    function X(e) {
        return J.apply(this, arguments);
    }
    function J() {
        return (J = o()((function*(e) {
            if (!e) return;
            const t = U(e), n = H.a.compressToEncodedURIComponent(t);
            try {
                yield ge(p.g.VISITS_OPTION_FULL_NAME, n);
            } catch (t) {
                if (t instanceof l) {
                    const {type: n, code: i} = t.data;
                    "internal" === n && "sizeLimit" === i ? X(K(e)) : console.error(t);
                } else console.error(t);
            }
        }))).apply(this, arguments);
    }
    function Q() {
        return Z.apply(this, arguments);
    }
    function Z() {
        return (Z = o()((function*(e = !1, t = {}, n = !1) {
            const i = yield p.g.firstRun && null === mw.user.options.get(p.g.WATCHED_SECTIONS_OPTION_FULL_NAME) ? Promise.resolve({}) : re(e).then(e => e.watchedSections), o = mw.config.get("wgArticleId");
            let s;
            return o && (i[o] = i[o] || [], s = i[o], t.justWatchedSection && (s.includes(t.justWatchedSection) || s.push(t.justWatchedSection)), 
            t.justUnwatchedSection && s.includes(t.justUnwatchedSection) && s.splice(s.indexOf(t.justUnwatchedSection), 1)), 
            {
                watchedSections: i,
                thisPageWatchedSections: s
            };
        }))).apply(this, arguments);
    }
    function ee(e) {
        const t = function(e) {
            return Object.keys(e).filter(t => e[t].length).map(t => " ".concat(t, " ").concat(e[t].join("\n"), "\n")).join("").trim();
        }(e), n = H.a.compressToEncodedURIComponent(t);
        ge(p.g.WATCHED_SECTIONS_OPTION_FULL_NAME, n);
    }
    let te, ne;
    function ie(e, t = "get") {
        return new Promise((n, i) => {
            p.g.api[t](e, {
                success: e => {
                    e.error ? i("api", e) : n(e);
                },
                error: (e, t) => {
                    i("http", t);
                }
            });
        });
    }
    function oe(e, t) {
        return se.apply(this, arguments);
    }
    function se() {
        return (se = o()((function*(e, t) {
            const n = {
                action: "parse",
                text: e,
                prop: [ "text", "modules" ],
                pst: !0,
                disablelimitreport: !0,
                formatversion: 2
            };
            return p.g.api.post(Object.assign({}, n, t)).then(e => {
                const t = e && e.parse && e.parse.text;
                if (!t) throw new l({
                    type: "api",
                    code: "noData"
                });
                return mw.loader.load(e.parse.modules), mw.loader.load(e.parse.modulestyles), {
                    html: t,
                    parsedSummary: e.parse.parsedsummary
                };
            }, Ie);
        }))).apply(this, arguments);
    }
    function re(e = !1) {
        return e && te || (te = ie({
            action: "query",
            meta: "userinfo",
            uiprop: [ "options", "rights" ],
            formatversion: 2
        }).then(e => {
            const t = e && e.query && e.query.userinfo, n = t && t.options, i = t && t.rights;
            if (!n || !i) throw new l({
                type: "api",
                code: "noData"
            });
            const o = n[p.g.VISITS_OPTION_FULL_NAME], s = function(e) {
                const t = {}, n = /^(\d+), *(.+)$/gm;
                let i;
                for (;i = n.exec(e); ) t[i[1]] = i[2].split(",");
                return t;
            }(o ? H.a.decompressFromEncodedURIComponent(o) : ""), r = n[p.g.WATCHED_SECTIONS_OPTION_FULL_NAME], a = function(e) {
                const t = {}, n = e.split(/(?:^|\n )(\d+) /).slice(1);
                let i;
                for (let e = 0, o = !0; e < n.length; e++, o = !o) o ? i = n[e] : t[i] = n[e].split("\n");
                return t;
            }(r ? H.a.decompressFromEncodedURIComponent(r) : "");
            return p.g.CURRENT_USER_RIGHTS = i, {
                options: n,
                visits: s,
                watchedSections: a,
                rights: i
            };
        }, Ie)), te;
    }
    function ae(e, t) {
        return ce.apply(this, arguments);
    }
    function ce() {
        return (ce = o()((function*(e, t) {
            let n;
            if (e && (n = p.s("error-api", e) + " ", t)) try {
                const {html: e} = yield oe(t);
                n += e;
            } catch (e) {
                n += t;
            }
            return n;
        }))).apply(this, arguments);
    }
    function ue(e) {
        return le.apply(this, arguments);
    }
    function le() {
        return (le = o()((function*(e) {
            const t = [], n = p.g.CURRENT_USER_RIGHTS && p.g.CURRENT_USER_RIGHTS.includes("apihighlimits") ? 500 : 50;
            let i;
            for (;i = e.splice(0, n).join("|"); ) {
                const e = yield p.g.api.post({
                    action: "query",
                    pageids: i,
                    formatversion: 2
                }).catch(Ie);
                if (e.error) throw new l({
                    type: "api",
                    code: "error",
                    apiData: e
                });
                const n = e && e.query, o = n && n.pages;
                if (!o) throw new l({
                    type: "api",
                    code: "noData"
                });
                t.push(...o);
            }
            return t;
        }))).apply(this, arguments);
    }
    function de(e) {
        return he.apply(this, arguments);
    }
    function he() {
        return (he = o()((function*(e) {
            const t = [], n = [], i = [], o = p.g.CURRENT_USER_RIGHTS && p.g.CURRENT_USER_RIGHTS.includes("apihighlimits") ? 500 : 50;
            let s;
            for (;s = e.splice(0, o).join("|"); ) {
                const e = yield p.g.api.post({
                    action: "query",
                    titles: s,
                    redirects: !0,
                    formatversion: 2
                }).catch(Ie);
                if (e.error) throw new l({
                    type: "api",
                    code: "error",
                    apiData: e
                });
                const o = e && e.query, r = o && o.pages;
                if (!r) throw new l({
                    type: "api",
                    code: "noData"
                });
                const a = o.normalized || [], c = o.redirects || [];
                n.push(...a), i.push(...c), t.push(...r);
            }
            return {
                pages: t,
                normalized: n,
                redirects: i
            };
        }))).apply(this, arguments);
    }
    function me(e, t, n) {
        return pe.apply(this, arguments);
    }
    function pe() {
        return (pe = o()((function*(e, t, n) {
            if (t.length > 65535) throw new l({
                type: "internal",
                code: "sizeLimit",
                details: {
                    action: n
                }
            });
            const i = yield p.g.api.postWithEditToken(p.g.api.assertCurrentUser({
                action: n,
                optionname: e,
                optionvalue: t
            })).catch(Ie);
            if (!i || "success" !== i[n]) throw new l({
                type: "api",
                code: "noSuccess",
                details: {
                    action: n
                }
            });
        }))).apply(this, arguments);
    }
    function ge(e, t) {
        return fe.apply(this, arguments);
    }
    function fe() {
        return (fe = o()((function*(e, t) {
            yield me(e, t, "options");
        }))).apply(this, arguments);
    }
    function be(e, t) {
        return ye.apply(this, arguments);
    }
    function ye() {
        return (ye = o()((function*(e, t) {
            yield me(e, t, "globalpreferences");
        }))).apply(this, arguments);
    }
    function we(e) {
        return Ee.apply(this, arguments);
    }
    function Ee() {
        return (Ee = o()((function*(e, {noTimers: t = !1} = {}) {
            const n = e.filter(e => !e.gender).map(e => e.name), i = p.g.CURRENT_USER_RIGHTS && p.g.CURRENT_USER_RIGHTS.includes("apihighlimits") ? 500 : 50;
            let o;
            for (;o = n.splice(0, i).join("|"); ) {
                const e = {
                    action: "query",
                    list: "users",
                    ususers: o,
                    usprop: "gender",
                    formatversion: 2
                }, n = t ? ie(e, "post").catch(Ie) : p.g.api.post(e).catch(Ie), i = yield n, s = i && i.query && i.query.users;
                if (!s) throw new l({
                    type: "api",
                    code: "noData"
                });
                s.forEach(e => {
                    b.getUser(e.name).gender = e.gender;
                });
            }
        }))).apply(this, arguments);
    }
    class ve {
        constructor(e) {
            const t = e instanceof mw.Title ? e : mw.Title.newFromText(Re(e));
            this.name = Pe(e), this.namespace = t.namespace, this.fragment = t.fragment;
        }
        getUrl(e) {
            return mw.util.getUrl(this.name, e);
        }
        getCode() {
            var e = this;
            return o()((function*() {
                if (!mw.config.get("wgArticleId")) return {
                    code: ""
                };
                const t = yield p.g.api.get({
                    action: "query",
                    titles: e.name,
                    prop: "revisions",
                    rvprop: [ "ids", "content" ],
                    redirects: !0,
                    curtimestamp: !0,
                    formatversion: 2
                }).catch(Ie), n = t.query, i = n && n.pages && n.pages[0], o = i && i.revisions && i.revisions[0];
                if (!n || !i) throw new l({
                    type: "api",
                    code: "noData"
                });
                if (i.missing) throw new l({
                    type: "api",
                    code: "missing"
                });
                if (i.invalid) throw new l({
                    type: "api",
                    code: "invalid"
                });
                if (!o) throw new l({
                    type: "api",
                    code: "noData"
                });
                const s = n.redirects && n.redirects[0] && n.redirects[0].to;
                Object.assign(e, {
                    pageId: i.pageid,
                    code: o.content + "\n",
                    revisionId: o.revid,
                    redirectTarget: s,
                    realName: s || e.name,
                    queryTimestamp: t.curtimestamp
                });
            }))();
        }
        parse({noTimers: e = !1, markAsRead: t = !1} = {}) {
            var n = this;
            return o()((function*() {
                const i = {
                    action: "parse",
                    page: n.realName || n.name,
                    prop: [ "text", "revid", "modules", "jsconfigvars" ],
                    formatversion: 2
                }, o = e ? ie(i).catch(Ie) : p.g.api.get(i).catch(Ie);
                t && $.get(n.getUrl());
                const s = yield o;
                if (void 0 === s.parse) throw new l({
                    type: "api",
                    code: "noData"
                });
                return s.parse;
            }))();
        }
        modifyCode(e, {commentForm: t}) {
            const {commentCode: n} = t.commentTextToCode("submit");
            let i, o;
            if (t.isNewTopicOnTop) {
                const t = O(e).search(/^(=+).*?\1/m);
                o = e.slice(0, t), i = o + n + "\n" + e.slice(t);
            } else o = (e + "\n").trimStart(), i = o + n;
            return {
                newPageCode: i,
                codeBeforeInsertion: o,
                commentCode: n
            };
        }
        edit(e) {
            var t = this;
            return o()((function*() {
                let n;
                try {
                    n = yield p.g.api.postWithEditToken(p.g.api.assertCurrentUser(Object.assign(e, {
                        title: t.realName || t.name,
                        action: "edit",
                        formatversion: 2
                    }))).catch(Ie);
                } catch (e) {
                    if (e instanceof l) {
                        const {type: t, apiData: i} = e.data;
                        if ("network" === t) throw e;
                        {
                            const e = i && i.error;
                            let t, o, s, r = !1;
                            if (e) {
                                switch (s = e.code, s) {
                                  case "spamblacklist":
                                    t = p.s("error-spamblacklist", e.spamblacklist.matches[0]);
                                    break;

                                  case "titleblacklist":
                                    t = p.s("error-titleblacklist");
                                    break;

                                  case "abusefilter-warning":
                                  case "abusefilter-disallowed":
                                    {
                                        yield p.g.api.loadMessagesIfMissing([ s ]);
                                        const n = mw.message(s, e.abusefilter.description).plain();
                                        ({html: t} = (yield oe(n)) || {}), t ? r = !0 : t = p.s("error-abusefilter", e.abusefilter.description);
                                        break;
                                    }

                                  case "editconflict":
                                    t = p.s("error-editconflict");
                                    break;

                                  case "blocked":
                                    t = p.s("error-blocked");
                                    break;

                                  case "missingtitle":
                                    t = p.s("error-pagedeleted");
                                    break;

                                  default:
                                    t = p.s("error-pagenotedited") + " " + (yield ae(s, e.info));
                                }
                                o = [ s, i ];
                            } else o = i;
                            throw new l({
                                type: "api",
                                code: "error",
                                apiData: n,
                                details: {
                                    code: s,
                                    message: t,
                                    isRawMessage: r,
                                    logMessage: o
                                }
                            });
                        }
                    }
                    throw e;
                }
                return t.pageId = n.edit.pageid, n.edit.newtimestamp;
            }))();
        }
        analyzeNewTopicPlacement() {
            if (void 0 === this.code) throw new l("Can't analyze if the new topics are on top: Page#code is undefined.");
            let e;
            p.config.areNewTopicsOnTop && (e = p.config.areNewTopicsOnTop(this.name, this.code));
            const t = O(this.code), n = /^==[^=].*?==[ \t]*(?:<!--[^]*?-->[ \t]*)*\n/gm;
            let i, o;
            if (!1 !== e && (o = n.exec(t), i = o.index, n.lastIndex = 0), void 0 === e) {
                let i;
                p.debug.startTimer("areNewTopicsOnTop");
                let s = 0;
                for (;o = n.exec(t); ) {
                    const e = I(this.code.slice(o.index)), {date: t} = e && _(e) || {};
                    t && (i && (s += t > i ? -1 : 1), i = t);
                }
                e = 0 === s ? this.namespace % 2 == 0 : s > 0, p.debug.logAndResetTimer("areNewTopicsOnTop");
            }
            Object.assign(this, {
                areNewTopicsOnTop: e,
                firstSectionStartIndex: i
            });
        }
    }
    function _e(e) {
        return e && "object" == typeof e ? e.filter((t, n) => e.indexOf(t) === n) : null;
    }
    function Ce(e, t) {
        return !(!t || e.nodeType !== Node.TEXT_NODE) || (e.nodeType !== Node.ELEMENT_NODE ? null : !!p.g.POPULAR_INLINE_ELEMENTS.includes(e.tagName) || !p.g.POPULAR_NOT_INLINE_ELEMENTS.includes(e.tagName) && ("undefined" != typeof window ? (console.warn("Expensive operation: isInline() called for:", e), 
        "inline" === window.getComputedStyle(e).display) : null));
    }
    function xe(e) {
        const t = e[0];
        return (t.toUpperCase() !== t.toLowerCase() ? "[" + t.toUpperCase() + t.toLowerCase() + "]" : mw.util.escapeRegExp(t)) + mw.util.escapeRegExp(e.slice(1));
    }
    function Te(e, t) {
        let n;
        if (e instanceof ve) n = e.name, t = e.namespace; else if (void 0 === t) {
            n = e, t = new mw.Title.newFromText(e).namespace;
        }
        return (t % 2 == 1 || p.g.PAGE_WHITE_LIST_REGEXP && p.g.PAGE_WHITE_LIST_REGEXP.test(n) || !p.g.PAGE_WHITE_LIST_REGEXP && p.config.customTalkNamespaces.includes(t)) && (!p.g.PAGE_BLACK_LIST_REGEXP || !p.g.PAGE_BLACK_LIST_REGEXP.test(n));
    }
    function Ae(e) {
        return e && (e.includes("".concat(p.s("es-edit"), " ").concat(p.s("es-reply-genitive"))) || e.includes("".concat(p.s("es-edit"), " ").concat(p.s("es-addition-genitive"))));
    }
    function Se(e) {
        return e && p.config.undoTexts.some(t => e.includes(t));
    }
    function ke(e) {
        return void 0 !== e;
    }
    function Ne(e) {
        return null != e;
    }
    function Oe(e, t, n = !1) {
        return n ? e.slice(t + 1).concat(e.slice(0, t + 1)).reverse() : e.slice(t).concat(e.slice(0, t));
    }
    function Ie(e, t) {
        throw new l("http" === e ? {
            type: "network"
        } : {
            type: "api",
            code: "error",
            apiData: t
        });
    }
    function Pe(e) {
        return e.replace(/_/g, " ");
    }
    function Le(e) {
        return e.replace(/ /g, "_");
    }
    function Fe(e) {
        return e.replace(/ {2,}/g, " ");
    }
    function Me(e, ...t) {
        const n = e instanceof $ ? e : p.util.wrapInElement(e);
        return t.forEach(([e, t]) => {
            n.find(".".concat(e)).on("click", t);
        }), n;
    }
    function Re(e) {
        return e.length ? e[0].toUpperCase() + e.slice(1) : "";
    }
    function Be(e) {
        return e.map(mw.msg);
    }
    function De() {
        return $(":focus:input").length || $(":focus").prop("isContentEditable");
    }
    function je(e) {
        if (!e) return null;
        const t = e.map(e => e.source || e).join("|");
        return t ? new RegExp("(".concat(t, ")")) : null;
    }
    function He(e, t, n, i) {
        return e.replace(t, (e, t, o) => ("number" == typeof t && (t = "", o = ""), (t || "") + (i ? "\x03" : "\x01") + n.push(o || e) + (i ? "\x04" : "\x02")));
    }
    function Ue(e, t) {
        for (;e.match(/(?:\x01|\x03)\d+(?:\x02|\x04)/); ) e = e.replace(/(?:\x01|\x03)(\d+)(?:\x02|\x04)/g, (e, n) => t[n - 1]);
        return e;
    }
    class Ye {
        constructor({types: e, inputs: t, comments: i}) {
            const o = this.getCollections(e, i);
            n(14), this.tribute = new h.a({
                collection: o,
                allowSpaces: !0,
                menuItemLimit: 10,
                noMatchTemplate: () => null,
                containerClass: "tribute-container cd-mentionsContainer",
                replaceTextSuffix: ""
            }), t.forEach(e => {
                const t = e.$input.get(0);
                this.tribute.attach(t), t.cdInput = e, t.addEventListener("tribute-replaced", t => {
                    const n = e.getRange().to, i = n - t.detail.item.original.value.length, o = e.getValue();
                    e.setValue(o.slice(0, n) + o.slice(n));
                    const s = t.detail.item.original.endOffset, r = null === t.detail.item.original.startOffset ? t.detail.item.original.value.length - s : t.detail.item.original.startOffset;
                    e.selectRange(i + r, n - s);
                });
            });
        }
        getCollections(e, t) {
            var n = this;
            const i = e => e ? e.original.value : "", s = (e, t) => _e(e).filter(ke).map(e => {
                let n;
                return n = Array.isArray(e) ? e[0] : e.key ? e.key : e, {
                    key: n,
                    value: t.transform ? t.transform(e) : e,
                    startOffset: t.getStartOffset ? t.getStartOffset(e) : null,
                    endOffset: t.getEndOffset ? t.getEndOffset(e) : 0
                };
            }), r = new RegExp(mw.msg("word-separator"), "g"), a = {
                mentions: {
                    trigger: "@",
                    searchOpts: {
                        skip: !0
                    },
                    requireLeadingSpace: !0,
                    selectTemplate: i,
                    values: (h = o()((function*(e, t) {
                        if ((e = Fe(e)).startsWith(n.mentions.snapshot) || (n.mentions.cache = []), n.mentions.snapshot = e, 
                        e.includes("[[")) t([]); else if (n.mentions.byText[e]) t(s(n.mentions.byText[e], n.mentions)); else {
                            const i = Ye.search(e, n.mentions.default);
                            let o = i.slice();
                            const a = e && e.length <= 85 && !/[#<>[\]|{}/@:]/.test(e) && (e.match(r) || []).length <= 4;
                            if (a && (i.length || o.push(...n.mentions.cache), o = Ye.search(e, o), o[9] = e.trim()), 
                            t(s(o, n.mentions)), a && !i.length) {
                                let i;
                                try {
                                    i = yield function(e) {
                                        const t = new Promise((n, i) => {
                                            setTimeout(() => {
                                                try {
                                                    if (t !== ne) throw new l;
                                                    p.g.api.get({
                                                        action: "opensearch",
                                                        search: e,
                                                        namespace: 3,
                                                        redirects: "resolve",
                                                        limit: 10,
                                                        formatversion: 2
                                                    }).then(e => {
                                                        const t = e && e[1] && e[1].map(e => (e.match(p.g.USER_NAMESPACES_REGEXP) || [])[1]).filter(ke).filter(e => !e.includes("/"));
                                                        if (!t) throw new l({
                                                            type: "api",
                                                            code: "noData"
                                                        });
                                                        n(t);
                                                    }, e => {
                                                        Ie(e);
                                                    });
                                                } catch (e) {
                                                    i(e);
                                                }
                                            }, 100);
                                        });
                                        return ne = t, t;
                                    }(e);
                                } catch (e) {
                                    return;
                                }
                                if (i = n.mentions.removeSelf(i), n.mentions.cache = i.slice(), i[9] = e.trim(), 
                                n.mentions.byText[e] = i, n.mentions.snapshot !== e) return;
                                t(s(i, n.mentions));
                            }
                        }
                    })), function(e, t) {
                        return h.apply(this, arguments);
                    })
                },
                wikilinks: {
                    trigger: "[[",
                    searchOpts: {
                        skip: !0
                    },
                    selectTemplate: i,
                    values: (d = o()((function*(e, t) {
                        if (e = Fe(e), p.g.COLON_NAMESPACES_PREFIX_REGEXP.test(e) && (e = e.slice(1)), e.startsWith(n.wikilinks.snapshot) || (n.wikilinks.cache = []), 
                        n.wikilinks.snapshot = e, n.wikilinks.byText[e]) t(s(n.wikilinks.byText[e], n.wikilinks)); else {
                            let i = [];
                            const o = e && e.length <= 255 && !/[#<>[\]|{}]/.test(e) && (!/^:/.test(e) || p.g.COLON_NAMESPACES_PREFIX_REGEXP.test(e)) && (e.match(r) || []).length <= 9;
                            if (o && (i.push(...n.wikilinks.cache), i = Ye.search(e, i), i[9] = e.trim()), t(s(i, n.wikilinks)), 
                            o) {
                                let i;
                                try {
                                    i = yield function(e) {
                                        const t = new Promise((n, i) => {
                                            setTimeout(() => {
                                                try {
                                                    if (t !== ne) throw new l;
                                                    p.g.api.get({
                                                        action: "opensearch",
                                                        search: e,
                                                        redirects: "return",
                                                        limit: 10,
                                                        formatversion: 2
                                                    }).then(t => {
                                                        const i = new RegExp("^" + mw.util.escapeRegExp(e[0]), "i"), o = t && t[1] && t[1].map(t => t.replace(i, () => e[0]));
                                                        if (!o) throw new l({
                                                            type: "api",
                                                            code: "noData"
                                                        });
                                                        n(o);
                                                    }, e => {
                                                        Ie(e);
                                                    });
                                                } catch (e) {
                                                    i(e);
                                                }
                                            }, 100);
                                        });
                                        return ne = t, t;
                                    }(e);
                                } catch (e) {
                                    return;
                                }
                                if (n.wikilinks.cache = i.slice(), i[9] = e.trim(), n.wikilinks.byText[e] = i, n.wikilinks.snapshot !== e) return;
                                t(s(i, n.wikilinks));
                            }
                        }
                    })), function(e, t) {
                        return d.apply(this, arguments);
                    })
                },
                templates: {
                    trigger: "{{",
                    searchOpts: {
                        skip: !0
                    },
                    selectTemplate: e => {
                        if (e) {
                            const t = this.tribute.current.element.cdInput;
                            return t.setDisabled(!0), t.pushPending(), p.g.api.get({
                                action: "templatedata",
                                titles: "Template:".concat(e.original.key),
                                redirects: !0
                            }).catch(Ie).then(e => {
                                const n = e && e.pages;
                                let i = "", o = 0;
                                Object.keys(n).forEach(e => {
                                    const t = n[e], s = t.params || [];
                                    (t.paramOrder || Object.keys(s)).filter(e => s[e].required || s[e].suggested).forEach(e => {
                                        "block" === t.format ? i += "\n| ".concat(e, " = ") : isNaN(e) ? i += "|".concat(e, "=") : i += "|", 
                                        o || (o = i.length);
                                    }), "block" === t.format && i && (i += "\n");
                                });
                                const s = t.getRange().to, r = t.getValue();
                                t.setValue(r.slice(0, s) + i + r.slice(s)), t.selectRange(s + o);
                            }, e => {
                                mw.notify(p.s("cf-mentions-notemplatedata"), {
                                    type: "error"
                                }), console.warn(e);
                            }).always(() => {
                                t.setDisabled(!1), t.popPending(), t.focus();
                            }), e.original.value;
                        }
                        return "";
                    },
                    values: (u = o()((function*(e, t) {
                        if ((e = Fe(e)).startsWith(n.templates.snapshot) || (n.templates.cache = []), n.templates.snapshot = e, 
                        e.includes("{{")) t([]); else if (n.templates.byText[e]) t(s(n.templates.byText[e], n.templates)); else {
                            let i = [];
                            const o = e && e.length <= 255 && !/[#<>[\]|{}]/.test(e) && (e.match(r) || []).length <= 9;
                            if (o && (i.push(...n.templates.cache), i = Ye.search(e, i), i[9] = e.trim()), t(s(i, n.templates)), 
                            o) {
                                let i;
                                try {
                                    i = yield function(e) {
                                        const t = new Promise((n, i) => {
                                            setTimeout(() => {
                                                try {
                                                    if (t !== ne) throw new l;
                                                    p.g.api.get({
                                                        action: "opensearch",
                                                        search: e.startsWith(":") ? e.slice(1) : "Template:" + e,
                                                        redirects: "return",
                                                        limit: 10,
                                                        formatversion: 2
                                                    }).then(t => {
                                                        const i = new RegExp("^" + mw.util.escapeRegExp(e[0]), "i"), o = t && t[1] && t[1].filter(e => !e.endsWith("/doc")).map(t => e.startsWith(":") ? t : t.slice(t.indexOf(":") + 1)).map(t => t.replace(i, () => e[0]));
                                                        if (!o) throw new l({
                                                            type: "api",
                                                            code: "noData"
                                                        });
                                                        n(o);
                                                    }, e => {
                                                        Ie(e);
                                                    });
                                                } catch (e) {
                                                    i(e);
                                                }
                                            }, 100);
                                        });
                                        return ne = t, t;
                                    }(e);
                                } catch (e) {
                                    return;
                                }
                                if (n.templates.cache = i.slice(), i[9] = e.trim(), n.templates.byText[e] = i, n.templates.snapshot !== e) return;
                                t(s(i, n.templates));
                            }
                        }
                    })), function(e, t) {
                        return u.apply(this, arguments);
                    })
                },
                tags: {
                    trigger: "<",
                    searchOpts: {
                        skip: !0
                    },
                    selectTemplate: i,
                    values: (e, t) => {
                        const n = new RegExp("^" + mw.util.escapeRegExp(e), "i");
                        if (!e || !/^[a-z]+$/i.test(e) && !this.tags.withSpace.some(e => n.test(e))) return void t([]);
                        const i = this.tags.default.filter(e => n.test(e));
                        t(s(i, this.tags));
                    }
                },
                commentLinks: {
                    trigger: "##",
                    requireLeadingSpace: !0,
                    selectTemplate: i,
                    values: (c = o()((function*(e, t) {
                        e = Fe(e), n.commentLinks.default || (n.commentLinks.default = [], n.commentLinks.comments.forEach(({anchor: e, author: t, timestamp: i, text: o}) => {
                            let s;
                            if (o.length > 80) {
                                s = o.slice(0, 80);
                                const e = s.lastIndexOf(mw.msg("word-separator"));
                                -1 !== e && (s = s.slice(0, e));
                            } else s = o;
                            n.commentLinks.default.push({
                                key: "".concat(t.name).concat(mw.msg("comma-separator")).concat(i).concat(mw.msg("colon-separator")).concat(s),
                                anchor: e,
                                author: t.name,
                                timestamp: i
                            });
                        })), n.commentLinks.snapshot = e;
                        const i = n.tribute.search.filter(e, n.commentLinks.default, {
                            extract: e => e.key
                        }).map(e => e.original);
                        t(s(i, n.commentLinks));
                    })), function(e, t) {
                        return c.apply(this, arguments);
                    })
                }
            };
            var c, u, d, h;
            let m = t.map(e => e.author.name);
            this.targetComment && "edit" !== this.mode && m.unshift(this.targetComment.author.name), 
            m = _e(m);
            const g = {
                mentions: m,
                commentLinks: t
            }, f = [];
            return e.forEach(e => {
                this[e] = Ye["get".concat(Re(e), "Config")].call(null, g[e]), f.push(a[e]);
            }), f;
        }
        static getMentionsConfig(e = []) {
            const t = mw.config.get("wgFormattedNamespaces")[2], n = {
                byText: {},
                cache: [],
                transform: e => (e = e.trim(), "@[[".concat(t, ":").concat(e, "|").concat(e, "]]")),
                removeSelf: e => {
                    for (;e.includes(p.g.CURRENT_USER_NAME); ) e.splice(e.indexOf(p.g.CURRENT_USER_NAME), 1);
                    return e;
                }
            };
            return n.default = n.removeSelf(e), n;
        }
        static getWikilinksConfig() {
            const e = mw.config.get("wgFormattedNamespaces"), t = new RegExp("^(".concat(e[6], "|").concat(e[14], "):"), "i");
            return {
                byText: {},
                cache: [],
                transform: e => (e = e.trim(), t.test(e) && (e = ":" + e), "[[".concat(e, "]]"))
            };
        }
        static getTemplatesConfig() {
            return {
                byText: {},
                cache: [],
                transform: e => (e = e.trim(), "{{".concat(e, "}}")),
                getEndOffset: () => 2
            };
        }
        static getTagsConfig() {
            const e = {
                default: [ "abbr", "b", "bdi", "bdo", "blockquote", [ "br", "<br>" ], "caption", "cite", "code", [ "codenowiki", "<code><nowiki>+</nowiki></code>" ], "data", "dd", "del", "dfn", "div", "dl", "dt", "em", "h1", "h2", "h3", "h4", "h5", "h6", [ "hr", "<hr>" ], "i", "ins", "kbd", "li", "link", "mark", "meta", "ol", "p", "pre", "q", "rp", "rt", "rtc", "ruby", "s", "samp", "small", "span", "strong", "sub", "sup", "table", "td", "th", "time", "tr", "u", "ul", "var", [ "wbr", "<wbr>" ], "gallery", "includeonly", "noinclude", "nowiki", "onlyinclude", "categorytree", "charinsert", "chem", "ce", "graph", "hiero", "imagemap", "indicator", "inputbox", "mapframe", "maplink", "math", "math chem", "poem", "ref", [ "references", "<references />" ], "score", "section", "syntaxhighlight", [ 'syntaxhighlight lang=""', '<syntaxhighlight lang="+"></syntaxhighlight>' ], "templatedata", [ "templatestyles", '<templatestyles src="+" />' ], "timeline" ],
                transform: e => Array.isArray(e) ? e[1].replace(/\+/, "") : "<".concat(e, "></").concat(e, ">"),
                getEndOffset: e => Array.isArray(e) ? e[1].includes("+") ? e[1].length - 1 - e[1].indexOf("+") : 0 : e.length + 3
            };
            return e.default.sort(), e.withSpace = e.default.filter(e => e.includes(" ")), e;
        }
        static getCommentLinksConfig(e = []) {
            return {
                comments: e,
                transform: ({anchor: e, author: t, timestamp: n}) => "[[#".concat(e, "|").concat(p.s("cf-mentions-commentlinktext", t, n), "]]"),
                getStartOffset: ({anchor: e} = {}) => "[[#".concat(e, "|").length,
                getEndOffset: () => 2
            };
        }
        static search(e, t) {
            const n = new RegExp(mw.util.escapeRegExp(e), "i"), i = new RegExp("^" + mw.util.escapeRegExp(e), "i");
            return t.filter(e => n.test(e)).sort((e, t) => {
                const n = i.test(e), o = i.test(t);
                return n && !o ? -1 : o && !n ? 1 : 0;
            });
        }
    }
    class $e {
        constructor(e, t, n = !1, i = e) {
            this.acceptNode = t, this.root = e, this.currentNode = i, n ? (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(e) {
            let t = this.currentNode;
            if (t === this.root && !e.includes("Child")) return null;
            do {
                t = t[e];
            } while (t && this.acceptNode && !this.acceptNode(t));
            return t && (this.currentNode = t), t || 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 e = this.currentNode;
            do {
                if (e[this.firstChildProperty]) e = e[this.firstChildProperty]; else {
                    for (;e && !e[this.nextSiblingProperty] && e.parentNode !== this.root; ) e = e.parentNode;
                    e && (e = e[this.nextSiblingProperty]);
                }
            } while (e && this.acceptNode && !this.acceptNode(e));
            return e && (this.currentNode = e), e;
        }
        previousNode() {
            let e = this.currentNode;
            if (e !== this.root) {
                do {
                    if (e[this.previousSiblingProperty]) for (e = e[this.previousSiblingProperty]; e[this.lastChildProperty]; ) e = e[this.lastChildProperty]; else e = e.parentNode;
                } while (e && this.acceptNode && !this.acceptNode(e));
                return e && (this.currentNode = e), e;
            }
        }
    }
    class qe extends $e {
        constructor(e) {
            super(p.g.rootElement, e => ![ "STYLE", "LINK" ].includes(e.tagName), !0), e && (this.currentNode = e);
        }
    }
    class We extends $e {
        constructor(e) {
            super(p.g.rootElement, e => e.nodeType === Node.TEXT_NODE || e.nodeType === Node.ELEMENT_NODE && ![ "STYLE", "LINK" ].includes(e.tagName)), 
            e && (this.currentNode = e);
        }
    }
    var Ge = new WeakMap;
    var Ve = {
        underlays: [],
        layersContainers: [],
        redrawIfNecessary(e = !1) {
            if (!this.underlays.length || document.hidden) return;
            const t = [], n = p.g.$root.get(0).getBoundingClientRect().bottom + window.pageYOffset;
            let i, o = 0;
            p.comments.slice().reverse().some(s => {
                const r = s.newness || s.own && p.settings.highlightOwnComments;
                if ((e || s.positions && s.positions.bottom > n) && !r && s.$underlay) s.removeLayers(); else if (r && !s.editForm) {
                    i = i || p.g.specialElements.floating.map(e => e.getBoundingClientRect());
                    const e = s.configureLayers(!1, i);
                    if (e) o = 0, t.push(s); else if (!1 === e && !s.getLayersContainer().closest(".cd-commentLayersContainer") && (o++, 
                    2 === o)) return !0;
                }
            }), t.forEach(e => {
                e.updateLayersPositions();
            });
        },
        reset() {
            this.underlays = [], this.layersContainers.forEach(e => {
                e.innerHTML = "";
            });
        }
    }, ze = {
        cdRemoveNonElementNodes: function() {
            return this.filter((function() {
                return this.nodeType === Node.ELEMENT_NODE;
            }));
        },
        cdScrollTo(e = "top", t = !0, n) {
            p.g.autoScrollInProgress = !0;
            let i, o = this.cdRemoveNonElementNodes();
            const s = o.first().offset().top, r = o.last().offset().top + o.last().height();
            return i = "center" === e ? Math.min(s, s + .5 * (r - s) - .5 * $(window).height()) : "bottom" === e ? r - $(window).height() : s, 
            t ? $("body, html").animate({
                scrollTop: i
            }, {
                complete: () => {
                    p.g.autoScrollInProgress = !1, gn.isMounted() && (gn.registerSeenComments(), gn.updateCommentFormButton()), 
                    n && n();
                }
            }) : (window.scrollTo(0, i), p.g.autoScrollInProgress = !1, gn.isMounted() && (gn.registerSeenComments(), 
            gn.updateCommentFormButton())), this;
        },
        cdIsInViewport(e = !1) {
            const t = this.cdRemoveNonElementNodes(), n = t.get().every(e => "none" === e.style.display);
            n && t.show();
            const i = t.first().offset().top, o = t.last().offset().top + t.last().height();
            n && t.hide();
            const s = $(window).scrollTop(), r = s + $(window).height();
            return e ? o > s && i < r : i >= s && o <= r;
        },
        cdScrollIntoView(e, t = !0) {
            return this.cdIsInViewport() || this.cdScrollTo(e, t), this;
        },
        cdGetText() {
            let e;
            const t = document.createElement("div");
            return Array.from(this.get(0).childNodes).forEach(e => {
                t.appendChild(e.cloneNode(!0));
            }), document.body.appendChild(t), e = t.innerText, document.body.removeChild(t), 
            e;
        },
        cdAddCloseButton() {
            if (this.find(".cd-closeButton").length) return this;
            const e = $("<a>").attr("title", p.s("cf-block-close")).addClass("cd-closeButton").on("click", () => {
                this.empty();
            });
            return this.prepend(e), this;
        }
    };
    function Ke(e) {
        const t = e.getAttribute("href");
        if (!t) return null;
        const n = function(e) {
            if ("undefined" == typeof mw || "/wiki/$1" === mw.config.get("wgArticlePath") && "/w/index.php" === mw.config.get("wgScript")) {
                e = e.replace(/^(?:https?:)?\/\/[^/]+/, "").replace(/^\/wiki\//, "").replace(/^\/w\/index.php\?title=/, "").replace(/&action=edit.*/, "").replace(/#.*/, "").replace(/_/g, " ");
                try {
                    e = decodeURIComponent(e);
                } catch (e) {
                    return null;
                }
                return e;
            }
            {
                const t = new mw.Uri(e), n = t.path.match(p.g.ARTICLE_PATH_REGEXP);
                if (n) try {
                    return decodeURIComponent(n[1]);
                } catch (e) {
                    return null;
                }
                return t.query.title ? t.query.title : null;
            }
        }(t);
        if (!n) return null;
        let i;
        const o = n.match(p.g.USER_NAMESPACES_REGEXP);
        return o ? i = o[1] : n.startsWith(p.g.CONTRIBS_PAGE + "/") && (i = n.replace(p.g.CONTRIBS_PAGE_LINK_REGEXP, "")), 
        i && Re(Pe(i.replace(/\/.*/, ""))).trim();
    }
    class Xe {
        constructor(e) {
            this.context = e;
        }
        createComment(e) {
            return new this.context.CommentClass(this, e);
        }
        createSection(e, t) {
            return new this.context.SectionClass(this, e, t);
        }
        findTimestamps() {
            const e = [ ...Array.from(p.g.rootElement.getElementsByTagName("blockquote")), ...(t = p.config.elementsToExcludeClasses.map(e => Array.from(p.g.rootElement.getElementsByClassName(e))), 
            [].concat(...t)) ];
            var t;
            return this.context.getAllTextNodes().map(t => {
                const n = t.textContent, {date: i, match: o} = _(n) || {};
                if (i && !e.some(e => e.contains(t))) return {
                    node: t,
                    date: i,
                    match: o
                };
            }).filter(ke).map(e => {
                const {node: t, match: n, date: i} = e, o = this.context.document.createElement("span");
                o.classList.add("cd-timestamp");
                const s = this.context.document.createTextNode(n[2]);
                o.appendChild(s);
                const r = t.textContent.slice(n.index + n[0].length);
                let a;
                return r && (a = this.context.document.createTextNode(r)), t.textContent = t.textContent.slice(0, n.index + n[1].length), 
                t.parentNode.insertBefore(o, t.nextSibling), a && t.parentNode.insertBefore(a, o.nextSibling), 
                {
                    element: o,
                    date: i
                };
            });
        }
        findSignatures(e) {
            const t = e.map(e => {
                const t = e.date, n = e.element, i = e.element.textContent;
                let o, s;
                for (let t = e.element; !s; t = t.parentNode) Ce(t) ? t.classList.contains(p.config.unsignedClass) && (o = t) : s = t;
                const r = Boolean(o);
                if (s) {
                    const t = Array.from(s[this.context.childElementsProperty]), n = new qe(e.element);
                    let i = !1;
                    for (;!i && n.nextNode() && s.contains(n.currentNode) && (!t.includes(n.currentNode) || Ce(n.currentNode)); ) n.currentNode.classList.contains("cd-timestamp") && (i = !0);
                    if (i) return;
                }
                const a = o || e.element, c = new We(a);
                let u, l, d = 0;
                const h = [];
                o ? l = a : (h.push(a), c.previousSibling());
                do {
                    const e = c.currentNode;
                    if (d += e.textContent.length, e.nodeType === Node.ELEMENT_NODE) {
                        if (e.classList.contains("cd-timestamp")) break;
                        let t = !1;
                        if ("A" === e.tagName) {
                            const n = Ke(e);
                            n && (u || (u = n), u === n && (t = !0));
                        } else {
                            Array.from(e.getElementsByTagName("a")).some(e => {
                                const n = Ke(e);
                                if (n && (u || (u = n), u === n)) return t = !0, !0;
                            });
                        }
                        t && (l = e);
                    }
                    h.push(e);
                } while (c.previousSibling() && d < p.config.signatureScanLimit);
                const m = h.indexOf(l);
                h.splice(-1 === m ? 1 : m + 1);
                const g = T(e.date, u, !0);
                S(g);
                const f = a.parentNode, b = a.nextSibling, y = this.context.document.createElement("span");
                if (y.classList.add("cd-signature"), h.reverse().forEach(y.appendChild.bind(y)), 
                f.insertBefore(y, b), u) return {
                    element: y,
                    timestampElement: n,
                    timestampText: i,
                    date: t,
                    authorName: u,
                    anchor: g,
                    unsigned: r
                };
            }).filter(ke);
            return p.config.unsignedClass && Array.from(p.g.rootElement.getElementsByClassName(p.config.unsignedClass)).forEach(e => {
                if (!this.context.getElementByClassName(e, "cd-timestamp")) {
                    Array.from(e.getElementsByTagName("a")).some(n => {
                        const i = Ke(n);
                        if (i) {
                            e.classList.add("cd-signature");
                            const n = !0;
                            return t.push({
                                element: e,
                                authorName: i,
                                unsigned: n
                            }), !0;
                        }
                    });
                }
            }), t.sort((e, t) => this.context.follows(e.element, t.element) ? 1 : -1), t;
        }
        collectParts(e) {
            const t = new We(e);
            let n, i = [];
            for (;!n; ) {
                for (;!t.currentNode.nextSibling && t.parentNode(); ) ;
                if (!t.nextSibling()) break;
                Ce(t.currentNode, !0) || (n = t.currentNode);
            }
            if (n && e.parentNode.contains(n)) {
                for (t.currentNode = e; t.nextSibling() && Ce(t.currentNode, !0); ) i.push({
                    node: t.currentNode,
                    isTextNode: t.currentNode.nodeType === Node.TEXT_NODE,
                    isHeading: !1,
                    hasCurrentSignature: !1,
                    hasForeignComponents: !1,
                    lastStep: "start"
                });
                i.reverse(), t.currentNode = e;
            } else t.currentNode = e.parentNode;
            i.push({
                node: t.currentNode,
                isTextNode: !1,
                isHeading: !1,
                hasCurrentSignature: !0,
                hasForeignComponents: !1,
                lastStep: "start"
            });
            const o = new RegExp(p.g.TIMEZONE_REGEXP.source + "\\s*$");
            for (let s = 0; s < 500; s++) {
                let s;
                const r = i[i.length - 1];
                if (!r.isTextNode && !r.hasCurrentSignature) {
                    const e = r.node.textContent;
                    if (!Ce(r.node, !0) && (o.test(e) || p.config.signatureEndingRegexp && p.config.signatureEndingRegexp.test(e))) {
                        r.hasForeignComponents = !0;
                        break;
                    }
                }
                if (!r.hasCurrentSignature && r.hasForeignComponents) {
                    let e, n = !1;
                    for (;(e = t.currentNode) && t.lastChild(); ) {
                        if (Ce(t.currentNode, !0)) {
                            t.currentNode = e;
                            break;
                        }
                        n = !0;
                    }
                    if (!n) break;
                    s = "dive";
                } else if (t.previousSibling()) s = "back"; else {
                    if (!t.parentNode()) break;
                    s = "up";
                }
                const a = t.currentNode, c = a.nodeType === Node.TEXT_NODE;
                if ("back" === s && [ "OL", "UL" ].includes(r.node.tagName) && !([ "DL", "OL", "UL" ].includes(a.tagName) || c && a.previousSibling && [ "DL", "OL", "UL" ].includes(a.previousSibling.tagName)) && r.node[this.context.childElementsProperty].length && r.node[this.context.childElementsProperty][0].contains(e)) break;
                let u = null, l = null, d = null;
                if (!c) {
                    if (a.classList.contains("cd-commentPart") || "toc" === a.getAttribute("id") || "TD" === a.tagName || "HR" === a.tagName && a.previousElementSibling && this.context.getElementByClassName(a.previousElementSibling, "cd-signature") || p.config.checkForCustomForeignComponents && p.config.checkForCustomForeignComponents(a, this.context)) break;
                    u = /^H[1-6]$/.test(a.tagName), l = a.contains(e), d = a.getElementsByClassName("cd-signature", Number(l) + 1).length - Number(l) > 0 || n && a.contains(n);
                }
                if (i.push({
                    node: a,
                    isTextNode: c,
                    isHeading: u,
                    hasCurrentSignature: l,
                    hasForeignComponents: d,
                    lastStep: s
                }), u) break;
            }
            return i;
        }
        removeNestedParts(e) {
            for (let t = e.length - 1; t >= 0; t--) {
                const n = e[t];
                if ("up" === n.lastStep && !n.hasForeignComponents) {
                    let n = 0;
                    for (let i = t - 1; i > 0; i--) if ("dive" === e[i].lastStep) {
                        n = i;
                        break;
                    }
                    e.splice(n, t - n), t = n;
                }
            }
            return e;
        }
        encloseInlineParts(e, t) {
            const n = [];
            let i = null, o = !1;
            for (let t = 0; t <= e.length; t++) {
                const s = e[t];
                if (!s || null !== i && ![ "back", "start" ].includes(s.lastStep) || s.hasForeignComponents || s.isHeading) {
                    if (null !== i) {
                        if (o) {
                            const e = t - 1;
                            n.push({
                                start: i,
                                end: e
                            });
                        }
                        i = null, o = !1;
                    }
                } else {
                    if (null === i) {
                        if (Ce(s.node.parentNode)) {
                            for (let n = t + 1; n < e.length; n++) "up" !== e[n].lastStep || (t = n - 1);
                            break;
                        }
                        i = t;
                    }
                    !o && (s.isTextNode && s.node.textContent.trim() || Ce(s.node)) && (o = !0);
                }
            }
            for (let i = n.length - 1; i >= 0; i--) {
                const o = n[i], s = this.context.document.createElement("div"), r = e[o.start].node.nextSibling, a = e[o.start].node.parentNode;
                for (let t = o.end; t >= o.start; t--) s.appendChild(e[t].node);
                a.insertBefore(s, r);
                const c = {
                    node: s,
                    isTextNode: !1,
                    isHeading: !1,
                    hasCurrentSignature: s.contains(t),
                    hasForeignComponents: !1,
                    lastStep: "replaced"
                };
                e.splice(o.start, o.end - o.start + 1, c);
            }
            return e;
        }
        filterParts(e) {
            for (let t = (e = e.filter(e => !e.hasForeignComponents && !e.isTextNode)).length - 1; t > 0; t--) {
                const n = e[t];
                if ("P" !== n.node.tagName || n.node.textContent.trim()) break;
                e.splice(t, 1);
            }
            return e;
        }
        replaceListsWithItems(e, t) {
            const n = e[e.length - 1];
            for (let i = e.length - 1; i >= 0; i--) {
                const o = e[i];
                if ([ "UL", "DL", "OL", "LI", "DD" ].includes(o.node.tagName) && ("up" === o.lastStep && (!e[i - 1] || "back" !== e[i - 1].lastStep) || ("DD" === n.node.tagName || "DD" === n.node.parentNode.tagName || "DL" === n.node.tagName) && !e.slice(i + 1).some(e => "P" === e.node.tagName))) {
                    const n = o.node.textContent.replace(/\s+/g, "");
                    let s, r = [ o.node ];
                    do {
                        s = r.reduce((e, t) => e.concat(Array.from(t[this.context.childElementsProperty])), []);
                    } while (s.length && s.every(e => [ "UL", "DL", "OL", "LI", "DD" ].includes(e.tagName)) && s.map(e => e.textContent).join("").replace(/\s+/g, "") === n && (r = s));
                    if (r.length > 1) {
                        const n = r.map(e => ({
                            node: e,
                            isTextNode: !1,
                            hasCurrentSignature: e.contains(t),
                            hasForeignComponents: !1,
                            lastStep: "replaced"
                        }));
                        e.splice(i, 1, ...n);
                    } else r[0] !== o.node && Object.assign(o, {
                        node: r[0],
                        lastStep: "replaced"
                    });
                }
            }
            return e;
        }
        getLevelsUpTree(e) {
            const t = [], n = new qe(e);
            for (;n.parentNode(); ) {
                const e = n.currentNode;
                if ([ "UL", "DL", "OL" ].includes(e.tagName)) {
                    if (e.classList.contains("cd-commentLevel")) {
                        const n = e.getAttribute("class").match(/cd-commentLevel-(\d+)/);
                        return n && t.unshift(...Array(Number(n[1]))), t;
                    }
                    t.unshift(e);
                }
            }
            return t;
        }
        findHeadings() {
            const e = [ ...p.g.rootElement.getElementsByTagName("h2"), ...p.g.rootElement.getElementsByTagName("h3"), ...p.g.rootElement.getElementsByTagName("h4"), ...p.g.rootElement.getElementsByTagName("h5"), ...p.g.rootElement.getElementsByTagName("h6") ];
            return e.sort((e, t) => this.context.follows(e, t) ? 1 : -1), e;
        }
    }
    function Je() {
        const e = document.evaluate(".//descendant::text()", p.g.rootElement, null, XPathResult.ANY_TYPE, null), t = [];
        let n;
        for (;n = e.iterateNext(); ) t.push(n);
        return t;
    }
    function Qe() {
        const e = [ ...p.g.FLOATING_ELEMENTS_SELECTORS, ...p.config.customFloatingElementsSelectors ].join(", "), t = p.g.$root.find(e).get().filter(e => !e.classList.contains("cd-ignoreFloating"));
        t.forEach(e => {
            const t = window.getComputedStyle(e);
            e.setAttribute("data-margin-top", parseFloat(t.marginTop)), e.setAttribute("data-margin-bottom", parseFloat(t.marginBottom));
        });
        const n = p.config.closedDiscussionsClasses.map(e => ".".concat(e)).join(", ");
        return {
            floating: t,
            closedDiscussions: p.g.$root.find(n).get(),
            pageHasOutdents: Boolean(p.g.$root.find(".outdent-template").length)
        };
    }
    function Ze(e, t, n) {
        const i = document.createElement(t);
        for (;e.firstChild; ) i.appendChild(e.firstChild);
        Array.from(e.attributes).forEach(e => {
            i.setAttribute(e.name, e.value);
        }), e.parentNode.replaceChild(i, e);
        let o = e.getAttribute("data-comment-id");
        if (null !== o) {
            o = Number(o);
            const t = p.comments[o];
            t.elements.splice(t.elements.indexOf(e), 1, i), t.highlightables.includes(e) && (t.highlightables.splice(t.highlightables.indexOf(e), 1, i), 
            t.bindEvents(i));
        }
        return e === n.element && (n.element = i), i;
    }
    function et(e) {
        const t = p.g.rootElement.querySelectorAll(".cd-commentLevel:not(ol) + .cd-commentLevel:not(ol)");
        if (!t.length) return;
        const n = e => e.classList.contains("cd-commentLevel") && "OL" !== e.tagName || e.querySelector(".cd-commentLevel:not(ol)");
        Array.from(t).forEach(t => {
            const i = t.previousElementSibling;
            if (!i) return;
            let o = i, s = t;
            do {
                const t = o.tagName, i = {};
                let r;
                if ("UL" === t ? i.DD = "LI" : "DL" === t && (i.LI = "DD"), n(o)) {
                    for (;s.childNodes.length; ) {
                        let t = s.firstChild;
                        if (t.nodeType === Node.ELEMENT_NODE) i[t.tagName] && (t = Ze(t, i[t.tagName], e)), 
                        void 0 === r && (r = t); else if (void 0 === r && t.textContent.trim()) {
                            r = null;
                            const e = document.createElement("span");
                            e.appendChild(t), t = e;
                        }
                        o.appendChild(t);
                    }
                    s.parentNode.removeChild(s);
                }
                s = r, o = r && r.previousElementSibling;
            } while (o && s && n(s));
        });
    }
    function tt(e) {
        return nt.apply(this, arguments);
    }
    function nt() {
        return (nt = o()((function*({messagesRequest: e}) {
            p.g.$root = p.g.$content.children(".mw-parser-output"), p.g.$root.length || (p.g.$root = p.g.$content), 
            p.g.rootElement = p.g.$root.get(0), p.comments = [], p.sections = [], p.g.firstRun ? yield St({
                messagesRequest: e
            }) : (k(), Ve.reset());
        }))).apply(this, arguments);
    }
    function it() {
        let e, t;
        if (0 !== window.pageYOffset && p.g.rootElement.getBoundingClientRect().top <= 0) {
            const n = new qe(p.g.rootElement.firstElementChild);
            for (;;) {
                if (!Ce(n.currentNode.tagName)) {
                    const i = n.currentNode.getBoundingClientRect();
                    if (i.bottom >= 0 && 0 !== i.height) {
                        if (e = n.currentNode, t = i.top, n.firstChild()) continue;
                        break;
                    }
                }
                if (!n.nextSibling()) break;
            }
        }
        return {
            element: e,
            top: t
        };
    }
    function ot(e, t) {
        const n = e.findTimestamps();
        e.findSignatures(n).forEach(t => {
            try {
                const n = e.createComment(t);
                n.highlightables.length && p.comments.push(n);
            } catch (e) {
                e instanceof l || console.error(e);
            }
        }), function(e) {
            et(e), et(e), p.g.rootElement.querySelector(".cd-commentLevel:not(ol) + .cd-commentLevel:not(ol)") && console.warn(".cd-commentLevel adjacencies have left."), 
            $("dl").has("dt").each((e, t) => {
                Array.from(t.classList).filter(e => e.startsWith("cd-commentLevel")).forEach(e => t.classList.remove(e));
            });
        }(t), mw.hook("convenientDiscussions.commentsReady").fire(p.comments);
    }
    function st(e, t) {
        e.findHeadings().forEach(n => {
            try {
                const i = e.createSection(n, t);
                void 0 !== i.id && p.sections.push(i);
            } catch (e) {
                e instanceof l || console.error(e);
            }
        }), Kn.adjustSections(), mw.hook("convenientDiscussions.sectionsReady").fire(p.sections);
    }
    function rt() {
        $(p.g.ADD_TOPIC_SELECTORS).off("click.cd").on("click.cd", (function(e) {
            const t = $(this).attr("href");
            if (e.ctrlKey || e.shiftKey || mw.util.getParamValue("preload", t)) return;
            e.preventDefault();
            const n = mw.util.getParamValue("editintro", t), i = p.g.CURRENT_PAGE.addSectionForm;
            i ? (i.$element.cdScrollIntoView("center"), i.headlineInput.focus()) : p.g.CURRENT_PAGE.addSectionForm = new ci({
                mode: "addSection",
                target: p.g.CURRENT_PAGE,
                $addSectionLink: $(this),
                scrollIntoView: !0,
                editintro: n
            });
        })).attr("title", p.s("addtopicbutton-tooltip"));
    }
    function at(e) {
        e.find('a[href^="#"]').filter((function() {
            return /^#\d{12}_.+$/.test($(this).attr("href"));
        })).on("click", (function(e) {
            e.preventDefault();
            const t = Ni.getCommentByAnchor($(this).attr("href").slice(1));
            t && t.scrollToAndHighlightTarget();
        }));
    }
    function ct(e, t) {
        return ut.apply(this, arguments);
    }
    function ut() {
        return (ut = o()((function*(e, t) {
            let n, i, o, s, r, a, c, u;
            if (p.g.firstRun) {
                n = location.hash.slice(1);
                try {
                    i = decodeURIComponent(n);
                } catch (e) {
                    console.error(e);
                }
                o = $.escapeSelector(n), s = i && $.escapeSelector(i), /^\d{12}_.+$/.test(n) && (r = i);
            } else r = e;
            if (r) {
                if (({date: a, author: c} = N(r) || {}), u = Ni.getCommentByAnchor(r), !e && !u) {
                    let e;
                    for (let t = 1; !u && t <= 5; t++) {
                        e = T(new Date(a.getTime() - p.g.MILLISECONDS_IN_A_MINUTE * t), c), u = Ni.getCommentByAnchor(e);
                    }
                }
                u && setTimeout(() => {
                    u.scrollToAndHighlightTarget(!1);
                });
            }
            if (t) {
                const e = Kn.getSectionByAnchor(t);
                e && e.$elements.first().cdScrollTo("top", !1);
            }
            if (p.g.firstRun) {
                const e = i && !u && !p.config.idleFragments.includes(i) && !i.startsWith("/media/") && !$(":target").length && !$('a[name="'.concat(s, '"]')).length && !$('*[id="'.concat(s, '"]')).length && !$('a[name="'.concat(o, '"]')).length && !$('*[id="'.concat(o, '"]')).length;
                i && e && p.g.isPageActive && (yield Un(i, a));
            }
        }))).apply(this, arguments);
    }
    function lt() {
        p.settings.highlightOwnComments && Ni.configureAndAddLayers(p.comments.filter(e => e.own));
    }
    function dt() {
        return ht.apply(this, arguments);
    }
    function ht() {
        return (ht = o()((function*() {
            "unknown" === p.settings.desktopNotifications && "denied" !== Notification.permission && Y(!0).then(e => {
                if ("unknown" === e.desktopNotifications) {
                    const t = [ {
                        label: p.s("dn-confirm-yes"),
                        action: "accept",
                        flags: "primary"
                    }, {
                        label: p.s("dn-confirm-no"),
                        action: "reject"
                    } ];
                    Tn(p.s("dn-confirm"), {
                        size: "medium",
                        actions: t
                    }).then(t => {
                        let n;
                        "accept" === t ? "default" === Notification.permission ? (OO.ui.alert(p.s("dn-grantpermission")), 
                        Notification.requestPermission(t => {
                            "granted" === t ? (p.settings.desktopNotifications = e.desktopNotifications = "all", 
                            n = W(e)) : "denied" === t && (p.settings.desktopNotifications = e.desktopNotifications = "none", 
                            n = W(e));
                        })) : "granted" === Notification.permission && (p.settings.desktopNotifications = e.desktopNotifications = "all", 
                        n = W(e)) : "reject" === t && (p.settings.desktopNotifications = e.desktopNotifications = "none", 
                        n = W(e)), n && n.catch(e => {
                            mw.notify(p.s("error-settings-save"), {
                                type: "error"
                            }), console.warn(e);
                        });
                    });
                }
            }), "unknown" !== p.settings.desktopNotifications && "default" === Notification.permission && (yield OO.ui.alert(p.s("dn-grantpermission-again"), {
                title: p.s("script-name")
            }), Notification.requestPermission());
        }))).apply(this, arguments);
    }
    function mt() {
        const e = (p.debug.timerTotal["main code"] + p.debug.timerTotal["final code and rendering"]) / p.comments.length;
        p.debug.logAndResetTimer("total time"), console.debug("number of comments: ".concat(p.comments.length)), 
        console.debug("per comment: ".concat(e.toFixed(2))), p.debug.logAndResetEverything();
    }
    function pt() {
        return gt.apply(this, arguments);
    }
    function gt() {
        return (gt = o()((function*(e = {}) {
            p.debug.stopTimer(p.g.firstRun ? "loading data" : "laying out HTML"), p.debug.startTimer("preparations"), 
            yield tt(e);
            const t = p.g.firstRun ? it() : {};
            p.debug.stopTimer("preparations"), p.debug.startTimer("main code"), p.g.IS_ARCHIVE_PAGE = Boolean(p.g.ARCHIVE_PATHS_REGEXP && p.g.ARCHIVE_PATHS_REGEXP.test(p.g.CURRENT_PAGE.name));
            const n = !mw.config.get("wgArticleId") || mw.config.get("wgIsRedirect");
            let i;
            p.g.isPageActive = !(n || p.g.IS_ARCHIVE_PAGE || (mw.util.getParamValue("diff") || mw.util.getParamValue("oldid")) && mw.config.get("wgRevisionId") !== mw.config.get("wgCurRevisionId")), 
            p.g.editWatchedSections = Mn, p.g.settingsDialog = Ln, mw.config.get("wgArticleId") && (i = Q(!0, e), 
            i.catch(e => {
                console.warn("Couldn't load the settings from the server.", e);
            }));
            const o = p.g.isPageActive ? V(!0) : void 0;
            mw.hook("convenientDiscussions.beforeParse").fire(p), p.g.specialElements = Qe(), 
            p.debug.startTimer("process comments");
            const s = new Xe({
                CommentClass: Ni,
                SectionClass: Kn,
                childElementsProperty: "children",
                document: document,
                follows: (e, t) => e.compareDocumentPosition(t) & Node.DOCUMENT_POSITION_PRECEDING,
                getAllTextNodes: Je,
                getElementByClassName: (e, t) => e.querySelector(".".concat(t))
            });
            try {
                ot(s, t);
            } catch (e) {
                console.error(e);
            }
            if (p.debug.stopTimer("process comments"), !p.g.isPageActive || p.comments.length || $("#ca-addsection").length || p.g.PAGE_WHITE_LIST_REGEXP && p.g.PAGE_WHITE_LIST_REGEXP.test(p.g.CURRENT_PAGE.name) || (p.g.isPageActive = !1), 
            p.debug.startTimer("process sections"), st(s, i), p.debug.stopTimer("process sections"), 
            rt(), p.debug.stopTimer("main code"), p.debug.startTimer("final code and rendering"), 
            t.element || e.scrollPosition) {
                const n = t.element ? window.pageYOffset + t.element.getBoundingClientRect().top - t.top : e.scrollPosition;
                window.scrollTo(0, n);
            }
            lt(), ct(e.commentAnchor, e.sectionAnchor), p.g.isPageActive && (p.g.firstRun || e.wasPageCreated ? gn.mount() : gn.reset(), 
            gn.processVisits(o, e.unseenCommentAnchors)), (p.g.isPageActive || n) && Ut(), p.g.firstRun && ($(document).on("mousemove mouseover", vn), 
            $(window).on("resize orientationchange", bn), yn("commentForms", () => (Ht(), mw.user.options.get("useeditwarning") && (ci.getLastActiveAlteredCommentForm() || r && p.commentForms.length))), 
            mw.hook("wikipage.content").add(at), mw.hook("convenientDiscussions.previewReady").add(at)), 
            (p.g.firstRun && p.g.isPageActive || e.wasPageCreated) && ($(document).on("keydown", En).on("scroll resize orientationchange", () => {
                gn.registerSeenComments(), gn.updateCommentFormButton();
            }), setInterval(() => {
                Ve.redrawIfNecessary();
            }, 1e3), setTimeout(() => {
                new MutationObserver(e => {
                    e.every(e => /^cd-comment(Underlay|Overlay|Layers)/.test(e.target.className)) || Ve.redrawIfNecessary();
                }).observe(p.g.$content.get(0), {
                    attributes: !0,
                    childList: !0,
                    subtree: !0
                });
            }, 500));
            let r = !1;
            mw.user.options.get("editondblclick") && mw.loader.using("mediawiki.action.view.dblClickEdit").then(() => {
                $("#ca-edit").off("click"), r = !0;
            }), mw.user.options.get("editsectiononrightclick") && mw.loader.using("mediawiki.action.view.rightClickEdit").then(() => {
                $(".mw-editsection a").off("click"), r = !0;
            }), p.g.firstRun && dt(), mw.hook("convenientDiscussions.pageReady").fire(p), Bt(), 
            p.g.firstRun = !1, p.g.rootElement.getBoundingClientRect(), p.debug.stopTimer("final code and rendering"), 
            p.debug.stopTimer("total time"), mt();
        }))).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 <matma.rex@gmail.com>
 * @license GPL-2.0-only
 */    const ft = {
        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: "H:i, j F 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"
    }, bt = {
        "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"
    }, yt = [ "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 wt() {
        const e = [];
        mw.messages.set(p.config.messages), p.g.CONTRIBS_PAGE = p.config.contribsPage, p.g.LOCAL_TIMEZONE_OFFSET = p.config.localTimezoneOffset;
        const t = [ "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", "word-separator", "comma-separator", "colon-separator" ], n = [];
        for (let e = 0; e < t.length; e += 50) {
            const i = t.slice(e, e + 50);
            n.push(p.g.api.loadMessagesIfMissing(i, {
                amlang: mw.config.get("wgContentLanguage")
            }));
        }
        if (Promise.all(n).then(() => {
            p.g.MESSAGES = {}, t.forEach(e => {
                p.g.MESSAGES[e] = mw.msg(e);
            });
        }), e.push(...n), !Object.keys(p.config.messages).some(e => e.startsWith("timezone-"))) {
            const t = p.g.api.loadMessages(void 0, {
                amlang: mw.config.get("wgContentLanguage"),
                amincludelocal: 1,
                amfilter: "timezone-"
            });
            e.push(t);
        }
        if (!p.g.CONTRIBS_PAGE || null === p.g.LOCAL_TIMEZONE_OFFSET) {
            const t = p.g.api.get({
                action: "query",
                meta: "siteinfo",
                siprop: [ "specialpagealiases", "general" ]
            }).then(e => {
                e.query.specialpagealiases.some(e => {
                    if ("Contributions" === e.realname) return p.g.CONTRIBS_PAGE = mw.config.get("wgFormattedNamespaces")[-1] + ":" + e.aliases[0], 
                    !0;
                }), p.g.LOCAL_TIMEZONE_OFFSET = e.query.general.timeoffset;
            });
            e.push(t);
        }
        return Promise.all(e);
    }
    function Et() {
        const e = function(e, t) {
            const n = e => "(" + e.map(mw.util.escapeRegExp).join("|") + ")";
            let i = "\\b";
            for (let o = 0; o < e.length; o++) {
                let s = !1, r = e[o];
                switch ("x" === r && o < e.length - 1 && (r += e[++o]), "xk" === r && o < e.length - 1 && (r += e[++o]), 
                r) {
                  case "xx":
                    i += "x";
                    break;

                  case "xg":
                    i += n(Be([ "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":
                    s = "2";
                    break;

                  case "D":
                    i += n(Be([ "sun", "mon", "tue", "wed", "thu", "fri", "sat" ]));
                    break;

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

                  case "l":
                    i += n(Be([ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" ]));
                    break;

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

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

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

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

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

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

                  case "\\":
                    o < e.length - 1 ? i += e[++o] : i += "\\";
                    break;

                  case '"':
                    if (o < e.length - 1) {
                        const t = e.indexOf('"', o + 1);
                        -1 === t ? i += '"' : (i += e.substr(o + 1, t - o - 1), o = t);
                    } else i += '"';
                    break;

                  default:
                    i += e[o];
                }
                !1 !== s && (i += "(" + (t + "{" + s + "}") + ")");
            }
            return i;
        }(p.g.DATE_FORMAT, p.g.DIGITS ? "[" + p.g.DIGITS + "]" : "\\d"), t = Object.keys(p.config.messages).filter(e => e.startsWith("timezone-")).map(e => e.slice(9)), n = "\\((?:" + (t.length ? t : yt).map(e => {
            const t = mw.message("timezone-" + e);
            return t.exists() ? t.text() : e;
        }).map(mw.util.escapeRegExp).join("|").toUpperCase() + ")\\)", i = e + " " + n;
        p.g.TIMESTAMP_REGEXP = new RegExp(i), p.g.TIMESTAMP_REGEXP_NO_TIMEZONE = new RegExp(e), 
        p.g.TIMEZONE_REGEXP = new RegExp(n, "g");
    }
    function vt() {
        !function() {
            const e = mw.config.get("wgContentLanguage");
            p.g.DATE_FORMAT = ft[e], p.g.DIGITS = mw.config.get("wgTranslateNumerals") ? bt[e] : null;
        }(), Et(), function() {
            const e = p.g.DATE_FORMAT, t = [];
            for (let n = 0; n < e.length; n++) {
                let i = e[n];
                switch ("x" === i && n < e.length - 1 && (i += e[++n]), "xk" === i && n < e.length - 1 && (i += e[++n]), 
                i) {
                  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":
                    t.push(i);
                    break;

                  case "\\":
                    n < e.length - 1 && ++n;
                    break;

                  case '"':
                    if (n < e.length - 1) {
                        const t = e.indexOf('"', n + 1);
                        -1 !== t && (n = t);
                    }
                }
            }
            p.g.TIMESTAMP_PARSER = (e, t, n, i) => {
                const o = e => n ? e.replace(new RegExp("[" + n + "]", "g"), e => n.indexOf(e)) : e, s = e => e.map(e => p.g.MESSAGES[e]);
                let r = 0, a = 0, c = 0, u = 0, l = 0;
                for (let n = 0; n < t.length; n++) {
                    const i = t[n], d = e[n + 3];
                    switch (i) {
                      case "xg":
                        a = s([ "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(d);
                        break;

                      case "d":
                      case "j":
                        c = Number(o(d));
                        break;

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

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

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

                      case "n":
                        a = Number(o(d)) - 1;
                        break;

                      case "Y":
                        r = Number(o(d));
                        break;

                      case "xkY":
                        r = Number(o(d)) - 543;
                        break;

                      case "G":
                      case "H":
                        u = Number(o(d));
                        break;

                      case "i":
                        l = Number(o(d));
                        break;

                      default:
                        throw "Not implemented";
                    }
                }
                return new Date(Date.UTC(r, a, c, u, l) - 60 * i * 1e3);
            }, p.g.TIMESTAMP_MATCHING_GROUPS = t;
        }();
    }
    function _t() {
        p.settings = p.settings || {}, p.defaultSettings = {
            allowEditOthersComments: !1,
            alwaysExpandSettings: !1,
            autopreview: !0,
            desktopNotifications: "unknown",
            defaultCommentLinkType: "diff",
            defaultSectionLinkType: "wikilink",
            highlightOwnComments: !0,
            insertButtons: p.config.defaultInsertButtons || [],
            insertButtonsChanged: !1,
            signaturePrefix: "",
            notifications: "all",
            notificationsBlacklist: [],
            showLoadingOverlay: !0,
            showToolbar: !0,
            watchOnReply: !0,
            watchSectionOnReply: !0
        }, p.localSettingNames = [ "insertButtons", "insertButtonsChanged" ];
        const e = {
            allowEditOthersMsgs: [ "allowEditOthersComments" ],
            desktopNotifications: [ "browserNotifications" ],
            signaturePrefix: [ "mySignature", "mySig" ]
        };
        let t, n;
        try {
            t = JSON.parse(mw.user.options.get(p.g.SETTINGS_OPTION_FULL_NAME)) || {};
        } catch (e) {
            t = {};
        }
        try {
            n = JSON.parse(mw.user.options.get(p.g.LOCAL_SETTINGS_OPTION_FULL_NAME)) || {};
        } catch (e) {
            n = {};
        }
        Object.keys(p.defaultSettings).forEach(i => {
            (e[i] || []).concat(i).forEach(e => {
                const o = "cd" + Re(e);
                o in window && typeof o == typeof p.defaultSettings[i] && (p.settings[i] = window[e]), 
                void 0 !== t[e] && typeof t[e] == typeof p.defaultSettings[i] && (p.settings[i] = t[e]), 
                void 0 !== n[e] && typeof n[e] == typeof p.defaultSettings[i] && (p.settings[i] = n[e]);
            });
        }), p.settings.signaturePrefix && (p.settings.signaturePrefix = p.settings.signaturePrefix.replace(/~~\~~/, "")), 
        p.settings.insertButtonsChanged || JSON.stringify(t.insertButtons) === JSON.stringify(p.config.defaultInsertButtons) || (p.settings.insertButtons = p.config.defaultInsertButtons), 
        p.settings = Object.assign({}, p.defaultSettings, p.settings);
        const i = Object.assign({}, t, n);
        Object.keys(p.settings).some(e => JSON.stringify(p.settings[e]) !== JSON.stringify(i[e])) && W().catch(e => {
            console.warn("Couldn't save the settings to the server.", e);
        }), Object.keys(p.defaultSettings).forEach(t => {
            (e[t] || []).concat(t).forEach(e => {
                const n = "cdLocal" + Re(e);
                n in window && typeof n == typeof p.defaultSettings[t] && (p.settings[t] = window[e]);
            });
        });
    }
    function Ct() {
        const e = window.getComputedStyle(document.documentElement).getPropertyValue("--cd-comment-underlay-focused-color"), t = $("#content").length ? window.getComputedStyle($("#content").get(0)).backgroundColor : "white";
        document.documentElement.style.setProperty("--cd-comment-underlay-focused-transparent-color", function(e) {
            const t = document.createElement("span");
            return t.style.color = e, (e = t.style.color).includes("rgba") ? e.replace(/\d+(?=\))/, "0") : e.replace(/rgb/, "rgba").replace(/\)/, ", 0)");
        }(e || p.g.COMMENT_UNDERLAY_FOCUSED_COLOR)), p.g.nanoCss.put(":root", {
            "--cd-comment-underlay-focused-color": p.g.COMMENT_UNDERLAY_FOCUSED_COLOR,
            "--cd-comment-underlay-target-color": p.g.COMMENT_UNDERLAY_TARGET_COLOR,
            "--cd-comment-underlay-new-color": p.g.COMMENT_UNDERLAY_NEW_COLOR,
            "--cd-comment-underlay-own-color": p.g.COMMENT_UNDERLAY_OWN_COLOR
        }), p.g.nanoCss.put(".cd-commentOverlay-gradient", {
            backgroundImage: "linear-gradient(to left, var(--cd-comment-underlay-focused-color), var(--cd-comment-underlay-focused-transparent-color))"
        }), p.g.nanoCss.put(".cd-messageArea .cd-closeButton", {
            backgroundColor: t
        });
    }
    function xt() {
        p.config.tagName ? (p.g.SUMMARY_POSTFIX = "", p.g.SUMMARY_LENGTH_LIMIT = mw.config.get("wgCommentCodePointLimit")) : (p.g.SUMMARY_POSTFIX = " ([[".concat(p.config.helpWikilink, "|").concat(p.s("script-name-short"), "]])"), 
        p.g.SUMMARY_LENGTH_LIMIT = mw.config.get("wgCommentCodePointLimit") - p.g.SUMMARY_POSTFIX.length), 
        p.g.CURRENT_PAGE = new ve(p.g.CURRENT_PAGE_NAME), p.g.CONTRIBS_PAGE_LINK_REGEXP = new RegExp("^".concat(p.g.CONTRIBS_PAGE, "/")), 
        p.g.CURRENT_USER_GENDER = mw.user.options.get("gender"), p.g.QQX_MODE = "qqx" === mw.util.getParamValue("uselang"), 
        p.g.GENDER_AFFECTS_USER_STRING = /\{\{ *gender *:[^}]+?\|[^}]+?\|/i.test(p.s("es-reply-to", !0) + p.s("es-edit-comment-by", !0) + p.s("thank-confirm", !0)), 
        p.g.dontHandleScroll = !1, p.g.autoScrollInProgress = !1;
    }
    function Tt() {
        const e = mw.config.get("wgNamespaceIds"), t = Object.keys(e).filter(t => [ 2, 3 ].includes(e[t])), n = Pe(t.join("|"));
        p.g.USER_NAMESPACES_REGEXP = new RegExp("(?:^|:)(?:".concat(n, "):(.+)"), "i");
        const i = e => e.replace(/:/g, " : ").replace(/[ _]/g, "[ _]*"), o = i(t.join("|")), s = i(p.g.CONTRIBS_PAGE);
        p.g.CAPTURE_USER_NAME_PATTERN = "\\[\\[[ _]*:?(?:\\w*:){0,2}(?:(?:".concat(o, ")[ _]*:[ _]*|") + "(?:Special[ _]*:[ _]*Contributions|".concat(s, ")\\/[ _]*)([^|\\]/]+)(/)?");
        const r = i(Object.keys(e).filter(t => 2 === e[t]).join("|"));
        if (p.g.USER_NAMESPACE_ALIASES_REGEXP = new RegExp("^:?(?:".concat(r, "):([^/]+)$"), "i"), 
        p.config.unsignedTemplates.length) {
            const e = p.config.unsignedTemplates.join("|");
            p.g.UNSIGNED_TEMPLATES_REGEXP = new RegExp("(\\{\\{ *(?:".concat(e, ") *\\|[ \\u200E]*([^}|]+?)[ \\u200E]*(?:\\|[ \\u200E]*([^}]+?)[ \\u200E]*)?\\}\\}).*\\n"), "ig");
        }
        p.g.CURRENT_USER_SIGNATURE = p.settings.signaturePrefix + p.g.SIGN_CODE;
        const a = mw.user.options.get("nickname"), c = a.match(new RegExp(p.g.CAPTURE_USER_NAME_PATTERN, "i"));
        if (c) {
            const e = mw.util.escapeRegExp(p.settings.signaturePrefix), t = mw.util.escapeRegExp(a.slice(0, c.index));
            p.g.CURRENT_USER_SIGNATURE_PREFIX_REGEXP = new RegExp(e + t + "$");
        }
        const u = p.g.POPULAR_INLINE_ELEMENTS.join("|");
        p.g.PIE_PATTERN = "(?:".concat(u, ")");
        const l = p.g.POPULAR_NOT_INLINE_ELEMENTS.join("|");
        p.g.PNIE_PATTERN = "(?:".concat(l, ")");
        const d = [];
        if (p.config.elementsToExcludeClasses.length || p.config.templatesToExclude.length || p.config.commentAntipatterns.length) {
            if (p.config.elementsToExcludeClasses) {
                const e = p.config.elementsToExcludeClasses.join("\\b|\\b");
                d.push("class=(['\"])[^'\"\\n]*(?:\\b".concat(e, "\\b)[^'\"\\n]*\\1"));
            }
            if (p.config.templatesToExclude.length) {
                const e = p.config.templatesToExclude.map(xe).join("|");
                d.push("\\{\\{ *(?:".concat(e, ") *(?:\\||\\}\\})"));
            }
            p.config.commentAntipatterns && d.push(...p.config.commentAntipatterns);
            const e = d.join("|");
            p.g.COMMENT_ANTIPATTERNS_REGEXP = new RegExp("^.*(?:".concat(e, ").*$"), "mg");
        }
        p.g.ARTICLE_PATH_REGEXP = new RegExp(mw.util.escapeRegExp(mw.config.get("wgArticlePath")).replace(mw.util.escapeRegExp("$1"), "(.*)"));
        const h = [ "<blockquote>", "<q>" ], m = [ "</blockquote>", "</q>" ];
        p.config.pairQuoteTemplates.forEach(e => {
            h.push("{{".concat(e[0])), m.push("{{".concat(e[1]));
        });
        const g = h.map(mw.util.escapeRegExp).join("|"), f = m.map(mw.util.escapeRegExp).join("|");
        p.g.QUOTE_REGEXP = new RegExp("(".concat(g, ")([^]*?)(").concat(f, ")"), "ig"), 
        p.g.UNHIGHLIGHTABLE_ELEMENTS_CLASSES = p.g.UNHIGHLIGHTABLE_ELEMENTS_CLASSES.concat(p.config.customUnhighlightableElementsClasses);
        const b = i(Object.keys(e).filter(t => 6 === e[t]).join("|"));
        p.g.FILE_PREFIX_PATTERN = "(?:".concat(b, "):");
        const y = i(Object.keys(e).filter(t => [ 6, 14 ].includes(e[t])).join("|"));
        p.g.COLON_NAMESPACES_PREFIX_REGEXP = new RegExp("^:(?:".concat(y, "):"), "i"), p.g.BAD_COMMENT_BEGINNINGS = p.g.BAD_COMMENT_BEGINNINGS.concat([ new RegExp("^\\[\\[".concat(p.g.FILE_PREFIX_PATTERN, ".+\\n*(?=[*:#])")) ]).concat(p.config.customBadCommentBeginnings), 
        p.g.ADD_TOPIC_SELECTORS = [ "#ca-addsection a" ].concat(p.config.customAddTopicLinkSelectors).join(", "), 
        p.g.ARCHIVE_PATHS_REGEXP = je(p.config.archivePaths), p.g.PAGES_WITHOUT_ARCHIVES_REGEXP = je(p.config.pagesWithoutArchives);
    }
    function At() {
        xn(), p.g.COMMENT_ELEMENT_PROTOTYPES = {}, p.g.SECTION_ELEMENT_PROTOTYPES = {}, 
        p.g.COMMENT_ELEMENT_PROTOTYPES.goToParentButton = new OO.ui.ButtonWidget({
            label: p.s("cm-gotoparent"),
            title: p.s("cm-gotoparent-tooltip"),
            framed: !1,
            classes: [ "cd-button", "cd-commentButton" ]
        }).$element.get(0);
        const e = "cm-copylink-tooltip-".concat(p.settings.defaultCommentLinkType.toLowerCase());
        p.g.COMMENT_ELEMENT_PROTOTYPES.linkButton = new OO.ui.ButtonWidget({
            label: p.s("cm-copylink"),
            title: p.s(e) + " " + p.s("cld-invitation"),
            framed: !1,
            classes: [ "cd-button", "cd-commentButton" ]
        }).$element.get(0), p.g.COMMENT_ELEMENT_PROTOTYPES.pendingLinkButton = new OO.ui.ButtonWidget({
            label: p.s("cm-copylink"),
            title: p.s(e) + " " + p.s("cld-invitation"),
            framed: !1,
            disabled: !0,
            classes: [ "cd-button", "cd-commentButton", "cd-button-pending" ]
        }).$element.get(0), p.g.COMMENT_ELEMENT_PROTOTYPES.thankButton = new OO.ui.ButtonWidget({
            label: p.s("cm-thank"),
            title: p.s("cm-thank-tooltip"),
            framed: !1,
            classes: [ "cd-button", "cd-commentButton" ]
        }).$element.get(0), p.g.COMMENT_ELEMENT_PROTOTYPES.pendingThankButton = new OO.ui.ButtonWidget({
            label: p.s("cm-thank"),
            title: p.s("cm-thank-tooltip"),
            framed: !1,
            disabled: !0,
            classes: [ "cd-button", "cd-commentButton", "cd-button-pending" ]
        }).$element.get(0), p.g.COMMENT_ELEMENT_PROTOTYPES.disabledThankButton = new OO.ui.ButtonWidget({
            label: p.s("cm-thank"),
            title: p.s("cm-thank-disabled-tooltip"),
            framed: !1,
            disabled: !0,
            classes: [ "cd-button", "cd-commentButton" ]
        }).$element.get(0), p.g.COMMENT_ELEMENT_PROTOTYPES.editButton = new OO.ui.ButtonWidget({
            label: p.s("cm-edit"),
            framed: !1,
            classes: [ "cd-button", "cd-commentButton" ]
        }).$element.get(0), p.g.COMMENT_ELEMENT_PROTOTYPES.replyButton = new OO.ui.ButtonWidget({
            label: p.s("cm-reply"),
            framed: !1,
            classes: [ "cd-button", "cd-commentButton" ]
        }).$element.get(0), p.g.SECTION_ELEMENT_PROTOTYPES.replyButton = new OO.ui.ButtonWidget({
            label: p.s("section-reply"),
            framed: !1,
            classes: [ "cd-button", "cd-sectionButton" ]
        }).$element.get(0), p.g.SECTION_ELEMENT_PROTOTYPES.addSubsectionButton = new OO.ui.ButtonWidget({
            label: "",
            framed: !1,
            classes: [ "cd-button", "cd-sectionButton" ]
        }).$element.get(0), p.g.COMMENT_ELEMENT_PROTOTYPES.underlay = document.createElement("div"), 
        p.g.COMMENT_ELEMENT_PROTOTYPES.underlay.className = "cd-commentUnderlay", p.g.COMMENT_ELEMENT_PROTOTYPES.overlay = document.createElement("div"), 
        p.g.COMMENT_ELEMENT_PROTOTYPES.overlay.className = "cd-commentOverlay";
        const t = document.createElement("div");
        t.className = "cd-commentOverlay-innerWrapper", p.g.COMMENT_ELEMENT_PROTOTYPES.overlay.appendChild(t);
        const n = document.createElement("div");
        n.textContent = "\xa0", n.className = "cd-commentOverlay-gradient", t.appendChild(n);
        const i = document.createElement("div");
        i.className = "cd-commentOverlay-content", t.appendChild(i);
    }
    function St(e) {
        return kt.apply(this, arguments);
    }
    function kt() {
        return (kt = o()((function*({messagesRequest: e}) {
            p.g.api = p.g.api || new mw.Api, yield e || wt(), _t(), vt(), xt(), p.commentForms = [], 
            Tt(), At(), $.fn.extend(ze);
        }))).apply(this, arguments);
    }
    function Nt() {
        return p.comments.filter(e => "unseen" === e.newness).map(e => e.anchor);
    }
    function Ot(e, t) {
        return It.apply(this, arguments);
    }
    function It() {
        return (It = o()((function*(e, t) {
            p.debug.stopTimer("getting HTML"), p.debug.startTimer("laying out HTML"), p.g.$content.children(".mw-parser-output").remove(), 
            p.g.$content.append(e);
            try {
                yield pt(Object.assign({}, t, {
                    unseenCommentAnchors: Nt()
                }));
            } catch (e) {
                mw.notify(p.s("error-processpage"), {
                    type: "error"
                }), console.error(e), Bt();
            }
            mw.hook("wikipage.content").fire(p.g.$content);
        }))).apply(this, arguments);
    }
    let Pt, Lt, Ft;
    function Mt() {
        return p.settings && !1 === p.settings.showLoadingOverlay || !p.settings && void 0 !== window.cdShowLoadingOverlay && !1 === window.cdShowLoadingOverlay;
    }
    function Rt() {
        Mt() || (Pt ? Pt.show() : (Pt = $("<div>").addClass("cd-loadingPopup"), $("<img>").addClass("cd-loadingPopup-logo").attr("src", p.config.logoDataUrl).appendTo(Pt), 
        $(document.body).append(Pt)));
    }
    function Bt() {
        Pt && !Mt() && Pt.hide();
    }
    function Dt() {
        return jt.apply(this, arguments);
    }
    function jt() {
        return (jt = o()((function*(e = {}) {
            let t;
            Ht(), e.scrollPosition = window.pageYOffset, gn.closeAllNotifications(), p.debug.init(), 
            p.debug.startTimer("total time"), p.debug.startTimer("getting HTML"), Rt(), re().catch(e => {
                console.warn(e);
            });
            try {
                t = yield p.g.CURRENT_PAGE.parse({
                    markAsRead: !0
                });
            } catch (t) {
                if (Bt(), e.didSubmitCommentForm) throw t;
                return mw.notify(p.s("error-reloadpage"), {
                    type: "error"
                }), void console.warn(t);
            }
            p.commentForms.forEach(e => {
                e.$element.detach();
            }), mw.config.set({
                wgRevisionId: t.revid,
                wgCurRevisionId: t.revid
            }), mw.loader.load(t.modules), mw.loader.load(t.modulestyles), mw.config.set(t.jsconfigvars), 
            history.replaceState(history.state, "", location.pathname + location.search), rn(0, !1), 
            Ot(t.text, e);
        }))).apply(this, arguments);
    }
    function Ht() {
        const e = p.commentForms.map(e => {
            let t;
            const n = e.target;
            return e.target instanceof Ni ? t = {
                anchor: n.anchor
            } : n instanceof Kn && (t = {
                headline: n.headline,
                firstCommentAnchor: n.comments[0] && n.comments[0].anchor,
                index: n.id
            }), {
                mode: e.mode,
                targetData: t,
                addSectionLinkHref: e.$addSectionLink && e.$addSectionLink.attr("href"),
                headline: e.headlineInput && e.headlineInput.getValue(),
                comment: e.commentInput.getValue(),
                summary: e.summaryInput.getValue(),
                minor: e.minorCheckbox && e.minorCheckbox.isSelected(),
                watch: e.watchCheckbox && e.watchCheckbox.isSelected(),
                watchSection: e.watchSectionCheckbox && e.watchSectionCheckbox.isSelected(),
                noSignature: e.noSignatureCheckbox && e.noSignatureCheckbox.isSelected(),
                delete: e.deleteCheckbox && e.deleteCheckbox.isSelected(),
                originalHeadline: e.originalHeadline,
                originalComment: e.originalComment,
                summaryAltered: e.summaryAltered,
                lastFocused: e.lastFocused
            };
        }), t = e.length ? {
            forms: e,
            saveUnixTime: Date.now()
        } : {}, n = localStorage.getItem("convenientDiscussions-commentForms");
        let i;
        try {
            i = n && JSON.parse(n) || {};
        } catch (e) {
            console.error(e), i = {};
        }
        i[mw.config.get("wgPageName")] = t, localStorage.setItem("convenientDiscussions-commentForms", JSON.stringify(i));
    }
    function Ut() {
        if (p.g.firstRun) {
            const t = localStorage.getItem("convenientDiscussions-commentForms");
            if (t) {
                let n;
                try {
                    n = JSON.parse(t) || {};
                } catch (e) {
                    return void console.error(e);
                }
                e = n, Object.keys(e).forEach(t => {
                    (!e[t].forms || !e[t].forms.length || e[t].saveUnixTime < Date.now() - 1e3 * p.g.SECONDS_IN_A_DAY * 30) && delete e[t];
                }), n = e, localStorage.setItem("convenientDiscussions-commentForms", JSON.stringify(n));
                const i = n[mw.config.get("wgPageName")] || {};
                if (i.forms) {
                    !function(e) {
                        let t = !1;
                        const n = [];
                        e.forms.forEach(e => {
                            const i = ci.modeToProperty(e.mode);
                            if (e.targetData && e.targetData.anchor) {
                                const o = Ni.getCommentByAnchor(e.targetData.anchor);
                                if (o && o.actionable && !o["".concat(i, "Form")]) try {
                                    o[i](e), t = !0;
                                } catch (t) {
                                    console.warn(t), n.push(e);
                                } else n.push(e);
                            } else if (e.targetData && e.targetData.headline) {
                                const o = Kn.search({
                                    headline: e.targetData.headline,
                                    firstCommentAnchor: e.targetData.firstCommentAnchor,
                                    index: e.targetData.index
                                });
                                if (o && o.actionable && !o["".concat(i, "Form")]) try {
                                    o[i](e), t = !0;
                                } catch (t) {
                                    console.warn(t), n.push(e);
                                } else n.push(e);
                            } else if ("addSection" === e.mode) if (p.g.CURRENT_PAGE.addSectionForm) n.push(e); else {
                                const n = $("<a>").attr("href", e.addSectionLinkHref);
                                p.g.CURRENT_PAGE.addSectionForm = new ci({
                                    target: p.g.CURRENT_PAGE,
                                    mode: e.mode,
                                    $addSectionLink: n,
                                    dataToRestore: e
                                }), t = !0;
                            }
                        }), t && Ht(), n.length && Hn(n);
                    }(i), mw.notification.notify(p.s("restore-restored-text"), {
                        title: p.s("restore-restored-title")
                    }).$notification.on("click", () => {
                        gn.isMounted() && gn.goToNextCommentForm();
                    });
                }
            }
        } else {
            const e = [], t = t => {
                e.push({
                    headline: t.headlineInput && t.headlineInput.getValue(),
                    comment: t.commentInput.getValue(),
                    summary: t.summaryInput.getValue()
                });
            };
            p.commentForms.forEach(e => {
                e.checkCodeRequest = null;
                const n = e.target;
                if (n instanceof Ni) {
                    if (n.anchor) {
                        const i = Ni.getCommentByAnchor(n.anchor);
                        if (i && i.actionable) try {
                            e.setTargets(i), i[ci.modeToProperty(e.mode)](e), e.addToPage();
                        } catch (n) {
                            console.warn(n), t(e);
                        } else t(e);
                    }
                } else if (n instanceof Kn) {
                    const i = Kn.search({
                        headline: n.headline,
                        firstCommentAnchor: n.comments[0] && n.comments[0].anchor,
                        index: n.id
                    });
                    if (i && i.actionable) try {
                        e.setTargets(i), i[ci.modeToProperty(e.mode)](e), e.addToPage();
                    } catch (n) {
                        console.warn(n), t(e);
                    } else t(e);
                } else "addSection" === e.mode && (e.addToPage(), p.g.CURRENT_PAGE.addSectionForm = e);
            }), e.length && Hn(e);
        }
        var e;
        Ht(), gn.isMounted() && gn.updateCommentFormButton();
    }
    let Yt, $t, qt, Wt, Gt, Vt, zt, Kt = null, Xt = [], Jt = [], Qt = [], Zt = !1;
    function en(e) {
        p.g.worker.postMessage({
            type: "setAlarm",
            interval: e
        });
    }
    function tn() {
        p.g.worker.postMessage({
            type: "removeAlarm"
        });
    }
    function nn() {
        return on.apply(this, arguments);
    }
    function on() {
        return (on = o()((function*() {
            if (!p.g.worker) return;
            if (document.hidden && !Zt) {
                const e = () => {
                    $(document).off("visibilitychange", e), Zt = !1, tn(), nn();
                };
                return $(document).on("visibilitychange", e), en(1e3 * Math.abs(p.g.BACKGROUND_CHECK_FOR_NEW_COMMENTS_INTERVAL - p.g.CHECK_FOR_NEW_COMMENTS_INTERVAL)), 
                void (Zt = !0);
            }
            Zt = !1;
            const e = Xt.length ? Xt[Xt.length - 1] : mw.config.get("wgRevisionId");
            try {
                const t = yield ie({
                    action: "query",
                    titles: p.g.CURRENT_PAGE.name,
                    prop: "revisions",
                    rvprop: [ "ids", "flags", "size", "comment" ],
                    rvdir: "newer",
                    rvstartid: e,
                    rvlimit: 500,
                    redirects: !0,
                    formatversion: 2
                }).catch(Ie), n = t && t.query && t.query.pages && t.query.pages[0] && t.query.pages[0].revisions;
                if (!n) throw new l({
                    type: "api",
                    code: "noData"
                });
                const i = n.filter((e, t) => 0 !== t && !e.minor && Math.abs(e.size - n[t - 1].size) >= p.config.bytesToDeemComment && !Ae(e.comment)).map(e => e.revid);
                if (Xt.push(...i), Xt = _e(Xt), i.length) {
                    const {text: e} = (yield p.g.CURRENT_PAGE.parse({
                        noTimers: !0,
                        markAsRead: !1
                    })) || {};
                    void 0 === e ? console.error("No page text.") : p.g.worker.postMessage({
                        type: "parse",
                        text: e,
                        g: {
                            TIMESTAMP_REGEXP: p.g.TIMESTAMP_REGEXP,
                            TIMESTAMP_REGEXP_NO_TIMEZONE: p.g.TIMESTAMP_REGEXP_NO_TIMEZONE,
                            TIMESTAMP_PARSER: p.g.TIMESTAMP_PARSER.toString(),
                            TIMESTAMP_MATCHING_GROUPS: p.g.TIMESTAMP_MATCHING_GROUPS,
                            TIMEZONE_REGEXP: p.g.TIMEZONE_REGEXP,
                            DIGITS: p.g.DIGITS,
                            LOCAL_TIMEZONE_OFFSET: p.g.LOCAL_TIMEZONE_OFFSET,
                            MESSAGES: p.g.MESSAGES,
                            CONTRIBS_PAGE: p.g.CONTRIBS_PAGE,
                            CONTRIBS_PAGE_LINK_REGEXP: p.g.CONTRIBS_PAGE_LINK_REGEXP,
                            ARTICLE_PATH_REGEXP: p.g.ARTICLE_PATH_REGEXP,
                            USER_NAMESPACES_REGEXP: p.g.USER_NAMESPACES_REGEXP,
                            UNHIGHLIGHTABLE_ELEMENTS_CLASSES: p.g.UNHIGHLIGHTABLE_ELEMENTS_CLASSES,
                            CURRENT_USER_NAME: p.g.CURRENT_USER_NAME,
                            CURRENT_USER_GENDER: p.g.CURRENT_USER_GENDER,
                            CURRENT_PAGE_NAME: p.g.CURRENT_PAGE.name,
                            CURRENT_NAMESPACE_NUMBER: p.g.CURRENT_NAMESPACE_NUMBER
                        },
                        config: {
                            customFloatingElementsSelectors: p.config.customFloatingElementsSelectors,
                            closedDiscussionsClasses: p.config.closedDiscussionsClasses,
                            elementsToExcludeClasses: p.config.elementsToExcludeClasses,
                            signatureScanLimit: p.config.signatureScanLimit,
                            foreignElementsInHeadlinesClasses: p.config.foreignElementsInHeadlinesClasses,
                            checkForCustomForeignComponents: p.config.checkForCustomForeignComponents ? p.config.checkForCustomForeignComponents.toString() : p.config.checkForCustomForeignComponents
                        }
                    });
                }
            } catch (e) {
                console.warn(e);
            }
            document.hidden ? (en(1e3 * p.g.BACKGROUND_CHECK_FOR_NEW_COMMENTS_INTERVAL), Zt = !0) : en(1e3 * p.g.CHECK_FOR_NEW_COMMENTS_INTERVAL);
        }))).apply(this, arguments);
    }
    function sn(e, t) {
        const n = {};
        let i;
        e.forEach(e => {
            n[e.sectionAnchor] || (n[e.sectionAnchor] = []), n[e.sectionAnchor].push(e);
        }), e.length ? (i = "".concat(p.s("navpanel-newcomments-count", e.length), " ").concat(mw.msg("parentheses", "R")), 
        Object.keys(n).forEach(e => {
            const t = n[e][0].sectionHeadline ? p.s("navpanel-newcomments-insection", n[e][0].sectionHeadline) : mw.msg("parentheses", p.s("navpanel-newcomments-outsideofsections"));
            i += "\n\n".concat(t), n[e].forEach(e => {
                i += "\n";
                const t = e.targetCommentAuthor && e.level > 1 ? p.s("newpanel-newcomments-reply", e.author.name, e.targetCommentAuthor.name) : e.author.name, n = e.date ? p.util.formatDate(e.date) : p.s("navpanel-newcomments-unknowndate");
                i += t + mw.msg("comma-separator") + n;
            });
        })) : i = "".concat(p.s("navpanel-refresh"), " ").concat(mw.msg("parentheses", "R")), 
        qt.text(e.length ? "+".concat(e.length) : "").attr("title", i), t ? qt.addClass("cd-navPanel-refreshButton-interesting") : qt.removeClass("cd-navPanel-refreshButton-interesting");
    }
    function rn(e, t) {
        const n = t ? "*" : "", i = e ? "(".concat(e).concat(n, ") ") : "";
        document.title = document.title.replace(/^(?:\(\d+\*?\) )?/, i);
    }
    function an(e) {
        $(".cd-refreshButtonContainer").remove(), _e(e.map(e => e.sectionAnchor)).forEach(t => {
            const n = Kn.getSectionByAnchor(t);
            if (!n) return;
            const i = new OO.ui.ButtonWidget({
                label: p.s("section-newcomments"),
                framed: !1,
                classes: [ "cd-button", "cd-sectionButton" ]
            });
            i.on("click", () => {
                Dt({
                    commentAnchor: e.find(e => e.sectionAnchor === t).anchor
                });
            });
            const o = n.$replyButton ? n.$replyButton.closest("ul, ol") : n.$elements[n.$elements.length - 1];
            $("<div>").addClass("cd-refreshButtonContainer").addClass("cd-sectionButtonContainer").append(i.$element).insertAfter(o);
        });
    }
    function cn(e, t) {
        return un.apply(this, arguments);
    }
    function un() {
        return (un = o()((function*(e, t) {
            const n = e.filter(e => !Jt.some(t => t.anchor === e.anchor));
            let i = [];
            "all" === p.settings.desktopNotifications ? i = n : "toMe" === p.settings.desktopNotifications && (i = n.filter(e => e.toMe));
            let o = [];
            "all" === p.settings.notifications ? o = n : "toMe" === p.settings.notifications && (o = n.filter(e => e.toMe)), 
            "none" !== p.settings.notifications && o.length && Qt.slice().reverse().some(e => !e.notification.isOpen || (o.push(...e.comments), 
            !1));
            const s = _e(o.concat(i)).map(e => e.author).filter(ke);
            if (yield we(s, {
                noTimers: !0
            }), o.length) {
                let e, n;
                const i = p.commentForms.some(e => e.isAltered()) ? " " + mw.msg("parentheses", p.s("notification-formdata")) : "", s = p.s("notification-reload", n, i);
                if (1 === o.length) {
                    const t = o[0], i = p.g.CURRENT_PAGE.name + (t.anchor ? "#" + t.anchor : "");
                    if (n = mw.util.getUrl(i), t.toMe) {
                        const n = t.watchedSectionHeadline ? mw.msg("word-separator") + p.s("notification-part-insection", t.watchedSectionHeadline) : mw.msg("word-separator") + p.s("notification-part-onthispage");
                        e = p.s("notification-toyou", t.author.name, t.author, n) + " " + s;
                    } else e = p.s("notification-insection", t.author.name, t.author, t.watchedSectionHeadline) + " " + s;
                } else {
                    const i = o.every(e => e.watchedSectionHeadline === o[0].watchedSectionHeadline) ? o[0].watchedSectionHeadline : void 0, r = p.g.CURRENT_PAGE.name + (i ? "#" + i : "");
                    n = mw.util.getUrl(r);
                    const a = i ? mw.msg("word-separator") + p.s("notification-part-insection", i) : mw.msg("word-separator") + p.s("notification-part-onthispage");
                    let c = p.s("notification-newcomments-maybeinteresting");
                    c.startsWith(",") || (c = mw.msg("word-separator") + c);
                    const u = i && t.includes(i) ? "" : c;
                    e = p.s("notification-newcomments", o.length, a, u) + " " + s;
                }
                pn.closeAllNotifications();
                const r = Me(e, [ "cd-notification-reloadPage", e => {
                    e.preventDefault(), Dt({
                        commentAnchor: o[0].anchor
                    }), a.close();
                } ]), a = mw.notification.notify(r);
                Qt.push({
                    notification: a,
                    comments: o
                });
            }
            if (!document.hasFocus() && "granted" === Notification.permission && i.length) {
                let e, n = "convenient-discussions-";
                const o = i[0];
                if (1 === i.length) if (n += o.anchor, o.toMe) {
                    const t = o.sectionHeadline ? mw.msg("word-separator") + p.s("notification-part-insection", o.sectionHeadline) : "";
                    e = p.s("notification-toyou-desktop", o.author.name, o.author, t, p.g.CURRENT_PAGE.name);
                } else e = p.s("notification-insection-desktop", o.author.name, o.author, o.sectionHeadline, p.g.CURRENT_PAGE.name); else {
                    const o = i.every(e => e.watchedSectionHeadline === i[0].watchedSectionHeadline) ? i[0].watchedSectionHeadline : void 0, s = o ? mw.msg("word-separator") + p.s("notification-part-insection", o) : "";
                    let r = p.s("notification-newcomments-maybeinteresting");
                    r.startsWith(",") || (r = mw.msg("word-separator") + r);
                    const a = o && t.includes(o) ? "" : r;
                    e = p.s("notification-newcomments-desktop", i.length, s, p.g.CURRENT_PAGE.name, a), 
                    n += i[i.length - 1].anchor;
                }
                new Notification(mw.config.get("wgSiteName"), {
                    body: e,
                    tag: n
                }).onclick = () => {
                    parent.focus(), window.focus(), Dt({
                        commentAnchor: o.anchor
                    });
                };
            }
            Jt.push(...n);
        }))).apply(this, arguments);
    }
    function ln(e) {
        return dn.apply(this, arguments);
    }
    function dn() {
        return (dn = o()((function*(e) {
            let t;
            try {
                ({thisPageWatchedSections: t} = (yield Q(!0)) || {});
            } catch (e) {
                console.warn("Couldn't load the settings from the server.");
            }
            e.forEach(e => {
                e.author = b.getUser(e.authorName), delete e.authorName, e.targetCommentAuthorName && (e.targetCommentAuthor = b.getUser(e.targetCommentAuthorName), 
                delete e.targetCommentAuthorName);
            });
            const n = e.filter(e => e.anchor && !Ni.getCommentByAnchor(e.anchor)), i = n.filter(e => {
                if (e.own || p.settings.notificationsBlacklist.includes(e.author.name) || !t) return !1;
                if (e.toMe) return !0;
                const n = Kn.getSectionsByHeadline(e.sectionHeadline);
                for (const t of n) {
                    const n = t.getWatchedAncestor(!0);
                    if (n) return e.watchedSectionHeadline = n.headline, !0;
                }
            });
            i[0] ? Yt = i[0].anchor : n[0] && (Yt = n[0].anchor), sn(n, i.length), rn(n.length, i.length), 
            an(n), cn(i, t);
        }))).apply(this, arguments);
    }
    function hn(e) {
        return mn.apply(this, arguments);
    }
    function mn() {
        return (mn = o()((function*(e) {
            const t = e.data;
            if ("wakeUp" === t.type && nn(), "parse" === t.type) {
                const {comments: e} = t;
                ln(e);
            }
        }))).apply(this, arguments);
    }
    const pn = {
        mouseOverNavPanel: !1,
        mount() {
            var e = this;
            return o()((function*() {
                $t = $("<div>").attr("id", "cd-navPanel").on("mouseenter", () => {
                    e.isMouseOver = !0;
                }).on("mouseleave", () => {
                    e.isMouseOver = !1;
                }).appendTo(document.body), qt = $("<div>").addClass("cd-navPanel-button").attr("id", "cd-navPanel-refreshButton").attr("title", "".concat(p.s("navpanel-refresh"), " ").concat(mw.msg("parentheses", "R"))).on("click", () => {
                    e.refreshClick();
                }).appendTo($t), Wt = $("<div>").addClass("cd-navPanel-button").attr("id", "cd-navPanel-previousButton").attr("title", "".concat(p.s("navpanel-previous"), " ").concat(mw.msg("parentheses", "W"))).on("click", () => {
                    e.goToPreviousNewComment();
                }).hide().appendTo($t), Gt = $("<div>").addClass("cd-navPanel-button").attr("id", "cd-navPanel-nextButton").attr("title", "".concat(p.s("navpanel-next"), " ").concat(mw.msg("parentheses", "S"))).on("click", () => {
                    e.goToNextNewComment();
                }).hide().appendTo($t), Vt = $("<div>").addClass("cd-navPanel-button").attr("id", "cd-navPanel-firstUnseenButton").attr("title", "".concat(p.s("navpanel-firstunseen"), " ").concat(mw.msg("parentheses", "F"))).on("click", () => {
                    e.goToFirstUnseenComment();
                }).hide().appendTo($t), zt = $("<div>").addClass("cd-navPanel-button").attr("id", "cd-navPanel-commentFormButton").attr("title", p.s("navpanel-commentform")).on("click", () => {
                    e.goToNextCommentForm();
                }).hide().appendTo($t), p.g.worker && (p.g.worker.onmessage = hn, en(1e3 * p.g.CHECK_FOR_NEW_COMMENTS_INTERVAL));
            }))();
        },
        isMounted: () => Boolean($t),
        processVisits(e, t = []) {
            var n = this;
            return o()((function*() {
                let i, o;
                try {
                    ({visits: i, thisPageVisits: o} = yield e);
                } catch (e) {
                    return void console.warn("Couldn't load the settings from the server.", e);
                }
                p.g.visits = i, p.g.thisPageVisits = o;
                const s = Math.floor(Date.now() / 1e3);
                for (let e = o.length - 1; e >= 0; e--) if (o[e] < s - 60 * p.g.HIGHLIGHT_NEW_COMMENTS_INTERVAL) {
                    o.splice(0, e);
                    break;
                }
                if (o.length) {
                    const e = p.comments.filter(e => {
                        if (e.newness = null, !e.date) return !1;
                        const n = t.some(t => t === e.anchor), i = Math.floor(e.date.getTime() / 1e3);
                        return i > o[0] && (e.newness = i > o[o.length - 1] && !e.own || n ? "unseen" : "new", 
                        !0);
                    });
                    Ni.configureAndAddLayers(e);
                }
                o.push(String(s)), X(i), n.fill(), n.registerSeenComments(), mw.hook("convenientDiscussions.newCommentsMarked").fire(p);
            }))();
        },
        reset() {
            Kt = null, Xt = [], Jt = [], Yt = null, tn(), en(1e3 * p.g.CHECK_FOR_NEW_COMMENTS_INTERVAL), 
            Zt = !1, qt.empty().attr("title", "".concat(p.s("navpanel-refresh"), " ").concat(mw.msg("parentheses", "R"))), 
            Wt.hide(), Gt.hide(), Vt.hide(), zt.hide();
        },
        fill() {
            Lt = p.comments.filter(e => e.newness).length, Ft = p.comments.filter(e => "unseen" === e.newness).length, 
            Lt && (Gt.show(), Wt.show(), Ft && (Vt.show(), this.updateFirstUnseenButton()));
        },
        areAllCommentsSeen: () => 0 === Ft,
        decrementUnseenCommentCount() {
            Ft--;
        },
        updateFirstUnseenButton() {
            Ft ? Vt.text(Ft) : Vt.hide();
        },
        refreshClick() {
            Dt({
                commentAnchor: Yt
            });
        },
        closeAllNotifications() {
            Qt.forEach(e => {
                e.notification.$notification.hide(), e.notification.close();
            }), Qt = [];
        },
        goToPreviousNewComment() {
            if (p.g.autoScrollInProgress) return;
            const e = Ni.findInViewport("backward");
            if (!e) return;
            const t = Oe(p.comments, e.id, !0).find(e => e.newness && !1 === e.isInViewport(!0));
            t && t.$elements.cdScrollTo("center", !0, () => {
                t.registerSeen("backward", !0), this.updateFirstUnseenButton();
            });
        },
        goToNextNewComment() {
            if (p.g.autoScrollInProgress) return;
            const e = Ni.findInViewport("forward");
            if (!e) return;
            const t = Oe(p.comments, e.id).find(e => e.newness && !1 === e.isInViewport(!0));
            t && t.$elements.cdScrollTo("center", !0, () => {
                t.registerSeen("forward", !0), this.updateFirstUnseenButton();
            });
        },
        goToFirstUnseenComment() {
            if (!p.g.autoScrollInProgress && Ft) {
                const e = p.comments.slice(Kt || 0).find(e => "unseen" === e.newness);
                e && (e.$elements.cdScrollTo("center", !0, () => {
                    e.registerSeen("forward", !0), this.updateFirstUnseenButton();
                }), Kt = e.id);
            }
        },
        goToNextCommentForm() {
            const e = p.commentForms.filter(e => !e.$element.cdIsInViewport(!0)).sort((e, t) => {
                const n = e.$element.get(0).getBoundingClientRect().top, i = t.$element.get(0).getBoundingClientRect().top;
                return i > 0 && n < 0 || n > i ? 1 : n > 0 && i < 0 || i > n ? -1 : 0;
            })[0];
            e && (e.$element.cdScrollIntoView("center"), e.commentInput.focus());
        },
        registerSeenComments() {
            !Ft || p.g.dontHandleScroll || p.g.autoScrollInProgress || (p.g.dontHandleScroll = !0, 
            setTimeout(() => {
                p.g.dontHandleScroll = !1;
                const e = Ni.findInViewport();
                if (!e) return;
                const t = e => {
                    const t = e.isInViewport(!0);
                    if (t) e.registerSeen(); else if (!1 === t) return !0;
                };
                p.comments.slice(0, e.id).reverse().some(t), p.comments.slice(e.id).some(t), this.updateFirstUnseenButton();
            }, 300));
        },
        updateCommentFormButton() {
            p.g.autoScrollInProgress || (p.commentForms.some(e => !e.$element.cdIsInViewport(!0)) ? zt.show() : zt.hide());
        }
    };
    var gn = pn;
    const fn = {};
    function bn() {
        Ve.redrawIfNecessary(!0), gn.isMounted() && gn.updateCommentFormButton(), p.commentForms.forEach(e => {
            e.adjustLabels();
        });
    }
    function yn(e, t) {
        fn[e] = e => {
            if (t()) return e.preventDefault(), e.returnValue = "", "";
        }, $(window).on("beforeunload", fn[e]);
    }
    function wn(e) {
        fn[e] && $(window).off("beforeunload", fn[e]);
    }
    function En(e) {
        if (!p.util.isPageOverlayOn()) {
            if (e.ctrlKey && !e.shiftKey && e.altKey && 81 === e.keyCode || !e.ctrlKey && !e.shiftKey && !e.altKey && 81 === e.keyCode && !De()) {
                e.preventDefault();
                const t = ci.getLastActiveCommentForm();
                t && t.quote(!e.ctrlKey);
            }
            gn.isMounted() && (e.ctrlKey || e.shiftKey || e.altKey || 82 !== e.keyCode || De() || gn.refreshClick(), 
            e.ctrlKey || e.shiftKey || e.altKey || 87 !== e.keyCode || De() || gn.goToPreviousNewComment(), 
            e.ctrlKey || e.shiftKey || e.altKey || 83 !== e.keyCode || De() || gn.goToNextNewComment(), 
            e.ctrlKey || e.shiftKey || e.altKey || 70 !== e.keyCode || De() || gn.goToFirstUnseenComment());
        }
    }
    function vn(e) {
        if (p.util.isPageOverlayOn() || p.g.dontHandleScroll || p.g.autoScrollInProgress) return;
        const t = p.g.rootElement.getBoundingClientRect().left;
        e.pageX < t - p.g.COMMENT_UNDERLAY_SIDE_MARGIN ? Ve.underlays.filter(e => e.classList.contains("cd-commentUnderlay-focused")).forEach(e => {
            e.cdTarget.unhighlightFocused();
        }) : p.comments.filter(e => e.$underlay).forEach(t => {
            const n = t.$underlay.get(0);
            if (!n.classList.contains("cd-commentUnderlay")) return;
            const i = Number(n.style.top.replace("px", "")), o = Number(n.style.left.replace("px", "")), s = Number(n.style.width.replace("px", "")), r = Number(n.style.height.replace("px", "")), a = t.getLayersContainerOffset();
            !gn.isMouseOver && e.pageY >= i + a.top && e.pageY <= i + r + a.top && e.pageX >= o + a.left && e.pageX <= o + s + a.left ? n.classList.contains("cd-commentUnderlay-focused") || n.cdTarget.highlightFocused() : n.classList.contains("cd-commentUnderlay-focused") && n.cdTarget.unhighlightFocused();
        });
    }
    function _n({value: e, selected: t, label: n, help: i, tabIndex: o, title: s}) {
        const r = new OO.ui.CheckboxInputWidget({
            value: e,
            selected: t,
            tabIndex: o
        });
        return [ new OO.ui.FieldLayout(r, {
            label: n,
            align: "inline",
            help: i,
            helpInline: !0,
            title: s
        }), r ];
    }
    function Cn({label: e, selected: t, help: n, options: i}) {
        const o = i.map(e => new OO.ui.RadioOptionWidget(e)), s = new OO.ui.RadioSelectWidget({
            items: o
        }), r = new OO.ui.FieldLayout(s, {
            label: e,
            align: "top",
            help: n,
            helpInline: !0
        });
        return s.selectItemByData(t), [ r, s, ...o ];
    }
    function xn() {
        p.g.windowManager || (p.g.windowManager = (new OO.ui.WindowManager).on("closing", function() {
            var e = o()((function*(e, t) {
                yield t, p.g.windowManager.clearWindows();
            }));
            return function(t, n) {
                return e.apply(this, arguments);
            };
        }()), $(document.body).append(p.g.windowManager.$element));
    }
    function Tn(e) {
        return An.apply(this, arguments);
    }
    function An() {
        return (An = o()((function*(e, t = {}) {
            const n = {
                message: e,
                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"
                } ]
            }, i = new OO.ui.MessageDialog;
            p.g.windowManager.addWindows([ i ]);
            const o = p.g.windowManager.openWindow(i, Object.assign({}, n, t)), s = yield o.closed;
            return s && s.action;
        }))).apply(this, arguments);
    }
    function Sn(e, t = {}) {
        const n = {
            actions: [ {
                label: p.s("".concat(e, "-yes")),
                action: "accept",
                flags: [ "primary", "destructive" ]
            }, {
                label: p.s("".concat(e, "-no")),
                action: "reject",
                flags: "safe"
            } ]
        };
        return OO.ui.confirm(p.s(e), Object.assign({}, n, t));
    }
    function kn(e) {
        const t = e.findSelectedItem();
        return t && t.getData();
    }
    function Nn(e) {
        const t = e.actions.get({
            actions: "save"
        })[0];
        return t && !t.isDisabled();
    }
    function On(e, t) {
        return In.apply(this, arguments);
    }
    function In() {
        return (In = o()((function*(e, t) {
            Nn(e) && !(yield Sn("".concat(t, "-close-confirm"))) || (e.close({
                action: "close"
            }), wn("dialog"));
        }))).apply(this, arguments);
    }
    function Pn(e, t, n, i) {
        t instanceof l ? e.showErrors(new OO.ui.Error(p.s(n), {
            recoverable: i
        })) : e.showErrors(new OO.ui.Error(p.s("error-javascript"), {
            recoverable: !1
        })), console.warn(t), i || e.$errors.find(".oo-ui-buttonElement-button").on("click", () => {
            e.close();
        }), e.actions.setAbilities({
            close: !0
        }), p.g.windowManager.updateWindowSize(e), e.popPending();
    }
    function Ln() {
        return Fn.apply(this, arguments);
    }
    function Fn() {
        return (Fn = o()((function*() {
            if (p.util.isPageOverlayOn()) return;
            function e() {
                e.parent.call(this);
            }
            OO.inheritClass(e, OO.ui.ProcessDialog), e.static.name = "settingsDialog", e.static.title = p.s("sd-title"), 
            e.static.actions = [ {
                action: "close",
                modes: [ "settings", "reload", "dataRemoved" ],
                flags: [ "safe", "close" ],
                disabled: !0
            }, {
                action: "save",
                modes: [ "settings" ],
                label: p.s("sd-save"),
                flags: [ "primary", "progressive" ],
                disabled: !0
            }, {
                action: "reset",
                modes: [ "settings" ],
                label: p.s("sd-reset"),
                flags: [ "destructive" ],
                disabled: !0
            }, {
                action: "reload",
                modes: [ "reload" ],
                label: p.s("sd-reload"),
                flags: [ "primary", "progressive" ]
            } ], e.static.size = "large", e.prototype.getBodyHeight = function() {
                return 600;
            }, e.prototype.initialize = o()((function*() {
                e.parent.prototype.initialize.apply(this, arguments), this.pushPending();
                const t = $("<div>").text(p.s("loading-ellipsis"));
                this.loadingPanel = new OO.ui.PanelLayout({
                    padded: !0,
                    expanded: !1
                }), this.loadingPanel.$element.append(t), this.settingsPanel = new OO.ui.PanelLayout({
                    padded: !1,
                    expanded: !0
                });
                const n = $("<p>").html(p.s("sd-saved"));
                this.reloadPanel = new OO.ui.PanelLayout({
                    padded: !0,
                    expanded: !1
                }), this.reloadPanel.$element.append(n);
                const i = $("<p>").html(p.s("sd-dataremoved"));
                this.dataRemovedPanel = new OO.ui.PanelLayout({
                    padded: !0,
                    expanded: !1
                }), this.dataRemovedPanel.$element.append(i), this.stackLayout = new OO.ui.StackLayout({
                    items: [ this.loadingPanel, this.settingsPanel, this.reloadPanel, this.dataRemovedPanel ]
                }), this.$body.append(this.stackLayout.$element);
            })), e.prototype.getSetupProcess = function(t) {
                return e.parent.prototype.getSetupProcess.call(this, t).next(() => {
                    this.stackLayout.setItem(this.loadingPanel), this.actions.setMode("settings");
                });
            }, e.prototype.getReadyProcess = function(i) {
                var s = this;
                return e.parent.prototype.getReadyProcess.call(this, i).next(o()((function*() {
                    let e;
                    try {
                        [e] = yield Promise.all(t);
                    } catch (e) {
                        return void Pn(s, e, "error-settings-load", !1);
                    }
                    s.settings = Object.assign({}, p.settings, e), p.g.settingsForm = s, s.renderForm(s.settings), 
                    s.stackLayout.setItem(s.settingsPanel), s.bookletLayout.setPage("general"), s.actions.setAbilities({
                        close: !0
                    }), p.g.windowManager.updateWindowSize(s), s.popPending(), yn("dialog", () => Nn(n));
                })));
            }, e.prototype.getActionProcess = function(t) {
                var n = this;
                return "save" === t ? new OO.ui.Process(o()((function*() {
                    n.pushPending();
                    const e = {};
                    e.allowEditOthersComments = n.allowEditOthersCommentsCheckbox.isSelected(), e.alwaysExpandSettings = n.alwaysExpandSettingsCheckbox.isSelected(), 
                    e.autopreview = n.autopreviewCheckbox.isSelected(), e.desktopNotifications = kn(n.desktopNotificationsSelect) || "unknown", 
                    e.defaultCommentLinkType = kn(n.defaultCommentLinkTypeSelect), e.defaultSectionLinkType = kn(n.defaultSectionLinkTypeSelect), 
                    e.highlightOwnComments = n.highlightOwnCommentsCheckbox.isSelected(), e.insertButtons = n.processInsertButtons(), 
                    e.notifications = kn(n.notificationsSelect), e.notificationsBlacklist = n.notificationsBlacklistMultiselect.getValue(), 
                    e.showToolbar = n.showToolbarCheckbox.isSelected(), e.signaturePrefix = n.signaturePrefixInput.getValue(), 
                    e.watchOnReply = n.watchOnReplyCheckbox.isSelected(), e.watchSectionOnReply = n.watchSectionOnReplyCheckbox.isSelected(), 
                    e.insertButtonsChanged = JSON.stringify(e.insertButtons) !== JSON.stringify(p.defaultSettings.insertButtons);
                    try {
                        yield W(e);
                    } catch (e) {
                        return void Pn(n, e, "error-settings-save", !0);
                    }
                    n.stackLayout.setItem(n.reloadPanel), n.actions.setMode("reload"), n.popPending();
                }))) : "reload" === t ? new OO.ui.Process(() => {
                    this.close({
                        action: t
                    }), location.reload();
                }) : "close" === t ? new OO.ui.Process(o()((function*() {
                    yield On(n, "sd");
                }))) : "reset" === t ? new OO.ui.Process(o()((function*() {
                    (yield OO.ui.confirm(p.s("sd-reset-confirm"))) && n.renderForm(p.defaultSettings);
                }))) : e.parent.prototype.getActionProcess.call(this, t);
            }, e.prototype.renderForm = function(e) {
                [this.allowEditOthersCommentsField, this.allowEditOthersCommentsCheckbox] = _n({
                    value: "allowEditOthersComments",
                    selected: e.allowEditOthersComments,
                    label: p.s("sd-alloweditotherscomments")
                }), [this.alwaysExpandSettingsField, this.alwaysExpandSettingsCheckbox] = _n({
                    value: "alwaysExpandSettings",
                    selected: e.alwaysExpandSettings,
                    label: p.s("sd-alwaysexpandsettings")
                }), [this.autopreviewField, this.autopreviewCheckbox] = _n({
                    value: "autopreview",
                    selected: e.autopreview,
                    label: p.s("sd-autopreview")
                }), [this.desktopNotificationsField, this.desktopNotificationsSelect, this.desktopNotificationsRadioAll, this.desktopNotificationsRadioNone, this.desktopNotificationsRadioToMe] = Cn({
                    options: [ {
                        label: p.s("sd-desktopnotifications-radio-all"),
                        data: "all"
                    }, {
                        label: p.s("sd-desktopnotifications-radio-tome"),
                        data: "toMe"
                    }, {
                        label: p.s("sd-desktopnotifications-radio-none"),
                        data: "none"
                    } ],
                    selected: e.desktopNotifications,
                    label: p.s("sd-desktopnotifications"),
                    help: p.s("sd-desktopnotifications-help", location.host)
                });
                let t = p.s("sd-defaultcommentlinktype-help") + " " + p.s("sd-defaultcommentlinktype-help-notdifflinks");
                [this.defaultCommentLinkTypeField, this.defaultCommentLinkTypeSelect, this.defaultCommentLinkTypeRadioWikilink, this.defaultCommentLinkTypeRadioLink] = Cn({
                    options: [ {
                        label: p.s("sd-defaultcommentlinktype-radio-diff"),
                        data: "diff"
                    }, {
                        label: p.s("sd-defaultcommentlinktype-radio-wikilink"),
                        data: "wikilink"
                    }, {
                        label: p.s("sd-defaultcommentlinktype-radio-link"),
                        data: "link"
                    } ],
                    selected: e.defaultCommentLinkType,
                    label: p.s("sd-defaultcommentlinktype", p.s("cm-copylink")),
                    help: t
                }), [this.defaultSectionLinkTypeField, this.defaultSectionLinkTypeSelect, this.defaultSectionLinkTypeRadioWikilink, this.defaultSectionLinkTypeRadioLink] = Cn({
                    options: [ {
                        label: p.s("sd-defaultsectionlinktype-radio-wikilink"),
                        data: "wikilink"
                    }, {
                        label: p.s("sd-defaultsectionlinktype-radio-link"),
                        data: "link"
                    } ],
                    selected: e.defaultSectionLinkType,
                    label: p.s("sd-defaultsectionlinktype"),
                    help: p.s("sd-defaultsectionlinktype-help")
                }), [this.highlightOwnCommentsField, this.highlightOwnCommentsCheckbox] = _n({
                    value: "highlightOwnComments",
                    selected: e.highlightOwnComments,
                    label: p.s("sd-highlightowncomments")
                });
                const i = e.insertButtons.map(e => Array.isArray(e) ? e.join(";") : e);
                function o(e, t) {
                    o.super.call(this, e, t), this.$element.append(n.highlightOwnCommentsField.$element, n.allowEditOthersCommentsField.$element, n.defaultCommentLinkTypeField.$element, n.defaultSectionLinkTypeField.$element);
                }
                function s(e, t) {
                    s.super.call(this, e, t), this.$element.append(n.autopreviewField.$element, n.watchSectionOnReplyField.$element, n.watchOnReplyField.$element, n.showToolbarField.$element, n.alwaysExpandSettingsField.$element, n.insertButtonsField.$element, n.signaturePrefixField.$element);
                }
                function r(e, t) {
                    r.super.call(this, e, t), this.$element.append(n.notificationsField.$element, n.desktopNotificationsField.$element, n.notificationsBlacklistField.$element);
                }
                function a(e, t) {
                    a.super.call(this, e, t), this.$element.append(n.removeDataField.$element);
                }
                this.insertButtonsMultiselect = new OO.ui.TagMultiselectWidget({
                    placeholder: p.s("sd-insertbuttons-multiselect-placeholder"),
                    allowArbitrary: !0,
                    inputPosition: "outline",
                    tagLimit: 100,
                    selected: i
                }), this.insertButtonsField = new OO.ui.FieldLayout(this.insertButtonsMultiselect, {
                    label: p.s("sd-insertbuttons"),
                    align: "top",
                    help: p.util.wrapInElement(p.s("sd-insertbuttons-help") + " " + p.s("sd-localsetting")),
                    helpInline: !0
                }), [this.notificationsField, this.notificationsSelect, this.notificationsRadioAll, this.notificationsRadioNone, this.notificationsRadioToMe] = Cn({
                    options: [ {
                        label: p.s("sd-notifications-radio-all"),
                        data: "all"
                    }, {
                        label: p.s("sd-notifications-radio-tome"),
                        data: "toMe"
                    }, {
                        label: p.s("sd-notifications-radio-none"),
                        data: "none"
                    } ],
                    selected: e.notifications,
                    label: p.s("sd-notifications"),
                    help: p.s("sd-notifications-help")
                }), this.notificationsBlacklistMultiselect = new mw.widgets.UsersMultiselectWidget({
                    placeholder: p.s("sd-notificationsblacklist-multiselect-placeholder"),
                    tagLimit: 100,
                    selected: e.notificationsBlacklist
                }), this.notificationsBlacklistField = new OO.ui.FieldLayout(this.notificationsBlacklistMultiselect, {
                    label: p.s("sd-notificationsblacklist"),
                    align: "top"
                }), [this.showToolbarField, this.showToolbarCheckbox] = _n({
                    value: "showToolbar",
                    selected: e.showToolbar,
                    label: p.s("sd-showtoolbar")
                }), this.signaturePrefixInput = new OO.ui.TextInputWidget({
                    value: e.signaturePrefix,
                    maxlength: 100
                }), this.signaturePrefixField = new OO.ui.FieldLayout(this.signaturePrefixInput, {
                    label: p.s("sd-signatureprefix"),
                    align: "top",
                    help: p.util.wrapInElement(p.s("sd-signatureprefix-help")),
                    helpInline: !0
                }), [this.watchOnReplyField, this.watchOnReplyCheckbox] = _n({
                    value: "watchOnReply",
                    selected: e.watchOnReply,
                    label: p.s("sd-watchonreply")
                }), [this.watchSectionOnReplyField, this.watchSectionOnReplyCheckbox] = _n({
                    value: "watchSectionOnReply",
                    selected: e.watchSectionOnReply,
                    label: p.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.notificationsSelect.connect(this, {
                    select: "updateActionsAvailability"
                }), this.notificationsBlacklistMultiselect.connect(this, {
                    change: "updateActionsAvailability"
                }), this.showToolbarCheckbox.connect(this, {
                    change: "updateActionsAvailability"
                }), this.signaturePrefixInput.connect(this, {
                    change: "updateActionsAvailability"
                }), this.watchSectionOnReplyCheckbox.connect(this, {
                    change: "updateActionsAvailability"
                }), this.watchOnReplyCheckbox.connect(this, {
                    change: "updateActionsAvailability"
                }), this.removeDataButton = new OO.ui.ButtonInputWidget({
                    label: p.s("sd-removedata"),
                    flags: [ "destructive" ]
                }), this.removeDataButton.connect(this, {
                    click: "removeData"
                }), this.removeDataField = new OO.ui.FieldLayout(this.removeDataButton, {
                    label: p.util.wrapInElement(p.s("sd-removedata-description")),
                    align: "top",
                    help: p.util.wrapInElement(p.s("sd-removedata-help")),
                    helpInline: !0
                }), OO.inheritClass(o, OO.ui.PageLayout), o.prototype.setupOutlineItem = function(e) {
                    o.super.prototype.setupOutlineItem.call(this, e), this.outlineItem.setLabel(p.s("sd-page-talkpage"));
                }, OO.inheritClass(s, OO.ui.PageLayout), s.prototype.setupOutlineItem = function() {
                    this.outlineItem.setLabel(p.s("sd-page-commentform"));
                }, OO.inheritClass(r, OO.ui.PageLayout), r.prototype.setupOutlineItem = function() {
                    this.outlineItem.setLabel(p.s("sd-page-notifications"));
                }, OO.inheritClass(a, OO.ui.PageLayout), a.prototype.setupOutlineItem = function() {
                    this.outlineItem.setLabel(p.s("sd-page-dataremoval"));
                };
                const c = new o("general"), u = new s("commentForm"), l = new r("notifications"), d = new a("removeData");
                this.bookletLayout = new OO.ui.BookletLayout({
                    outlined: !0
                }), this.bookletLayout.addPages([ c, u, l, d ]), this.settingsPanel.$element.empty().append(this.bookletLayout.$element), 
                this.updateActionsAvailability();
            }, e.prototype.processInsertButtons = function() {
                return this.insertButtonsMultiselect.getValue().map(e => {
                    const t = [];
                    e = He(e, /\\[+;\\]/g, t);
                    let [, n, i] = e.match(/^(.*?)(?:;(.+))?$/) || [];
                    if (n && n.replace(/^ +$/, "")) return n = Ue(n, t), i = i && Ue(i, t), [ n, i ].filter(ke);
                }).filter(ke);
            }, e.prototype.updateActionsAvailability = o()((function*() {
                const e = JSON.stringify(this.processInsertButtons());
                this.insertButtonsMultiselect.toggleValid(e.length <= 1e4);
                const t = JSON.stringify(this.notificationsBlacklistMultiselect.getValue());
                this.notificationsBlacklistMultiselect.toggleValid(t.length <= 1e4);
                const n = kn(this.desktopNotificationsSelect) || "unknown", i = kn(this.defaultCommentLinkTypeSelect), o = kn(this.defaultSectionLinkTypeSelect), s = kn(this.notificationsSelect);
                let r = e !== JSON.stringify(this.settings.insertButtons) || this.allowEditOthersCommentsCheckbox.isSelected() !== this.settings.allowEditOthersComments || this.alwaysExpandSettingsCheckbox.isSelected() !== this.settings.alwaysExpandSettings || this.autopreviewCheckbox.isSelected() !== this.settings.autopreview || n !== this.settings.desktopNotifications || i !== this.settings.defaultCommentLinkType || o !== this.settings.defaultSectionLinkType || this.highlightOwnCommentsCheckbox.isSelected() !== this.settings.highlightOwnComments || s !== this.settings.notifications || t !== JSON.stringify(this.settings.notificationsBlacklist) || this.showToolbarCheckbox.isSelected() !== this.settings.showToolbar || this.signaturePrefixInput.getValue() !== this.settings.signaturePrefix || this.watchOnReplyCheckbox.isSelected() !== this.settings.watchOnReply || this.watchSectionOnReplyCheckbox.isSelected() !== this.settings.watchSectionOnReply;
                r = r && this.insertButtonsMultiselect.isValid();
                try {
                    yield this.signaturePrefixInput.getValidity();
                } catch (e) {
                    r = !1;
                }
                const a = this.allowEditOthersCommentsCheckbox.isSelected() !== p.defaultSettings.allowEditOthersComments || this.alwaysExpandSettingsCheckbox.isSelected() !== p.defaultSettings.alwaysExpandSettings || this.autopreviewCheckbox.isSelected() !== p.defaultSettings.autopreview || n !== p.defaultSettings.desktopNotifications || i !== p.defaultSettings.defaultCommentLinkType || o !== p.defaultSettings.defaultSectionLinkType || this.highlightOwnCommentsCheckbox.isSelected() !== p.defaultSettings.highlightOwnComments || e !== JSON.stringify(p.defaultSettings.insertButtons) || s !== p.defaultSettings.notifications || t !== JSON.stringify(p.defaultSettings.notificationsBlacklist) || this.showToolbarCheckbox.isSelected() !== p.defaultSettings.showToolbar || this.signaturePrefixInput.getValue() !== p.defaultSettings.signaturePrefix || this.watchOnReplyCheckbox.isSelected() !== p.defaultSettings.watchOnReply || this.watchSectionOnReplyCheckbox.isSelected() !== p.defaultSettings.watchSectionOnReply;
                this.actions.setAbilities({
                    save: r,
                    reset: a
                });
            })), e.prototype.changeDesktopNotifications = function(e) {
                "none" !== e.data && "granted" !== Notification.permission && (OO.ui.alert(p.s("dn-grantpermission")), 
                Notification.requestPermission(e => {
                    "granted" !== e && this.desktopNotificationsSelect.selectItemByData("none");
                }));
            }, e.prototype.removeData = o()((function*() {
                if (yield Sn("sd-removedata-confirm", {
                    size: "medium"
                })) {
                    this.pushPending();
                    try {
                        yield Promise.all([ ge(p.g.LOCAL_SETTINGS_OPTION_FULL_NAME, null), ge(p.g.VISITS_OPTION_FULL_NAME, null), ge(p.g.WATCHED_SECTIONS_OPTION_FULL_NAME, null), be(p.g.SETTINGS_OPTION_FULL_NAME, null) ]);
                    } catch (e) {
                        return void Pn(this, e, "sd-error-removedata", !1);
                    }
                    localStorage.removeItem("convenientDiscussions-commentForms"), this.stackLayout.setItem(this.dataRemovedPanel), 
                    this.actions.setMode("dataRemoved"), this.popPending();
                }
            }));
            const t = [ Y(), mw.loader.using("mediawiki.widgets.UsersMultiselectWidget") ];
            xn();
            const n = new e;
            p.g.windowManager.addWindows([ n ]), p.g.windowManager.openWindow(n);
        }))).apply(this, arguments);
    }
    function Mn() {
        return Rn.apply(this, arguments);
    }
    function Rn() {
        return (Rn = o()((function*() {
            if (p.util.isPageOverlayOn()) return;
            function e() {
                e.parent.call(this);
            }
            OO.inheritClass(e, OO.ui.ProcessDialog), e.static.name = "editWatchedSectionsDialog", 
            e.static.title = p.s("ewsd-title"), e.static.actions = [ {
                action: "close",
                modes: [ "edit", "saved" ],
                flags: [ "safe", "close" ],
                disabled: !0
            }, {
                action: "save",
                modes: [ "edit" ],
                label: p.s("ewsd-save"),
                flags: [ "primary", "progressive" ],
                disabled: !0
            } ], e.static.size = "large", e.prototype.getBodyHeight = function() {
                return this.$errorItems ? this.$errors[0].scrollHeight : this.$body[0].scrollHeight;
            }, e.prototype.initialize = o()((function*() {
                e.parent.prototype.initialize.apply(this, arguments), this.pushPending();
                const t = $("<div>").text(p.s("loading-ellipsis"));
                this.loadingPanel = new OO.ui.PanelLayout({
                    padded: !0,
                    expanded: !1
                }), this.loadingPanel.$element.append(t), this.sectionsPanel = new OO.ui.PanelLayout({
                    padded: !1,
                    expanded: !1
                });
                const n = $("<p>").html(p.s("ewsd-saved"));
                this.savedPanel = new OO.ui.PanelLayout({
                    padded: !0,
                    expanded: !1
                }), this.savedPanel.$element.append(n), this.stackLayout = new OO.ui.StackLayout({
                    items: [ this.loadingPanel, this.sectionsPanel, this.savedPanel ]
                }), this.$body.append(this.stackLayout.$element);
            })), e.prototype.getSetupProcess = function(t) {
                return e.parent.prototype.getSetupProcess.call(this, t).next(() => {
                    this.stackLayout.setItem(this.loadingPanel), this.actions.setMode("edit");
                });
            }, e.prototype.getReadyProcess = function(i) {
                var s = this;
                return e.parent.prototype.getReadyProcess.call(this, i).next(o()((function*() {
                    let e, i;
                    try {
                        ({watchedSections: e} = yield t), i = yield ue(Object.keys(e).filter(t => e[t].length));
                    } catch (e) {
                        return void Pn(s, e, "ewsd-error-processing", !1);
                    }
                    i.sort((e, t) => e.title > t.title ? 1 : -1);
                    const o = i.filter(e => e.title).map(t => e[t.pageid].map(e => "".concat(t.title, "#").concat(e)).join("\n")).join("\n");
                    s.input = new OO.ui.MultilineTextInputWidget({
                        value: o,
                        rows: 30,
                        classes: [ "cd-editWatchedSections-input" ]
                    }), s.input.on("change", e => {
                        s.actions.setAbilities({
                            save: e !== o
                        });
                    }), s.sectionsPanel.$element.append(s.input.$element), s.stackLayout.setItem(s.sectionsPanel), 
                    s.input.focus(), s.actions.setAbilities({
                        close: !0
                    }), n.$body.css("overflow", "hidden"), setTimeout(() => {
                        n.$body.css("overflow", "");
                    }, 500), p.g.windowManager.updateWindowSize(s), s.popPending(), yn("dialog", () => Nn(n));
                })));
            }, e.prototype.getActionProcess = function(t) {
                var n = this;
                return "save" === t ? new OO.ui.Process(o()((function*() {
                    n.pushPending();
                    const e = {}, t = [];
                    let i, o, s;
                    n.input.getValue().split("\n").forEach(n => {
                        const i = n.match(/^(.+?)#(.+)$/);
                        if (i) {
                            const n = i[1].trim(), o = i[2].trim();
                            e[n] || (e[n] = [], t.push(n)), e[n].push(o);
                        }
                    });
                    try {
                        ({normalized: i, redirects: o, pages: s} = (yield de(t)) || {});
                    } catch (e) {
                        return void Pn(n, e, "ewsd-error-processing", !0);
                    }
                    i.concat(o).filter(t => e[t.from]).forEach(t => {
                        e[t.to] || (e[t.to] = []), e[t.to].push(...e[t.from]), delete e[t.from];
                    });
                    const r = {};
                    s.filter(e => void 0 !== e.pageid).forEach(e => {
                        r[e.title] = e.pageid;
                    });
                    const a = {};
                    Object.keys(e).filter(e => r[e]).forEach(t => {
                        a[r[t]] = _e(e[t]);
                    });
                    try {
                        yield ee(a);
                    } catch (e) {
                        if (e instanceof l) {
                            const {type: t, code: i, apiData: o} = e.data;
                            "internal" === t && "sizeLimit" === i ? n.showErrors(new OO.ui.Error(p.s("ewsd-error-maxsize"), {
                                recoverable: !1
                            })) : n.showErrors(new OO.ui.Error(p.s("ewsd-error-processing"), {
                                recoverable: !0
                            })), console.warn(t, i, o);
                        } else n.showErrors(new OO.ui.Error(p.s("error-javascript"), {
                            recoverable: !1
                        })), console.warn(e);
                        return void n.popPending();
                    }
                    n.stackLayout.setItem(n.savedPanel), n.actions.setMode("saved"), n.popPending();
                }))) : "close" === t ? new OO.ui.Process(o()((function*() {
                    yield On(n, "ewsd");
                }))) : e.parent.prototype.getActionProcess.call(this, t);
            };
            const t = Q();
            xn();
            const n = new e;
            p.g.windowManager.addWindows([ n ]), p.g.windowManager.openWindow(n);
        }))).apply(this, arguments);
    }
    function Bn(e) {
        const t = $("<textarea>").val(e).appendTo(document.body).select(), n = document.execCommand("copy");
        t.remove(), n ? e.startsWith("http") ? mw.notify(p.util.wrapInElement(p.s("copylink-copied-url", e))) : mw.notify(p.s("copylink-copied")) : mw.notify(p.s("copylink-error"), {
            type: "error"
        });
    }
    function Dn(e, t, n) {
        return jn.apply(this, arguments);
    }
    function jn() {
        return (jn = o()((function*(e, t, n) {
            if (e.linkBeingCopied) return void (n && n());
            e.linkBeingCopied = !0;
            let i = e instanceof Ni ? e.anchor : Pe(e.anchor);
            i = F(i);
            const o = "[[".concat(p.g.CURRENT_PAGE.name, "#").concat(i, "]]");
            let s;
            try {
                s = decodeURI(p.g.CURRENT_PAGE.getUrl());
            } catch (t) {
                return console.error(t), e.linkBeingCopied = !1, void (n && n());
            }
            const r = Le(i), a = "https:".concat(mw.config.get("wgServer")).concat(s, "#").concat(r);
            if (t) {
                let t, n;
                if (e instanceof Ni) {
                    let i, o;
                    try {
                        o = i = yield e.getDiffLink(e);
                    } catch (e) {
                        if (e instanceof l) {
                            const {type: t} = e.data;
                            "api" === t ? o = p.s("cld-diff-error") : "network" === t && (o = p.s("cld-diff-error-network"));
                        } else o = p.s("cld-diff-error-unknown");
                    }
                    t = new OO.ui.TextInputWidget({
                        value: o || p.s("cld-diff-error"),
                        disabled: !i
                    });
                    const s = new OO.ui.ButtonWidget({
                        label: p.s("cld-copy"),
                        icon: "articles",
                        disabled: !i
                    });
                    s.on("click", () => {
                        Bn(t.getValue()), w.close();
                    }), n = new OO.ui.ActionFieldLayout(t, s, {
                        align: "top",
                        label: p.s("cld-diff")
                    });
                }
                const s = e instanceof Ni ? p.s("cld-help-onlycd") : void 0, r = new OO.ui.TextInputWidget({
                    value: o
                }), c = new OO.ui.ButtonWidget({
                    label: p.s("cld-copy"),
                    icon: "articles"
                });
                c.on("click", () => {
                    Bn(r.getValue()), w.close();
                });
                const u = new OO.ui.ActionFieldLayout(r, c, {
                    align: "top",
                    label: p.s("cld-wikilink"),
                    help: s,
                    helpInline: !0
                }), d = new OO.ui.TextInputWidget({
                    value: "[[#".concat(i, "]]")
                }), h = new OO.ui.ButtonWidget({
                    label: p.s("cld-copy"),
                    icon: "articles"
                });
                h.on("click", () => {
                    Bn(d.getValue()), w.close();
                });
                const m = new OO.ui.ActionFieldLayout(d, h, {
                    align: "top",
                    label: p.s("cld-currentpagewikilink")
                }), g = new OO.ui.TextInputWidget({
                    value: a
                }), f = new OO.ui.ButtonWidget({
                    label: p.s("cld-copy"),
                    icon: "articles"
                });
                f.on("click", () => {
                    Bn(g.getValue()), w.close();
                });
                const b = new OO.ui.ActionFieldLayout(g, f, {
                    align: "top",
                    label: p.s("cld-link"),
                    help: s,
                    helpInline: !0
                }), y = $("<div>").append(n && n.$element).append(u.$element).append(m.$element).append(b.$element), w = new OO.ui.MessageDialog;
                p.g.windowManager.addWindows([ w ]), p.g.windowManager.openWindow(w, {
                    message: y,
                    actions: [ {
                        label: p.s("cld-close"),
                        action: "close"
                    } ],
                    size: "large"
                }).closed.then(() => {
                    e.linkBeingCopied = !1;
                });
            } else {
                let t;
                switch (p.settings[e instanceof Ni ? "defaultCommentLinkType" : "defaultSectionLinkType"]) {
                  case "diff":
                    if (!(e instanceof Ni)) {
                        t = o;
                        break;
                    }
                    try {
                        t = yield e.getDiffLink(e);
                    } catch (t) {
                        let i = p.s("error-diffnotfound");
                        if (t instanceof l) {
                            const {type: e} = t.data;
                            if ("network" === e) i += " " + p.s("error-network"); else {
                                const e = this.sourcePage.getUrl({
                                    action: "history"
                                });
                                i += " " + p.s("error-diffnotfound-history", e);
                            }
                        } else i += " " + p.s("error-unknown");
                        return mw.notify(p.util.wrapInElement(i), {
                            type: "error"
                        }), e.linkBeingCopied = !1, void (n && n());
                    }
                    break;

                  case "link":
                    t = a;
                    break;

                  default:
                    t = o;
                }
                Bn(t), e.linkBeingCopied = !1;
            }
            n && n();
        }))).apply(this, arguments);
    }
    function Hn(e) {
        const t = e.map(e => {
            let t = void 0 !== e.headline ? "".concat(p.s("rd-headline"), ": ").concat(e.headline, "\n\n") : "";
            return t += "".concat(p.s("rd-comment"), ": ").concat(e.comment, "\n\n").concat(p.s("rd-summary"), ": ").concat(e.summary), 
            t;
        }).join("\n\n----\n"), n = new OO.ui.MultilineTextInputWidget({
            value: t,
            rows: 20
        }), i = new OO.ui.FieldLayout(n, {
            align: "top",
            label: p.s("rd-intro")
        }), o = new OO.ui.MessageDialog;
        p.g.windowManager.addWindows([ o ]), p.g.windowManager.openWindow(o, {
            message: i.$element,
            actions: [ {
                label: p.s("rd-close"),
                action: "close"
            } ],
            size: "large"
        });
    }
    function Un(e, t) {
        return Yn.apply(this, arguments);
    }
    function Yn() {
        return (Yn = o()((function*(e, t) {
            const n = $("<span>").addClass("cd-destructiveText").html(t ? p.s("deadanchor-comment-title") : p.s("deadanchor-section-title"));
            let i = t ? p.s("deadanchor-comment-text") : p.s("deadanchor-section-text");
            if (!p.g.PAGES_WITHOUT_ARCHIVES_REGEXP || !p.g.PAGES_WITHOUT_ARCHIVES_REGEXP.test(p.g.CURRENT_PAGE.name)) {
                if (i += " " + p.s("deadanchor-searchinarchive"), yield OO.ui.confirm(i, {
                    title: n
                })) {
                    let n;
                    n = t ? p.util.formatDate(t) : e.replace(/_/g, " ").replace(/"/g, "").trim();
                    const i = Pe(mw.config.get("wgPageName")), o = p.config.getArchivePrefix ? p.config.getArchivePrefix(i) : i, s = '"'.concat(n, '" prefix:').concat(o), r = mw.util.getUrl("Special:Search", {
                        profile: "default",
                        fulltext: "Search",
                        search: s
                    });
                    location.assign(mw.config.get("wgServer") + r);
                }
            } else OO.ui.alert(i, {
                title: n
            });
        }))).apply(this, arguments);
    }
    var $n = new WeakMap, qn = new WeakMap, Wn = new WeakMap, Gn = new WeakMap, Vn = new WeakMap, zn = new WeakMap;
    class Kn extends class {
        constructor(e, t) {
            if (Ge.set(this, {
                writable: !0,
                value: void 0
            }), u()(this, Ge, e), this.headlineElement = a()(this, Ge).context.getElementByClassName(t, "mw-headline"), 
            !this.headlineElement) throw new l;
            this.anchor = this.headlineElement.getAttribute("id");
            const n = [ "mw-headline-number", ...p.config.foreignElementsInHeadlinesClasses ], i = Array.from(this.headlineElement.childNodes).filter(e => e.nodeType !== Node.ELEMENT_NODE || !Array.from(e.classList).some(e => n.includes(e)));
            this.headline = i.map(e => e.textContent).join("").trim();
            const o = t.tagName.match(/^H([2-6])$/);
            this.level = o && Number(o[1]);
            const s = new $e(p.g.rootElement, e => ![ "STYLE", "LINK" ].includes(e.tagName) && !e.classList.contains("cd-sectionButtonContainer"), !0, t);
            for (this.headingNestingLevel = 0; s.parentNode(); ) this.headingNestingLevel++;
            s.currentNode = t;
            const r = [ t ], c = new RegExp("^H[1-".concat(this.level, "]$"));
            let d, h, m = !1;
            for (;s.nextSibling() && !c.test(s.currentNode.tagName); ) void 0 === this.lastElementInFirstChunk && /^H[3-6]$/.test(s.currentNode.tagName) && (m = !0, 
            this.lastElementInFirstChunk = r[r.length - 1]), r.push(s.currentNode);
            if (this.lastElementInFirstChunk = this.lastElementInFirstChunk || r[r.length - 1], 
            !r.length) throw new l;
            if (r[1]) {
                for (s.currentNode = r[r.length - 1]; s.lastChild(); ) ;
                const e = s.currentNode;
                s.currentNode = r[1];
                do {
                    s.currentNode.classList.contains("cd-commentPart") && (d = s.currentNode);
                } while (!d && s.currentNode !== e && s.nextNode());
                s.currentNode = e;
                do {
                    s.currentNode.classList.contains("cd-commentPart") && (h = s.currentNode);
                } while (!h && s.currentNode !== r[1] && s.previousNode());
            }
            if (d) {
                const e = Number(d.getAttribute("data-comment-id")), t = Number(h.getAttribute("data-comment-id"));
                if (this.comments = p.comments.slice(e, t + 1), m) {
                    const e = this.comments.findIndex(e => !(a()(this, Ge).context.follows(this.lastElementInFirstChunk, e.elements[0]) || this.lastElementInFirstChunk.contains(e.elements[0])));
                    this.commentsInFirstChunk = this.comments.slice(0, e || 0);
                }
            }
            this.id = p.sections.length, this.comments = this.comments || [], this.commentsInFirstChunk = this.commentsInFirstChunk || this.comments, 
            this.elements = r;
        }
    } {
        constructor(e, t, n) {
            if (super(e, t), $n.set(this, {
                writable: !0,
                value: void 0
            }), qn.set(this, {
                writable: !0,
                value: void 0
            }), Wn.set(this, {
                writable: !0,
                value: void 0
            }), Gn.set(this, {
                writable: !0,
                value: void 0
            }), Vn.set(this, {
                writable: !0,
                value: void 0
            }), zn.set(this, {
                writable: !0,
                value: void 0
            }), u()(this, $n, p.g.SECTION_ELEMENT_PROTOTYPES), this.$headline = $(this.headlineElement), 
            this.sourcePage = p.g.CURRENT_PAGE, u()(this, Wn, t.querySelector(".mw-editsection")), 
            a()(this, Wn)) {
                u()(this, qn, a()(this, Wn).lastElementChild), a()(this, qn) && a()(this, qn).classList && a()(this, qn).classList.contains("mw-editsection-bracket") || u()(this, qn, null);
                const e = a()(this, Wn).querySelector('a[href*="&action=edit"], a[href*="&veaction=editsource"]');
                if (e) {
                    if (this.editUrl = new URL(e.href), this.editUrl) {
                        this.editUrl.searchParams.get("section").startsWith("T-") && (this.sourcePage = new ve(this.editUrl.searchParams.get("title")));
                    }
                } else console.error("Edit link not found.", this);
                this.$heading = $(t), this.actionable = p.g.isPageActive && !p.g.specialElements.closedDiscussions.some(e => e.contains(t)), 
                this.actionable && this.extendSectionMenu(n);
            }
        }
        addReplyButton() {
            const e = a()(this, $n).replyButton.cloneNode(!0);
            e.firstChild.onclick = () => {
                this.addReply();
            };
            const t = "OL" === this.lastElementInFirstChunk.tagName && 1 === this.lastElementInFirstChunk.childElementCount && this.lastElementInFirstChunk.children[0].classList.contains("mw-empty-elt");
            let n, i = !1;
            if (this.lastElementInFirstChunk.classList.contains("cd-commentLevel")) {
                const e = this.lastElementInFirstChunk.tagName;
                "UL" === e || "OL" === e && (1 === this.lastElementInFirstChunk.querySelectorAll("ol > li").length || this.lastElementInFirstChunk.querySelectorAll("ol > li > .cd-signature").length > 1) ? n = "li" : "DL" === e ? n = "dd" : (n = "li", 
                i = !0);
            } else n = "li", t || (i = !0);
            const o = document.createElement(n);
            if (o.className = "cd-replyWrapper", o.appendChild(e), i) {
                const e = document.createElement("ul");
                e.className = "cd-commentLevel cd-sectionButtonContainer", e.appendChild(o), this.lastElementInFirstChunk.parentElement.insertBefore(e, this.lastElementInFirstChunk.nextElementSibling);
            } else this.lastElementInFirstChunk.appendChild(o);
            this.$replyButton = $(e), this.$replyButtonLink = $(e.firstChild), this.$replyWrapper = $(o), 
            this.$replyContainer = void 0;
        }
        addAddSubsectionButton() {
            if (2 !== this.level) return;
            const e = a()(this, $n).addSubsectionButton.cloneNode(!0), t = e.querySelector(".oo-ui-labelElement-label");
            if (!t) return;
            t.innerHTML = "", t.appendChild(document.createTextNode(p.s("section-addsubsection-to", this.headline))), 
            e.firstChild.onclick = () => {
                this.addSubsection();
            };
            const n = document.createElement("div");
            n.className = "cd-sectionButtonContainer cd-addSubsectionButtonContainer", n.style.display = "none", 
            n.appendChild(e);
            const i = this.elements[this.elements.length - 1];
            i.parentElement.insertBefore(n, i.nextElementSibling);
            const o = () => {
                a()(this, zn) || u()(this, zn, setTimeout(() => {
                    this.$addSubsectionButtonContainer.hide();
                }, 1e3));
            };
            e.firstChild.onmouseenter = () => {
                clearTimeout(a()(this, zn)), u()(this, zn, null);
            }, e.firstChild.onmouseleave = () => {
                o();
            }, this.replyButtonHoverHandler = () => {
                this.addSubsectionForm || (clearTimeout(a()(this, zn)), u()(this, zn, null), a()(this, Vn) || u()(this, Vn, setTimeout(() => {
                    this.$addSubsectionButtonContainer.show();
                }, 1e3)));
            }, this.replyButtonUnhoverHandler = () => {
                this.addSubsectionForm || (clearTimeout(a()(this, Vn)), u()(this, Vn, null), o());
            }, this.$addSubsectionButton = $(e), this.$addSubsectionButtonContainer = $(n);
        }
        extendSectionMenu(e) {
            this.comments.length && this.comments[0].isOpeningSection && this.comments[0].openingSectionOfLevel === this.level && (this.comments[0].own || p.settings.allowEditOthersComments) && this.comments[0].actionable && this.addMenuItem({
                label: p.s("sm-editopeningcomment"),
                tooltip: p.s("sm-editopeningcomment-tooltip"),
                func: () => {
                    this.comments[0].edit();
                },
                class: "cd-sectionLink-editOpeningComment"
            }), this.addMenuItem({
                label: p.s("sm-addsubsection"),
                tooltip: p.s("sm-addsubsection-tooltip"),
                func: () => {
                    this.addSubsection();
                },
                class: "cd-sectionLink-addSubsection"
            }), 2 === this.level && this.addMenuItem({
                label: p.s("sm-move"),
                tooltip: p.s("sm-move-tooltip"),
                func: () => {
                    this.move();
                },
                class: "cd-sectionLink-moveSection"
            }), e && e.then(({thisPageWatchedSections: e}) => {
                this.headline && (this.watched = e.includes(this.headline), this.addMenuItem({
                    label: p.s("sm-unwatch"),
                    tooltip: p.s("sm-unwatch-tooltip"),
                    func: () => {
                        this.unwatch();
                    },
                    class: "cd-sectionLink-unwatch",
                    visible: this.watched
                }), this.addMenuItem({
                    label: p.s("sm-watch"),
                    tooltip: p.s("sm-watch-tooltip"),
                    func: () => {
                        this.watch();
                    },
                    class: "cd-sectionLink-watch",
                    visible: !this.watched
                }));
            }, () => {}).finally(() => {
                const e = "sm-copylink-tooltip-".concat(p.settings.defaultSectionLinkType.toLowerCase());
                this.addMenuItem({
                    label: p.s("sm-copylink"),
                    func: this.copyLink.bind(this),
                    class: "cd-sectionLink-copyLink",
                    tooltip: p.s(e) + " " + p.s("cld-invitation"),
                    href: "".concat(p.g.CURRENT_PAGE.getUrl(), "#").concat(this.anchor)
                });
            });
        }
        addReply(e) {
            this.addReplyForm || (this.addReplyForm = e instanceof ci ? e : new ci({
                mode: "replyInSection",
                target: this,
                dataToRestore: e
            })), this.$replyButton.hide();
            const t = 2 === this.level ? this : this.baseSection;
            t && t.$addSubsectionButtonContainer && (t.$addSubsectionButtonContainer.hide(), 
            clearTimeout(a()(t, Vn)), u()(t, Vn, null));
        }
        addSubsection(e) {
            this.addSubsectionForm ? (this.addSubsectionForm.$element.cdScrollIntoView("center"), 
            this.addSubsectionForm.headlineInput.focus()) : this.addSubsectionForm = e instanceof ci ? e : new ci({
                mode: "addSubsection",
                target: this,
                dataToRestore: e,
                scrollIntoView: !0
            }), this.$addSubsectionButtonContainer && this.$addSubsectionButtonContainer.hide();
        }
        move() {
            var e = this;
            return o()((function*() {
                function t() {
                    t.parent.call(this);
                }
                OO.inheritClass(t, OO.ui.ProcessDialog), t.static.name = "moveSectionDialog", t.static.title = p.s("msd-title"), 
                t.static.actions = [ {
                    action: "close",
                    modes: [ "move", "reload" ],
                    flags: [ "safe", "close" ],
                    disabled: !0
                }, {
                    action: "move",
                    modes: [ "move" ],
                    label: p.s("msd-move"),
                    flags: [ "primary", "progressive" ],
                    disabled: !0
                }, {
                    action: "reload",
                    modes: [ "reload" ],
                    label: p.s("msd-reload"),
                    flags: [ "primary", "progressive" ]
                } ], t.prototype.onTitleInputChange = o()((function*() {
                    let e = !0;
                    try {
                        yield this.titleInput.getValidity();
                    } catch (t) {
                        e = !1;
                    }
                    this.actions.setAbilities({
                        move: e
                    });
                })), t.prototype.loadSourcePage = o()((function*() {
                    try {
                        yield n.sourcePage.getCode();
                    } catch (e) {
                        if (!(e instanceof l)) throw [ p.s("error-javascript"), !1 ];
                        {
                            const {type: t, code: n} = e.data;
                            if ("api" === t) throw "missing" === n ? [ p.s("msd-error-sourcepagedeleted"), !0 ] : [ p.s("error-api", n), !0 ];
                            if ("network" === t) throw [ p.s("error-network"), !0 ];
                        }
                    }
                    try {
                        n.locateInCode(n.sourcePage.code);
                    } catch (e) {
                        if (e instanceof l) {
                            const {code: t} = e.data;
                            let n;
                            throw n = "locateSection" === t ? p.s("error-locatesection") : p.s("error-unknown"), 
                            [ n, !0 ];
                        }
                        throw [ p.s("error-javascript"), !1 ];
                    }
                    return Object.assign({}, n.sourcePage, {
                        sectionInCode: n.inCode,
                        sectionWikilink: "".concat(n.sourcePage, "#").concat(n.headline)
                    });
                })), t.prototype.loadTargetPage = function() {
                    var e = o()((function*(e) {
                        try {
                            yield e.getCode();
                        } catch (e) {
                            if (!(e instanceof l)) throw [ p.s("error-javascript"), !1 ];
                            {
                                const {type: t, code: n} = e.data;
                                if ("api" === t) throw "missing" === n ? [ p.s("msd-error-targetpagedoesntexist"), !0 ] : "invalid" === n ? [ p.s("msd-error-invalidpagename"), !1 ] : [ p.s("error-api", n), !0 ];
                                if ("network" === t) throw [ p.s("error-network"), !0 ];
                            }
                        }
                        e.analyzeNewTopicPlacement();
                        const t = "".concat(e.realName, "#").concat(n.headline), i = mw.util.getUrl(t);
                        return Object.assign({}, e, {
                            sectionWikilink: t,
                            sectionUrl: i
                        });
                    }));
                    return function(t) {
                        return e.apply(this, arguments);
                    };
                }(), t.prototype.editTargetPage = function() {
                    var e = o()((function*(e, t) {
                        const i = p.config.getMoveTargetPageCode ? p.config.getMoveTargetPageCode(e.sectionWikilink, p.g.CURRENT_USER_SIGNATURE) : void 0, o = Array.isArray(i) ? i[0] + "\n" : i, s = Array.isArray(i) ? "\n" + i[1] : "", r = D(e.sectionInCode.code.slice(0, e.sectionInCode.relativeContentStartIndex) + o + e.sectionInCode.code.slice(e.sectionInCode.relativeContentStartIndex) + s);
                        let a;
                        t.areNewTopicsOnTop ? (void 0 === t.firstSectionStartIndex && (t.firstSectionStartIndex = t.code.length), 
                        a = D(t.code.slice(0, t.firstSectionStartIndex)) + r + t.code.slice(t.firstSectionStartIndex)) : a = t.code + "\n\n" + r;
                        const c = this.summaryEndingInput.getValue(), u = p.s("es-move-from", e.sectionWikilink) + (c ? ": " + c : "");
                        try {
                            yield t.edit({
                                text: a,
                                summary: p.util.buildEditSummary({
                                    text: u,
                                    section: n.headline
                                }),
                                tags: p.config.tagName,
                                baserevid: t.revisionId,
                                starttimestamp: t.queryTimestamp
                            });
                        } catch (e) {
                            if (e instanceof l) {
                                const {type: t, details: n} = e.data;
                                if ("network" === t) throw [ p.s("msd-error-editingtargetpage") + " " + p.s("error-network"), !0 ];
                                {
                                    let {code: e, message: t, logMessage: i} = n;
                                    throw "editconflict" === e && (t += " " + p.s("msd-error-editconflict-retry")), 
                                    console.warn(i), [ p.s("msd-error-editingtargetpage") + " " + t, !0 ];
                                }
                            }
                            throw console.warn(e), [ p.s("msd-error-editingtargetpage") + " " + p.s("error-javascript"), !0 ];
                        }
                    }));
                    return function(t, n) {
                        return e.apply(this, arguments);
                    };
                }(), t.prototype.editSourcePage = function() {
                    var e = o()((function*(e, t) {
                        const i = I(e.sectionInCode.code) || p.g.SIGN_CODE + "~", o = p.config.getMoveSourcePageCode ? p.config.getMoveSourcePageCode(t.sectionWikilink, p.g.CURRENT_USER_SIGNATURE, i) : void 0, s = o ? e.sectionInCode.code.slice(0, e.sectionInCode.relativeContentStartIndex) + o + "\n\n" : "", r = e.code.slice(0, e.sectionInCode.startIndex) + s + e.code.slice(e.sectionInCode.endIndex), a = this.summaryEndingInput.getValue(), c = p.s("es-move-to", t.sectionWikilink) + (a ? ": " + a : "");
                        try {
                            yield e.edit({
                                text: r,
                                summary: p.util.buildEditSummary({
                                    text: c,
                                    section: n.headline
                                }),
                                tags: p.config.tagName,
                                baserevid: e.revisionId,
                                starttimestamp: e.queryTimestamp
                            });
                        } catch (e) {
                            if (e instanceof l) {
                                const {type: t, details: n} = e.data;
                                if ("network" === t) throw [ p.s("msd-error-editingsourcepage") + " " + p.s("error-network"), !1 ];
                                {
                                    let {message: e, logMessage: t} = n;
                                    throw console.warn(t), [ p.s("msd-error-editingsourcepage") + " " + e, !1 ];
                                }
                            }
                            throw console.warn(e), [ p.s("msd-error-editingsourcepage") + " " + p.s("error-javascript"), !1 ];
                        }
                    }));
                    return function(t, n) {
                        return e.apply(this, arguments);
                    };
                }(), t.prototype.abort = function(e, t) {
                    const n = Me(e, [ "cd-message-reloadPage", () => {
                        this.close(), Dt();
                    } ]);
                    this.showErrors(new OO.ui.Error(n, {
                        recoverable: t
                    })), this.$errors.find(".oo-ui-buttonElement-button").on("click", () => {
                        t ? p.g.windowManager.updateWindowSize(this) : this.close();
                    }), this.actions.setAbilities({
                        close: !0,
                        move: t
                    }), p.g.windowManager.updateWindowSize(this), this.popPending();
                }, t.prototype.getBodyHeight = function() {
                    return this.$errorItems ? this.$errors[0].scrollHeight : this.$body[0].scrollHeight;
                }, t.prototype.initialize = function() {
                    t.parent.prototype.initialize.apply(this, arguments), this.pushPending();
                    const e = $("<div>").text(p.s("loading-ellipsis"));
                    this.loadingPanel = new OO.ui.PanelLayout({
                        padded: !0,
                        expanded: !1
                    }), this.loadingPanel.$element.append(e), 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);
                }, t.prototype.getSetupProcess = function(e) {
                    return t.parent.prototype.getSetupProcess.call(this, e).next(() => {
                        this.stackLayout.setItem(this.loadingPanel), this.actions.setMode("move");
                    });
                }, t.prototype.getReadyProcess = function(e) {
                    var r = this;
                    return t.parent.prototype.getReadyProcess.call(this, e).next(o()((function*() {
                        let e;
                        try {
                            [e] = yield Promise.all(i);
                        } catch (e) {
                            return void r.abort(p.s("cf-error-getpagecode"), !1);
                        }
                        try {
                            n.locateInCode(e.code);
                        } catch (e) {
                            if (e instanceof l) {
                                const {data: t} = e.data, n = "locateSection" === t ? p.s("error-locatesection") : p.s("error-unknown");
                                r.abort(n, !1);
                            } else r.abort(p.s("error-javascript"), !1);
                            return;
                        }
                        const t = n.inCode.code;
                        r.titleInput = new mw.widgets.TitleInputWidget({
                            $overlay: r.$overlay,
                            excludeCurrentPage: !0,
                            showMissing: !1,
                            validate: () => {
                                let e = r.titleInput.getMWTitle();
                                return e && e.toText() !== n.sourcePage && Te(e.toText());
                            }
                        }), r.titleField = new OO.ui.FieldLayout(r.titleInput, {
                            label: p.s("msd-targetpage"),
                            align: "top"
                        }), r.titleInput.connect(r, {
                            change: "onTitleInputChange"
                        }), r.titleInput.connect(r, {
                            enter: () => {
                                r.actions.get({
                                    actions: "move"
                                })[0].isDisabled() || r.executeAction("move");
                            }
                        });
                        let o = $("<div>");
                        $("<pre>").text(t.slice(0, 300) + (t.length >= 300 ? "..." : "")).appendTo(o), $("<p>").css("font-size", "85%").text(p.s("msd-bottom")).appendTo(o), 
                        r.summaryEndingInput = new OO.ui.TextInputWidget({
                            maxLength: 250
                        }), r.summaryEndingAutocomplete = new Ye({
                            types: [ "mentions", "wikilinks" ],
                            inputs: [ r.summaryEndingInput ]
                        }), r.summaryEndingField = new OO.ui.FieldLayout(r.summaryEndingInput, {
                            label: p.s("msd-summaryending"),
                            align: "top"
                        }), r.movePanel.$element.append(r.titleField.$element, o, r.summaryEndingField.$element), 
                        r.stackLayout.setItem(r.movePanel), r.titleInput.focus(), r.actions.setAbilities({
                            close: !0
                        }), s.$body.css("overflow", "hidden"), setTimeout(() => {
                            s.$body.css("overflow", "");
                        }, 500), p.g.windowManager.updateWindowSize(r), r.popPending();
                    })));
                }, t.prototype.getActionProcess = function(e) {
                    var i = this;
                    return "move" === e ? new OO.ui.Process(o()((function*() {
                        i.pushPending(), i.titleInput.$input.blur();
                        let e, t, o = new ve(i.titleInput.getMWTitle());
                        if (o.name !== n.sourcePage.name && Te(o)) {
                            try {
                                [e, t] = yield Promise.all([ i.loadSourcePage(), i.loadTargetPage(o) ]), yield i.editTargetPage(e, t), 
                                yield i.editSourcePage(e, t);
                            } catch (e) {
                                return void i.abort(...e);
                            }
                            i.reloadPanel.$element.html(p.util.wrapInElement(p.s("msd-moved", t.sectionUrl), "div")), 
                            i.stackLayout.setItem(i.reloadPanel), i.actions.setMode("reload"), i.popPending();
                        } else i.abort(p.s("msd-error-wrongpage"), !1);
                    }))) : "reload" === e ? new OO.ui.Process(() => {
                        this.close({
                            action: e
                        }), Dt({
                            sectionAnchor: n.anchor
                        });
                    }) : "close" === e ? new OO.ui.Process(() => {
                        this.close();
                    }) : t.parent.prototype.getActionProcess.call(this, e);
                };
                const n = e, i = [ e.sourcePage.getCode(), mw.loader.using("mediawiki.widgets") ], s = new t;
                p.g.windowManager.addWindows([ s ]), p.g.windowManager.openWindow(s);
            }))();
        }
        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(e = !1) {
            let t;
            if (!e) {
                if (t = this.$heading.find(".cd-sectionLink-watch"), t.hasClass("cd-sectionLink-pending")) return;
                t.addClass("cd-sectionLink-pending");
            }
            Kn.watchSection(this.headline, {
                silent: e,
                successCallback: () => {
                    this.watched = !0, t && t.removeClass("cd-sectionLink-pending"), Kn.getSectionsByHeadline(this.headline).forEach(e => {
                        e.updateWatchMenuItems();
                    });
                },
                errorCallback: () => {
                    t && t.removeClass("cd-sectionLink-pending");
                }
            });
        }
        unwatch(e = !1) {
            let t;
            if (!e) {
                if (t = this.$heading.find(".cd-sectionLink-unwatch"), t.hasClass("cd-sectionLink-pending")) return;
                t.addClass("cd-sectionLink-pending");
            }
            const n = this.getWatchedAncestor();
            Kn.unwatchSection(this.headline, {
                silent: e,
                successCallback: () => {
                    this.watched = !1, t && t.removeClass("cd-sectionLink-pending"), Kn.getSectionsByHeadline(this.headline).forEach(e => {
                        e.updateWatchMenuItems();
                    });
                },
                errorCallback: () => {
                    t && t.removeClass("cd-sectionLink-pending");
                },
                watchedAncestorHeadline: n && n.headline
            });
        }
        copyLink(e) {
            e.preventDefault(), Dn(this, e.shiftKey);
        }
        locateInCode(e) {
            this.inCode = null;
            const t = {
                firstComment: this.comments[0],
                headline: L(this.headline),
                pageCode: e,
                adjustedPageCode: O(e)
            };
            p.debug.startTimer("locate section");
            const n = this.searchInCode(t);
            let i;
            if (p.debug.stopTimer("locate section"), n.forEach(e => {
                (!i || e.score > i.score) && (i = e);
            }), !i) throw new l({
                type: "parse",
                code: "locateSection"
            });
            this.inCode = i;
        }
        modifyCode(e, {action: t, commentForm: n}) {
            if ("replyInSection" === t) {
                const [, t] = this.inCode.firstChunkCode.match(/\n([#*]) *\n+$/) || [];
                if (t) this.inCode.lastCommentIndentationChars = t; else {
                    const t = this.comments[this.comments.length - 1];
                    if (t && ("ol" === this.containerListType || "mimic" === p.config.indentationCharMode)) try {
                        t.locateInCode(e);
                    } finally {
                        !t.inCode || t.inCode.indentationChars.startsWith("#") && "ol" !== this.containerListType || (this.inCode.lastCommentIndentationChars = t.inCode.indentationChars);
                    }
                }
            }
            let i, o, s;
            switch (!i && n && ({commentCode: i} = n.commentTextToCode("submit")), t) {
              case "replyInSection":
                s = e.slice(0, this.inCode.firstChunkContentEndIndex), o = s + i + e.slice(this.inCode.firstChunkContentEndIndex);
                break;

              case "addSubsection":
                s = D(e.slice(0, this.inCode.contentEndIndex)), o = s + i + e.slice(this.inCode.contentEndIndex);
                break;
            }
            return {
                newPageCode: o,
                codeBeforeInsertion: s,
                commentCode: i
            };
        }
        getWatchedAncestor(e) {
            for (let t = e ? this : this.parent; t; t = t.parent) if (t.watched) return t;
            return null;
        }
        getCode() {
            var e = this;
            return o()((function*() {
                try {
                    yield e.sourcePage.getCode(), e.locateInCode(e.sourcePage.code);
                } catch (e) {
                    throw e instanceof l ? new l(Object.assign({}, {
                        message: p.s("cf-error-getpagecode")
                    }, e.data)) : e;
                }
            }))();
        }
        addMenuItem({label: e, href: t, func: n, class: i, tooltip: o, visible: s = !0}) {
            if (a()(this, qn)) {
                const r = document.createElement("span");
                r.className = "cd-sectionLinkWrapper", s || (r.style.display = "none");
                const c = document.createElement("a");
                c.textContent = e, t && (c.href = t), n && (c.onclick = n), c.className = "cd-sectionLink", 
                i && (c.className += " " + i), o && (c.title = o), r.appendChild(c), a()(this, Wn).insertBefore(r, a()(this, qn));
            }
        }
        get $elements() {
            return void 0 === a()(this, Gn) && u()(this, Gn, $(this.elements)), a()(this, Gn);
        }
        set $elements(e) {
            u()(this, Gn, e), this.elements = e.get();
        }
        searchInCode({firstComment: e, headline: t, pageCode: n, adjustedPageCode: i}) {
            const o = /^((=+)(.*?)\2[ \t]*(?:<!--[^]*?-->[ \t]*)*)\n/gm, s = [], r = [];
            let a, c = 0;
            for (;a = o.exec(i); ) {
                const o = L(P(a[3])), u = o === t;
                let l = 3;
                const d = r.slice(-l).reverse(), h = p.sections.slice(Math.max(0, this.id - l), this.id).reverse().map(e => e.headline).every((e, t) => L(e) === d[t]);
                r.push(o);
                const m = this.id === c;
                c++;
                const g = a[1], f = a[2], b = "={1,".concat(f.length, "}"), y = n.slice(a.index), w = i.slice(a.index), E = w.match("(" + mw.util.escapeRegExp(g) + "[^]*?\n)" + b + "[^=].*?=+[ \t]*(?:\x3c!--[^]*?--\x3e[ \t]*)*\n") || y.match("(" + mw.util.escapeRegExp(g) + "[^]*$)"), v = w.match("(" + mw.util.escapeRegExp(g) + "[^]*?\n)\n*={1,6}[^=].*?=+[ \t]*(?:\x3c!--[^]*?--\x3e[ \t]*)*\n") || y.match("(" + mw.util.escapeRegExp(g) + "[^]*$)"), _ = E && y.substr(E.index, E[1].length), C = v && y.substr(v.index, v[1].length);
                if (!_ || !C) {
                    console.log("Couldn't read the \"".concat(o, '" section contents.'));
                    continue;
                }
                const x = M(_);
                let T;
                T = x.length ? Boolean(e) && (x[0].timestamp === e.timestamp || x[0].author === e.author) : !this.comments.length;
                const A = 1 * u + 1 * T + .5 * m + .25 * h;
                if (A <= 1) continue;
                const S = a.index, k = S + _.length, N = a.index + a[0].length, O = S + C.length, I = N - S;
                let F = O, R = k;
                p.config.keepInSectionEnding.forEach(e => {
                    const t = C.match(e);
                    t && (F -= t[0].length - 1);
                    const n = _.match(e);
                    n && (R -= n[0].length - 1);
                });
                const B = C.match(/\n([#*] *\n+)$/);
                if (B && (F -= B[1].length), s.push({
                    headlineMatched: u,
                    firstCommentMatched: T,
                    sectionIndexMatched: m,
                    previousHeadlinesMatched: h,
                    score: A,
                    startIndex: S,
                    endIndex: k,
                    code: _,
                    contentStartIndex: N,
                    contentEndIndex: R,
                    relativeContentStartIndex: I,
                    firstChunkEndIndex: O,
                    firstChunkContentEndIndex: F,
                    firstChunkCode: C
                }), 2.75 === A) break;
            }
            return s;
        }
        static watchSection(e, {silent: t = !1, successCallback: n, errorCallback: i}) {
            return o()((function*() {
                if (!e) return;
                let o, s;
                try {
                    ({watchedSections: o, thisPageWatchedSections: s} = yield Q());
                } catch (e) {
                    return mw.notify(p.s("section-watch-error-load"), {
                        type: "error"
                    }), void (i && i());
                }
                s.includes(e) || s.push(e);
                try {
                    yield ee(o);
                } catch (e) {
                    if (e instanceof l) {
                        const {type: t, code: n} = e.data;
                        if ("internal" === t && "sizeLimit" === n) {
                            const e = Me(p.s("section-watch-error-maxsize"), [ "cd-notification-editWatchedSections", e => {
                                e.preventDefault(), Mn();
                            } ]);
                            mw.notify(e, {
                                type: "error",
                                autoHideSeconds: "long"
                            });
                        } else mw.notify(p.s("section-watch-error-save"), {
                            type: "error"
                        });
                    } else mw.notify(p.s("section-watch-error-save"), {
                        type: "error"
                    });
                    return void (i && i());
                }
                if (!t) {
                    let t, n = p.s("section-watch-success", e);
                    $("#ca-watch").length && (n += " ".concat(p.s("section-watch-pagenotwatched")), 
                    t = "long"), mw.notify(p.util.wrapInElement(n), {
                        autoHideSeconds: t
                    });
                }
                n && n();
            }))();
        }
        static unwatchSection(e, {silent: t = !1, successCallback: n, errorCallback: i, watchedAncestorHeadline: s}) {
            return o()((function*() {
                if (!e) return;
                let o, r;
                try {
                    ({watchedSections: o, thisPageWatchedSections: r} = yield Q());
                } catch (e) {
                    return mw.notify(p.s("section-watch-error-load"), {
                        type: "error"
                    }), void (i && i());
                }
                r.includes(e) && r.splice(r.indexOf(e), 1), r.length || delete o[mw.config.get("wgArticleId")];
                try {
                    yield ee(o);
                } catch (e) {
                    return mw.notify(p.s("section-watch-error-save"), {
                        type: "error"
                    }), void (i && i());
                }
                let a, c = p.s("section-unwatch-success", e);
                s && (c += " ".concat(p.s("section-unwatch-stillwatched", s)), a = "long"), t && !s || mw.notify(p.util.wrapInElement(c), {
                    autoHideSeconds: a
                }), n && n();
            }))();
        }
        static getSectionByAnchor(e) {
            return p.sections && e && p.sections.find(t => t.anchor === e) || null;
        }
        static getSectionsByHeadline(e) {
            return p.sections.filter(t => t.headline === e);
        }
        static search({headline: e, firstCommentAnchor: t, index: n}) {
            const i = [ ...p.sections.filter(t => t.headline === e), ...p.sections.filter(e => e.comments[0] && e.comments[0].anchor === t) ];
            p.sections[n] && i.push(p.sections[n]);
            const o = {};
            i.forEach(e => {
                o[e.id] || (o[e.id] = 0), o[e.id]++;
            });
            const s = Object.keys(o).reduce((e, t) => o[t] >= 2 && (null === e || o[t] > o[e]) ? t : e, null);
            return null !== s ? p.sections[s] : null;
        }
        static adjustSections() {
            p.sections.forEach((e, t) => {
                if (e.isLastSection = t === p.sections.length - 1, e.subsections = [], p.sections.slice(t + 1).some(t => {
                    if (!(t.level > e.level)) return !0;
                    e.subsections.push(t), 2 === e.level && (t.baseSection = e);
                }), e.level > 2 && p.sections.slice(0, t).reverse().some(t => {
                    if (t.level < e.level) return e.parent = t, !0;
                }), e.actionable) {
                    const n = p.sections.slice(t + 1).find(t => t.level === e.level);
                    n && n.headingNestingLevel !== e.headingNestingLevel || e.addAddSubsectionButton(), 
                    p.sections[t + 1] && p.sections[t + 1].headingNestingLevel !== e.headingNestingLevel ? e.$heading.find(".cd-sectionLink-addSubsection").parent().remove() : e.addReplyButton();
                }
            }), p.sections.filter(e => e.actionable && 2 === e.level).forEach(e => {
                const t = e.subsections.length ? e.subsections[e.subsections.length - 1] : e;
                t.$replyButtonLink && t.$replyButtonLink.on("mouseenter", e.replyButtonHoverHandler).on("mouseleave", e.replyButtonUnhoverHandler);
            });
        }
    }
    let Xn = 0;
    function Jn(e, t) {
        const n = e.lastFocused || new Date(0), i = t.lastFocused || new Date(0);
        return i > n ? 1 : i < n ? -1 : 0;
    }
    var Qn = new WeakMap, Zn = new WeakMap, ei = new WeakMap, ti = new WeakMap, ni = new WeakMap, ii = new WeakMap, oi = new WeakMap, si = new WeakMap, ri = new WeakMap, ai = new WeakMap;
    class ci {
        constructor({mode: e, target: t, $addSectionLink: n, dataToRestore: i, scrollIntoView: o, editintro: s}) {
            if (Qn.set(this, {
                writable: !0,
                value: void 0
            }), Zn.set(this, {
                writable: !0,
                value: void 0
            }), ei.set(this, {
                writable: !0,
                value: void 0
            }), ti.set(this, {
                writable: !0,
                value: void 0
            }), ni.set(this, {
                writable: !0,
                value: void 0
            }), ii.set(this, {
                writable: !0,
                value: void 0
            }), oi.set(this, {
                writable: !0,
                value: void 0
            }), si.set(this, {
                writable: !0,
                value: void 0
            }), ri.set(this, {
                writable: !0,
                value: void 0
            }), ai.set(this, {
                writable: !0,
                value: void 0
            }), this.mode = e, this.setTargets(t), this.$addSectionLink = n, this.target instanceof Ni ? u()(this, Qn, this.target.section && this.target.section.headline) : this.target instanceof Kn && u()(this, Qn, this.target.headline), 
            this.id = Xn++, this.summaryAltered = !!i && i.summaryAltered, s && oe("{{".concat(s, "}}"), {
                title: p.g.CURRENT_PAGE.name
            }).then(e => {
                this.$messageArea.append(e.html).cdAddCloseButton();
            }), this.createContents(i), this.addEvents(), this.initAutocomplete(), this.addToPage(), 
            this.operations = [], p.commentForms.push(this), i) this.originalComment = i.originalComment, 
            this.originalHeadline = i.originalHeadline, i.lastFocused && (this.lastFocused = new Date(i.lastFocused)); else if ("edit" === this.mode) {
                const e = this.registerOperation({
                    type: "load"
                });
                this.target.getCode(!0).then(({commentText: t, headline: n}) => {
                    this.target.inCode.inSmallFont && (t = "<small>".concat(t, "</small>")), this.commentInput.setValue(t), 
                    this.originalComment = t, this.headlineInput && (this.headlineInput.setValue(n), 
                    this.originalHeadline = n), this.closeOperation(e), Ht(), this.commentInput.focus();
                }, t => {
                    t instanceof l ? this.handleError(Object.assign({}, t.data, {
                        doCancel: !0,
                        currentOperation: e
                    })) : this.handleError({
                        type: "javascript",
                        logMessage: t,
                        doCancel: !0,
                        currentOperation: e
                    });
                });
            } else this.originalComment = "", this.headlineInput && (this.originalHeadline = ""), 
            this.target instanceof ve ? Ht() : this.checkCode(), o && this.$element.cdScrollIntoView("center"), 
            this[this.headlineInput ? "headlineInput" : "commentInput"].focus();
            mw.hook("convenientDiscussions.commentFormCreated").fire(this);
        }
        checkCode() {
            if (!this.checkCodeRequest) {
                const e = $.Deferred();
                this.checkCodeRequest = e.then(() => {
                    Ht();
                }, e => {
                    e instanceof l ? this.handleError(Object.assign({}, e.data)) : this.handleError({
                        type: "javascript",
                        logMessage: e
                    });
                }), this.target.getCode(this).then(() => {
                    e.resolve();
                }, t => {
                    e.reject(t);
                });
            }
            return this.checkCodeRequest;
        }
        setTargets(e) {
            if (this.target = e, this.target instanceof Ni) this.targetSection = this.target.section, 
            this.targetComment = this.target; else if (this.target instanceof Kn) {
                if (this.targetSection = this.target, "replyInSection" === this.mode && !this.target.$replyButton) throw new l;
                if ("addSubsection" === this.mode && !this.targetSection.$heading.find(".cd-sectionLink-addSubsection").length) throw new l;
                this.target.comments[0] && this.target.comments[0].isOpeningSection && (this.targetComment = this.target.comments[0]);
            }
            this.targetPage = this.targetSection ? this.targetSection.sourcePage : this.target;
        }
        addToolbar() {
            const e = $("<div>").addClass("cd-toolbarPlaceholder").insertBefore(this.commentInput.$element), t = [ "ext.wikiEditor" ];
            p.config.customCommentFormModules.filter(e => !e.checkFunc || e.checkFunc()).forEach(e => {
                t.push(e.name);
            }), mw.loader.using(t).then(() => {
                e.hide();
                const t = this.commentInput.$input;
                t.wikiEditor("addModule", mw.loader.moduleRegistry["ext.wikiEditor"].packageExports["jquery.wikiEditor.toolbar.config.js"]);
                const n = mw.loader.moduleRegistry["ext.wikiEditor"].packageExports["jquery.wikiEditor.dialogs.config.js"];
                n.replaceIcons(t), t.wikiEditor("addModule", n.getDefaultConfig()), this.commentInput.$element.find('.tool[rel="redirect"], .tool[rel="signature"], .tool[rel="newline"], .tool[rel="gallery"], .tool[rel="reference"], .option[rel="heading-2"]').remove(), 
                t.wikiEditor("addToToolbar", {
                    section: "main",
                    groups: {
                        "convenient-discussions": {
                            tools: {
                                mention: {
                                    label: p.s("cf-mentions-tooltip"),
                                    type: "button",
                                    icon: "https://upload.wikimedia.org/wikipedia/commons/9/98/OOjs_UI_icon_userAvatar.svg",
                                    action: {
                                        type: "callback",
                                        execute: () => {
                                            this.mention();
                                        }
                                    }
                                },
                                quote: {
                                    label: "".concat(p.s("cf-quote-tooltip"), " ").concat(mw.msg("parentheses", "Q".concat(mw.msg("comma-separator"), "Ctrl+Alt+Q"))),
                                    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.commentFormToolbarReady").fire(this);
            });
        }
        addInsertButton(e, t) {
            const n = [];
            e = He(e, /\\[+;\\]/g, n);
            let [, i, o] = e.match(/^(.*?)(?:\+(.*))?$/) || [];
            if (!i) return;
            o = o || "";
            const s = e => e.replace(/\\([+;\\])/g, "$1");
            i = s(Ue(i, n)), o = s(Ue(o, n)), t = t ? s(t) : i + o;
            const r = $("<a>").text(t).addClass("cd-insertButtons-item").on("click", e => {
                e.preventDefault(), this.commentInput.$input.textSelection("encapsulateSelection", {
                    pre: i,
                    peri: "",
                    post: o
                });
            });
            this.$insertButtons.append(r, " ");
        }
        createContents(e) {
            this.target instanceof ve ? this.containerListType = null : this.containerListType = this.target instanceof Ni ? this.target.$elements.last().parent().prop("tagName").toLowerCase() : this.target.$replyWrapper.parent().prop("tagName").toLowerCase();
            let t = "div";
            if ([ "reply", "edit" ].includes(this.mode)) {
                const e = this.target.$elements.last();
                e.is("li") ? "ol" === this.containerListType && "edit" !== this.mode || (t = "li") : e.is("dd") ? t = "dd" : "reply" === this.mode && (t = "ul");
            }
            if (u()(this, si, "edit" === this.mode && this.target.isOpeningSection), this.$element = $(document.createElement(t)).addClass("cd-commentForm").addClass("cd-commentForm-".concat(this.mode)), 
            "ol" === this.containerListType && this.$element.addClass("cd-commentForm-inNumberedList"), 
            a()(this, si) && this.$element.addClass("cd-commentForm-sectionOpeningComment"), 
            "addSubsection" === this.mode && this.$element.addClass("cd-commentForm-addSubsection-".concat(this.target.level)), 
            "reply" === this.mode) {
                const e = "ul" === t ? this.$element : $("<ul>").appendTo(this.$element);
                this.$innerWrapper = $("<li>").addClass("cd-commentForm-innerWrapper").appendTo(e), 
                e.addClass("cd-commentLevel");
            } else this.$innerWrapper = $("<div>").addClass("cd-commentForm-innerWrapper").appendTo(this.$element);
            this.$messageArea = $("<div>").addClass("cd-messageArea"), ([ "addSection", "addSubsection" ].includes(this.mode) || a()(this, si)) && ("addSubsection" === this.mode ? u()(this, ri, p.s("cf-headline-subsection", this.targetSection.headline)) : "edit" === this.mode && this.targetSection.parent ? u()(this, ri, p.s("cf-headline-subsection", this.targetSection.parent.headline)) : u()(this, ri, p.s("cf-headline-topic")), 
            this.headlineInput = new OO.ui.TextInputWidget({
                value: e ? e.headline : "",
                placeholder: a()(this, ri),
                classes: [ "cd-headlineInput" ],
                tabIndex: String(this.id) + "11"
            }));
            let n, i = this.headlineInput ? 5 : 3;
            "firefox" === $.client.profile().name && (i -= 1), p.config.commentInputPlaceholderEmpty || ("replyInSection" === this.mode || "reply" === this.mode && this.target.isOpeningSection ? n = p.s("cf-comment-placeholder-replytosection", this.targetSection.headline) : "reply" === this.mode && this.target.requestAuthorGenderIfNeeded(() => {
                this.commentInput.$input.attr("placeholder", Fe(p.s("cf-comment-placeholder-replytocomment", this.target.author.name, this.target.author)));
            }, !0)), this.commentInput = new OO.ui.MultilineTextInputWidget({
                value: e ? e.comment : "",
                placeholder: n,
                autosize: !0,
                rows: i,
                maxRows: 30,
                classes: [ "cd-commentInput" ],
                tabIndex: String(this.id) + "12"
            }), this.$settings = $("<div>").addClass("cd-commentFormSettings"), this.summaryInput = new OO.ui.TextInputWidget({
                value: e ? e.summary : "",
                maxLength: p.g.SUMMARY_LENGTH_LIMIT,
                placeholder: p.s("cf-summary-placeholder"),
                classes: [ "cd-summaryInput" ],
                tabIndex: String(this.id) + "13"
            }), this.summaryInput.$input.codePointLimit(p.g.SUMMARY_LENGTH_LIMIT), mw.widgets.visibleCodePointLimit(this.summaryInput, p.g.SUMMARY_LENGTH_LIMIT), 
            this.updateAutoSummary(!e), this.$summaryPreview = $("<div>").addClass("cd-summaryPreview"), 
            "edit" === this.mode && ([this.minorField, this.minorCheckbox] = _n({
                value: "minor",
                selected: !e || e.minor,
                label: p.s("cf-minor"),
                tabIndex: String(this.id) + "20"
            }));
            const o = p.settings.watchOnReply && "edit" !== this.mode || $("#ca-unwatch").length || mw.user.options.get(mw.config.get("wgArticleId") ? "watchdefault" : "watchcreations");
            if ([this.watchField, this.watchCheckbox] = _n({
                value: "watch",
                selected: e ? e.watch : o,
                label: p.s("cf-watch"),
                tabIndex: String(this.id) + "21"
            }), this.targetSection || "addSection" === this.mode) {
                const t = "addSubsection" !== this.mode && (this.targetSection && this.targetSection.level <= 2 || "addSection" === this.mode) ? p.s("cf-watchsection-topic") : p.s("cf-watchsection-subsection"), n = p.settings.watchSectionOnReply && "edit" !== this.mode || this.targetSection && this.targetSection.watched;
                [this.watchSectionField, this.watchSectionCheckbox] = _n({
                    value: "watchSection",
                    selected: e ? e.watchSection : n,
                    label: t,
                    tabIndex: String(this.id) + "22",
                    title: p.s("cf-watchsection-tooltip")
                });
            }
            if (this.headlineInput && ([this.noSignatureField, this.noSignatureCheckbox] = _n({
                value: "noSignature",
                selected: !!e && e.noSignature,
                label: p.s("cf-nosignature"),
                tabIndex: String(this.id) + "25"
            })), "edit" === this.mode && (!this.target.isOpeningSection || this.target.section && 1 === this.target.section.comments.length)) {
                const t = this.target.isOpeningSection ? void 0 : !this.target.section || this.target.section.comments.slice(this.target.section.comments.indexOf(this.target)).some(e => e.parent === this.target);
                if (this.target.isOpeningSection || !t) {
                    const t = !!e && e.delete;
                    [this.deleteField, this.deleteCheckbox] = _n({
                        value: "delete",
                        selected: t,
                        label: p.s("cf-delete"),
                        tabIndex: String(this.id) + "26"
                    });
                }
            }
            switch (this.scriptSettingsButton = new OO.ui.ButtonWidget({
                framed: !1,
                icon: "settings",
                label: p.s("cf-scriptsettings-tooltip"),
                invisibleLabel: !0,
                title: p.s("cf-scriptsettings-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.noSignatureField, this.deleteField, this.scriptSettingsButton ].filter(ke)), 
            this.$buttonsContainer = $("<div>").addClass("cd-buttonsContainer"), this.$leftButtonsContainer = $("<div>").addClass("cd-leftButtonsContainer"), 
            this.$rightButtonsContainer = $("<div>").addClass("cd-rightButtonsContainer"), this.mode) {
              case "edit":
                u()(this, ei, p.s("cf-save")), u()(this, ti, p.s("cf-save"));
                break;

              case "addSection":
                u()(this, ei, p.s("cf-addtopic")), u()(this, ti, p.s("cf-addtopic-short"));
                break;

              case "addSubsection":
                u()(this, ei, p.s("cf-addsubsection")), u()(this, ti, p.s("cf-addsubsection-short"));
                break;

              default:
                u()(this, ei, p.s("cf-reply")), u()(this, ti, p.s("cf-reply-short"));
            }
            this.settingsButton = new OO.ui.ButtonWidget({
                label: p.s("cf-settings"),
                framed: !1,
                classes: [ "cd-button", "cd-settingsButton" ],
                tabIndex: String(this.id) + "30"
            }), p.g.$popupsOverlay || (p.g.$popupsOverlay = $("<div>").addClass("cd-popupsOverlay").appendTo(document.body)), 
            this.helpPopupButton = new OO.ui.PopupButtonWidget({
                label: p.s("cf-help"),
                framed: !1,
                classes: [ "cd-button" ],
                popup: {
                    head: !1,
                    $content: p.util.wrapInElement(p.s("cf-help-content"), "div"),
                    padded: !0,
                    align: "center"
                },
                $overlay: p.g.$popupsOverlay,
                tabIndex: String(this.id) + "31"
            }), this.cancelButton = new OO.ui.ButtonWidget({
                label: p.s("cf-cancel"),
                flags: "destructive",
                framed: !1,
                classes: [ "cd-button", "cd-cancelButton" ],
                tabIndex: String(this.id) + "32"
            }), this.viewChangesButton = new OO.ui.ButtonWidget({
                label: p.s("cf-viewchanges"),
                classes: [ "cd-viewChangesButton" ],
                tabIndex: String(this.id) + "33"
            }), this.previewButton = new OO.ui.ButtonWidget({
                label: p.s("cf-preview"),
                classes: [ "cd-previewButton" ],
                tabIndex: String(this.id) + "34"
            }), p.settings.autopreview && this.previewButton.$element.hide(), this.submitButton = new OO.ui.ButtonInputWidget({
                type: "submit",
                label: a()(this, ei),
                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.$element, this.previewButton.$element, this.submitButton.$element), 
            this.$buttonsContainer.append(this.$leftButtonsContainer, this.$rightButtonsContainer), 
            this.$form = $("<form>"), this.$form.append(...[ this.headlineInput && this.headlineInput.$element, this.commentInput.$element, this.$settings, this.$buttonsContainer ].filter(ke)), 
            this.$innerWrapper.append(this.$messageArea, this.$form), "edit" === this.mode || p.settings.alwaysExpandSettings || this.$settings.hide(), 
            this.$previewArea = $("<div>").addClass("cd-previewArea"), p.settings.autopreview ? this.$previewArea.addClass("cd-previewArea-below").appendTo(this.$innerWrapper) : this.$previewArea.addClass("cd-previewArea-above").prependTo(this.$innerWrapper), 
            "ol" === this.containerListType && "webkit" !== $.client.profile().layout && $("<div>").html("&nbsp;").addClass("cd-commentForm-dummyElement").prependTo(this.$innerWrapper), 
            p.settings.showToolbar && this.addToolbar(), p.settings.insertButtons.length && (this.$insertButtons = $("<div>").addClass("cd-insertButtons").insertAfter(this.commentInput.$element), 
            p.settings.insertButtons.forEach(e => {
                let t, n;
                Array.isArray(e) ? (t = e[0], n = e[1]) : t = e, this.addInsertButton(t, n);
            }));
        }
        addToPage() {
            switch (mw.config.get("wgArticleId") || p.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.isNewTopicOnTop = this.$addSectionLink && this.$addSectionLink.is('[href*="section=0"]'), 
                this.isNewTopicOnTop && p.sections[0] ? this.$element.insertBefore(p.sections[0].$heading) : this.$element.appendTo(p.g.$root);
                break;

              case "addSubsection":
                {
                    const e = new RegExp("\\bcd-commentForm-addSubsection-[".concat(this.target.level, "-6]\\b"));
                    let t, n = this.target.$elements.last();
                    do {
                        t = n, n = n.next();
                    } while (n.is(".cd-sectionButtonContainer") || n.length && n.get(0).className.match(e));
                    this.$element.insertAfter(t);
                    break;
                }
            }
            this.adjustLabels();
        }
        addEvents() {
            const e = () => {
                Ht();
            }, t = () => {
                this.preview();
            }, n = () => {
                this.preview(!1);
            }, i = [ {
                pattern: new RegExp(p.g.SIGN_CODE + "\\s*$"),
                message: p.s("cf-reaction-signature", p.g.SIGN_CODE),
                name: "signatureNotNeeded",
                type: "notice"
            }, {
                pattern: /<pre/,
                message: p.s("cf-reaction-pre"),
                name: "dontUsePre",
                type: "warning"
            } ].concat(p.config.customTextReactions);
            this.$form.on("submit", e => {
                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", e => {
                this.updateAutoSummary(!0, !0), e.includes("{{") ? this.showMessage(p.s("cf-reaction-templateinheadline"), {
                    type: "warning",
                    name: "templateInHeadline"
                }) : this.hideMessage("templateInHeadline");
            }).on("change", t).on("change", e), this.commentInput.on("change", e => {
                this.updateAutoSummary(!0, !0), i.forEach(({pattern: t, checkFunc: n, message: i, type: o, name: s}) => {
                    t.test(e) && ("function" != typeof n || n(this)) ? this.showMessage(i, {
                        type: o,
                        name: s
                    }) : this.hideMessage(s);
                });
            }).on("change", t).on("change", e), this.commentInput.$input.get(0).addEventListener("tribute-replaced", e => {
                "@" === e.detail.instance.trigger && ("edit" === this.mode && this.showMessage(p.s("cf-reaction-mention-edit"), {
                    type: "notice",
                    name: "mentionEdit"
                }), this.noSignatureCheckbox && this.noSignatureCheckbox.isSelected() && this.showMessage(p.s("cf-reaction-mention-nosignature"), {
                    type: "notice",
                    name: "mentionNoSignature"
                }));
            }), this.summaryInput.on("change", () => {
                a()(this, oi) || t();
            }).on("change", e), this.summaryInput.$input.on("keypress", () => {
                this.summaryAltered = !0, u()(this, oi, !1);
            }), this.minorCheckbox && this.minorCheckbox.on("change", e), this.watchCheckbox.on("change", e), 
            this.watchSectionCheckbox && this.watchSectionCheckbox.on("change", e), this.noSignatureCheckbox && this.noSignatureCheckbox.on("change", n).on("change", e), 
            this.deleteCheckbox && this.deleteCheckbox.on("change", e => {
                this.updateAutoSummary(!0, !0), this.updateFormOnDeleteCheckboxChange(e);
            }).on("change", t).on("change", e), this.scriptSettingsButton.on("click", () => {
                Ln();
            }), this.settingsButton.on("click", () => {
                this.toggleSettings();
            }), this.cancelButton.on("click", () => {
                this.cancel();
            }), this.viewChangesButton.on("click", () => {
                this.viewChanges();
            }), this.previewButton.on("click", () => {
                this.preview(!0, !1);
            });
        }
        initAutocomplete() {
            let e = [];
            if (this.targetSection) {
                const t = 2 === this.targetSection.level ? this.targetSection : this.targetSection.baseSection;
                e = t.comments;
            } else "addSection" !== this.mode && p.comments.some(t => !!t.section || (e.push(t), 
            !1));
            "edit" === this.mode && (e = e.filter(e => e !== this.target)), this.autocomplete = new Ye({
                types: [ "mentions", "wikilinks", "templates", "tags", "commentLinks" ],
                inputs: [ this.commentInput ],
                comments: e
            }), this.croppedAutocomplete = new Ye({
                types: [ "mentions", "wikilinks" ],
                inputs: [ this.headlineInput, this.summaryInput ].filter(ke),
                comments: e
            });
        }
        toggleSettings() {
            this.$settings.is(":hidden") ? this.$settings.show() : this.$settings.hide();
        }
        adjustLabels() {
            let e = this.$innerWrapper.width();
            this.$element.hasClass("cd-commentForm-short") ? e >= a()(this, Zn) + 7 && (this.$element.removeClass("cd-commentForm-short"), 
            this.submitButton.setLabel(a()(this, ei)), this.previewButton.setLabel(p.s("cf-preview")), 
            this.viewChangesButton.setLabel(p.s("cf-viewchanges")), this.cancelButton.setLabel(p.s("cf-cancel"))) : (u()(this, Zn, this.submitButton.$element.outerWidth(!0) + (this.previewButton.$element.is(":visible") ? this.previewButton.$element.outerWidth(!0) : 0) + (this.viewChangesButton.$element.is(":visible") ? this.viewChangesButton.$element.outerWidth(!0) : 0) + this.settingsButton.$element.outerWidth(!0) + this.helpPopupButton.$element.outerWidth(!0) + this.cancelButton.$element.outerWidth(!0)), 
            e < a()(this, Zn) + 7 && (this.$element.addClass("cd-commentForm-short"), this.submitButton.setLabel(a()(this, ti)), 
            this.previewButton.setLabel(p.s("cf-preview-short")), this.viewChangesButton.setLabel(p.s("cf-viewchanges-short")), 
            this.cancelButton.setLabel(p.s("cf-cancel-short"))));
        }
        pushPending(e = !1) {
            this.commentInput.pushPending(), this.summaryInput.pushPending(), this.headlineInput && this.headlineInput.pushPending(), 
            e && (this.submitButton.setDisabled(!0), this.previewButton.setDisabled(!0), this.viewChangesButton.setDisabled(!0), 
            this.cancelButton.setDisabled(!0));
        }
        popPending(e = !1) {
            this.commentInput.popPending(), this.summaryInput.popPending(), this.headlineInput && this.headlineInput.popPending(), 
            e && (this.submitButton.setDisabled(!1), this.previewButton.setDisabled(!1), this.viewChangesButton.setDisabled(!1), 
            this.cancelButton.setDisabled(!1));
        }
        showMessage(e, {type: t = "notice", name: n, isRaw: i = !1} = {}) {
            if (this.destroyed || n && this.$messageArea.children(".cd-message-".concat(n)).length) return;
            let o;
            if (i) o = e; else {
                const i = e instanceof $ ? e : p.util.wrapInElement(e), s = [ "cd-message", n && "cd-message-".concat(n) ].filter(ke);
                o = new OO.ui.MessageWidget({
                    type: t,
                    inline: !0,
                    label: i,
                    classes: s
                }).$element;
            }
            this.$messageArea.append(o).cdAddCloseButton().cdScrollIntoView("top");
        }
        hideMessage(e) {
            const t = this.$messageArea.children(".cd-message-".concat(e));
            t.length && t.remove();
        }
        abort({message: e, messageType: t = "error", isRawMessage: n = !1, logMessage: i, doCancel: o = !1, currentOperation: s}) {
            s && this.closeOperation(s), this.destroyed || (i && console.warn(i), o ? (mw.notify(e, {
                type: "error",
                autoHideSeconds: "long"
            }), this.cancel(!1)) : (s && "preview" === s.type && p.settings.autopreview || this.showMessage(e, {
                type: t,
                isRaw: n
            }), this.$messageArea.cdScrollIntoView("top")));
        }
        handleError({type: e, code: t, details: n, apiData: i, message: s, messageType: r, logMessage: a, doCancel: c = !1, isRawMessage: u = !1, currentOperation: l}) {
            var d = this;
            return o()((function*() {
                switch (e) {
                  case "parse":
                    {
                        let e;
                        switch (t) {
                          case "locateComment":
                            e = d.targetSection ? d.targetSection.editUrl.href : p.g.CURRENT_PAGE.getUrl({
                                action: "edit",
                                section: 0
                            }), s = p.s("error-locatecomment", e);
                            break;

                          case "locateSection":
                            e = p.g.CURRENT_PAGE.getUrl({
                                action: "edit"
                            }), s = p.s("error-locatesection", e);
                            break;

                          case "numberedList-list":
                            s = p.s("cf-error-numberedlist") + " " + p.s("cf-error-numberedlist-list");
                            break;

                          case "numberedList-table":
                            s = p.s("cf-error-numberedlist") + " " + p.s("cf-error-numberedlist-table");
                            break;

                          case "findPlace":
                            s = p.s("cf-error-findplace");
                            break;

                          case "findPlace-unexpectedHeading":
                            s = p.s("cf-error-findplace-unexpectedheading");
                            break;

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

                          case "delete-repliesInSection":
                            s = p.s("cf-error-delete-repliesinsection");
                            break;

                          case "commentLinks-commentNotFound":
                            s = p.s("cf-error-commentlinks-commentnotfound", n.anchor);
                        }
                        const i = function() {
                            var t = o()((function*(t) {
                                t.preventDefault(), (yield d.confirmClose()) && (d.forget(), location.assign(e));
                            }));
                            return function(e) {
                                return t.apply(this, arguments);
                            };
                        }();
                        s = Me(s, [ "cd-message-reloadPage", o()((function*() {
                            (yield d.confirmClose()) && d.reloadPage();
                        })) ], [ "cd-message-editSection", i ], [ "cd-message-editPage", i ]);
                        break;
                    }

                  case "api":
                    switch (t) {
                      case "missing":
                        s = p.s("cf-error-pagedoesntexist");
                        break;

                      case "error":
                        {
                            const {code: e, info: t} = i.error;
                            switch (e) {
                              case "missingtitle":
                                s = p.s("cf-error-pagedoesntexist");
                                break;

                              default:
                                s = yield ae(e, t);
                            }
                            break;
                        }
                    }
                    (s = p.util.wrapInElement(s)).find(".mw-parser-output").css("display", "inline"), 
                    a = a || [ t, i ];
                    break;

                  case "network":
                  case "javascript":
                    s = (s ? "".concat(s, " ") : "") + p.s("error-".concat(e));
                }
                d.abort({
                    message: s,
                    messageType: r,
                    isRawMessage: u,
                    logMessage: a,
                    doCancel: c,
                    currentOperation: l
                });
            }))();
        }
        addIndentationChars(e, t) {
            return t + (t && !/^[:*#]/.test(e) && p.config.spaceAfterIndentationChars ? " " : "") + e;
        }
        commentTextToCode(e) {
            let t, n = !1;
            switch (this.mode) {
              case "reply":
                t = this.target.inCode.replyIndentationChars, n = !0;
                break;

              case "edit":
                t = this.target.inCode.indentationChars, n = Boolean(t);
                break;

              case "replyInSection":
                t = p.config.defaultIndentationChar, this.target.inCode.lastCommentIndentationChars && ("#" === this.target.inCode.lastCommentIndentationChars[0] ? t = "#" : "mimic" === p.config.indentationCharMode && (t = this.target.inCode.lastCommentIndentationChars[0])), 
                n = !0;
                break;

              default:
                t = "";
            }
            const i = "preview" === e || [ "addSection", "addSubsection" ].includes(this.mode) || "edit" === this.mode && !t, o = t.replace(/\*/g, ":");
            let s, r = this.commentInput.getValue();
            p.config.preTransformCode && (r = p.config.preTransformCode(r, this)), r = r.trim(), 
            ({code: r, hidden: s} = B(r));
            let c, u = !1;
            if (this.headlineInput || (r = r.replace(/^<small>([^]*)<\/small>$/i, (e, t) => (u = !0, 
            t))), r = r.replace(/^(?:[ \t\xA0\uFEFF]*\n)+(?! )/gm, e => e.replace(/^[ \t\uFEFF\xA0]+/gm, "")), 
            c = this.noSignatureCheckbox && this.noSignatureCheckbox.isSelected() ? "" : "edit" === this.mode ? this.target.inCode.signatureCode : p.g.CURRENT_USER_SIGNATURE, 
            !c || "edit" === this.mode && /^[ \t]*\n/.test(c) || !/\n[:*#].*$/.test(r) || (r += "\n", 
            "edit" === this.mode && (c = c.replace(/^\s+/, ""))), !i && (r = r.replace(/\n([:*#]+)/g, (e, t) => "\n" + o + t), 
            n && (/^[:*#]/m.test(r) || r.includes("\x03")))) {
                if ("#" === o) throw new l({
                    type: "parse",
                    code: "numberedList-list"
                });
                if (o.includes("#") && r.includes("\x03")) throw new l({
                    type: "parse",
                    code: "numberedList-table"
                });
                r = r.replace(/\n(?!:)/g, () => "\n" + o + (p.config.spaceAfterIndentationChars ? " " : ""));
            }
            if (n) {
                r = r.replace(/^ +/gm, "");
                const e = p.config.paragraphTemplates.length ? "$1{{".concat(p.config.paragraphTemplates[0], "}}") : "$1<br><br>";
                r = r.replace(/^((?![:*#= ]).*)\n\n(?![:*#=])/gm, e);
            }
            const d = new RegExp("^(?:\\x01.+?\\x02|\\[\\[".concat(p.g.FILE_PREFIX_PATTERN, ".+\\]\\]) *$"), "i"), h = new RegExp("(?:<".concat(p.g.PNIE_PATTERN, "(?: [\\w ]+?=[^<>]+?| ?\\/?)>|<\\/").concat(p.g.PNIE_PATTERN, ">|\\x04) *$"), "i"), m = new RegExp("^(?:<\\/".concat(p.g.PNIE_PATTERN, ">|<").concat(p.g.PNIE_PATTERN, ")"), "i");
            if (r = r.replace(/^((?![:*#= ]).+)\n(?![\n:*#= \x03])(?=(.*))/gm, (e, t, i) => t + (d.test(t) || d.test(i) || h.test(t) || m.test(i) ? "" : "<br>") + (n ? "" : "\n")), 
            r = r.replace(/\s*~{3,}$/, ""), !i && /^(#|.*\x03)/.test(r) && (t = o), this.headlineInput) {
                let e;
                e = "addSection" === this.mode ? 2 : "addSubsection" === this.mode ? this.target.level + 1 : this.target.inCode.headingLevel;
                const t = "=".repeat(e);
                a()(this, si) && /^\n/.test(this.target.inCode.code) && (r = "\n" + r), r = "".concat(t, " ").concat(this.headlineInput.getValue().trim(), " ").concat(t, "\n").concat(r);
            }
            if ("preview" === e && c && (c = '<span class="cd-commentForm-signature">'.concat(c, "</span>")), 
            /^\s/.test(c) || !r || /[\s>]$/.test(r) || (r += " "), /(?:^|\n) .*$/.test(r) && (r += "\n"), 
            r += c, !this.headlineInput && u) {
                const e = o + (/^[:*#]/.test(r) || !p.config.spaceAfterIndentationChars ? "" : " "), t = /^[:*# ]/.test(r) ? "\n".concat(e) : "";
                if (p.config.blockSmallTemplate && !/^[:*#]/m.test(r)) {
                    const e = r.replace(/\|/g, "{{!}}");
                    r = "{{".concat(p.config.blockSmallTemplate, "|1=").concat(e, "}}");
                } else r = "<small>".concat(t).concat(r, "</small>");
            }
            let g;
            return "edit" !== this.mode && (r += "\n"), "submit" === e && (r = this.addIndentationChars(r, t), 
            n && "edit" === this.mode && /^[:*]/.test(this.target.inCode.code) && !/^[:*]/.test(r) && (r = " " + r), 
            "addSubsection" === this.mode && (r += "\n")), "preview" === e && n && this.commentInput.getValue().trim() ? (r = r.replace(/^/gm, ":"), 
            g = !0) : g = !1, r = Ue(r, s), p.config.postTransformCode && (r = p.config.postTransformCode(r, this)), 
            {
                commentCode: r,
                doImitateList: g
            };
        }
        prepareNewPageCode(e, t) {
            const n = this.deleteCheckbox && this.deleteCheckbox.isSelected();
            this.target instanceof ve || this.target.locateInCode(e);
            let {newPageCode: i, codeBeforeInsertion: o, commentCode: s} = this.target.modifyCode(e, {
                action: this.mode,
                doDelete: n,
                commentForm: this
            });
            "submit" !== t || n || M(o, !0);
            const r = /\[\[#(\d{12}_[^|\]]+)/g, a = [];
            let c;
            for (;c = r.exec(s); ) a.push(c[1]);
            return a.forEach(e => {
                const t = Ni.getCommentByAnchor(e);
                if (t) {
                    t.locateInCode(i);
                    const n = p.config.getAnchorCode(e);
                    if (t.inCode.code.includes(n)) return;
                    let o = this.addIndentationChars(t.inCode.code, t.inCode.indentationChars);
                    const s = o.match(/^[:*#]* */)[0].length;
                    o = o.slice(0, s) + n + o.slice(s);
                    const r = (t.inCode.headingCode || "") + o + t.inCode.signatureDirtyCode;
                    ({newPageCode: i} = t.modifyCode(i, {
                        action: "edit",
                        commentCode: r
                    }));
                } else if (!$("#" + e).length) throw new l({
                    type: "parse",
                    code: "commentLinks-commentNotFound",
                    details: {
                        anchor: e
                    }
                });
            }), i;
        }
        tryPrepareNewPageCode(e) {
            var t = this;
            return o()((function*() {
                try {
                    yield t.targetPage.getCode();
                } catch (e) {
                    return void (e instanceof l ? t.handleError(Object.assign({}, {
                        message: p.s("cf-error-getpagecode")
                    }, e.data)) : t.handleError({
                        type: "javascript",
                        logMessage: e
                    }));
                }
                let n;
                try {
                    n = t.prepareNewPageCode(t.targetPage.code, e);
                } catch (e) {
                    return void (e instanceof l ? t.handleError(e.data) : t.handleError({
                        type: "javascript",
                        logMessage: e
                    }));
                }
                return n;
            }))();
        }
        registerOperation(e) {
            return this.operations.push(e), e.closed = !1, "preview" === e.type && e.auto || (this.$messageArea.empty(), 
            this.pushPending([ "load", "submit" ].includes(e.type))), e;
        }
        closeOperationIfNecessary(e, t) {
            if (e.closed) return !0;
            const n = function(e, t) {
                for (let n = e.length - 1; n >= 0; n--) if (t(e[n])) return n;
                return null;
            }(this.operations, t => e !== t && [ "preview", "viewChanges" ].includes(t.type) && !t.delayed);
            return !!(null !== n && n > this.operations.indexOf(e) || t) && (this.closeOperation(e), 
            !0);
        }
        closeOperation(e) {
            e.closed = !0, "preview" === e.type && e.auto || this.popPending([ "load", "submit" ].includes(e.type));
        }
        unregisterOperation(e) {
            this.operations.includes(e) && this.operations.splice(this.operations.indexOf(e), 1), 
            "preview" === e.type && e.auto || this.popPending("submit" === e.type);
        }
        isBeingSubmitted() {
            return this.operations.some(e => "submit" === e.type && !e.closed);
        }
        preview(e = !0, t = !0, n) {
            var i = this;
            return o()((function*() {
                if (i.operations.some(e => !e.closed && "load" === e.type) || !(i.target instanceof ve) && !i.target.inCode && i.checkCodeRequest && "resolved" === i.checkCodeRequest.state() || i.isBeingSubmitted() || t && !p.settings.autopreview) return void (n && i.closeOperation(n));
                const o = n || i.registerOperation({
                    type: "preview",
                    auto: t
                });
                if (t) {
                    const t = Date.now() - a()(i, ni) < 1e3;
                    if (t || i.operations.some(e => !e.closed && "preview" === e.type && e !== o)) return void (a()(i, ii) ? i.unregisterOperation(o) : (o.delayed = !0, 
                    u()(i, ii, setTimeout(() => {
                        u()(i, ii, null), i.preview(e, !0, o);
                    }, t ? 1e3 - (Date.now() - a()(i, ni)) : 100))));
                    u()(i, ni, Date.now());
                }
                if (i.closeOperationIfNecessary(o)) return;
                if (!(i.target instanceof ve || i.target.inCode) && (yield i.checkCode(), i.closeOperationIfNecessary(o, !i.target.inCode))) return;
                const s = !(i.commentInput.getValue().trim() || i.headlineInput && i.headlineInput.getValue().trim());
                if (s && !e) return void i.closeOperation(o);
                const {commentCode: r, doImitateList: c} = i.commentTextToCode("preview");
                let d, h;
                try {
                    ({html: d, parsedSummary: h} = yield oe(r, {
                        title: i.targetPage.name,
                        summary: p.util.buildEditSummary({
                            text: i.summaryInput.getValue()
                        })
                    }));
                } catch (e) {
                    return void (e instanceof l ? i.handleError(Object.assign({}, e.data, {
                        message: p.s("cf-error-preview"),
                        currentOperation: o
                    })) : i.handleError({
                        type: "javascript",
                        logMessage: e,
                        currentOperation: o
                    }));
                }
                if (!i.closeOperationIfNecessary(o)) {
                    if (d) {
                        if (t && s || i.deleteCheckbox && i.deleteCheckbox.isSelected()) i.$previewArea.empty(); else {
                            const e = $("<div>").addClass("cd-commentForm-blockLabel").text(p.s("cf-block-preview"));
                            i.$previewArea.html(d).prepend(e).cdAddCloseButton(), c ? i.$previewArea.addClass("cd-previewArea-indentedComment") : i.$previewArea.removeClass("cd-previewArea-indentedComment"), 
                            mw.hook("convenientDiscussions.previewReady").fire(i.$previewArea), t || mw.hook("wikipage.content").fire(i.$previewArea);
                        }
                        const e = h && p.util.wrapInElement(h);
                        e.length && i.$element.find(".cd-summaryPreview").html("".concat(p.s("cf-summary-preview"), ': <span class="comment">').concat(e.html(), "</span>"));
                    }
                    p.settings.autopreview && (i.previewButton.$element.hide(), i.viewChangesButton.$element.show(), 
                    i.adjustLabels()), i.$previewArea.hasClass("cd-previewArea-above") && i.$previewArea.cdScrollIntoView("top"), 
                    i.closeOperation(o);
                }
            }))();
        }
        viewChanges() {
            var e = this;
            return o()((function*() {
                if (e.isBeingSubmitted()) return;
                const t = e.registerOperation({
                    type: "viewChanges"
                }), n = (yield e.tryPrepareNewPageCode("viewChanges")) || {};
                if (e.closeOperationIfNecessary(t, void 0 === n)) return;
                let i;
                mw.loader.load("mediawiki.diff.styles");
                try {
                    const t = {
                        action: "compare",
                        toslots: "main",
                        "totext-main": n,
                        prop: "diff",
                        formatversion: 2
                    };
                    mw.config.get("wgArticleId") ? t.fromrev = e.targetPage.revisionId : (t.fromslots = "main", 
                    t["fromtext-main"] = ""), i = yield p.g.api.post(t).catch(Ie);
                } catch (n) {
                    return void (n instanceof l ? e.handleError(Object.assign({}, n.data, {
                        message: p.s("cf-error-viewchanges"),
                        currentOperation: t
                    })) : e.handleError({
                        type: "javascript",
                        logMessage: n,
                        currentOperation: t
                    }));
                }
                if (e.closeOperationIfNecessary(t)) return;
                let o = i && i.compare && i.compare.body;
                if (o) {
                    o = p.util.wrapDiffBody(o);
                    const t = $("<div>").addClass("cd-commentForm-blockLabel").text(p.s("cf-block-viewchanges"));
                    e.$previewArea.html(o).prepend(t).cdAddCloseButton();
                } else e.$previewArea.empty(), void 0 !== o && e.showMessage(p.s("cf-notice-nochanges"));
                p.settings.autopreview && (e.viewChangesButton.$element.hide(), e.previewButton.$element.show(), 
                e.adjustLabels()), e.$previewArea.cdScrollIntoView(e.$previewArea.hasClass("cd-previewArea-above") ? "top" : "bottom"), 
                e.closeOperation(t);
            }))();
        }
        reloadPage(e, t) {
            var n = this;
            return o()((function*() {
                n.forget();
                try {
                    yield Dt(e);
                } catch (e) {
                    e instanceof l ? n.handleError(Object.assign({}, e.data, {
                        message: p.s("error-reloadpage-saved"),
                        doCancel: !0,
                        currentOperation: t
                    })) : n.handleError({
                        type: "javascript",
                        logMessage: e,
                        doCancel: !0,
                        currentOperation: t
                    }), Bt();
                }
            }))();
        }
        runChecks({doDelete: e}) {
            var t = this;
            return o()((function*() {
                const n = [ {
                    condition: t.headlineInput && "" === t.headlineInput.getValue(),
                    confirmation: (u = o()((function*() {
                        const e = a()(t, ri) === p.s("cf-headline-topic") ? p.s("cf-confirm-noheadline-topic") : p.s("cf-confirm-noheadline-subsection");
                        return yield OO.ui.confirm(e + " " + p.s("cf-confirm-noheadline-question"));
                    })), function() {
                        return u.apply(this, arguments);
                    })
                }, {
                    condition: !(t.commentInput.getValue().trim() || p.config.noConfirmPostEmptyCommentPageRegexp && p.config.noConfirmPostEmptyCommentPageRegexp.test(p.g.CURRENT_PAGE.name)),
                    confirmation: (c = o()((function*() {
                        return yield OO.ui.confirm(p.s("cf-confirm-empty"));
                    })), function() {
                        return c.apply(this, arguments);
                    })
                }, {
                    condition: t.commentInput.getValue().trim().length > p.config.longCommentThreshold,
                    confirmation: (r = o()((function*() {
                        return yield OO.ui.confirm(p.s("cf-confirm-long", p.config.longCommentThreshold));
                    })), function() {
                        return r.apply(this, arguments);
                    })
                }, {
                    condition: /^==[^=]/m.test(t.commentInput.getValue()) && "edit" !== t.mode,
                    confirmation: (s = o()((function*() {
                        return yield OO.ui.confirm(p.s("cf-confirm-secondlevelheading"));
                    })), function() {
                        return s.apply(this, arguments);
                    })
                }, {
                    condition: e,
                    confirmation: (i = o()((function*() {
                        return yield Sn("cf-confirm-delete");
                    })), function() {
                        return i.apply(this, arguments);
                    })
                } ];
                var i, s, r, c, u;
                for (const e of n) if (e.condition && !(yield e.confirmation())) return t.commentInput.focus(), 
                !1;
                return !0;
            }))();
        }
        tryEditPage(e, t, n) {
            var i = this;
            return o()((function*() {
                let o;
                try {
                    o = i.targetPage.edit({
                        text: t,
                        summary: p.util.buildEditSummary({
                            text: i.summaryInput.getValue()
                        }),
                        tags: p.config.tagName,
                        baserevid: e.revisionId,
                        starttimestamp: e.queryTimestamp,
                        minor: i.minorCheckbox && i.minorCheckbox.isSelected(),
                        watchlist: i.watchCheckbox.isSelected() ? "watch" : "unwatch"
                    });
                } catch (e) {
                    if (e instanceof l) {
                        const {type: t, details: o} = e.data;
                        if ("network" === t) i.handleError({
                            type: t,
                            message: p.s("cf-error-couldntedit"),
                            currentOperation: n
                        }); else {
                            let e, {code: s, message: r, isRawMessage: a, logMessage: c} = o;
                            "editconflict" === s && (r += " " + p.s("cf-notice-editconflict-retrying"), e = "notice", 
                            i.submit()), i.handleError({
                                type: t,
                                message: r,
                                messageType: e,
                                isRawMessage: a,
                                logMessage: c,
                                currentOperation: n
                            });
                        }
                    } else i.handleError({
                        type: "javascript",
                        logMessage: e,
                        currentOperation: n
                    });
                    return null;
                }
                return o;
            }))();
        }
        submit() {
            var e = this;
            return o()((function*() {
                if (e.operations.some(e => !e.closed && "load" === e.type)) return;
                const t = e.deleteCheckbox && e.deleteCheckbox.isSelected();
                if (!(yield e.runChecks({
                    doDelete: t
                }))) return;
                const n = e.registerOperation({
                    type: "submit"
                }), i = (yield e.tryPrepareNewPageCode("submit")) || {};
                if (void 0 === i) return void e.closeOperation(n);
                const o = yield e.tryEditPage(e.targetPage, i, n);
                if (!o) return;
                let s = {
                    didSubmitCommentForm: !0
                };
                if (mw.config.get("wgArticleId") || (mw.config.set("wgArticleId", e.targetPage.pageId), 
                s.wasPageCreated = !0), e.watchSectionCheckbox) if (e.watchSectionCheckbox.isSelected()) {
                    const t = a()(e, si) && e.headlineInput.getValue() !== e.originalHeadline;
                    if ("addSection" === e.mode || "addSubsection" === e.mode || t) {
                        const n = P(e.headlineInput.getValue());
                        if (Kn.watchSection(n, {
                            silent: !0
                        }), s.justWatchedSection = n, t) {
                            const t = P(e.originalHeadline);
                            Kn.unwatchSection(t, {
                                silent: !0
                            }), s.justUnwatchedSection = t;
                        }
                    } else {
                        const t = e.targetSection;
                        t && !t.watched && (t.watch(!0), s.justWatchedSection = t.headline);
                    }
                } else {
                    const t = e.targetSection;
                    t && t.watched && (t.unwatch(!0), s.justUnwatchedSection = t.headline);
                }
                e.watchCheckbox.isSelected() && $("#ca-watch").length && $("#ca-watch").attr("id", "cd-unwatch"), 
                !e.watchCheckbox.isSelected() && $("#ca-unwatch").length && $("#ca-unwatch").attr("id", "cd-watch"), 
                t || (s.commentAnchor = "edit" === e.mode ? e.target.anchor : T(new Date(o), p.g.CURRENT_USER_NAME, !0)), 
                e.reloadPage(s, n);
            }))();
        }
        confirmClose() {
            var e = this;
            return o()((function*() {
                return !e.isAltered() || (yield Sn("cf-confirm-close"));
            }))();
        }
        cancel(e = !0) {
            var t = this;
            return o()((function*() {
                p.util.isPageOverlayOn() || t.isBeingSubmitted() || (!e || (yield t.confirmClose()) ? (t.destroy(), 
                "reply" === t.mode ? t.target.scrollIntoView("top") : "replyInSection" === t.mode ? (t.target.$replyButton.show(), 
                t.target.$replyWrapper.removeClass("cd-replyWrapper-hasCommentForm")) : "edit" === t.mode && (t.target.$elements.removeClass("cd-hidden"), 
                t.target.scrollIntoView("top"), t.target.configureLayers())) : t.commentInput.focus());
            }))();
        }
        destroy() {
            this.operations.filter(e => !e.closed).forEach(this.closeOperation.bind(this)), 
            this.forget(), this.$element.remove(), this.destroyed = !0;
        }
        forget() {
            delete this.target[ci.modeToProperty(this.mode) + "Form"], p.commentForms.includes(this) && p.commentForms.splice(p.commentForms.indexOf(this), 1), 
            Ht();
        }
        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();
        }
        updateAutoSummary(e = !0, t = !1) {
            if (this.summaryAltered) return;
            u()(this, oi, t);
            const n = this.autoText(), i = this.headlineInput && "addSubsection" !== this.mode ? P(this.headlineInput.getValue()) : a()(this, Qn);
            let o;
            if ([ "reply", "replyInSection" ].includes(this.mode)) {
                const e = this.commentInput.getValue().trim().replace(/\s+/g, " ").replace(/\[\[:?(?:([^|[\]<>\n]+)\|)?(.+?)\]\]/g, (e, t, n) => p.g.USER_NAMESPACE_ALIASES_REGEXP.test(t) ? n : e);
                e && e.length <= p.config.summaryCommentTextLengthLimit && (o = ": ".concat(e, " (-)"));
            } else if ("addSubsection" === this.mode) {
                const e = P(this.headlineInput.getValue());
                e && (o = ": /* ".concat(e, " */"));
            }
            this.autoSummary = p.util.buildEditSummary({
                text: n,
                section: i,
                optionalText: o,
                addPostfix: !1
            }), e && this.summaryInput.setValue(this.autoSummary);
        }
        autoText() {
            switch (u()(this, ai, a()(this, ai) || this.updateAutoSummary.bind(this)), this.mode) {
              case "reply":
                return this.target.isOpeningSection ? p.s("es-reply") : (this.target.requestAuthorGenderIfNeeded(a()(this, ai)), 
                this.target.own ? p.s("es-addition") : Fe(p.s("es-reply-to", this.target.author.name, this.target.author)));

              case "edit":
                return (e => {
                    let t, n = this.target;
                    return this.target.own ? this.target.parent ? 0 === this.target.parent.level ? t = "reply" : (this.target.parent.requestAuthorGenderIfNeeded(a()(this, ai)), 
                    t = this.target.parent.own ? "addition" : "reply-to", n = this.target.parent) : t = this.target.isOpeningSection ? this.targetSection.parent ? "subsection" : "topic" : "comment" : this.target.isOpeningSection ? t = this.targetSection.parent ? "subsection" : "topic" : (this.target.requestAuthorGenderIfNeeded(a()(this, ai)), 
                    t = "comment-by"), Fe(p.s("es-".concat(e, "-").concat(t), n.author.name, n.author));
                })(this.deleteCheckbox && this.deleteCheckbox.isSelected() ? "delete" : "edit");

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

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

              case "addSubsection":
                return p.s("es-new-subsection");
            }
        }
        updateFormOnDeleteCheckboxChange(e) {
            e ? (this.initialMinorCheckboxSelected = this.minorCheckbox.isSelected(), this.minorCheckbox.setSelected(!1), 
            this.commentInput.setDisabled(!0), this.headlineInput && this.headlineInput.setDisabled(!0), 
            this.minorCheckbox.setDisabled(!0), this.noSignatureCheckbox && this.noSignatureCheckbox.setDisabled(!0), 
            this.$element.addClass("cd-commentForm-disabled"), u()(this, ei, p.s("cf-delete-button")), 
            u()(this, ti, p.s("cf-delete-button-short")), this.submitButton.clearFlags().setFlags([ "destructive", "primary" ]).setLabel(this.$element.hasClass("cd-commentForm-short") ? a()(this, ei) : a()(this, ti))) : (this.minorCheckbox.setSelected(this.initialMinorCheckboxSelected), 
            this.commentInput.setDisabled(!1), this.headlineInput && this.headlineInput.setDisabled(!1), 
            this.minorCheckbox.setDisabled(!1), this.noSignatureCheckbox && this.noSignatureCheckbox.setDisabled(!1), 
            this.$element.removeClass("cd-commentForm-disabled"), u()(this, ei, p.s("cf-save")), 
            u()(this, ti, p.s("cf-save-short")), this.submitButton.clearFlags().setFlags([ "progressive", "primary" ]).setLabel(this.$element.hasClass("cd-commentForm-short") ? a()(this, ei) : a()(this, ti)));
        }
        mention() {
            if (!this.autocomplete) return;
            const e = this.commentInput.getRange().to, t = e && this.commentInput.getValue().slice(e - 1, e);
            e && " " !== t && "\n" !== t && this.commentInput.insertContent(" "), this.commentInput.insertContent("@");
            const n = this.commentInput.$input.get(0);
            n.dispatchEvent(new Event("keydown")), n.dispatchEvent(new Event("input")), n.dispatchEvent(new Event("keyup"));
        }
        quote(e = !1) {
            const t = De() ? document.activeElement.value.substring(document.activeElement.selectionStart, document.activeElement.selectionEnd) : window.getSelection().toString().trim();
            if (t || !e) {
                const e = this.commentInput.$input.is(":focus"), n = this.commentInput.getRange(), i = n.to, o = Math.min(n.to, n.from), s = Math.max(n.to, n.from), r = this.commentInput.getValue(), a = p.config.quoteFormatting[0], c = p.config.quoteFormatting[1], u = a + (t || p.s("cf-quote-placeholder")) + c, l = (e ? o : i) + (t ? u.length : a.length), d = t ? l : l + p.s("cf-quote-placeholder").length, h = e ? r.slice(0, o) + u + r.slice(s) : r.slice(0, i) + u + r.slice(i);
                this.commentInput.setValue(h), this.commentInput.selectRange(l, d);
            }
        }
        static modeToProperty(e) {
            return "replyInSection" === e ? "addReply" : e;
        }
        static getLastActiveCommentForm() {
            return p.commentForms.slice().sort(Jn)[0] || null;
        }
        static getLastActiveAlteredCommentForm() {
            return p.commentForms.slice().sort(Jn).find(e => e.isAltered()) || null;
        }
    }
    var ui = new WeakMap, li = new WeakMap;
    function di(e, t) {
        const n = new RegExp("[".concat(p.g.LETTER_PATTERN, "]{3,}"), "g"), i = _e(e.match(n)), o = _e(t.match(n));
        if (!i || !o) return 0;
        let s = o.length, r = 0;
        return i.forEach(e => {
            o.some(t => t === e) ? r++ : s++;
        }), r / s;
    }
    var hi = new WeakMap, mi = new WeakMap, pi = new WeakMap, gi = new WeakMap, fi = new WeakMap, bi = new WeakMap, yi = new WeakMap, wi = new WeakMap, Ei = new WeakMap, vi = new WeakMap, _i = new WeakMap, Ci = new WeakMap, xi = new WeakMap, Ti = new WeakMap, Ai = new WeakMap, Si = new WeakMap, ki = new WeakMap;
    class Ni extends class {
        constructor(e, t) {
            ui.set(this, {
                writable: !0,
                value: void 0
            }), li.set(this, {
                writable: !0,
                value: void 0
            }), u()(this, ui, e);
            let n = a()(this, ui).collectParts(t.element);
            n = a()(this, ui).removeNestedParts(n), n = a()(this, ui).encloseInlineParts(n, t.element), 
            n = a()(this, ui).filterParts(n), n.reverse(), n = a()(this, ui).replaceListsWithItems(n, t.element), 
            this.id = p.comments.length, this.date = t.date || null, this.timestamp = t.timestampText, 
            this.authorName = t.authorName, this.own = this.authorName === p.g.CURRENT_USER_NAME, 
            this.anchor = t.anchor, this.unsigned = t.unsigned, this.parts = n, this.elements = this.parts.map(e => e.node);
            if (this.highlightables = this.elements.filter(e => !/^H[1-6]$/.test(e.tagName) && !p.g.UNHIGHLIGHTABLE_ELEMENTS_CLASSES.some(t => e.classList.contains(t)) && !/float: *(?:left|right)/.test(e.getAttribute("style"))), 
            !this.highlightables.length) throw new l;
            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 e = this.parts[0].node.tagName.match(/^H([1-6])$/);
                this.openingSectionOfLevel = e && Number(e[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(e => {
                e.classList.add("cd-commentPart"), e.setAttribute("data-comment-id", String(this.id));
            });
        }
        setLevels() {
            const e = {};
            e.top = a()(this, ui).getLevelsUpTree(this.highlightables[0]), e.bottom = this.highlightables.length > 1 ? a()(this, ui).getLevelsUpTree(this.highlightables[this.highlightables.length - 1]) : e.top, 
            this.level = Math.min(e.top.length, e.bottom.length);
            for (let t = 0; t < this.level; t++) e.top[t] && e.top[t].classList.add("cd-commentLevel", "cd-commentLevel-".concat(t + 1)), 
            e.bottom[t] && e.bottom[t] !== e.top[t] && e.bottom[t].classList.add("cd-commentLevel", "cd-commentLevel-".concat(t + 1));
        }
        getSection() {
            return p.sections.slice().reverse().find(e => e.comments.includes(this)) || null;
        }
        get section() {
            return void 0 === a()(this, li) && u()(this, li, this.getSection()), a()(this, li);
        }
        get sourcePage() {
            return this.section ? this.section.sourcePage : p.g.CURRENT_PAGE;
        }
    } {
        constructor(e, t) {
            super(e, t), hi.set(this, {
                writable: !0,
                value: void 0
            }), mi.set(this, {
                writable: !0,
                value: void 0
            }), pi.set(this, {
                writable: !0,
                value: void 0
            }), gi.set(this, {
                writable: !0,
                value: void 0
            }), fi.set(this, {
                writable: !0,
                value: void 0
            }), bi.set(this, {
                writable: !0,
                value: void 0
            }), yi.set(this, {
                writable: !0,
                value: void 0
            }), wi.set(this, {
                writable: !0,
                value: void 0
            }), Ei.set(this, {
                writable: !0,
                value: void 0
            }), vi.set(this, {
                writable: !0,
                value: void 0
            }), _i.set(this, {
                writable: !0,
                value: void 0
            }), Ci.set(this, {
                writable: !0,
                value: void 0
            }), xi.set(this, {
                writable: !0,
                value: void 0
            }), Ti.set(this, {
                writable: !0,
                value: void 0
            }), Ai.set(this, {
                writable: !0,
                value: void 0
            }), Si.set(this, {
                writable: !0,
                value: void 0
            }), ki.set(this, {
                writable: !0,
                value: void 0
            }), u()(this, hi, p.g.COMMENT_ELEMENT_PROTOTYPES), this.author = b.getUser(this.authorName), 
            delete this.authorName, this.signatureElement = t.element, this.timestampElement = t.timestampElement, 
            this.actionable = p.g.isPageActive && !p.g.specialElements.closedDiscussions.some(e => e.contains(this.elements[0])), 
            this.highlightables.forEach(e => {
                this.bindEvents(e);
            });
        }
        bindEvents(e) {
            e.onmouseenter = this.highlightFocused.bind(this), e.onmouseleave = this.unhighlightFocused.bind(this), 
            e.ontouchstart = this.highlightFocused.bind(this);
        }
        getPositions(e = {}) {
            if (void 0 === e.considerFloating && (e.considerFloating = !1), this.positions = null, 
            this.editForm) return;
            let t = e.rectTop || this.highlightables[0].getBoundingClientRect(), n = e.rectBottom || (1 === this.elements.length ? t : this.highlightables[this.highlightables.length - 1].getBoundingClientRect());
            if (0 === t.left) return;
            const i = window.pageYOffset + t.top, o = window.pageYOffset + n.bottom;
            if (e.considerFloating) {
                const i = (e.floatingRects || p.g.specialElements.floating.map(e => {
                    const t = e.getBoundingClientRect();
                    return {
                        top: t.top - Number(e.getAttribute("data-margin-top")),
                        bottom: t.bottom + Number(e.getAttribute("data-margin-bottom"))
                    };
                })).some(e => {
                    const t = window.pageYOffset + e.top, n = window.pageYOffset + e.bottom;
                    return o > t && o < n + p.g.REGULAR_LINE_HEIGHT;
                }), s = [];
                if (i) for (let e = 0; e < this.elements.length; e++) s[e] = this.elements[e].style.overflow, 
                this.elements[e].style.overflow = "hidden";
                if (t = this.highlightables[0].getBoundingClientRect(), n = 1 === this.elements.length ? t : this.highlightables[this.highlightables.length - 1].getBoundingClientRect(), 
                i) for (let e = 0; e < this.elements.length; e++) this.elements[e].style.overflow = s[e];
            }
            const s = window.pageXOffset + Math.min(t.left, n.left), r = window.pageXOffset + Math.max(t.right, n.right), a = o - i > window.innerHeight - 200 ? i + (window.innerHeight - 200) : o;
            this.positions = {
                top: i,
                bottom: o,
                left: s,
                right: r,
                downplayedBottom: a
            };
        }
        calculateLayersPositions(e = {}) {
            if (this.getPositions(Object.assign({}, e, {
                considerFloating: !0
            })), !this.positions) return null;
            u()(this, mi, this.highlightables[0].offsetWidth);
            const t = this.getLayersContainerOffset();
            return {
                underlayTop: -t.top + this.positions.top,
                underlayLeft: -t.left + this.positions.left - p.g.COMMENT_UNDERLAY_SIDE_MARGIN,
                underlayWidth: this.positions.right - this.positions.left + 2 * p.g.COMMENT_UNDERLAY_SIDE_MARGIN,
                underlayHeight: this.positions.bottom - this.positions.top
            };
        }
        createLayers() {
            u()(this, pi, a()(this, hi).underlay.cloneNode(!0)), this.newness && a()(this, pi).classList.add("cd-commentUnderlay-new"), 
            p.settings.highlightOwnComments && this.own && a()(this, pi).classList.add("cd-commentUnderlay-own"), 
            a()(this, pi).cdTarget = this, Ve.underlays.push(a()(this, pi)), u()(this, wi, a()(this, hi).overlay.cloneNode(!0)), 
            u()(this, Ei, a()(this, wi).firstChild), a()(this, Ei).oncontextmenu = e => {
                e.preventDefault(), a()(this, wi).style.display = "none";
            }, u()(this, _i, a()(this, Ei).firstChild), u()(this, vi, a()(this, Ei).lastChild), 
            this.parent && (this.goToParentButton = a()(this, hi).goToParentButton.cloneNode(!0), 
            this.goToParentButton.firstChild.onclick = () => {
                this.goToParent();
            }, a()(this, vi).appendChild(this.goToParentButton)), !this.anchor || p.g.IS_ARCHIVE_PAGE && "diff" === p.settings.defaultCommentLinkType || (this.linkButton = a()(this, hi).linkButton.cloneNode(!0), 
            this.linkButton.firstChild.onclick = this.copyLink.bind(this), a()(this, vi).appendChild(this.linkButton)), 
            this.author.registered && this.date && !this.own && !p.g.IS_ARCHIVE_PAGE && (this.thankButton = a()(this, hi).thankButton.cloneNode(!0), 
            this.thankButton.firstChild.onclick = () => {
                this.thank();
            }, a()(this, vi).appendChild(this.thankButton)), this.actionable && ((this.own || p.settings.allowEditOthersComments) && (this.editButton = a()(this, hi).editButton.cloneNode(!0), 
            this.editButton.firstChild.onclick = () => {
                this.edit();
            }, a()(this, vi).appendChild(this.editButton)), this.replyButton = a()(this, hi).replyButton.cloneNode(!0), 
            this.replyButton.firstChild.onclick = () => {
                this.replyForm ? this.replyForm.cancel() : this.reply();
            }, a()(this, vi).appendChild(this.replyButton)), this.$underlay = $(a()(this, pi)), 
            this.$overlay = $(a()(this, wi)), this.$overlayContent = $(a()(this, vi)), this.$overlayGradient = $(a()(this, _i)), 
            mw.hook("convenientDiscussions.commentLayersCreated").fire(this);
        }
        configureLayers(e = !0, t) {
            if (this.editForm) return null;
            const n = {
                doSet: e,
                floatingRects: t
            };
            n.rectTop = this.highlightables[0].getBoundingClientRect(), n.rectBottom = 1 === this.elements.length ? n.rectTop : this.highlightables[this.highlightables.length - 1].getBoundingClientRect();
            const i = this.getLayersContainerOffset(), o = a()(this, pi) && (-i.top + window.pageYOffset + n.rectTop.top !== a()(this, gi) || n.rectBottom.bottom - n.rectTop.top !== a()(this, yi) || this.highlightables[0].offsetWidth !== a()(this, mi));
            if (!a()(this, pi) || o) {
                const e = this.calculateLayersPositions(n);
                e && (u()(this, gi, e.underlayTop), u()(this, fi, e.underlayLeft), u()(this, bi, e.underlayWidth), 
                u()(this, yi, e.underlayHeight));
            }
            return void 0 === a()(this, fi) ? null : a()(this, pi) ? (this.newness && !a()(this, pi).classList.contains("cd-commentUnderlay-new") && a()(this, pi).classList.add("cd-commentUnderlay-new"), 
            o && n.doSet && this.updateLayersPositions(), o) : (this.createLayers(), n.doSet && this.addLayers(), 
            !1);
        }
        addLayers() {
            a()(this, pi) && (this.updateLayersPositions(), this.getLayersContainer().appendChild(a()(this, pi)), 
            this.getLayersContainer().appendChild(a()(this, wi)));
        }
        updateLayersPositions() {
            a()(this, pi).style.top = a()(this, wi).style.top = a()(this, gi) + "px", a()(this, pi).style.left = a()(this, wi).style.left = a()(this, fi) + "px", 
            a()(this, pi).style.width = a()(this, wi).style.width = a()(this, bi) + "px", a()(this, pi).style.height = a()(this, wi).style.height = a()(this, yi) + "px";
        }
        highlightFocused() {
            p.util.isPageOverlayOn() || !this.configureLayers() && a()(this, pi) && (a()(this, pi).classList.add("cd-commentUnderlay-focused"), 
            a()(this, wi).classList.add("cd-commentOverlay-focused"));
        }
        unhighlightFocused() {
            a()(this, pi) && (a()(this, pi).classList.remove("cd-commentUnderlay-focused"), 
            a()(this, wi).classList.remove("cd-commentOverlay-focused"), a()(this, wi).style.display = "");
        }
        highlightTarget() {
            if (this.configureLayers(), !this.$underlay) return;
            const e = this.$underlay.add(this.$overlayContent).add(this.$overlayGradient).css("background-image", "none").css("background-color", "");
            let t = window.getComputedStyle(this.$underlay.get(0)).backgroundColor;
            "rgba(0, 0, 0, 0)" === t && this.backgroundColor && (t = this.backgroundColor), 
            this.$underlay.addClass("cd-commentUnderlay-target");
            const n = window.getComputedStyle(this.$underlay.get(0)).backgroundColor;
            this.$underlay.removeClass("cd-commentUnderlay-target"), e.stop().css("background-color", n), 
            clearTimeout(a()(this, Ci)), u()(this, Ci, setTimeout(() => {
                this.newness && (t = p.g.COMMENT_UNDERLAY_NEW_COLOR), e.animate({
                    backgroundColor: t
                }, 400, "swing", (function() {
                    $(this).css("background-image", "").css("background-color", "");
                }));
            }, 1500));
        }
        scrollIntoView(e) {
            (this.editForm ? this.editForm.$element : this.$elements).cdScrollIntoView(e);
        }
        scrollToAndHighlightTarget(e = !0) {
            (this.editForm ? this.editForm.$element : this.$elements).cdScrollIntoView(this.isOpeningSection || this.editForm ? "top" : "center", e), 
            this.highlightTarget();
        }
        replaceButton(e, t, n) {
            a()(this, vi).insertBefore(t, e), e.parentNode.removeChild(e), this[n + "Button"] = t;
        }
        goToParent() {
            if (!this.parent) return void console.error("This comment has no parent.");
            this.parent.scrollToAndHighlightTarget("center");
            const e = new OO.ui.ButtonWidget({
                label: p.s("cm-gotochild"),
                title: p.s("cm-gotochild-tooltip"),
                framed: !1,
                classes: [ "cd-button", "cd-commentButton" ]
            });
            e.on("click", () => {
                this.parent.goToChild();
            }), this.parent.configureLayers(), this.parent.goToChildButton && this.parent.goToChildButton.$element.remove(), 
            this.parent.$overlayContent.prepend(e.$element), this.parent.goToChildButton = e, 
            this.parent.childToScrollBackTo = this;
        }
        goToChild() {
            this.childToScrollBackTo ? this.childToScrollBackTo.scrollToAndHighlightTarget("center") : console.error("This comment has no child from which the user had navigated earlier.");
        }
        copyLink(e) {
            const t = this.linkButton;
            this.replaceButton(this.linkButton, a()(this, hi).pendingLinkButton.cloneNode(!0), "link"), 
            Dn(this, e.shiftKey, () => {
                this.replaceButton(this.linkButton, t, "link");
            });
        }
        findAddingEdit(e = !1, t = !1) {
            var n = this;
            return o()((function*() {
                if (e && n.addingEditOneTimestamp) return n.addingEditOneTimestamp;
                if (!e && n.addingEdit) return n.addingEdit;
                const i = new Date(n.date.getTime() - 2 * p.g.MILLISECONDS_IN_A_MINUTE).toISOString(), o = new Date(n.date.getTime() + 2 * p.g.MILLISECONDS_IN_A_MINUTE).toISOString(), s = p.g.api.get({
                    action: "query",
                    titles: n.sourcePage,
                    prop: "revisions",
                    rvprop: [ "ids", "flags", "comment", "timestamp" ],
                    rvdir: "newer",
                    rvstart: i,
                    rvend: o,
                    rvuser: n.author.name,
                    rvlimit: 500,
                    redirects: !0,
                    formatversion: 2
                }).catch(Ie);
                let [r] = yield Promise.all([ s, t && n.author.registered ? we([ n.author ]) : void 0 ].filter(ke));
                const a = r && r.query && r.query.pages && r.query.pages[0] && r.query.pages[0].revisions;
                if (!a) throw new l({
                    type: "api",
                    code: "noData"
                });
                const c = a.map(e => p.g.api.get({
                    action: "compare",
                    fromtitle: n.sourcePage,
                    fromrev: e.revid,
                    torelative: "prev",
                    prop: "diff|diffsize",
                    formatversion: 2
                }).catch(Ie)), u = yield Promise.all(c), d = /<td colspan="2" class="diff-empty">&#160;<\/td>\s*<td class="diff-marker">\+<\/td>\s*<td class="diff-addedline"><div>(?!=)(.+?)<\/div><\/td>\s*<\/tr>/g, h = n.getText(!1) + " ".concat(n.signatureElement.innerText);
                let m;
                if (u.map((e, t) => {
                    const i = e && e.compare && e.compare.body;
                    if (!i) return null;
                    let o, s = "", r = 0;
                    for (;o = d.exec(i); ) {
                        const e = P(R(o[1])), t = di(e, h);
                        t > .66 && (!r || t > r) && (r = t), s += e + "\n";
                    }
                    if (s = s.trim(), !s) return null;
                    a[t].diffBody = i;
                    const c = new Date(a[t].timestamp).getTime(), u = n.date.getTime() + 3e4, l = di(s, h), m = s.match(p.g.TIMEZONE_REGEXP);
                    return {
                        revision: a[t],
                        overlap: Math.max(r, l),
                        dateProximity: Math.abs(u - c),
                        minor: a[t].minor,
                        moreThanOneTimestamp: s.includes("\n") && m && m.length > 1
                    };
                }).filter(Ne).forEach(e => {
                    e.overlap < .66 || ((!m || e.overlap > m.overlap) && (m = e), m && e.overlap === m.overlap && (e.dateProximity > m.dateProximity && (m = e), 
                    e.dateProximity === m.dateProximity && !e.minor && m.minor && (m = e)));
                }), e && m && m.moreThanOneTimestamp) throw new l({
                    type: "parse",
                    code: "moreThanOneTimestamp",
                    data: {
                        edit: m.revision
                    }
                });
                if (!m) throw new l({
                    type: "parse"
                });
                const g = m.revision;
                return e ? n.addingEditOneTimestamp = g : n.addingEdit = g, g;
            }))();
        }
        getDiffLink() {
            var e = this;
            return o()((function*() {
                const t = yield e.findAddingEdit(), n = decodeURI(p.g.CURRENT_PAGE.getUrl({
                    diff: t.revid
                }));
                return "https:".concat(mw.config.get("wgServer")).concat(n);
            }))();
        }
        thankFail(e, t) {
            const {type: n, code: i, data: o} = e.data;
            let s;
            switch (n) {
              case "parse":
                if ("moreThanOneTimestamp" === i) {
                    const e = this.sourcePage.getUrl({
                        diff: o.edit.revid
                    });
                    return s = p.util.wrapInElement(p.s("thank-error-multipletimestamps", e)), void OO.ui.alert(s);
                }
                {
                    const e = this.sourcePage.getUrl({
                        action: "history"
                    });
                    s = p.s("error-diffnotfound") + " " + p.s("error-diffnotfound-history", e);
                }
                break;

              case "api":
              default:
                if ("noData" === i) {
                    const e = this.sourcePage.getUrl({
                        action: "history"
                    });
                    s = p.s("error-diffnotfound") + " " + p.s("error-diffnotfound-history", e);
                } else s = p.s("thank-error"), console.warn(e);
                break;

              case "network":
                s = p.s("error-diffnotfound") + " " + p.s("error-network");
            }
            mw.notify(p.util.wrapInElement(s), {
                type: "error"
            }), this.replaceButton(this.thankButton, t, "thank");
        }
        thank() {
            var e = this;
            return o()((function*() {
                const t = e.thankButton;
                let n;
                e.replaceButton(e.thankButton, a()(e, hi).pendingThankButton.cloneNode(!0), "thank");
                try {
                    n = yield e.findAddingEdit(!0, p.g.GENDER_AFFECTS_USER_STRING);
                } catch (n) {
                    return void e.thankFail(n, t);
                }
                mw.loader.load("mediawiki.diff.styles");
                const i = e.sourcePage.getUrl({
                    diff: n.revid
                }), o = p.util.wrapInElement(p.s("thank-confirm", e.author.name, e.author, i), "div"), s = $("<div>").append(o, p.util.wrapDiffBody(n.diffBody));
                if (yield OO.ui.confirm(s, {
                    size: "larger"
                })) {
                    try {
                        yield p.g.api.postWithEditToken(p.g.api.assertCurrentUser({
                            action: "thank",
                            rev: n.revid,
                            source: p.config.scriptCodeName
                        })).catch(Ie);
                    } catch (n) {
                        return void e.thankFail(n, t);
                    }
                    mw.notify(p.s("thank-success")), e.replaceButton(e.thankButton, a()(e, hi).disabledThankButton.cloneNode(!0), "thank");
                } else e.replaceButton(e.thankButton, t, "thank");
            }))();
        }
        locateInCode(e) {
            this.inCode = null;
            const t = this.searchInCode(e);
            let n;
            if (t.forEach(e => {
                (e.overlap > .66 || 0 === this.id && e.previousCommentsMatched && e.headlineMatched) && (!n || e.overlap > n.overlap || !n.headlineMatched && e.headlineMatched || n.headlineMatched === e.headlineMatched && !n.previousCommentMatched && e.previousCommentMatched) && (n = e);
            }), n || (n = t.find(e => 0 !== this.id && e.previousCommentsMatched)), !n) throw new l({
                type: "parse",
                code: "locateComment"
            });
            this.inCode = this.adjustCommentCodeData(n);
        }
        reply(e) {
            this.replyForm || (this.replyForm = e instanceof ci ? e : new ci({
                mode: "reply",
                target: this,
                dataToRestore: e
            }));
        }
        edit(e) {
            this.editForm || (this.editForm = e instanceof ci ? e : new ci({
                mode: "edit",
                target: this,
                dataToRestore: e
            })), this.$elements.addClass("cd-hidden"), this.removeLayers();
        }
        codeToText() {
            if (!this.inCode) return void console.error("The Comment#inCode property should contain an object with the comment code data.");
            let e, {code: t, indentationChars: n} = this.inCode;
            if (void 0 === t || void 0 === n) return void console.error('No "code" or "indentationChars" property is set for Comment#inCode.');
            ({code: t, hidden: e} = B(t));
            let i = t;
            if (0 === this.level) {
                const e = new RegExp("^(?:\\x01.+?\\x02|\\[\\[".concat(p.g.FILE_PREFIX_PATTERN, ".+\\]\\]) *$"), "i"), t = new RegExp("(?:<".concat(p.g.PNIE_PATTERN, "(?: [\\w ]+?=[^<>]+?| ?\\/?)>|<\\/").concat(p.g.PNIE_PATTERN, ">|\\x04) *$"), "i"), n = new RegExp("^(?:<\\/".concat(p.g.PNIE_PATTERN, ">|<").concat(p.g.PNIE_PATTERN, ")"), "i");
                i = i.replace(/^((?![:*#= ]).+)\n(?![\n:*#= \x03])(?=(.*))/gm, (i, o, s) => o + (e.test(o) || e.test(s) || t.test(o) || n.test(s) ? "\n" : " "));
            }
            if (i = i.replace(/^(?![:*# ]).*<br[ \n]*\/?>.*$/gim, e => e.replace(/<br[ \n]*\/?>\n? */gi, () => "\n")).replace(/\n([:*#]*[:*])([ \t]*)/g, (e, t, i) => {
                const o = t.slice(n.length);
                return "\n" + (t.length >= n.length ? o + (t.length > n.length ? i : "") : t + i);
            }), i = Ue(i, e), p.config.paragraphTemplates.length) {
                const e = p.config.paragraphTemplates.map(xe).join("|"), t = "\\{\\{(?:".concat(e, ")\\}\\}"), n = new RegExp(t, "g"), o = new RegExp("^(?![:*#]).*".concat(t), "gm");
                i = i.replace(o, e => e.replace(n, "\n\n"));
            }
            return i.trim();
        }
        getCode() {
            var e = this;
            return o()((function*() {
                try {
                    yield e.sourcePage.getCode(), e.locateInCode(e.sourcePage.code);
                } catch (e) {
                    throw e instanceof l ? new l(Object.assign({}, {
                        message: p.s("cf-error-getpagecode")
                    }, e.data)) : e;
                }
                return {
                    commentText: e.codeToText(),
                    headline: e.inCode.headlineCode
                };
            }))();
        }
        registerSeen(e, t = !1) {
            if ("unseen" === this.newness && (this.newness = "new", gn.decrementUnseenCommentCount(), 
            t && this.highlightTarget()), e && !gn.areAllCommentsSeen()) {
                const n = p.comments[this.id + ("forward" === e ? 1 : -1)];
                n && n.isInViewport(!0) && n.registerSeen(e, t);
            }
        }
        isInViewport(e = !1, t = !1) {
            const n = window.pageYOffset, i = n + window.innerHeight;
            return !e && this.positions || this.getPositions(), this.positions ? t ? this.positions.downplayedBottom > n && this.positions.top < i : this.positions.top >= n && this.positions.downplayedBottom <= i : null;
        }
        removeLayers() {
            a()(this, pi) && (Ve.underlays.splice(Ve.underlays.indexOf(a()(this, pi)), 1), a()(this, pi).parentElement.removeChild(a()(this, pi)), 
            u()(this, pi, null), this.$underlay = null, a()(this, wi).parentElement.removeChild(a()(this, wi)), 
            u()(this, wi, null), this.$overlay = null);
        }
        get $elements() {
            return void 0 === a()(this, xi) && u()(this, xi, $(this.elements)), a()(this, xi);
        }
        get text() {
            return void 0 === a()(this, Ti) && u()(this, Ti, this.getText()), a()(this, Ti);
        }
        get parent() {
            return void 0 === a()(this, Ai) && u()(this, Ai, this.getParent()), a()(this, Ai);
        }
        getParent() {
            let e = this.level;
            if (p.g.specialElements.pageHasOutdents) {
                const e = new qe(this.elements[0]);
                let t;
                for (;!t && e.previousNode() && !e.currentNode.classList.contains("cd-commentPart"); ) t = e.currentNode.classList.contains("outdent-template");
                if (t && p.comments[this.id - 1]) return p.comments[this.id - 1];
            }
            return 0 === e ? null : p.comments.slice(0, this.id).reverse().find(t => t.section === this.section && t.level < e) || null;
        }
        getText(e = !0) {
            const t = this.$elements.not("h1, h2, h3, h4, h5, h6").clone().removeClass("cd-hidden"), n = $("<div>").append(t), i = [ ".cd-signature", p.config.unsignedClass ? ".".concat(p.config.unsignedClass) : void 0 ].filter(ke).join(", ");
            n.find(i).remove();
            let o = n.cdGetText();
            return e && (p.config.signatureEndingRegexp && (o = o.replace(p.config.signatureEndingRegexp, "")), 
            p.config.signaturePrefixRegexp && (o = o.replace(p.config.signaturePrefixRegexp, ""))), 
            o;
        }
        adjustCommentBeginning({code: e, startIndex: t}) {
            let n = "", i = t;
            const o = e.match(/(^[^]*(?:^|\n))((=+)(.*?)\2[ \t]*(?:<!--[^]*?-->[ \t]*)*\n)/);
            let s, r, a, c;
            if (o && (s = o[2], r = t + o[1].length, a = o[3].length, c = o[4].trim(), t += o[0].length, 
            e = e.slice(o[0].length)), p.config.signatureEndingRegexp) {
                const n = new RegExp(p.config.signatureEndingRegexp.source, "m"), o = /^(.+)\n/gm;
                let s, r;
                for (;s = o.exec(e); ) if (n.test(P(s[1]))) {
                    const t = s.index + s[0].length;
                    if (t === e.length) break;
                    r = t;
                }
                r && (e = e.slice(r), i += r, t += r);
            }
            if (this.level > 0) {
                const o = (e, o, s) => (n = s, i += o.length, t += e.length, "");
                e = e.replace(new RegExp("^()".concat(p.config.indentationCharsPattern)), o), "" === n && (e = e.replace(new RegExp("(^[^]*?(?:^|\n))".concat(p.config.indentationCharsPattern, "(?![^]*\\n[^:*#])")), o));
            }
            return p.g.BAD_COMMENT_BEGINNINGS.forEach(n => {
                "^" !== n.source[0] && console.debug('Regexps in cd.config.customBadCommentBeginnings should have "^" as the first character.');
                const i = e.match(n);
                i && (t += i[0].length, e = e.slice(i[0].length));
            }), {
                code: e,
                startIndex: t,
                lineStartIndex: i,
                headingMatch: o,
                headingCode: s,
                headingStartIndex: r,
                headingLevel: a,
                headlineCode: c,
                indentationChars: n
            };
        }
        adjustCommentCodeData(e) {
            const t = Object.assign({}, e), n = e => (t.signatureDirtyCode = e + t.signatureDirtyCode, 
            t.endIndex -= e.length, "");
            this.own && p.g.CURRENT_USER_SIGNATURE_PREFIX_REGEXP && (t.code = t.code.replace(p.g.CURRENT_USER_SIGNATURE_PREFIX_REGEXP, n));
            const i = new RegExp("(<".concat(p.g.PIE_PATTERN, "(?: [\\w ]+?=[^<>]+?)?> *)+$"), "i");
            var o;
            t.code = (o = t.code, [ p.config.signaturePrefixRegexp, i, p.config.signaturePrefixRegexp, i, /<small class="autosigned">.*$/, /<!-- *Template:Unsigned.*$/, p.config.signaturePrefixRegexp ].forEach(e => {
                o = o.replace(e, n);
            }), o);
            const s = [ {
                start: /^<small>/,
                end: /<\/small>[ \u00A0\t]*$/
            } ];
            if (p.config.blockSmallTemplate && s.push({
                start: new RegExp("^(?:\\{\\{".concat(p.config.blockSmallTemplate, "\\|1=)")),
                end: /\}\}[ \u00A0\t]*$/
            }), t.signatureCode = t.signatureDirtyCode, t.inSmallFont = !1, s.some(e => {
                if (e.start.test(t.code) && e.end.test(t.signatureCode)) return t.inSmallFont = !0, 
                t.code = t.code.replace(e.start, ""), t.signatureCode = t.signatureCode.replace(e.end, ""), 
                !0;
            }), t.replyIndentationChars = t.indentationChars, !this.isOpeningSection) {
                const e = t.code.match(/\n([:*#]*[:*]).*$/);
                if (e && (t.replyIndentationChars = e[1], t.replyIndentationChars.length < t.indentationChars.length)) {
                    const e = t.indentationChars.slice(t.replyIndentationChars.length) + " ";
                    t.code = e + t.code, t.indentationChars = t.indentationChars.slice(0, t.replyIndentationChars.length), 
                    t.startIndex -= e.length;
                }
            }
            return t.replyIndentationChars += p.config.defaultIndentationChar, t;
        }
        searchInCode(e) {
            const t = M(e), n = t.filter(e => e.author === this.author && (this.timestamp === e.timestamp || this.timestamp && this.timestamp.startsWith(e.timestamp)));
            const i = p.comments.slice(Math.max(0, this.id - 2), this.id).reverse(), o = n.map(e => ({
                id: e.id,
                author: e.author,
                timestamp: e.timestamp,
                date: e.date,
                anchor: e.anchor,
                signatureDirtyCode: e.dirtyCode,
                startIndex: e.commentStartIndex,
                endIndex: e.startIndex
            }));
            return o.forEach(n => {
                if (n.code = e.slice(n.startIndex, n.endIndex), i.length) for (let e = 0; e < i.length; e++) {
                    const o = t[n.id - 1 - e];
                    if (n.previousCommentsMatched = o && o.timestamp === i[e].timestamp && o.author === i[e].author, 
                    0 === e && (n.previousCommentMatched = n.previousCommentsMatched), !n.previousCommentsMatched) break;
                } else n.previousCommentsMatched = 0 === n.id, n.previousCommentMatched = 0 === n.id;
                Object.assign(n, this.adjustCommentBeginning(n)), n.headlineMatched = this.followsHeading ? n.headingMatch && this.section && this.section.headline && L(P(n.headlineCode)) === L(this.section.headline) : !n.headingMatch;
                const o = P(n.code);
                n.overlap = di(this.text, o);
            }), o;
        }
        modifyCode(e, {action: t, doDelete: n, commentCode: i, commentForm: o}) {
            let s, r, a;
            if ("reply" === t) {
                s = this.inCode.endIndex;
                const t = new RegExp("^([^]*?(?:" + mw.util.escapeRegExp(this.inCode.signatureCode) + "|" + p.g.TIMESTAMP_REGEXP.source + ".*)\\n)\\n*" + (this.inCode.indentationChars.length > 0 ? "[:*#]{0,".concat(this.inCode.indentationChars.length, "}") : "") + "(?![:*#])"), [, n] = t.exec(e.slice(s)) || [];
                if (void 0 === n) throw new l({
                    type: "parse",
                    code: "findPlace"
                });
                const [, i] = n.match(/\n([:*#]{2,}).*\n$/) || [];
                if (i && (this.inCode.replyIndentationChars = i.slice(0, this.inCode.replyIndentationChars.length).replace(/:$/, p.config.defaultIndentationChar)), 
                /\n=+.*?\1[ \t]*\n/.test(O(n))) throw new l({
                    type: "parse",
                    code: "findPlace-unexpectedHeading"
                });
                s += n.length;
            }
            switch (i || !o || n || ({commentCode: i} = o.commentTextToCode("submit")), t) {
              case "reply":
                a = e.slice(0, s), r = a + i + e.slice(s);
                break;

              case "edit":
                if (n) {
                    let t, n;
                    if (this.isOpeningSection && void 0 !== this.inCode.headingStartIndex) {
                        if (this.section.locateInCode(e), M(this.section.inCode.code).length > 1) throw new l({
                            type: "parse",
                            code: "delete-repliesInSection"
                        });
                        ({startIndex: t, contentEndIndex: n} = this.section.inCode);
                    } else {
                        n = this.inCode.endIndex + this.inCode.signatureDirtyCode.length + 1;
                        const i = e.slice(this.inCode.endIndex);
                        if (new RegExp("^.+\\n+[:*#]{".concat(this.inCode.indentationChars.length + 1, ",}")).exec(i)) throw new l({
                            type: "parse",
                            code: "delete-repliesToComment"
                        });
                        t = this.inCode.lineStartIndex;
                    }
                    r = e.slice(0, t) + e.slice(n);
                } else {
                    const t = this.isOpeningSection && void 0 !== this.inCode.headingStartIndex ? this.inCode.headingStartIndex : this.inCode.lineStartIndex;
                    a = e.slice(0, t), r = a + i + e.slice(this.inCode.endIndex + this.inCode.signatureDirtyCode.length);
                }
            }
            return {
                newPageCode: r,
                codeBeforeInsertion: a,
                commentCode: i
            };
        }
        getLayersContainer() {
            if (void 0 === a()(this, Si)) {
                let e;
                const t = new $e(document.body, null, !0, this.elements[0]);
                for (;t.parentNode(); ) {
                    let n = t.currentNode.cdStyle;
                    if (n || (n = window.getComputedStyle(t.currentNode), t.currentNode.cdStyle = n), 
                    [ "absolute", "relative" ].includes(n.position)) {
                        e = t.currentNode;
                        break;
                    }
                    const i = n.backgroundColor;
                    if (i.includes("rgb(")) {
                        this.backgroundColor = i, e = t.currentNode, e.classList.add("cd-commentLayersContainerParent");
                        break;
                    }
                }
                e || (e = document.body);
                let n = e.firstElementChild;
                n.classList.contains("cd-commentLayersContainer") || (n = document.createElement("div"), 
                n.classList.add("cd-commentLayersContainer"), e.insertBefore(n, e.firstChild)), 
                u()(this, Si, n), Ve.layersContainers.includes(n) || Ve.layersContainers.push(n);
            }
            return a()(this, Si);
        }
        getLayersContainerOffset() {
            let e, t = this.getLayersContainer(), n = 0, i = 0;
            for (;e = t.offsetParent; ) n += e.offsetTop, i += e.offsetLeft, t = e;
            return {
                top: n,
                left: i
            };
        }
        requestAuthorGenderIfNeeded(e, t = !1) {
            if (p.g.GENDER_AFFECTS_USER_STRING && this.author.registered && null === this.author.gender) {
                let t;
                u()(this, ki, a()(this, ki) || []), this.genderRequest || (this.genderRequest = we([ this.author ]), 
                t = e => {
                    console.warn("Couldn't get the gender of user ".concat(this.author.name, "."), e);
                }), a()(this, ki).includes(e) || (this.genderRequest.then(e, t), a()(this, ki).push(e));
            } else t && setTimeout(e);
        }
        static configureAndAddLayers(e) {
            let t;
            e.forEach(e => {
                t = t || p.g.specialElements.floating.map(e => e.getBoundingClientRect()), e.configureLayers(!1, t);
            }), e.forEach(e => {
                e.addLayers();
            });
        }
        static findInViewport(e) {
            const t = window.pageYOffset, n = t + window.innerHeight, i = e => (e.getPositions(), 
            Boolean(e.positions)), o = (e, t = 0) => Oe(p.comments, t, "backward" === e).find(i) || null, s = o("forward"), r = o("backward", p.comments.length - 1);
            if (!s) return null;
            let a, c = {
                top: s,
                bottom: r
            }, u = c.top;
            const l = (e, t, n = !1) => "forward" === e ? o(e, n ? t.top.id : t.bottom.id) : "backward" === e ? o(e, n ? t.bottom.id : t.top.id) : null;
            for (let i = 0; i < p.comments.length; i++) {
                if (u.isInViewport(!0)) {
                    a = u;
                    break;
                }
                if (u.positions && u === s && n < u.positions.downplayedBottom || u === r && t > u.positions.top) {
                    a = l(e, c, !0);
                    break;
                }
                if (c.top === c.bottom) {
                    a = l(e, c);
                    break;
                }
                if (u.positions) if (u === s) u = c.bottom; else {
                    if (c[t > u.positions.top ? "top" : "bottom"] = u, c.bottom.id - c.top.id <= 1) {
                        a = l(e, c);
                        break;
                    }
                    const i = c.top.positions.top, o = (t - i) / (c.bottom.positions.downplayedBottom - n + (t - i));
                    (o < 0 || o >= 1) && console.warn("The proportion shouldn't be more than 0 or less or equal to 1.", "proportion", o, "searchArea", c), 
                    u = p.comments[Math.round((c.bottom.id - c.top.id - 1) * o + c.top.id + .5)];
                } else u = p.comments[c.top.id + 1], c.top = u;
            }
            return a || null;
        }
        static getCommentByAnchor(e) {
            return p.comments && e && p.comments.find(t => t.anchor === e) || null;
        }
    }
    var Oi = n(12), Ii = n.n(Oi);
    let Pi, Li, Fi, Mi, Ri, Bi, Di, ji, Hi, Ui, Yi = !0;
    function $i(e) {
        return qi.apply(this, arguments);
    }
    function qi() {
        return (qi = o()((function*({messagesRequest: e}) {
            p.g.api = p.g.api || new mw.Api;
            const t = Q(!0).catch(e => {
                console.warn("Couldn't load the settings from the server.", e);
            });
            let n;
            e = e || wt();
            try {
                [n] = yield Promise.all([ t, e ]);
            } catch (e) {
                throw [ "Couldn't load the messages required for the script.", e ];
            }
            ({watchedSections: ji, thisPageWatchedSections: Hi} = n || {}), vt(), p.g.nanoCss = Object(s.create)(), 
            p.g.nanoCss.put(".cd-commentLink-innerWrapper", {
                "::before": {
                    content: '"'.concat(mw.msg("parentheses-start"), '"')
                },
                "::after": {
                    content: '"'.concat(mw.msg("parentheses-end"), '"')
                }
            }), p.g.CURRENT_PAGE = new ve(p.g.CURRENT_PAGE_NAME), p.g.QQX_MODE = "qqx" === mw.util.getParamValue("uselang"), 
            [Pi] = p.s("es-move-from").match(/^[^[$]+/) || [], [Li] = p.s("es-move-to").match(/^[^[$]+/) || [], 
            Fi = "".concat(p.s("lp-comment-tooltip"), " ").concat(mw.msg("parentheses", p.s("lp-comment-toyou"))), 
            Mi = "".concat(p.s("lp-comment-tooltip"), " ").concat(mw.msg("parentheses", p.s("lp-comment-watchedsection")));
            const i = $("<a>").text(p.s("lp-comment")).attr("title", p.s("lp-comment-tooltip")), o = $("<span>").addClass("cd-commentLink-innerWrapper").append(i);
            Bi = $("<span>").addClass("cd-commentLink").append(o)[p.g.IS_DIFF_PAGE ? "append" : "prepend"](document.createTextNode(" ")), 
            Di = Bi.clone().addClass("cd-commentLink-interesting");
            const r = xe(p.g.CURRENT_USER_NAME).replace(/ /g, "[ _]");
            Ri = new RegExp("(?:^|[^".concat(p.g.LETTER_PATTERN, "])").concat(r, "(?![").concat(p.g.LETTER_PATTERN, "])"));
        }))).apply(this, arguments);
    }
    function Wi() {
        mw.hook("wikipage.content").add(() => {
            Ui && Ui.setFlags({
                progressive: !1
            });
        });
        const e = $("<fieldset>").addClass("cd-watchlistMenu"), t = $("<legend>").addClass("cd-watchlistMenu-legend").appendTo(e);
        $("<a>").attr("href", mw.util.getUrl(p.config.helpWikilink)).html(p.s("script-name-short")).appendTo(t), 
        Ui = new OO.ui.ButtonWidget({
            framed: !1,
            icon: "speechBubble",
            label: p.s("wl-button-switchinteresting-tooltip"),
            invisibleLabel: !0,
            title: p.s("wl-button-switchinteresting-tooltip"),
            classes: [ "cd-watchlistMenu-button", "cd-watchlistMenu-button-switchInteresting" ],
            disabled: !ji
        }), Ui.on("click", () => {
            !function() {
                const e = !$(".mw-changeslist").find("ul.special").length, t = p.g.$content.find(".mw-changeslist .mw-collapsible:not(.mw-changeslist-legend)"), n = p.g.$content.find(".mw-changeslist-line:not(.mw-collapsible)");
                Ui.hasFlag("progressive") ? (e ? n.filter("table").show() : n.not(":has(.cd-commentLink-interesting)").show(), 
                t.not(":has(.cd-commentLink-interesting)").find(".mw-rcfilters-ui-highlights-enhanced-toplevel").show(), 
                t.not(".mw-collapsed").find(".mw-enhancedchanges-arrow").click()) : (t.not(".mw-collapsed").find(".mw-enhancedchanges-arrow").click(), 
                t.has(".cd-commentLink-interesting").find(".mw-enhancedchanges-arrow").click(), 
                t.not(":has(.cd-commentLink-interesting)").find(".mw-rcfilters-ui-highlights-enhanced-toplevel").hide(), 
                n.not(":has(.cd-commentLink-interesting)").hide()), Ui.setFlags({
                    progressive: !Ui.hasFlag("progressive")
                });
            }();
        }), Ui.$element.appendTo(e);
        const n = new OO.ui.ButtonWidget({
            framed: !1,
            icon: "listBullet",
            label: p.s("wl-button-editwatchedsections-tooltip"),
            invisibleLabel: !0,
            title: p.s("wl-button-editwatchedsections-tooltip"),
            classes: [ "cd-watchlistMenu-button", "cd-watchlistMenu-button-editWatchedSections" ]
        });
        n.on("click", Mn), n.$element.appendTo(e);
        const i = new OO.ui.ButtonWidget({
            framed: !1,
            icon: "settings",
            label: p.s("wl-button-scriptsettings-tooltip"),
            invisibleLabel: !0,
            title: p.s("wl-button-scriptsettings-tooltip"),
            classes: [ "cd-watchlistMenu-button", "cd-watchlistMenu-button-scriptSettings" ]
        });
        i.on("click", () => {
            Ln();
        }), i.$element.appendTo(e), p.g.$content.find(".mw-rcfilters-ui-changesLimitAndDateButtonWidget").prepend(e), 
        p.g.$content.find("#mw-watchlist-options .mw-changeslist-legend").after(e);
    }
    function Gi(e) {
        const t = e.querySelector(".mw-userlink");
        if (!t) return null;
        let n = t.textContent;
        return "MediaWiki message delivery" === n ? null : (mw.util.isIPv6Address(n) && (n = n.toUpperCase()), 
        n);
    }
    function Vi(e) {
        return Pi && e.includes(": ".concat(Pi)) || Li && e.includes(": ".concat(Li));
    }
    function zi(e) {
        return e.includes("Archiving");
    }
    function Ki(e) {
        "Watchlist" !== mw.config.get("wgCanonicalSpecialPageName") || p.g.$content.find(".cd-watchlistMenu").length || (_t(), 
        mw.user.options.get("wlenhancedfilters-disable") ? Wi() : mw.hook("structuredChangeFilters.ui.initialized").add(() => {
            Wi();
        }), $(".mw-rcfilters-ui-filterWrapperWidget-showNewChanges a").on("click", o()((function*() {
            try {
                ({watchedSections: ji} = yield Q());
            } catch (e) {
                console.warn("Couldn't load the settings from the server.", e);
            }
        })))), e.get(0).querySelectorAll(".mw-changeslist-line:not(.mw-collapsible)").forEach(e => {
            const t = e.className.match(/mw-changeslist-ns(\d+)/), n = t && Number(t[1]);
            if (null === n) return;
            const i = ("TR" === e.tagName ? e.parentElement : e).querySelector(".mw-changeslist-title");
            if (!i) return;
            if (!Te(i.textContent, n)) return;
            if (e.querySelector(".minoredit")) return;
            const o = e.querySelector(".comment"), s = o && o.textContent;
            if (s && (Ae(s) || Se(s) || Vi(s))) return;
            const r = e.querySelector(".mw-plusminus-pos");
            if (!r) return;
            if ("STRONG" !== r.tagName) {
                const e = r.textContent.match(/\d+/), t = e && Number(e[0]);
                if (!t || t < p.config.bytesToDeemComment) return;
            }
            let a = e.getAttribute("data-mw-ts");
            if (a = a && a.slice(0, 12), !a) return;
            const c = Gi(e);
            if (!c) return;
            const u = a + "_" + Le(c), l = i.href;
            if (!l) return;
            let d;
            if (s && Ri.test(" ".concat(s, " "))) d = Di.get(0).cloneNode(!0), d.lastChild.lastChild.title = Fi; else {
                let t = !1;
                if (s) {
                    const n = e.querySelector(".mw-changeslist-diff-cur") || e.querySelector(".mw-changeslist-history"), i = n && n.href && n.href.match(/[&?]curid=(\d+)/), o = i && Number(i[1]);
                    if (o) {
                        const e = ji && ji[o] || [];
                        if (e.length) {
                            for (let n = 0; n < e.length; n++) if (s.includes("\u2192\u200e" + e[n])) {
                                t = !0;
                                break;
                            }
                            t && (d = Di.get(0).cloneNode(!0), d.lastChild.lastChild.title = Mi);
                        }
                    }
                }
                t || (d = Bi.get(0).cloneNode(!0));
            }
            d.lastChild.lastChild.href = "".concat(l, "#").concat(u);
            const h = e.querySelector(".mw-usertoollinks");
            h && h.parentElement.insertBefore(d, h.nextSibling);
        });
    }
    function Xi(e) {
        const t = mw.user.options.get("timecorrection"), n = t && t.split("|"), i = n && Number(n[1]);
        if (null == i || isNaN(i)) return;
        const o = e.get(0).querySelector(".mw-contributions-list");
        Array.from(o.children).forEach(e => {
            const t = e.querySelector(".mw-contributions-title");
            if (!t) return;
            if (!Te(t.textContent)) return;
            const n = t.href;
            if (!n) return;
            if (e.querySelector(".minoredit")) return;
            const o = e.querySelector(".comment"), s = o && o.textContent;
            if (s && (Ae(s) || Se(s) || Vi(s))) return;
            const r = e.querySelector(".mw-plusminus-pos");
            if (!r) return;
            if ("STRONG" !== r.tagName) {
                const e = r.textContent.match(/\d+/), t = e && Number(e[0]);
                if (!t || t < p.config.bytesToDeemComment) return;
            }
            const a = e.querySelector(".mw-changeslist-date");
            if (!a) return;
            const {date: c} = _(a.textContent, i) || {};
            if (!c) return;
            const u = T(c, mw.config.get("wgRelevantUserName"));
            let l;
            s && Ri.test(" ".concat(s, " ")) ? (l = Di.get(0).cloneNode(!0), l.lastChild.lastChild.title = Fi) : l = Bi.get(0).cloneNode(!0), 
            l.lastChild.lastChild.href = "".concat(n, "#").concat(u), t.nextSibling && (t.nextSibling.textContent = t.nextSibling.textContent.replace(/^\s/, "")), 
            t.parentElement.insertBefore(l, t.nextSibling);
        });
    }
    function Ji(e) {
        const t = mw.user.options.get("timecorrection"), n = t && t.split("|"), i = n && Number(n[1]);
        if (null == i || isNaN(i)) return;
        const o = e.get(0).querySelector("#pagehistory"), s = Array.from(o.children), r = p.g.CURRENT_PAGE.getUrl();
        s.forEach(e => {
            if (e.querySelector(".minoredit")) return;
            const t = e.querySelector(".comment"), n = t && t.textContent;
            if (n && (Ae(n) || Se(n) || Vi(n))) return;
            const o = e.querySelector(".mw-plusminus-pos");
            if (!o) return;
            if ("STRONG" !== o.tagName) {
                const e = o.textContent.match(/\d+/), t = e && Number(e[0]);
                if (!t || t < p.config.bytesToDeemComment) return;
            }
            const s = e.querySelector(".mw-changeslist-date");
            if (!s) return;
            const {date: a} = _(s.textContent, i) || {};
            if (!a) return;
            const c = Gi(e);
            if (!c) return;
            const u = T(a, c);
            let l;
            if (n && Ri.test(" ".concat(n, " "))) l = Di.get(0).cloneNode(!0), l.lastChild.lastChild.title = Fi; else {
                let e = !1;
                if (n) {
                    const t = ji && ji[mw.config.get("wgArticleId")] || [];
                    if (t.length) {
                        for (let i = 0; i < t.length; i++) if (n.includes("\u2192\u200e" + t[i])) {
                            e = !0;
                            break;
                        }
                        e && (l = Di.get(0).cloneNode(!0), l.lastChild.lastChild.title = Mi);
                    }
                }
                e || (l = Bi.get(0).cloneNode(!0));
            }
            l.lastChild.lastChild.href = "".concat(r, "#").concat(u);
            const d = e.querySelectorAll(".mw-changeslist-separator"), h = d && d[d.length - 1];
            h && h.parentElement.insertBefore(l, h.nextSibling);
        });
    }
    function Qi() {
        return Zi.apply(this, arguments);
    }
    function Zi() {
        return (Zi = o()((function*() {
            if (!Yi) return;
            const e = mw.user.options.get("timecorrection"), t = e && e.split("|"), n = t && Number(t[1]);
            null == n || isNaN(n) || ([ document.querySelector(".diff-otitle"), document.querySelector(".diff-ntitle") ].filter(Ne).forEach(e => {
                if (e.querySelector(".minoredit")) return;
                const t = e.querySelector(".comment"), i = t && t.textContent;
                if (i && (Ae(i) || Se(i) || Vi(i) || zi(i))) return;
                const o = e.querySelector("#mw-diff-otitle1 a, #mw-diff-ntitle1 a");
                if (!o) return;
                const {date: s} = _(o.textContent, n) || {};
                if (!s) return;
                const r = Gi(e);
                if (!r) return;
                const a = T(s, r);
                let c = Ni.getCommentByAnchor(a);
                if (!c) {
                    let e;
                    for (let t = 1; !c && t <= 5; t++) {
                        e = T(new Date(s.getTime() - p.g.MILLISECONDS_IN_A_MINUTE * t), r), c = Ni.getCommentByAnchor(e);
                    }
                }
                if (c) {
                    let t;
                    if (i && Ri.test(" ".concat(i, " "))) t = Di.get(0).cloneNode(!0), t.firstChild.lastChild.title = Fi; else {
                        let e = !1;
                        if (i && Hi.length) {
                            for (let t = 0; t < Hi.length; t++) if (i.includes("\u2192\u200e" + Hi[t])) {
                                e = !0;
                                break;
                            }
                            e && (t = Di.get(0).cloneNode(!0), t.firstChild.lastChild.title = Mi);
                        }
                        e || (t = Bi.get(0).cloneNode(!0));
                    }
                    t.firstChild.lastChild.href = "#".concat(a), t.onclick = function(e) {
                        e.preventDefault(), c.scrollToAndHighlightTarget(!1);
                    };
                    const n = e.querySelector("#mw-diff-otitle3, #mw-diff-ntitle3");
                    if (!n) return;
                    n.insertBefore(t, n.firstChild);
                }
            }), mw.hook("convenientDiscussions.commentLinksCreated").fire(p), Yi = !1);
        }))).apply(this, arguments);
    }
    function eo(e) {
        return to.apply(this, arguments);
    }
    function to() {
        return (to = o()((function*(e) {
            e.parent().length && ([ "Recentchanges", "Watchlist" ].includes(mw.config.get("wgCanonicalSpecialPageName")) ? Ki(e) : "Contributions" === mw.config.get("wgCanonicalSpecialPageName") ? Xi(e) : "history" === mw.config.get("wgAction") && Te(p.g.CURRENT_PAGE) && Ji(e), 
            mw.hook("convenientDiscussions.commentLinksCreated").fire(p));
        }))).apply(this, arguments);
    }
    function no() {
        return (no = o()((function*({messagesRequest: e}) {
            try {
                yield $i({
                    messagesRequest: e
                });
            } catch (e) {
                return void console.warn(...e);
            }
            p.g.IS_DIFF_PAGE ? mw.hook("convenientDiscussions.pageReady").add(Qi) : mw.hook("wikipage.content").add(eo);
        }))).apply(this, arguments);
    }
    var io = n(7), oo = {
        init() {
            this.timerTotal = {}, this.timerStartTimestamps = {}, this.timerRunCount = {}, this.timerAllRunsTotal = {}, 
            this.initCounters(), this.array = [], this.object = {};
        },
        initCounters() {
            this.counters = "undefined" == typeof Proxy ? {} : new Proxy({}, {
                get: (e, t) => t in e ? e[t] : 0
            });
        },
        startTimer(e) {
            this.timerStartTimestamps[e] = Date.now();
        },
        stopTimer(e) {
            if (void 0 === this.timerStartTimestamps[e]) return;
            void 0 === this.timerTotal[e] && (this.timerTotal[e] = 0);
            const t = Date.now() - this.timerStartTimestamps[e];
            this.timerTotal[e] += t, delete this.timerStartTimestamps[e], void 0 === this.timerAllRunsTotal[e] && (this.timerAllRunsTotal[e] = 0, 
            this.timerRunCount[e] = 0), this.timerAllRunsTotal[e] += t, this.timerRunCount[e]++;
        },
        resetTimer(e) {
            void 0 !== this.timerStartTimestamps[e] && this.stopTimer(e), delete this.timerTotal[e];
        },
        fullResetTimer(e) {
            this.resetTimer(e), delete this.timerAllRunsTotal[e], delete this.timerRunCount[e];
        },
        logAndResetTimer(e) {
            void 0 !== this.timerStartTimestamps[e] && this.stopTimer(e), void 0 !== this.timerTotal[e] && (console.debug("".concat(e, ": ").concat(this.timerTotal[e])), 
            this.resetTimer(e));
        },
        logAndResetEverything(e) {
            const t = Object.keys(this.timerTotal);
            e && t.sort(), t.forEach(e => {
                this.logAndResetTimer(e);
            });
            const n = Object.keys(this.counters);
            e && n.sort(), n.forEach(e => {
                console.debug("counter ".concat(e, ": ").concat(this.counters[e]));
            }), 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(e) {
            if (!this.timerAllRunsTotal[e]) return void console.error("No data for timer ".concat(e));
            const t = this.timerAllRunsTotal[e] / this.timerRunCount[e];
            console.debug("".concat(e, ": ").concat(t.toFixed(1), " average for ").concat(this.timerRunCount[e], " runs"));
        },
        incrementCounter(e) {
            this.counters[e]++;
        }
    }, so = {
        messages: {},
        contribsPage: null,
        localTimezoneOffset: null,
        customTalkNamespaces: null,
        pageWhiteList: [],
        pageBlackList: [],
        archivePaths: [],
        pagesWithoutArchives: [],
        idleFragments: [],
        defaultIndentationChar: ":",
        spaceAfterIndentationChars: !0,
        indentationCharMode: "mimic",
        signaturePrefixRegexp: /(?:\s+>+)?(?:\xb7|-|\u2013|\u2014|\u2015|~|\/|\u2192|\u21d2|\s|&mdash;|&ndash;|&rarr;|&middot;|&nbsp;|&#32;)*'*$/,
        signatureEndingRegexp: null,
        tagName: null,
        scriptCodeName: "convenient-discussions",
        optionsPrefix: "convenientDiscussions",
        helpWikilink: "commons:User:JWBTH/CD",
        unsignedTemplates: [],
        unsignedClass: "autosigned",
        pairQuoteTemplates: [],
        blockSmallTemplate: null,
        paragraphTemplates: [],
        quoteFormatting: [ "> ''", "''\n" ],
        elementsToExcludeClasses: [],
        templatesToExclude: [],
        commentAntipatterns: [],
        customBadCommentBeginnings: [],
        keepInSectionEnding: [],
        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,
        indentationCharsPattern: "\\n*([:*#]*) *",
        undoTexts: [],
        customTextReactions: [],
        customCommentFormModules: [],
        commentInputPlaceholderEmpty: !1,
        getArchivePrefix: null,
        transformSummary: null,
        preTransformCode: null,
        postTransformCode: null,
        checkForCustomForeignComponents: null,
        areNewTopicsOnTop: null,
        getMoveSourcePageCode: function(e, t, n) {
            return p.s("move-sourcepagecode", e, t, n) + "\n";
        },
        getMoveTargetPageCode: function(e, t) {
            return p.s("move-targetpagecode", e, t) + "\n";
        },
        getAnchorCode: e => '<span id="'.concat(e, '"></span>')
    }, ro = n(9), ao = {
        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", "H1", "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", "Q", "S", "SAMP", "SMALL", "SPAN", "STRIKE", "STRONG", "SUB", "SUP", "TT", "U", "VAR" ],
        UNHIGHLIGHTABLE_ELEMENTS_CLASSES: [ "mw-empty-elt", "tleft", "tright", "floatleft", "floatright" ],
        BAD_COMMENT_BEGINNINGS: [ /^<!--[^]*?--> *\n*/, /^(?:----+|<hr>) *\n*/, /^\{\|.*?\|\} *\n*(?=[*:#])/ ],
        FLOATING_ELEMENTS_SELECTORS: [ ".cd-floating", ".tright", ".floatright", '*[style*="float:right"]', '*[style*="float: right"]', '*[style*="float:left"]', '*[style*="float: left"]' ],
        SIGN_CODE: "~~".concat("~~")
    }, co = {
        wrapInElement: (e, t = "span") => $($.parseHTML(e)).wrapAll("<".concat(t, ">")).parent(),
        buildEditSummary(e) {
            void 0 === e.addPostfix && (e.addPostfix = !0);
            let t, n = (e.section ? "/* ".concat(e.section, " */ ") : "") + e.text.trim();
            if (e.optionalText) {
                let i = n + e.optionalText;
                p.config.transformSummary && (i = p.config.transformSummary(i)), i.length <= p.g.SUMMARY_LENGTH_LIMIT && (n = i, 
                t = !0);
            }
            return t || (p.config.transformSummary && (n = p.config.transformSummary(n)), n.length > p.g.SUMMARY_LENGTH_LIMIT && (n = n.slice(0, p.g.SUMMARY_LENGTH_LIMIT - 1) + "\u2026")), 
            e.addPostfix && (n += p.g.SUMMARY_POSTFIX), n;
        },
        isPageOverlayOn: () => document.body.classList.contains("oo-ui-windowManager-modal-active") || Boolean(Pt && Pt[0] && "block" === Pt[0].style.display),
        wrapDiffBody: e => '<table class="diff"><col class="diff-marker"><col class="diff-content"><col class="diff-marker"><col class="diff-content">' + e + "</table>"
    };
    function uo(e, ...t) {
        if (!e) return null;
        const n = "convenient-discussions-".concat(e);
        if (p.g.QQX_MODE || "string" != typeof mw.messages.get(n)) {
            const e = t.length ? ": ".concat(t.join(", ")) : "";
            return "(".concat(n).concat(e, ")");
        }
        {
            const e = mw.message(n, ...t.filter(e => "boolean" != typeof e));
            return "boolean" == typeof t[t.length - 1] && t[t.length - 1] ? e.plain() : e.toString();
        }
    }
    function lo() {
        p.config = Object.assign(so, p.config), p.strings = Object.assign({}, ro, p.strings), 
        Object.keys(p.strings).forEach(e => {
            mw.messages.set("convenient-discussions-".concat(e), p.strings[e]);
        }), p.g.SETTINGS_OPTION_FULL_NAME = "userjs-".concat(p.config.optionsPrefix, "-settings"), 
        p.g.LOCAL_SETTINGS_OPTION_FULL_NAME = "userjs-".concat(p.config.optionsPrefix, "-localSettings"), 
        p.g.VISITS_OPTION_FULL_NAME = "userjs-".concat(p.config.optionsPrefix, "-visits");
        const e = "ru.wikipedia.org" === location.host ? "watchedTopics" : "watchedSections";
        if (p.g.WATCHED_SECTIONS_OPTION_FULL_NAME = "userjs-".concat(p.config.optionsPrefix, "-").concat(e), 
        p.g.IS_DIFF_PAGE = mw.config.get("wgIsArticle") && /[?&]diff=[^&]/.test(location.search), 
        p.g.CURRENT_PAGE_NAME = mw.config.get("wgPageName"), p.g.CURRENT_NAMESPACE_NUMBER = mw.config.get("wgNamespaceNumber"), 
        p.g.CURRENT_USER_NAME = mw.config.get("wgUserName"), p.g.PAGE_WHITE_LIST_REGEXP = je(p.config.pageWhiteList), 
        p.g.PAGE_BLACK_LIST_REGEXP = je(p.config.pageBlackList), p.g.$content = $("#mw-content-text"), 
        p.config.customTalkNamespaces || (p.config.customTalkNamespaces = mw.config.get("wgExtraSignatureNamespaces"), 
        p.config.customTalkNamespaces.includes(0) && p.config.customTalkNamespaces.splice(p.config.customTalkNamespaces.indexOf(0))), 
        mw.config.get("wgIsArticle") && (Te(p.g.CURRENT_PAGE_NAME, p.g.CURRENT_NAMESPACE_NUMBER) || $("#ca-addsection").length || p.g.$content.find(".cd-talkPage").length)) {
            let e;
            p.g.firstRun = !0, p.g.nanoCss = Object(s.create)(), p.g.nanoCss.put(".cd-loadingPopup", {
                width: p.config.logoWidth
            }), p.g.nanoCss.put(".cd-loadingPopup-logo", {
                width: p.config.logoWidth,
                height: p.config.logoHeight
            }), Rt(), p.debug.stopTimer("start"), p.debug.startTimer("loading data"), p.g.worker = new Ii.a, 
            "ready" === mw.loader.getState("mediawiki.api") && (p.g.api = new mw.Api, e = wt(), 
            re().catch(e => {
                console.warn(e);
            }));
            const t = $.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" ]), e ].filter(ke)).then(() => {
                try {
                    pt({
                        messagesRequest: e
                    });
                } catch (e) {
                    mw.notify(p.s("error-processpage"), {
                        type: "error"
                    }), Bt(), console.error(e);
                }
            }, e => {
                mw.notify(p.s("error-loaddata"), {
                    type: "error"
                }), Bt(), console.error(e);
            });
            setTimeout(() => {
                "resolved" !== t.state() && (Bt(), console.warn('The promise is in the "pending" state for 10 seconds; removing the loading overlay.'));
            }, 1e4), p.g.REGULAR_LINE_HEIGHT = parseFloat(window.getComputedStyle(p.g.$content.get(0)).lineHeight), 
            Ct(), n(8), n(18), n(20), n(22), n(24), n(26), n(28), n(30);
        }
        if ([ "Watchlist", "Contributions", "Recentchanges" ].includes(mw.config.get("wgCanonicalSpecialPageName")) || "history" === mw.config.get("wgAction") && Te(p.g.CURRENT_PAGE_NAME, p.g.CURRENT_NAMESPACE_NUMBER) || p.g.IS_DIFF_PAGE) {
            let e;
            "ready" === mw.loader.getState("mediawiki.api") && (p.g.api = new mw.Api, e = wt(), 
            re().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(e) {
                    no.apply(this, arguments);
                }({
                    messagesRequest: e
                }), n(8), n(32);
            }, e => {
                mw.notify(p.s("error-loaddata"), {
                    type: "error"
                }), console.error(e);
            });
        }
    }
    /**
 * Helper function to decode base64 strings.
 *
 * @param {string} s
 * @returns {string}
 * @author Sophivorus
 * @license GPL-2.0-only
 * @license CC-BY-SA-3.0
 * @license GFDL-1.3
 * @private
 */    function ho() {
        return new Promise((e, t) => {
            io[location.host] ? mw.loader.getScript(io[location.host]).then(() => {
                e();
            }, e => {
                t([ "Convenient Discussions can't run: couldn't load the configuration.", e ]);
            }) : e();
        });
    }
    function mo() {
        const e = mw.config.get("wgUserLanguage");
        return new Promise(t => {
            "en" === e ? t() : $.get("https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/gadgets/ConvenientDiscussions/+/master/i18n/".concat(e, ".json?format=text")).then(e => {
                var n;
                p.strings = JSON.parse((n = e, decodeURIComponent(window.atob(n).split("").map(e => "%" + ("00" + e.charCodeAt(0).toString(16)).slice(-2)).join("")))), 
                t();
            }, () => {
                t();
            });
        });
    }
    function po() {
        return (po = o()((function*() {
            if (!location.host.endsWith(".m.wikipedia.org") && !$(".flow-board-page").length) if (p.running) console.warn("One instance of Convenient Discussions is already running."); else {
                p.running = !0, p.debug = oo, p.g = ao, p.s = uo, p.util = co, p.getCommentByAnchor = Ni.getCommentByAnchor, 
                p.getSectionByAnchor = Kn.getSectionByAnchor, p.getSectionsByHeadline = Kn.getSectionsByHeadline, 
                p.getLastActiveCommentForm = ci.getLastActiveCommentForm, p.getLastActiveAlteredCommentForm = ci.getLastActiveAlteredCommentForm, 
                p.util.parseCommentAnchor = N, p.util.formatDate = x, p.util.setVisits = X, p.debug.init(), 
                p.debug.startTimer("total time"), p.debug.startTimer("start"), mw.hook("convenientDiscussions.launched").fire(p);
                try {
                    yield Promise.all([ !p.config && ho(), !p.strings && (p.getStringsPromise || mo()) ].filter(ke));
                } catch (e) {
                    return void console.error(e);
                }
                lo();
            }
        }))).apply(this, arguments);
    }
    $((function() {
        return po.apply(this, arguments);
    }));
} ]);