! function(p, R) {
    "use strict";
    "object" == typeof module && "object" == typeof module.exports ? module.exports = p.document ? R(p, !0) : function(y) {
        if (!y.document) throw new Error("jQuery requires a window with a document");
        return R(y)
    } : R(p)
}(typeof window < "u" ? window : this, function(p, R) {
    "use strict";
    var y = [],
        I = Object.getPrototypeOf,
        H = y.slice,
        P = y.flat ? function(f) {
            return y.flat.call(f)
        } : function(f) {
            return y.concat.apply([], f)
        },
        K = y.push,
        O = y.indexOf,
        J = {},
        mt = J.toString,
        Z = J.hasOwnProperty,
        A = Z.toString,
        q = A.call(Object),
        tt = {},
        nt = function(f) {
            return "function" == typeof f && "number" != typeof f.nodeType && "function" != typeof f.item
        },
        lt = function(f) {
            return null != f && f === f.window
        },
        M = p.document,
        G = {
            type: !0,
            src: !0,
            nonce: !0,
            noModule: !0
        };

    function et(f, g, k) {
        var E, L, W = (k = k || M).createElement("script");
        if (W.text = f, g)
            for (E in G)(L = g[E] || g.getAttribute && g.getAttribute(E)) && W.setAttribute(E, L);
        k.head.appendChild(W).parentNode.removeChild(W)
    }

    function dt(f) {
        return null == f ? f + "" : "object" == typeof f || "function" == typeof f ? J[mt.call(f)] || "object" : typeof f
    }
    var wt = /HTML$/i,
        _ = function(f, g) {
            return new _.fn.init(f, g)
        };

    function Jt(f) {
        var g = !!f && "length" in f && f.length,
            k = dt(f);
        return !nt(f) && !lt(f) && ("array" === k || 0 === g || "number" == typeof g && 0 < g && g - 1 in f)
    }

    function jt(f, g) {
        return f.nodeName && f.nodeName.toLowerCase() === g.toLowerCase()
    }
    _.fn = _.prototype = {
        jquery: "3.7.1",
        constructor: _,
        length: 0,
        toArray: function() {
            return H.call(this)
        },
        get: function(f) {
            return null == f ? H.call(this) : f < 0 ? this[f + this.length] : this[f]
        },
        pushStack: function(f) {
            var g = _.merge(this.constructor(), f);
            return g.prevObject = this, g
        },
        each: function(f) {
            return _.each(this, f)
        },
        map: function(f) {
            return this.pushStack(_.map(this, function(g, k) {
                return f.call(g, k, g)
            }))
        },
        slice: function() {
            return this.pushStack(H.apply(this, arguments))
        },
        first: function() {
            return this.eq(0)
        },
        last: function() {
            return this.eq(-1)
        },
        even: function() {
            return this.pushStack(_.grep(this, function(f, g) {
                return (g + 1) % 2
            }))
        },
        odd: function() {
            return this.pushStack(_.grep(this, function(f, g) {
                return g % 2
            }))
        },
        eq: function(f) {
            var g = this.length,
                k = +f + (f < 0 ? g : 0);
            return this.pushStack(0 <= k && k < g ? [this[k]] : [])
        },
        end: function() {
            return this.prevObject || this.constructor()
        },
        push: K,
        sort: y.sort,
        splice: y.splice
    }, _.extend = _.fn.extend = function() {
        var f, g, k, E, L, W, Q = arguments[0] || {},
            yt = 1,
            vt = arguments.length,
            Lt = !1;
        for ("boolean" == typeof Q && (Lt = Q, Q = arguments[yt] || {}, yt++), "object" == typeof Q || nt(Q) || (Q = {}), yt === vt && (Q = this, yt--); yt < vt; yt++)
            if (null != (f = arguments[yt]))
                for (g in f) E = f[g], "__proto__" !== g && Q !== E && (Lt && E && (_.isPlainObject(E) || (L = Array.isArray(E))) ? (k = Q[g], W = L && !Array.isArray(k) ? [] : L || _.isPlainObject(k) ? k : {}, L = !1, Q[g] = _.extend(Lt, W, E)) : void 0 !== E && (Q[g] = E));
        return Q
    }, _.extend({
        expando: "jQuery" + ("3.7.1" + Math.random()).replace(/\D/g, ""),
        isReady: !0,
        error: function(f) {
            throw new Error(f)
        },
        noop: function() {},
        isPlainObject: function(f) {
            var g, k;
            return !(!f || "[object Object]" !== mt.call(f) || (g = I(f)) && ("function" != typeof(k = Z.call(g, "constructor") && g.constructor) || A.call(k) !== q))
        },
        isEmptyObject: function(f) {
            var g;
            for (g in f) return !1;
            return !0
        },
        globalEval: function(f, g, k) {
            et(f, {
                nonce: g && g.nonce
            }, k)
        },
        each: function(f, g) {
            var k, E = 0;
            if (Jt(f))
                for (k = f.length; E < k && !1 !== g.call(f[E], E, f[E]); E++);
            else
                for (E in f)
                    if (!1 === g.call(f[E], E, f[E])) break;
            return f
        },
        text: function(f) {
            var g, k = "",
                E = 0,
                L = f.nodeType;
            if (!L)
                for (; g = f[E++];) k += _.text(g);
            return 1 === L || 11 === L ? f.textContent : 9 === L ? f.documentElement.textContent : 3 === L || 4 === L ? f.nodeValue : k
        },
        makeArray: function(f, g) {
            var k = g || [];
            return null != f && (Jt(Object(f)) ? _.merge(k, "string" == typeof f ? [f] : f) : K.call(k, f)), k
        },
        inArray: function(f, g, k) {
            return null == g ? -1 : O.call(g, f, k)
        },
        isXMLDoc: function(f) {
            var k = f && (f.ownerDocument || f).documentElement;
            return !wt.test(f && f.namespaceURI || k && k.nodeName || "HTML")
        },
        merge: function(f, g) {
            for (var k = +g.length, E = 0, L = f.length; E < k; E++) f[L++] = g[E];
            return f.length = L, f
        },
        grep: function(f, g, k) {
            for (var E = [], L = 0, W = f.length, Q = !k; L < W; L++) !g(f[L], L) !== Q && E.push(f[L]);
            return E
        },
        map: function(f, g, k) {
            var E, L, W = 0,
                Q = [];
            if (Jt(f))
                for (E = f.length; W < E; W++) null != (L = g(f[W], W, k)) && Q.push(L);
            else
                for (W in f) null != (L = g(f[W], W, k)) && Q.push(L);
            return P(Q)
        },
        guid: 1,
        support: tt
    }), "function" == typeof Symbol && (_.fn[Symbol.iterator] = y[Symbol.iterator]), _.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function(f, g) {
        J["[object " + g + "]"] = g.toLowerCase()
    });
    var Wt = y.pop,
        be = y.sort,
        Kt = y.splice,
        Qt = "[\\x20\\t\\r\\n\\f]",
        Ft = new RegExp("^" + Qt + "+|((?:^|[^\\\\])(?:\\\\.)*)" + Qt + "+$", "g");
    _.contains = function(f, g) {
        var k = g && g.parentNode;
        return f === k || !(!k || 1 !== k.nodeType || !(f.contains ? f.contains(k) : f.compareDocumentPosition && 16 & f.compareDocumentPosition(k)))
    };
    var Yt = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;

    function it(f, g) {
        return g ? "\0" === f ? "\ufffd" : f.slice(0, -1) + "\\" + f.charCodeAt(f.length - 1).toString(16) + " " : "\\" + f
    }
    _.escapeSelector = function(f) {
        return (f + "").replace(Yt, it)
    };
    var ot = M,
        St = K;
    ! function() {
        var f, g, k, E, L, W, Q, yt, vt, Lt, ee = St,
            de = _.expando,
            Xt = 0,
            pe = 0,
            Ye = xi(),
            hn = xi(),
            on = xi(),
            ni = xi(),
            vi = function(ct, At) {
                return ct === At && (L = !0), 0
            },
            gr = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
            Xi = "(?:\\\\[\\da-fA-F]{1,6}" + Qt + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
            Dn = "\\[" + Qt + "*(" + Xi + ")(?:" + Qt + "*([*^$|!~]?=)" + Qt + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + Xi + "))|)" + Qt + "*\\]",
            Ts = ":(" + Xi + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + Dn + ")*)|.*)\\)|)",
            Mn = new RegExp(Qt + "+", "g"),
            Kn = new RegExp("^" + Qt + "*," + Qt + "*"),
            Ys = new RegExp("^" + Qt + "*([>+~]|" + Qt + ")" + Qt + "*"),
            Zs = new RegExp(Qt + "|>"),
            ur = new RegExp(Ts),
            $r = new RegExp("^" + Xi + "$"),
            mr = {
                ID: new RegExp("^#(" + Xi + ")"),
                CLASS: new RegExp("^\\.(" + Xi + ")"),
                TAG: new RegExp("^(" + Xi + "|[*])"),
                ATTR: new RegExp("^" + Dn),
                PSEUDO: new RegExp("^" + Ts),
                CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + Qt + "*(even|odd|(([+-]|)(\\d*)n|)" + Qt + "*(?:([+-]|)" + Qt + "*(\\d+)|))" + Qt + "*\\)|)", "i"),
                bool: new RegExp("^(?:" + gr + ")$", "i"),
                needsContext: new RegExp("^" + Qt + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + Qt + "*((?:-\\d)?\\d*)" + Qt + "*\\)|)(?=[^-]|$)", "i")
            },
            br = /^(?:input|select|textarea|button)$/i,
            qi = /^h\d$/i,
            Fi = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
            ui = /[+~]/,
            _i = new RegExp("\\\\[\\da-fA-F]{1,6}" + Qt + "?|\\\\([^\\r\\n\\f])", "g"),
            rr = function(ct, At) {
                var Zt = "0x" + ct.slice(1) - 65536;
                return At || (Zt < 0 ? String.fromCharCode(Zt + 65536) : String.fromCharCode(Zt >> 10 | 55296, 1023 & Zt | 56320))
            },
            vr = function() {
                ls()
            },
            sr = Gr(function(ct) {
                return !0 === ct.disabled && jt(ct, "fieldset")
            }, {
                dir: "parentNode",
                next: "legend"
            });
        try {
            ee.apply(y = H.call(ot.childNodes), ot.childNodes)
        } catch {
            ee = {
                apply: function(At, Zt) {
                    St.apply(At, H.call(Zt))
                },
                call: function(At) {
                    St.apply(At, H.call(arguments, 1))
                }
            }
        }

        function en(ct, At, Zt, se) {
            var fe, je, Fe, Ze, He, Nn, an, xn = At && At.ownerDocument,
                On = At ? At.nodeType : 9;
            if (Zt = Zt || [], "string" != typeof ct || !ct || 1 !== On && 9 !== On && 11 !== On) return Zt;
            if (!se && (ls(At), At = At || W, yt)) {
                if (11 !== On && (He = Fi.exec(ct)))
                    if (fe = He[1]) {
                        if (9 === On) {
                            if (!(Fe = At.getElementById(fe))) return Zt;
                            if (Fe.id === fe) return ee.call(Zt, Fe), Zt
                        } else if (xn && (Fe = xn.getElementById(fe)) && en.contains(At, Fe) && Fe.id === fe) return ee.call(Zt, Fe), Zt
                    } else {
                        if (He[2]) return ee.apply(Zt, At.getElementsByTagName(ct)), Zt;
                        if ((fe = He[3]) && At.getElementsByClassName) return ee.apply(Zt, At.getElementsByClassName(fe)), Zt
                    }
                if (!(ni[ct + " "] || vt && vt.test(ct))) {
                    if (an = ct, xn = At, 1 === On && (Zs.test(ct) || Ys.test(ct))) {
                        for ((xn = ui.test(ct) && as(At.parentNode) || At) == At && tt.scope || ((Ze = At.getAttribute("id")) ? Ze = _.escapeSelector(Ze) : At.setAttribute("id", Ze = de)), je = (Nn = qr(ct)).length; je--;) Nn[je] = (Ze ? "#" + Ze : ":scope") + " " + _r(Nn[je]);
                        an = Nn.join(",")
                    }
                    try {
                        return ee.apply(Zt, xn.querySelectorAll(an)), Zt
                    } catch {
                        ni(ct, !0)
                    } finally {
                        Ze === de && At.removeAttribute("id")
                    }
                }
            }
            return Ks(ct.replace(Ft, "$1"), At, Zt, se)
        }

        function xi() {
            var ct = [];
            return function At(Zt, se) {
                return ct.push(Zt + " ") > g.cacheLength && delete At[ct.shift()], At[Zt + " "] = se
            }
        }

        function Oi(ct) {
            return ct[de] = !0, ct
        }

        function qn(ct) {
            var At = W.createElement("fieldset");
            try {
                return !!ct(At)
            } catch {
                return !1
            } finally {
                At.parentNode && At.parentNode.removeChild(At), At = null
            }
        }

        function Br(ct) {
            return function(At) {
                return jt(At, "input") && At.type === ct
            }
        }

        function Qn(ct) {
            return function(At) {
                return (jt(At, "input") || jt(At, "button")) && At.type === ct
            }
        }

        function Ci(ct) {
            return function(At) {
                return "form" in At ? At.parentNode && !1 === At.disabled ? "label" in At ? "label" in At.parentNode ? At.parentNode.disabled === ct : At.disabled === ct : At.isDisabled === ct || At.isDisabled !== !ct && sr(At) === ct : At.disabled === ct : "label" in At && At.disabled === ct
            }
        }

        function ti(ct) {
            return Oi(function(At) {
                return At = +At, Oi(function(Zt, se) {
                    for (var fe, je = ct([], Zt.length, At), Fe = je.length; Fe--;) Zt[fe = je[Fe]] && (Zt[fe] = !(se[fe] = Zt[fe]))
                })
            })
        }

        function as(ct) {
            return ct && typeof ct.getElementsByTagName < "u" && ct
        }

        function ls(ct) {
            var At, Zt = ct ? ct.ownerDocument || ct : ot;
            return Zt != W && 9 === Zt.nodeType && Zt.documentElement && (Q = (W = Zt).documentElement, yt = !_.isXMLDoc(W), Lt = Q.matches || Q.webkitMatchesSelector || Q.msMatchesSelector, Q.msMatchesSelector && ot != W && (At = W.defaultView) && At.top !== At && At.addEventListener("unload", vr), tt.getById = qn(function(se) {
                return Q.appendChild(se).id = _.expando, !W.getElementsByName || !W.getElementsByName(_.expando).length
            }), tt.disconnectedMatch = qn(function(se) {
                return Lt.call(se, "*")
            }), tt.scope = qn(function() {
                return W.querySelectorAll(":scope")
            }), tt.cssHas = qn(function() {
                try {
                    return W.querySelector(":has(*,:jqfake)"), !1
                } catch {
                    return !0
                }
            }), tt.getById ? (g.filter.ID = function(se) {
                var fe = se.replace(_i, rr);
                return function(je) {
                    return je.getAttribute("id") === fe
                }
            }, g.find.ID = function(se, fe) {
                if (typeof fe.getElementById < "u" && yt) {
                    var je = fe.getElementById(se);
                    return je ? [je] : []
                }
            }) : (g.filter.ID = function(se) {
                var fe = se.replace(_i, rr);
                return function(je) {
                    var Fe = typeof je.getAttributeNode < "u" && je.getAttributeNode("id");
                    return Fe && Fe.value === fe
                }
            }, g.find.ID = function(se, fe) {
                if (typeof fe.getElementById < "u" && yt) {
                    var je, Fe, Ze, He = fe.getElementById(se);
                    if (He) {
                        if ((je = He.getAttributeNode("id")) && je.value === se) return [He];
                        for (Ze = fe.getElementsByName(se), Fe = 0; He = Ze[Fe++];)
                            if ((je = He.getAttributeNode("id")) && je.value === se) return [He]
                    }
                    return []
                }
            }), g.find.TAG = function(se, fe) {
                return typeof fe.getElementsByTagName < "u" ? fe.getElementsByTagName(se) : fe.querySelectorAll(se)
            }, g.find.CLASS = function(se, fe) {
                if (typeof fe.getElementsByClassName < "u" && yt) return fe.getElementsByClassName(se)
            }, vt = [], qn(function(se) {
                var fe;
                Q.appendChild(se).innerHTML = "<a id='" + de + "' href='' disabled='disabled'></a><select id='" + de + "-\r\\' disabled='disabled'><option selected=''></option></select>", se.querySelectorAll("[selected]").length || vt.push("\\[" + Qt + "*(?:value|" + gr + ")"), se.querySelectorAll("[id~=" + de + "-]").length || vt.push("~="), se.querySelectorAll("a#" + de + "+*").length || vt.push(".#.+[+~]"), se.querySelectorAll(":checked").length || vt.push(":checked"), (fe = W.createElement("input")).setAttribute("type", "hidden"), se.appendChild(fe).setAttribute("name", "D"), Q.appendChild(se).disabled = !0, 2 !== se.querySelectorAll(":disabled").length && vt.push(":enabled", ":disabled"), (fe = W.createElement("input")).setAttribute("name", ""), se.appendChild(fe), se.querySelectorAll("[name='']").length || vt.push("\\[" + Qt + "*name" + Qt + "*=" + Qt + "*(?:''|\"\")")
            }), tt.cssHas || vt.push(":has"), vt = vt.length && new RegExp(vt.join("|")), vi = function(se, fe) {
                if (se === fe) return L = !0, 0;
                var je = !se.compareDocumentPosition - !fe.compareDocumentPosition;
                return je || (1 & (je = (se.ownerDocument || se) == (fe.ownerDocument || fe) ? se.compareDocumentPosition(fe) : 1) || !tt.sortDetached && fe.compareDocumentPosition(se) === je ? se === W || se.ownerDocument == ot && en.contains(ot, se) ? -1 : fe === W || fe.ownerDocument == ot && en.contains(ot, fe) ? 1 : E ? O.call(E, se) - O.call(E, fe) : 0 : 4 & je ? -1 : 1)
            }), W
        }
        for (f in en.matches = function(ct, At) {
                return en(ct, null, null, At)
            }, en.matchesSelector = function(ct, At) {
                if (ls(ct), yt && !ni[At + " "] && (!vt || !vt.test(At))) try {
                    var Zt = Lt.call(ct, At);
                    if (Zt || tt.disconnectedMatch || ct.document && 11 !== ct.document.nodeType) return Zt
                } catch {
                    ni(At, !0)
                }
                return 0 < en(At, W, null, [ct]).length
            }, en.contains = function(ct, At) {
                return (ct.ownerDocument || ct) != W && ls(ct), _.contains(ct, At)
            }, en.attr = function(ct, At) {
                (ct.ownerDocument || ct) != W && ls(ct);
                var Zt = g.attrHandle[At.toLowerCase()],
                    se = Zt && Z.call(g.attrHandle, At.toLowerCase()) ? Zt(ct, At, !yt) : void 0;
                return void 0 !== se ? se : ct.getAttribute(At)
            }, en.error = function(ct) {
                throw new Error("Syntax error, unrecognized expression: " + ct)
            }, _.uniqueSort = function(ct) {
                var At, Zt = [],
                    se = 0,
                    fe = 0;
                if (L = !tt.sortStable, E = !tt.sortStable && H.call(ct, 0), be.call(ct, vi), L) {
                    for (; At = ct[fe++];) At === ct[fe] && (se = Zt.push(fe));
                    for (; se--;) Kt.call(ct, Zt[se], 1)
                }
                return E = null, ct
            }, _.fn.uniqueSort = function() {
                return this.pushStack(_.uniqueSort(H.apply(this)))
            }, (g = _.expr = {
                cacheLength: 50,
                createPseudo: Oi,
                match: mr,
                attrHandle: {},
                find: {},
                relative: {
                    ">": {
                        dir: "parentNode",
                        first: !0
                    },
                    " ": {
                        dir: "parentNode"
                    },
                    "+": {
                        dir: "previousSibling",
                        first: !0
                    },
                    "~": {
                        dir: "previousSibling"
                    }
                },
                preFilter: {
                    ATTR: function(ct) {
                        return ct[1] = ct[1].replace(_i, rr), ct[3] = (ct[3] || ct[4] || ct[5] || "").replace(_i, rr), "~=" === ct[2] && (ct[3] = " " + ct[3] + " "), ct.slice(0, 4)
                    },
                    CHILD: function(ct) {
                        return ct[1] = ct[1].toLowerCase(), "nth" === ct[1].slice(0, 3) ? (ct[3] || en.error(ct[0]), ct[4] = +(ct[4] ? ct[5] + (ct[6] || 1) : 2 * ("even" === ct[3] || "odd" === ct[3])), ct[5] = +(ct[7] + ct[8] || "odd" === ct[3])) : ct[3] && en.error(ct[0]), ct
                    },
                    PSEUDO: function(ct) {
                        var At, Zt = !ct[6] && ct[2];
                        return mr.CHILD.test(ct[0]) ? null : (ct[3] ? ct[2] = ct[4] || ct[5] || "" : Zt && ur.test(Zt) && (At = qr(Zt, !0)) && (At = Zt.indexOf(")", Zt.length - At) - Zt.length) && (ct[0] = ct[0].slice(0, At), ct[2] = Zt.slice(0, At)), ct.slice(0, 3))
                    }
                },
                filter: {
                    TAG: function(ct) {
                        var At = ct.replace(_i, rr).toLowerCase();
                        return "*" === ct ? function() {
                            return !0
                        } : function(Zt) {
                            return jt(Zt, At)
                        }
                    },
                    CLASS: function(ct) {
                        var At = Ye[ct + " "];
                        return At || (At = new RegExp("(^|" + Qt + ")" + ct + "(" + Qt + "|$)")) && Ye(ct, function(Zt) {
                            return At.test("string" == typeof Zt.className && Zt.className || typeof Zt.getAttribute < "u" && Zt.getAttribute("class") || "")
                        })
                    },
                    ATTR: function(ct, At, Zt) {
                        return function(se) {
                            var fe = en.attr(se, ct);
                            return null == fe ? "!=" === At : !At || (fe += "", "=" === At ? fe === Zt : "!=" === At ? fe !== Zt : "^=" === At ? Zt && 0 === fe.indexOf(Zt) : "*=" === At ? Zt && -1 < fe.indexOf(Zt) : "$=" === At ? Zt && fe.slice(-Zt.length) === Zt : "~=" === At ? -1 < (" " + fe.replace(Mn, " ") + " ").indexOf(Zt) : "|=" === At && (fe === Zt || fe.slice(0, Zt.length + 1) === Zt + "-"))
                        }
                    },
                    CHILD: function(ct, At, Zt, se, fe) {
                        var je = "nth" !== ct.slice(0, 3),
                            Fe = "last" !== ct.slice(-4),
                            Ze = "of-type" === At;
                        return 1 === se && 0 === fe ? function(He) {
                            return !!He.parentNode
                        } : function(He, Nn, an) {
                            var xn, On, pn, di, ai, Li = je !== Fe ? "nextSibling" : "previousSibling",
                                Ki = He.parentNode,
                                dr = Ze && He.nodeName.toLowerCase(),
                                or = !an && !Ze,
                                jn = !1;
                            if (Ki) {
                                if (je) {
                                    for (; Li;) {
                                        for (pn = He; pn = pn[Li];)
                                            if (Ze ? jt(pn, dr) : 1 === pn.nodeType) return !1;
                                        ai = Li = "only" === ct && !ai && "nextSibling"
                                    }
                                    return !0
                                }
                                if (ai = [Fe ? Ki.firstChild : Ki.lastChild], Fe && or) {
                                    for (jn = (di = (xn = (On = Ki[de] || (Ki[de] = {}))[ct] || [])[0] === Xt && xn[1]) && xn[2], pn = di && Ki.childNodes[di]; pn = ++di && pn && pn[Li] || (jn = di = 0) || ai.pop();)
                                        if (1 === pn.nodeType && ++jn && pn === He) {
                                            On[ct] = [Xt, di, jn];
                                            break
                                        }
                                } else if (or && (jn = di = (xn = (On = He[de] || (He[de] = {}))[ct] || [])[0] === Xt && xn[1]), !1 === jn)
                                    for (;
                                        (pn = ++di && pn && pn[Li] || (jn = di = 0) || ai.pop()) && (!(Ze ? jt(pn, dr) : 1 === pn.nodeType) || !++jn || (or && ((On = pn[de] || (pn[de] = {}))[ct] = [Xt, jn]), pn !== He)););
                                return (jn -= fe) === se || jn % se == 0 && 0 <= jn / se
                            }
                        }
                    },
                    PSEUDO: function(ct, At) {
                        var Zt, se = g.pseudos[ct] || g.setFilters[ct.toLowerCase()] || en.error("unsupported pseudo: " + ct);
                        return se[de] ? se(At) : 1 < se.length ? (Zt = [ct, ct, "", At], g.setFilters.hasOwnProperty(ct.toLowerCase()) ? Oi(function(fe, je) {
                            for (var Fe, Ze = se(fe, At), He = Ze.length; He--;) fe[Fe = O.call(fe, Ze[He])] = !(je[Fe] = Ze[He])
                        }) : function(fe) {
                            return se(fe, 0, Zt)
                        }) : se
                    }
                },
                pseudos: {
                    not: Oi(function(ct) {
                        var At = [],
                            Zt = [],
                            se = lo(ct.replace(Ft, "$1"));
                        return se[de] ? Oi(function(fe, je, Fe, Ze) {
                            for (var He, Nn = se(fe, null, Ze, []), an = fe.length; an--;)(He = Nn[an]) && (fe[an] = !(je[an] = He))
                        }) : function(fe, je, Fe) {
                            return At[0] = fe, se(At, null, Fe, Zt), At[0] = null, !Zt.pop()
                        }
                    }),
                    has: Oi(function(ct) {
                        return function(At) {
                            return 0 < en(ct, At).length
                        }
                    }),
                    contains: Oi(function(ct) {
                        return ct = ct.replace(_i, rr),
                            function(At) {
                                return -1 < (At.textContent || _.text(At)).indexOf(ct)
                            }
                    }),
                    lang: Oi(function(ct) {
                        return $r.test(ct || "") || en.error("unsupported lang: " + ct), ct = ct.replace(_i, rr).toLowerCase(),
                            function(At) {
                                var Zt;
                                do {
                                    if (Zt = yt ? At.lang : At.getAttribute("xml:lang") || At.getAttribute("lang")) return (Zt = Zt.toLowerCase()) === ct || 0 === Zt.indexOf(ct + "-")
                                } while ((At = At.parentNode) && 1 === At.nodeType);
                                return !1
                            }
                    }),
                    target: function(ct) {
                        var At = p.location && p.location.hash;
                        return At && At.slice(1) === ct.id
                    },
                    root: function(ct) {
                        return ct === Q
                    },
                    focus: function(ct) {
                        return ct === function() {
                            try {
                                return W.activeElement
                            } catch {}
                        }() && W.hasFocus() && !!(ct.type || ct.href || ~ct.tabIndex)
                    },
                    enabled: Ci(!1),
                    disabled: Ci(!0),
                    checked: function(ct) {
                        return jt(ct, "input") && !!ct.checked || jt(ct, "option") && !!ct.selected
                    },
                    selected: function(ct) {
                        return !0 === ct.selected
                    },
                    empty: function(ct) {
                        for (ct = ct.firstChild; ct; ct = ct.nextSibling)
                            if (ct.nodeType < 6) return !1;
                        return !0
                    },
                    parent: function(ct) {
                        return !g.pseudos.empty(ct)
                    },
                    header: function(ct) {
                        return qi.test(ct.nodeName)
                    },
                    input: function(ct) {
                        return br.test(ct.nodeName)
                    },
                    button: function(ct) {
                        return jt(ct, "input") && "button" === ct.type || jt(ct, "button")
                    },
                    text: function(ct) {
                        var At;
                        return jt(ct, "input") && "text" === ct.type && (null == (At = ct.getAttribute("type")) || "text" === At.toLowerCase())
                    },
                    first: ti(function() {
                        return [0]
                    }),
                    last: ti(function(ct, At) {
                        return [At - 1]
                    }),
                    eq: ti(function(ct, At, Zt) {
                        return [Zt < 0 ? Zt + At : Zt]
                    }),
                    even: ti(function(ct, At) {
                        for (var Zt = 0; Zt < At; Zt += 2) ct.push(Zt);
                        return ct
                    }),
                    odd: ti(function(ct, At) {
                        for (var Zt = 1; Zt < At; Zt += 2) ct.push(Zt);
                        return ct
                    }),
                    lt: ti(function(ct, At, Zt) {
                        var se;
                        for (se = Zt < 0 ? Zt + At : At < Zt ? At : Zt; 0 <= --se;) ct.push(se);
                        return ct
                    }),
                    gt: ti(function(ct, At, Zt) {
                        for (var se = Zt < 0 ? Zt + At : Zt; ++se < At;) ct.push(se);
                        return ct
                    })
                }
            }).pseudos.nth = g.pseudos.eq, {
                radio: !0,
                checkbox: !0,
                file: !0,
                password: !0,
                image: !0
            }) g.pseudos[f] = Br(f);
        for (f in {
                submit: !0,
                reset: !0
            }) g.pseudos[f] = Qn(f);

        function Xr() {}

        function qr(ct, At) {
            var Zt, se, fe, je, Fe, Ze, He, Nn = hn[ct + " "];
            if (Nn) return At ? 0 : Nn.slice(0);
            for (Fe = ct, Ze = [], He = g.preFilter; Fe;) {
                for (je in Zt && !(se = Kn.exec(Fe)) || (se && (Fe = Fe.slice(se[0].length) || Fe), Ze.push(fe = [])), Zt = !1, (se = Ys.exec(Fe)) && (Zt = se.shift(), fe.push({
                        value: Zt,
                        type: se[0].replace(Ft, " ")
                    }), Fe = Fe.slice(Zt.length)), g.filter) !(se = mr[je].exec(Fe)) || He[je] && !(se = He[je](se)) || (Zt = se.shift(), fe.push({
                    value: Zt,
                    type: je,
                    matches: se
                }), Fe = Fe.slice(Zt.length));
                if (!Zt) break
            }
            return At ? Fe.length : Fe ? en.error(ct) : hn(ct, Ze).slice(0)
        }

        function _r(ct) {
            for (var At = 0, Zt = ct.length, se = ""; At < Zt; At++) se += ct[At].value;
            return se
        }

        function Gr(ct, At, Zt) {
            var se = At.dir,
                fe = At.next,
                je = fe || se,
                Fe = Zt && "parentNode" === je,
                Ze = pe++;
            return At.first ? function(He, Nn, an) {
                for (; He = He[se];)
                    if (1 === He.nodeType || Fe) return ct(He, Nn, an);
                return !1
            } : function(He, Nn, an) {
                var xn, On, pn = [Xt, Ze];
                if (an) {
                    for (; He = He[se];)
                        if ((1 === He.nodeType || Fe) && ct(He, Nn, an)) return !0
                } else
                    for (; He = He[se];)
                        if (1 === He.nodeType || Fe)
                            if (On = He[de] || (He[de] = {}), fe && jt(He, fe)) He = He[se] || He;
                            else {
                                if ((xn = On[je]) && xn[0] === Xt && xn[1] === Ze) return pn[2] = xn[2];
                                if ((On[je] = pn)[2] = ct(He, Nn, an)) return !0
                            } return !1
            }
        }

        function Js(ct) {
            return 1 < ct.length ? function(At, Zt, se) {
                for (var fe = ct.length; fe--;)
                    if (!ct[fe](At, Zt, se)) return !1;
                return !0
            } : ct[0]
        }

        function As(ct, At, Zt, se, fe) {
            for (var je, Fe = [], Ze = 0, He = ct.length, Nn = null != At; Ze < He; Ze++)(je = ct[Ze]) && (Zt && !Zt(je, se, fe) || (Fe.push(je), Nn && At.push(Ze)));
            return Fe
        }

        function oo(ct, At, Zt, se, fe, je) {
            return se && !se[de] && (se = oo(se)), fe && !fe[de] && (fe = oo(fe, je)), Oi(function(Fe, Ze, He, Nn) {
                var an, xn, On, pn, di = [],
                    ai = [],
                    Li = Ze.length,
                    Ki = Fe || function(or, jn, Ri) {
                        for (var Er = 0, co = jn.length; Er < co; Er++) en(or, jn[Er], Ri);
                        return Ri
                    }(At || "*", He.nodeType ? [He] : He, []),
                    dr = !ct || !Fe && At ? Ki : As(Ki, di, ct, He, Nn);
                if (Zt ? Zt(dr, pn = fe || (Fe ? ct : Li || se) ? [] : Ze, He, Nn) : pn = dr, se)
                    for (an = As(pn, ai), se(an, [], He, Nn), xn = an.length; xn--;)(On = an[xn]) && (pn[ai[xn]] = !(dr[ai[xn]] = On));
                if (Fe) {
                    if (fe || ct) {
                        if (fe) {
                            for (an = [], xn = pn.length; xn--;)(On = pn[xn]) && an.push(dr[xn] = On);
                            fe(null, pn = [], an, Nn)
                        }
                        for (xn = pn.length; xn--;)(On = pn[xn]) && -1 < (an = fe ? O.call(Fe, On) : di[xn]) && (Fe[an] = !(Ze[an] = On))
                    }
                } else pn = As(pn === Ze ? pn.splice(Li, pn.length) : pn), fe ? fe(null, Ze, pn, Nn) : ee.apply(Ze, pn)
            })
        }

        function ao(ct) {
            for (var At, Zt, se, fe = ct.length, je = g.relative[ct[0].type], Fe = je || g.relative[" "], Ze = je ? 1 : 0, He = Gr(function(xn) {
                    return xn === At
                }, Fe, !0), Nn = Gr(function(xn) {
                    return -1 < O.call(At, xn)
                }, Fe, !0), an = [function(xn, On, pn) {
                    var di = !je && (pn || On != k) || ((At = On).nodeType ? He(xn, On, pn) : Nn(xn, On, pn));
                    return At = null, di
                }]; Ze < fe; Ze++)
                if (Zt = g.relative[ct[Ze].type]) an = [Gr(Js(an), Zt)];
                else {
                    if ((Zt = g.filter[ct[Ze].type].apply(null, ct[Ze].matches))[de]) {
                        for (se = ++Ze; se < fe && !g.relative[ct[se].type]; se++);
                        return oo(1 < Ze && Js(an), 1 < Ze && _r(ct.slice(0, Ze - 1).concat({
                            value: " " === ct[Ze - 2].type ? "*" : ""
                        })).replace(Ft, "$1"), Zt, Ze < se && ao(ct.slice(Ze, se)), se < fe && ao(ct = ct.slice(se)), se < fe && _r(ct))
                    }
                    an.push(Zt)
                }
            return Js(an)
        }

        function lo(ct, At) {
            var Zt, se, fe, je, Fe, Ze, He = [],
                Nn = [],
                an = on[ct + " "];
            if (!an) {
                for (At || (At = qr(ct)), Zt = At.length; Zt--;)(an = ao(At[Zt]))[de] ? He.push(an) : Nn.push(an);
                (an = on(ct, (se = Nn, je = 0 < (fe = He).length, Fe = 0 < se.length, Ze = function(xn, On, pn, di, ai) {
                    var Li, Ki, dr, or = 0,
                        jn = "0",
                        Ri = xn && [],
                        Er = [],
                        co = k,
                        ho = xn || Fe && g.find.TAG("*", ai),
                        Ns = Xt += null == co ? 1 : Math.random() || .1,
                        Hs = ho.length;
                    for (ai && (k = On == W || On || ai); jn !== Hs && null != (Li = ho[jn]); jn++) {
                        if (Fe && Li) {
                            for (Ki = 0, On || Li.ownerDocument == W || (ls(Li), pn = !yt); dr = se[Ki++];)
                                if (dr(Li, On || W, pn)) {
                                    ee.call(di, Li);
                                    break
                                }
                            ai && (Xt = Ns)
                        }
                        je && ((Li = !dr && Li) && or--, xn && Ri.push(Li))
                    }
                    if (or += jn, je && jn !== or) {
                        for (Ki = 0; dr = fe[Ki++];) dr(Ri, Er, On, pn);
                        if (xn) {
                            if (0 < or)
                                for (; jn--;) Ri[jn] || Er[jn] || (Er[jn] = Wt.call(di));
                            Er = As(Er)
                        }
                        ee.apply(di, Er), ai && !xn && 0 < Er.length && 1 < or + fe.length && _.uniqueSort(di)
                    }
                    return ai && (Xt = Ns, k = co), Ri
                }, je ? Oi(Ze) : Ze))).selector = ct
            }
            return an
        }

        function Ks(ct, At, Zt, se) {
            var fe, je, Fe, Ze, He, Nn = "function" == typeof ct && ct,
                an = !se && qr(ct = Nn.selector || ct);
            if (Zt = Zt || [], 1 === an.length) {
                if (2 < (je = an[0] = an[0].slice(0)).length && "ID" === (Fe = je[0]).type && 9 === At.nodeType && yt && g.relative[je[1].type]) {
                    if (!(At = (g.find.ID(Fe.matches[0].replace(_i, rr), At) || [])[0])) return Zt;
                    Nn && (At = At.parentNode), ct = ct.slice(je.shift().value.length)
                }
                for (fe = mr.needsContext.test(ct) ? 0 : je.length; fe-- && !g.relative[Ze = (Fe = je[fe]).type];)
                    if ((He = g.find[Ze]) && (se = He(Fe.matches[0].replace(_i, rr), ui.test(je[0].type) && as(At.parentNode) || At))) {
                        if (je.splice(fe, 1), !(ct = se.length && _r(je))) return ee.apply(Zt, se), Zt;
                        break
                    }
            }
            return (Nn || lo(ct, an))(se, At, !yt, Zt, !At || ui.test(ct) && as(At.parentNode) || At), Zt
        }
        Xr.prototype = g.filters = g.pseudos, g.setFilters = new Xr, tt.sortStable = de.split("").sort(vi).join("") === de, ls(), tt.sortDetached = qn(function(ct) {
            return 1 & ct.compareDocumentPosition(W.createElement("fieldset"))
        }), _.find = en, _.expr[":"] = _.expr.pseudos, _.unique = _.uniqueSort, en.compile = lo, en.select = Ks, en.setDocument = ls, en.tokenize = qr, en.escape = _.escapeSelector, en.getText = _.text, en.isXML = _.isXMLDoc, en.selectors = _.expr, en.support = _.support, en.uniqueSort = _.uniqueSort
    }();
    var V = function(f, g, k) {
            for (var E = [], L = void 0 !== k;
                (f = f[g]) && 9 !== f.nodeType;)
                if (1 === f.nodeType) {
                    if (L && _(f).is(k)) break;
                    E.push(f)
                }
            return E
        },
        rt = function(f, g) {
            for (var k = []; f; f = f.nextSibling) 1 === f.nodeType && f !== g && k.push(f);
            return k
        },
        ut = _.expr.match.needsContext,
        z = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;

    function X(f, g, k) {
        return nt(g) ? _.grep(f, function(E, L) {
            return !!g.call(E, L, E) !== k
        }) : g.nodeType ? _.grep(f, function(E) {
            return E === g !== k
        }) : "string" != typeof g ? _.grep(f, function(E) {
            return -1 < O.call(g, E) !== k
        }) : _.filter(g, f, k)
    }
    _.filter = function(f, g, k) {
        var E = g[0];
        return k && (f = ":not(" + f + ")"), 1 === g.length && 1 === E.nodeType ? _.find.matchesSelector(E, f) ? [E] : [] : _.find.matches(f, _.grep(g, function(L) {
            return 1 === L.nodeType
        }))
    }, _.fn.extend({
        find: function(f) {
            var g, k, E = this.length,
                L = this;
            if ("string" != typeof f) return this.pushStack(_(f).filter(function() {
                for (g = 0; g < E; g++)
                    if (_.contains(L[g], this)) return !0
            }));
            for (k = this.pushStack([]), g = 0; g < E; g++) _.find(f, L[g], k);
            return 1 < E ? _.uniqueSort(k) : k
        },
        filter: function(f) {
            return this.pushStack(X(this, f || [], !1))
        },
        not: function(f) {
            return this.pushStack(X(this, f || [], !0))
        },
        is: function(f) {
            return !!X(this, "string" == typeof f && ut.test(f) ? _(f) : f || [], !1).length
        }
    });
    var _t, Mt = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;
    (_.fn.init = function(f, g, k) {
        var E, L;
        if (!f) return this;
        if (k = k || _t, "string" == typeof f) {
            if (!(E = "<" === f[0] && ">" === f[f.length - 1] && 3 <= f.length ? [null, f, null] : Mt.exec(f)) || !E[1] && g) return !g || g.jquery ? (g || k).find(f) : this.constructor(g).find(f);
            if (E[1]) {
                if (_.merge(this, _.parseHTML(E[1], (g = g instanceof _ ? g[0] : g) && g.nodeType ? g.ownerDocument || g : M, !0)), z.test(E[1]) && _.isPlainObject(g))
                    for (E in g) nt(this[E]) ? this[E](g[E]) : this.attr(E, g[E]);
                return this
            }
            return (L = M.getElementById(E[2])) && (this[0] = L, this.length = 1), this
        }
        return f.nodeType ? (this[0] = f, this.length = 1, this) : nt(f) ? void 0 !== k.ready ? k.ready(f) : f(_) : _.makeArray(f, this)
    }).prototype = _.fn, _t = _(M);
    var Gt = /^(?:parents|prev(?:Until|All))/,
        xt = {
            children: !0,
            contents: !0,
            next: !0,
            prev: !0
        };

    function pt(f, g) {
        for (;
            (f = f[g]) && 1 !== f.nodeType;);
        return f
    }
    _.fn.extend({
        has: function(f) {
            var g = _(f, this),
                k = g.length;
            return this.filter(function() {
                for (var E = 0; E < k; E++)
                    if (_.contains(this, g[E])) return !0
            })
        },
        closest: function(f, g) {
            var k, E = 0,
                L = this.length,
                W = [],
                Q = "string" != typeof f && _(f);
            if (!ut.test(f))
                for (; E < L; E++)
                    for (k = this[E]; k && k !== g; k = k.parentNode)
                        if (k.nodeType < 11 && (Q ? -1 < Q.index(k) : 1 === k.nodeType && _.find.matchesSelector(k, f))) {
                            W.push(k);
                            break
                        }
            return this.pushStack(1 < W.length ? _.uniqueSort(W) : W)
        },
        index: function(f) {
            return f ? "string" == typeof f ? O.call(_(f), this[0]) : O.call(this, f.jquery ? f[0] : f) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
        },
        add: function(f, g) {
            return this.pushStack(_.uniqueSort(_.merge(this.get(), _(f, g))))
        },
        addBack: function(f) {
            return this.add(null == f ? this.prevObject : this.prevObject.filter(f))
        }
    }), _.each({
        parent: function(f) {
            var g = f.parentNode;
            return g && 11 !== g.nodeType ? g : null
        },
        parents: function(f) {
            return V(f, "parentNode")
        },
        parentsUntil: function(f, g, k) {
            return V(f, "parentNode", k)
        },
        next: function(f) {
            return pt(f, "nextSibling")
        },
        prev: function(f) {
            return pt(f, "previousSibling")
        },
        nextAll: function(f) {
            return V(f, "nextSibling")
        },
        prevAll: function(f) {
            return V(f, "previousSibling")
        },
        nextUntil: function(f, g, k) {
            return V(f, "nextSibling", k)
        },
        prevUntil: function(f, g, k) {
            return V(f, "previousSibling", k)
        },
        siblings: function(f) {
            return rt((f.parentNode || {}).firstChild, f)
        },
        children: function(f) {
            return rt(f.firstChild)
        },
        contents: function(f) {
            return null != f.contentDocument && I(f.contentDocument) ? f.contentDocument : (jt(f, "template") && (f = f.content || f), _.merge([], f.childNodes))
        }
    }, function(f, g) {
        _.fn[f] = function(k, E) {
            var L = _.map(this, g, k);
            return "Until" !== f.slice(-5) && (E = k), E && "string" == typeof E && (L = _.filter(E, L)), 1 < this.length && (xt[f] || _.uniqueSort(L), Gt.test(f) && L.reverse()), this.pushStack(L)
        }
    });
    var Tt = /[^\x20\t\r\n\f]+/g;

    function Dt(f) {
        return f
    }

    function ce(f) {
        throw f
    }

    function le(f, g, k, E) {
        var L;
        try {
            f && nt(L = f.promise) ? L.call(f).done(g).fail(k) : f && nt(L = f.then) ? L.call(f, g, k) : g.apply(void 0, [f].slice(E))
        } catch (W) {
            k.apply(void 0, [W])
        }
    }
    _.Callbacks = function(f) {
        var k;
        f = "string" == typeof f ? (k = {}, _.each(f.match(Tt) || [], function(Xt, pe) {
            k[pe] = !0
        }), k) : _.extend({}, f);
        var E, L, W, Q, yt = [],
            vt = [],
            Lt = -1,
            ee = function() {
                for (Q = Q || f.once, W = E = !0; vt.length; Lt = -1)
                    for (L = vt.shift(); ++Lt < yt.length;) !1 === yt[Lt].apply(L[0], L[1]) && f.stopOnFalse && (Lt = yt.length, L = !1);
                f.memory || (L = !1), E = !1, Q && (yt = L ? [] : "")
            },
            de = {
                add: function() {
                    return yt && (L && !E && (Lt = yt.length - 1, vt.push(L)), function Xt(pe) {
                        _.each(pe, function(Ye, hn) {
                            nt(hn) ? f.unique && de.has(hn) || yt.push(hn) : hn && hn.length && "string" !== dt(hn) && Xt(hn)
                        })
                    }(arguments), L && !E && ee()), this
                },
                remove: function() {
                    return _.each(arguments, function(Xt, pe) {
                        for (var Ye; - 1 < (Ye = _.inArray(pe, yt, Ye));) yt.splice(Ye, 1), Ye <= Lt && Lt--
                    }), this
                },
                has: function(Xt) {
                    return Xt ? -1 < _.inArray(Xt, yt) : 0 < yt.length
                },
                empty: function() {
                    return yt && (yt = []), this
                },
                disable: function() {
                    return Q = vt = [], yt = L = "", this
                },
                disabled: function() {
                    return !yt
                },
                lock: function() {
                    return Q = vt = [], L || E || (yt = L = ""), this
                },
                locked: function() {
                    return !!Q
                },
                fireWith: function(Xt, pe) {
                    return Q || (pe = [Xt, (pe = pe || []).slice ? pe.slice() : pe], vt.push(pe), E || ee()), this
                },
                fire: function() {
                    return de.fireWith(this, arguments), this
                },
                fired: function() {
                    return !!W
                }
            };
        return de
    }, _.extend({
        Deferred: function(f) {
            var g = [
                    ["notify", "progress", _.Callbacks("memory"), _.Callbacks("memory"), 2],
                    ["resolve", "done", _.Callbacks("once memory"), _.Callbacks("once memory"), 0, "resolved"],
                    ["reject", "fail", _.Callbacks("once memory"), _.Callbacks("once memory"), 1, "rejected"]
                ],
                k = "pending",
                E = {
                    state: function() {
                        return k
                    },
                    always: function() {
                        return L.done(arguments).fail(arguments), this
                    },
                    catch: function(W) {
                        return E.then(null, W)
                    },
                    pipe: function() {
                        var W = arguments;
                        return _.Deferred(function(Q) {
                            _.each(g, function(yt, vt) {
                                var Lt = nt(W[vt[4]]) && W[vt[4]];
                                L[vt[1]](function() {
                                    var ee = Lt && Lt.apply(this, arguments);
                                    ee && nt(ee.promise) ? ee.promise().progress(Q.notify).done(Q.resolve).fail(Q.reject) : Q[vt[0] + "With"](this, Lt ? [ee] : arguments)
                                })
                            }), W = null
                        }).promise()
                    },
                    then: function(W, Q, yt) {
                        var vt = 0;

                        function Lt(ee, de, Xt, pe) {
                            return function() {
                                var Ye = this,
                                    hn = arguments,
                                    on = function() {
                                        var vi, gr;
                                        if (!(ee < vt)) {
                                            if ((vi = Xt.apply(Ye, hn)) === de.promise()) throw new TypeError("Thenable self-resolution");
                                            nt(gr = vi && ("object" == typeof vi || "function" == typeof vi) && vi.then) ? pe ? gr.call(vi, Lt(vt, de, Dt, pe), Lt(vt, de, ce, pe)) : (vt++, gr.call(vi, Lt(vt, de, Dt, pe), Lt(vt, de, ce, pe), Lt(vt, de, Dt, de.notifyWith))) : (Xt !== Dt && (Ye = void 0, hn = [vi]), (pe || de.resolveWith)(Ye, hn))
                                        }
                                    },
                                    ni = pe ? on : function() {
                                        try {
                                            on()
                                        } catch (vi) {
                                            _.Deferred.exceptionHook && _.Deferred.exceptionHook(vi, ni.error), vt <= ee + 1 && (Xt !== ce && (Ye = void 0, hn = [vi]), de.rejectWith(Ye, hn))
                                        }
                                    };
                                ee ? ni() : (_.Deferred.getErrorHook ? ni.error = _.Deferred.getErrorHook() : _.Deferred.getStackHook && (ni.error = _.Deferred.getStackHook()), p.setTimeout(ni))
                            }
                        }
                        return _.Deferred(function(ee) {
                            g[0][3].add(Lt(0, ee, nt(yt) ? yt : Dt, ee.notifyWith)), g[1][3].add(Lt(0, ee, nt(W) ? W : Dt)), g[2][3].add(Lt(0, ee, nt(Q) ? Q : ce))
                        }).promise()
                    },
                    promise: function(W) {
                        return null != W ? _.extend(W, E) : E
                    }
                },
                L = {};
            return _.each(g, function(W, Q) {
                var yt = Q[2],
                    vt = Q[5];
                E[Q[1]] = yt.add, vt && yt.add(function() {
                    k = vt
                }, g[3 - W][2].disable, g[3 - W][3].disable, g[0][2].lock, g[0][3].lock), yt.add(Q[3].fire), L[Q[0]] = function() {
                    return L[Q[0] + "With"](this === L ? void 0 : this, arguments), this
                }, L[Q[0] + "With"] = yt.fireWith
            }), E.promise(L), f && f.call(L, L), L
        },
        when: function(f) {
            var g = arguments.length,
                k = g,
                E = Array(k),
                L = H.call(arguments),
                W = _.Deferred(),
                Q = function(yt) {
                    return function(vt) {
                        E[yt] = this, L[yt] = 1 < arguments.length ? H.call(arguments) : vt, --g || W.resolveWith(E, L)
                    }
                };
            if (g <= 1 && (le(f, W.done(Q(k)).resolve, W.reject, !g), "pending" === W.state() || nt(L[k] && L[k].then))) return W.then();
            for (; k--;) le(L[k], Q(k), W.reject);
            return W.promise()
        }
    });
    var Ce = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
    _.Deferred.exceptionHook = function(f, g) {
        p.console && p.console.warn && f && Ce.test(f.name) && p.console.warn("jQuery.Deferred exception: " + f.message, f.stack, g)
    }, _.readyException = function(f) {
        p.setTimeout(function() {
            throw f
        })
    };
    var Ne = _.Deferred();

    function dn() {
        M.removeEventListener("DOMContentLoaded", dn), p.removeEventListener("load", dn), _.ready()
    }
    _.fn.ready = function(f) {
        return Ne.then(f).catch(function(g) {
            _.readyException(g)
        }), this
    }, _.extend({
        isReady: !1,
        readyWait: 1,
        ready: function(f) {
            (!0 === f ? --_.readyWait : _.isReady) || (_.isReady = !0) !== f && 0 < --_.readyWait || Ne.resolveWith(M, [_])
        }
    }), _.ready.then = Ne.then, "complete" === M.readyState || "loading" !== M.readyState && !M.documentElement.doScroll ? p.setTimeout(_.ready) : (M.addEventListener("DOMContentLoaded", dn), p.addEventListener("load", dn));
    var Me = function(f, g, k, E, L, W, Q) {
            var yt = 0,
                vt = f.length,
                Lt = null == k;
            if ("object" === dt(k))
                for (yt in L = !0, k) Me(f, g, yt, k[yt], !0, W, Q);
            else if (void 0 !== E && (L = !0, nt(E) || (Q = !0), Lt && (Q ? (g.call(f, E), g = null) : (Lt = g, g = function(ee, de, Xt) {
                    return Lt.call(_(ee), Xt)
                })), g))
                for (; yt < vt; yt++) g(f[yt], k, Q ? E : E.call(f[yt], yt, g(f[yt], k)));
            return L ? f : Lt ? g.call(f) : vt ? g(f[0], k) : W
        },
        cn = /^-ms-/,
        sn = /-([a-z])/g;

    function Wn(f, g) {
        return g.toUpperCase()
    }

    function te(f) {
        return f.replace(cn, "ms-").replace(sn, Wn)
    }
    var Pn = function(f) {
        return 1 === f.nodeType || 9 === f.nodeType || !+f.nodeType
    };

    function En() {
        this.expando = _.expando + En.uid++
    }
    En.uid = 1, En.prototype = {
        cache: function(f) {
            var g = f[this.expando];
            return g || (g = {}, Pn(f) && (f.nodeType ? f[this.expando] = g : Object.defineProperty(f, this.expando, {
                value: g,
                configurable: !0
            }))), g
        },
        set: function(f, g, k) {
            var E, L = this.cache(f);
            if ("string" == typeof g) L[te(g)] = k;
            else
                for (E in g) L[te(E)] = g[E];
            return L
        },
        get: function(f, g) {
            return void 0 === g ? this.cache(f) : f[this.expando] && f[this.expando][te(g)]
        },
        access: function(f, g, k) {
            return void 0 === g || g && "string" == typeof g && void 0 === k ? this.get(f, g) : (this.set(f, g, k), void 0 !== k ? k : g)
        },
        remove: function(f, g) {
            var k, E = f[this.expando];
            if (void 0 !== E) {
                if (void 0 !== g)
                    for ((k = (g = Array.isArray(g) ? g.map(te) : (g = te(g)) in E ? [g] : g.match(Tt) || []).length); k--;) delete E[g[k]];
                (void 0 === g || _.isEmptyObject(E)) && (f.nodeType ? f[this.expando] = void 0 : delete f[this.expando])
            }
        },
        hasData: function(f) {
            var g = f[this.expando];
            return void 0 !== g && !_.isEmptyObject(g)
        }
    };
    var Be = new En,
        qe = new En,
        gi = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
        mi = /[A-Z]/g;

    function ki(f, g, k) {
        var E, L;
        if (void 0 === k && 1 === f.nodeType)
            if (E = "data-" + g.replace(mi, "-$&").toLowerCase(), "string" == typeof(k = f.getAttribute(E))) {
                try {
                    k = "true" === (L = k) || "false" !== L && ("null" === L ? null : L === +L + "" ? +L : gi.test(L) ? JSON.parse(L) : L)
                } catch {}
                qe.set(f, g, k)
            } else k = void 0;
        return k
    }
    _.extend({
        hasData: function(f) {
            return qe.hasData(f) || Be.hasData(f)
        },
        data: function(f, g, k) {
            return qe.access(f, g, k)
        },
        removeData: function(f, g) {
            qe.remove(f, g)
        },
        _data: function(f, g, k) {
            return Be.access(f, g, k)
        },
        _removeData: function(f, g) {
            Be.remove(f, g)
        }
    }), _.fn.extend({
        data: function(f, g) {
            var k, E, L, W = this[0],
                Q = W && W.attributes;
            if (void 0 === f) {
                if (this.length && (L = qe.get(W), 1 === W.nodeType && !Be.get(W, "hasDataAttrs"))) {
                    for (k = Q.length; k--;) Q[k] && 0 === (E = Q[k].name).indexOf("data-") && (E = te(E.slice(5)), ki(W, E, L[E]));
                    Be.set(W, "hasDataAttrs", !0)
                }
                return L
            }
            return "object" == typeof f ? this.each(function() {
                qe.set(this, f)
            }) : Me(this, function(yt) {
                var vt;
                if (W && void 0 === yt) return void 0 !== (vt = qe.get(W, f)) || void 0 !== (vt = ki(W, f)) ? vt : void 0;
                this.each(function() {
                    qe.set(this, f, yt)
                })
            }, null, g, 1 < arguments.length, null, !0)
        },
        removeData: function(f) {
            return this.each(function() {
                qe.remove(this, f)
            })
        }
    }), _.extend({
        queue: function(f, g, k) {
            var E;
            if (f) return E = Be.get(f, g = (g || "fx") + "queue"), k && (!E || Array.isArray(k) ? E = Be.access(f, g, _.makeArray(k)) : E.push(k)), E || []
        },
        dequeue: function(f, g) {
            var k = _.queue(f, g = g || "fx"),
                E = k.length,
                L = k.shift(),
                W = _._queueHooks(f, g);
            "inprogress" === L && (L = k.shift(), E--), L && ("fx" === g && k.unshift("inprogress"), delete W.stop, L.call(f, function() {
                _.dequeue(f, g)
            }, W)), !E && W && W.empty.fire()
        },
        _queueHooks: function(f, g) {
            var k = g + "queueHooks";
            return Be.get(f, k) || Be.access(f, k, {
                empty: _.Callbacks("once memory").add(function() {
                    Be.remove(f, [g + "queue", k])
                })
            })
        }
    }), _.fn.extend({
        queue: function(f, g) {
            var k = 2;
            return "string" != typeof f && (g = f, f = "fx", k--), arguments.length < k ? _.queue(this[0], f) : void 0 === g ? this : this.each(function() {
                var E = _.queue(this, f, g);
                _._queueHooks(this, f), "fx" === f && "inprogress" !== E[0] && _.dequeue(this, f)
            })
        },
        dequeue: function(f) {
            return this.each(function() {
                _.dequeue(this, f)
            })
        },
        clearQueue: function(f) {
            return this.queue(f || "fx", [])
        },
        promise: function(f, g) {
            var k, E = 1,
                L = _.Deferred(),
                W = this,
                Q = this.length,
                yt = function() {
                    --E || L.resolveWith(W, [W])
                };
            for ("string" != typeof f && (g = f, f = void 0), f = f || "fx"; Q--;)(k = Be.get(W[Q], f + "queueHooks")) && k.empty && (E++, k.empty.add(yt));
            return yt(), L.promise(g)
        }
    });
    var Ni = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
        Pi = new RegExp("^(?:([+-])=|)(" + Ni + ")([a-z%]*)$", "i"),
        Un = ["Top", "Right", "Bottom", "Left"],
        Xn = M.documentElement,
        bi = function(f) {
            return _.contains(f.ownerDocument, f)
        },
        Bi = {
            composed: !0
        };
    Xn.getRootNode && (bi = function(f) {
        return _.contains(f.ownerDocument, f) || f.getRootNode(Bi) === f.ownerDocument
    });
    var mn = function(f, g) {
        return "none" === (f = g || f).style.display || "" === f.style.display && bi(f) && "none" === _.css(f, "display")
    };

    function v(f, g, k, E) {
        var L, W, Q = 20,
            yt = E ? function() {
                return E.cur()
            } : function() {
                return _.css(f, g, "")
            },
            vt = yt(),
            Lt = k && k[3] || (_.cssNumber[g] ? "" : "px"),
            ee = f.nodeType && (_.cssNumber[g] || "px" !== Lt && +vt) && Pi.exec(_.css(f, g));
        if (ee && ee[3] !== Lt) {
            for (Lt = Lt || ee[3], ee = +(vt /= 2) || 1; Q--;) _.style(f, g, ee + Lt), (1 - W) * (1 - (W = yt() / vt || .5)) <= 0 && (Q = 0), ee /= W;
            _.style(f, g, (ee *= 2) + Lt), k = k || []
        }
        return k && (ee = +ee || +vt || 0, L = k[1] ? ee + (k[1] + 1) * k[2] : +k[2], E && (E.unit = Lt, E.start = ee, E.end = L)), L
    }
    var wr = {};

    function ci(f, g) {
        for (var k, E, L, W, Q, yt, vt, Lt = [], ee = 0, de = f.length; ee < de; ee++)(E = f[ee]).style && (k = E.style.display, g ? ("none" === k && (Lt[ee] = Be.get(E, "display") || null, Lt[ee] || (E.style.display = "")), "" === E.style.display && mn(E) && (Lt[ee] = (vt = Q = W = void 0, Q = (L = E).ownerDocument, (vt = wr[yt = L.nodeName]) || (W = Q.body.appendChild(Q.createElement(yt)), vt = _.css(W, "display"), W.parentNode.removeChild(W), "none" === vt && (vt = "block"), wr[yt] = vt)))) : "none" !== k && (Lt[ee] = "none", Be.set(E, "display", k)));
        for (ee = 0; ee < de; ee++) null != Lt[ee] && (f[ee].style.display = Lt[ee]);
        return f
    }
    _.fn.extend({
        show: function() {
            return ci(this, !0)
        },
        hide: function() {
            return ci(this)
        },
        toggle: function(f) {
            return "boolean" == typeof f ? f ? this.show() : this.hide() : this.each(function() {
                mn(this) ? _(this).show() : _(this).hide()
            })
        }
    });
    var Ei, gn, si = /^(?:checkbox|radio)$/i,
        Ke = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i,
        Ai = /^$|^module$|\/(?:java|ecma)script/i;
    Ei = M.createDocumentFragment().appendChild(M.createElement("div")), (gn = M.createElement("input")).setAttribute("type", "radio"), gn.setAttribute("checked", "checked"), gn.setAttribute("name", "t"), Ei.appendChild(gn), tt.checkClone = Ei.cloneNode(!0).cloneNode(!0).lastChild.checked, Ei.innerHTML = "<textarea>x</textarea>", tt.noCloneChecked = !!Ei.cloneNode(!0).lastChild.defaultValue, Ei.innerHTML = "<option></option>", tt.option = !!Ei.lastChild;
    var An = {
        thead: [1, "<table>", "</table>"],
        col: [2, "<table><colgroup>", "</colgroup></table>"],
        tr: [2, "<table><tbody>", "</tbody></table>"],
        td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
        _default: [0, "", ""]
    };

    function Qe(f, g) {
        var k;
        return k = typeof f.getElementsByTagName < "u" ? f.getElementsByTagName(g || "*") : typeof f.querySelectorAll < "u" ? f.querySelectorAll(g || "*") : [], void 0 === g || g && jt(f, g) ? _.merge([f], k) : k
    }

    function hi(f, g) {
        for (var k = 0, E = f.length; k < E; k++) Be.set(f[k], "globalEval", !g || Be.get(g[k], "globalEval"))
    }
    An.tbody = An.tfoot = An.colgroup = An.caption = An.thead, An.th = An.td, tt.option || (An.optgroup = An.option = [1, "<select multiple='multiple'>", "</select>"]);
    var Jn = /<|&#?\w+;/;

    function Pr(f, g, k, E, L) {
        for (var W, Q, yt, vt, Lt, ee, de = g.createDocumentFragment(), Xt = [], pe = 0, Ye = f.length; pe < Ye; pe++)
            if ((W = f[pe]) || 0 === W)
                if ("object" === dt(W)) _.merge(Xt, W.nodeType ? [W] : W);
                else if (Jn.test(W)) {
            for (Q = Q || de.appendChild(g.createElement("div")), yt = (Ke.exec(W) || ["", ""])[1].toLowerCase(), Q.innerHTML = (vt = An[yt] || An._default)[1] + _.htmlPrefilter(W) + vt[2], ee = vt[0]; ee--;) Q = Q.lastChild;
            _.merge(Xt, Q.childNodes), (Q = de.firstChild).textContent = ""
        } else Xt.push(g.createTextNode(W));
        for (de.textContent = "", pe = 0; W = Xt[pe++];)
            if (E && -1 < _.inArray(W, E)) L && L.push(W);
            else if (Lt = bi(W), Q = Qe(de.appendChild(W), "script"), Lt && hi(Q), k)
            for (ee = 0; W = Q[ee++];) Ai.test(W.type || "") && k.push(W);
        return de
    }
    var oi = /^([^.]*)(?:\.(.+)|)/;

    function $n() {
        return !0
    }

    function Hi() {
        return !1
    }

    function Fn(f, g, k, E, L, W) {
        var Q, yt;
        if ("object" == typeof g) {
            for (yt in "string" != typeof k && (E = E || k, k = void 0), g) Fn(f, yt, k, E, g[yt], W);
            return f
        }
        if (null == E && null == L ? (L = k, E = k = void 0) : null == L && ("string" == typeof k ? (L = E, E = void 0) : (L = E, E = k, k = void 0)), !1 === L) L = Hi;
        else if (!L) return f;
        return 1 === W && (Q = L, (L = function(vt) {
            return _().off(vt), Q.apply(this, arguments)
        }).guid = Q.guid || (Q.guid = _.guid++)), f.each(function() {
            _.event.add(this, g, L, E, k)
        })
    }

    function wi(f, g, k) {
        k ? (Be.set(f, g, !1), _.event.add(f, g, {
            namespace: !1,
            handler: function(E) {
                var L, W = Be.get(this, g);
                if (1 & E.isTrigger && this[g]) {
                    if (W)(_.event.special[g] || {}).delegateType && E.stopPropagation();
                    else if (W = H.call(arguments), Be.set(this, g, W), this[g](), L = Be.get(this, g), Be.set(this, g, !1), W !== L) return E.stopImmediatePropagation(), E.preventDefault(), L
                } else W && (Be.set(this, g, _.event.trigger(W[0], W.slice(1), this)), E.stopPropagation(), E.isImmediatePropagationStopped = $n)
            }
        })) : void 0 === Be.get(f, g) && _.event.add(f, g, $n)
    }
    _.event = {
        global: {},
        add: function(f, g, k, E, L) {
            var W, Q, yt, vt, Lt, ee, de, Xt, pe, Ye, hn, on = Be.get(f);
            if (Pn(f))
                for (k.handler && (k = (W = k).handler, L = W.selector), L && _.find.matchesSelector(Xn, L), k.guid || (k.guid = _.guid++), (vt = on.events) || (vt = on.events = Object.create(null)), (Q = on.handle) || (Q = on.handle = function(ni) {
                        return typeof _ < "u" && _.event.triggered !== ni.type ? _.event.dispatch.apply(f, arguments) : void 0
                    }), Lt = (g = (g || "").match(Tt) || [""]).length; Lt--;) pe = hn = (yt = oi.exec(g[Lt]) || [])[1], Ye = (yt[2] || "").split(".").sort(), pe && (de = _.event.special[pe] || {}, de = _.event.special[pe = (L ? de.delegateType : de.bindType) || pe] || {}, ee = _.extend({
                    type: pe,
                    origType: hn,
                    data: E,
                    handler: k,
                    guid: k.guid,
                    selector: L,
                    needsContext: L && _.expr.match.needsContext.test(L),
                    namespace: Ye.join(".")
                }, W), (Xt = vt[pe]) || ((Xt = vt[pe] = []).delegateCount = 0, de.setup && !1 !== de.setup.call(f, E, Ye, Q) || f.addEventListener && f.addEventListener(pe, Q)), de.add && (de.add.call(f, ee), ee.handler.guid || (ee.handler.guid = k.guid)), L ? Xt.splice(Xt.delegateCount++, 0, ee) : Xt.push(ee), _.event.global[pe] = !0)
        },
        remove: function(f, g, k, E, L) {
            var W, Q, yt, vt, Lt, ee, de, Xt, pe, Ye, hn, on = Be.hasData(f) && Be.get(f);
            if (on && (vt = on.events)) {
                for (Lt = (g = (g || "").match(Tt) || [""]).length; Lt--;)
                    if (pe = hn = (yt = oi.exec(g[Lt]) || [])[1], Ye = (yt[2] || "").split(".").sort(), pe) {
                        for (de = _.event.special[pe] || {}, Xt = vt[pe = (E ? de.delegateType : de.bindType) || pe] || [], yt = yt[2] && new RegExp("(^|\\.)" + Ye.join("\\.(?:.*\\.|)") + "(\\.|$)"), Q = W = Xt.length; W--;) ee = Xt[W], !L && hn !== ee.origType || k && k.guid !== ee.guid || yt && !yt.test(ee.namespace) || E && E !== ee.selector && ("**" !== E || !ee.selector) || (Xt.splice(W, 1), ee.selector && Xt.delegateCount--, de.remove && de.remove.call(f, ee));
                        Q && !Xt.length && (de.teardown && !1 !== de.teardown.call(f, Ye, on.handle) || _.removeEvent(f, pe, on.handle), delete vt[pe])
                    } else
                        for (pe in vt) _.event.remove(f, pe + g[Lt], k, E, !0);
                _.isEmptyObject(vt) && Be.remove(f, "handle events")
            }
        },
        dispatch: function(f) {
            var g, k, E, L, W, Q, yt = new Array(arguments.length),
                vt = _.event.fix(f),
                Lt = (Be.get(this, "events") || Object.create(null))[vt.type] || [],
                ee = _.event.special[vt.type] || {};
            for (yt[0] = vt, g = 1; g < arguments.length; g++) yt[g] = arguments[g];
            if (vt.delegateTarget = this, !ee.preDispatch || !1 !== ee.preDispatch.call(this, vt)) {
                for (Q = _.event.handlers.call(this, vt, Lt), g = 0;
                    (L = Q[g++]) && !vt.isPropagationStopped();)
                    for (vt.currentTarget = L.elem, k = 0;
                        (W = L.handlers[k++]) && !vt.isImmediatePropagationStopped();) vt.rnamespace && !1 !== W.namespace && !vt.rnamespace.test(W.namespace) || (vt.handleObj = W, vt.data = W.data, void 0 !== (E = ((_.event.special[W.origType] || {}).handle || W.handler).apply(L.elem, yt)) && !1 === (vt.result = E) && (vt.preventDefault(), vt.stopPropagation()));
                return ee.postDispatch && ee.postDispatch.call(this, vt), vt.result
            }
        },
        handlers: function(f, g) {
            var k, E, L, W, Q, yt = [],
                vt = g.delegateCount,
                Lt = f.target;
            if (vt && Lt.nodeType && !("click" === f.type && 1 <= f.button))
                for (; Lt !== this; Lt = Lt.parentNode || this)
                    if (1 === Lt.nodeType && ("click" !== f.type || !0 !== Lt.disabled)) {
                        for (W = [], Q = {}, k = 0; k < vt; k++) void 0 === Q[L = (E = g[k]).selector + " "] && (Q[L] = E.needsContext ? -1 < _(L, this).index(Lt) : _.find(L, this, null, [Lt]).length), Q[L] && W.push(E);
                        W.length && yt.push({
                            elem: Lt,
                            handlers: W
                        })
                    }
            return Lt = this, vt < g.length && yt.push({
                elem: Lt,
                handlers: g.slice(vt)
            }), yt
        },
        addProp: function(f, g) {
            Object.defineProperty(_.Event.prototype, f, {
                enumerable: !0,
                configurable: !0,
                get: nt(g) ? function() {
                    if (this.originalEvent) return g(this.originalEvent)
                } : function() {
                    if (this.originalEvent) return this.originalEvent[f]
                },
                set: function(k) {
                    Object.defineProperty(this, f, {
                        enumerable: !0,
                        configurable: !0,
                        writable: !0,
                        value: k
                    })
                }
            })
        },
        fix: function(f) {
            return f[_.expando] ? f : new _.Event(f)
        },
        special: {
            load: {
                noBubble: !0
            },
            click: {
                setup: function(f) {
                    var g = this || f;
                    return si.test(g.type) && g.click && jt(g, "input") && wi(g, "click", !0), !1
                },
                trigger: function(f) {
                    var g = this || f;
                    return si.test(g.type) && g.click && jt(g, "input") && wi(g, "click"), !0
                },
                _default: function(f) {
                    var g = f.target;
                    return si.test(g.type) && g.click && jt(g, "input") && Be.get(g, "click") || jt(g, "a")
                }
            },
            beforeunload: {
                postDispatch: function(f) {
                    void 0 !== f.result && f.originalEvent && (f.originalEvent.returnValue = f.result)
                }
            }
        }
    }, _.removeEvent = function(f, g, k) {
        f.removeEventListener && f.removeEventListener(g, k)
    }, _.Event = function(f, g) {
        if (!(this instanceof _.Event)) return new _.Event(f, g);
        f && f.type ? (this.originalEvent = f, this.type = f.type, this.isDefaultPrevented = f.defaultPrevented || void 0 === f.defaultPrevented && !1 === f.returnValue ? $n : Hi, this.target = f.target && 3 === f.target.nodeType ? f.target.parentNode : f.target, this.currentTarget = f.currentTarget, this.relatedTarget = f.relatedTarget) : this.type = f, g && _.extend(this, g), this.timeStamp = f && f.timeStamp || Date.now(), this[_.expando] = !0
    }, _.Event.prototype = {
        constructor: _.Event,
        isDefaultPrevented: Hi,
        isPropagationStopped: Hi,
        isImmediatePropagationStopped: Hi,
        isSimulated: !1,
        preventDefault: function() {
            var f = this.originalEvent;
            this.isDefaultPrevented = $n, f && !this.isSimulated && f.preventDefault()
        },
        stopPropagation: function() {
            var f = this.originalEvent;
            this.isPropagationStopped = $n, f && !this.isSimulated && f.stopPropagation()
        },
        stopImmediatePropagation: function() {
            var f = this.originalEvent;
            this.isImmediatePropagationStopped = $n, f && !this.isSimulated && f.stopImmediatePropagation(), this.stopPropagation()
        }
    }, _.each({
        altKey: !0,
        bubbles: !0,
        cancelable: !0,
        changedTouches: !0,
        ctrlKey: !0,
        detail: !0,
        eventPhase: !0,
        metaKey: !0,
        pageX: !0,
        pageY: !0,
        shiftKey: !0,
        view: !0,
        char: !0,
        code: !0,
        charCode: !0,
        key: !0,
        keyCode: !0,
        button: !0,
        buttons: !0,
        clientX: !0,
        clientY: !0,
        offsetX: !0,
        offsetY: !0,
        pointerId: !0,
        pointerType: !0,
        screenX: !0,
        screenY: !0,
        targetTouches: !0,
        toElement: !0,
        touches: !0,
        which: !0
    }, _.event.addProp), _.each({
        focus: "focusin",
        blur: "focusout"
    }, function(f, g) {
        function k(E) {
            if (M.documentMode) {
                var L = Be.get(this, "handle"),
                    W = _.event.fix(E);
                W.type = "focusin" === E.type ? "focus" : "blur", W.isSimulated = !0, L(E), W.target === W.currentTarget && L(W)
            } else _.event.simulate(g, E.target, _.event.fix(E))
        }
        _.event.special[f] = {
            setup: function() {
                var E;
                if (wi(this, f, !0), !M.documentMode) return !1;
                (E = Be.get(this, g)) || this.addEventListener(g, k), Be.set(this, g, (E || 0) + 1)
            },
            trigger: function() {
                return wi(this, f), !0
            },
            teardown: function() {
                var E;
                if (!M.documentMode) return !1;
                (E = Be.get(this, g) - 1) ? Be.set(this, g, E): (this.removeEventListener(g, k), Be.remove(this, g))
            },
            _default: function(E) {
                return Be.get(E.target, f)
            },
            delegateType: g
        }, _.event.special[g] = {
            setup: function() {
                var E = this.ownerDocument || this.document || this,
                    L = M.documentMode ? this : E,
                    W = Be.get(L, g);
                W || (M.documentMode ? this.addEventListener(g, k) : E.addEventListener(f, k, !0)), Be.set(L, g, (W || 0) + 1)
            },
            teardown: function() {
                var E = this.ownerDocument || this.document || this,
                    L = M.documentMode ? this : E,
                    W = Be.get(L, g) - 1;
                W ? Be.set(L, g, W) : (M.documentMode ? this.removeEventListener(g, k) : E.removeEventListener(f, k, !0), Be.remove(L, g))
            }
        }
    }), _.each({
        mouseenter: "mouseover",
        mouseleave: "mouseout",
        pointerenter: "pointerover",
        pointerleave: "pointerout"
    }, function(f, g) {
        _.event.special[f] = {
            delegateType: g,
            bindType: g,
            handle: function(k) {
                var E, L = k.relatedTarget,
                    W = k.handleObj;
                return L && (L === this || _.contains(this, L)) || (k.type = W.origType, E = W.handler.apply(this, arguments), k.type = g), E
            }
        }
    }), _.fn.extend({
        on: function(f, g, k, E) {
            return Fn(this, f, g, k, E)
        },
        one: function(f, g, k, E) {
            return Fn(this, f, g, k, E, 1)
        },
        off: function(f, g, k) {
            var E, L;
            if (f && f.preventDefault && f.handleObj) return E = f.handleObj, _(f.delegateTarget).off(E.namespace ? E.origType + "." + E.namespace : E.origType, E.selector, E.handler), this;
            if ("object" == typeof f) {
                for (L in f) this.off(L, g, f[L]);
                return this
            }
            return !1 !== g && "function" != typeof g || (k = g, g = void 0), !1 === k && (k = Hi), this.each(function() {
                _.event.remove(this, f, k, g)
            })
        }
    });
    var Cr = /<script|<style|<link/i,
        us = /checked\s*(?:[^=]|=\s*.checked.)/i,
        es = /^\s*<!\[CDATA\[|\]\]>\s*$/g;

    function pr(f, g) {
        return jt(f, "table") && jt(11 !== g.nodeType ? g : g.firstChild, "tr") && _(f).children("tbody")[0] || f
    }

    function ws(f) {
        return f.type = (null !== f.getAttribute("type")) + "/" + f.type, f
    }

    function Is(f) {
        return "true/" === (f.type || "").slice(0, 5) ? f.type = f.type.slice(5) : f.removeAttribute("type"), f
    }

    function tr(f, g) {
        var k, E, L, W, Q, yt;
        if (1 === g.nodeType) {
            if (Be.hasData(f) && (yt = Be.get(f).events))
                for (L in Be.remove(g, "handle events"), yt)
                    for (k = 0, E = yt[L].length; k < E; k++) _.event.add(g, L, yt[L][k]);
            qe.hasData(f) && (W = qe.access(f), Q = _.extend({}, W), qe.set(g, Q))
        }
    }

    function lr(f, g, k, E) {
        g = P(g);
        var L, W, Q, yt, vt, Lt, ee = 0,
            de = f.length,
            Xt = de - 1,
            pe = g[0],
            Ye = nt(pe);
        if (Ye || 1 < de && "string" == typeof pe && !tt.checkClone && us.test(pe)) return f.each(function(hn) {
            var on = f.eq(hn);
            Ye && (g[0] = pe.call(this, hn, on.html())), lr(on, g, k, E)
        });
        if (de && (W = (L = Pr(g, f[0].ownerDocument, !1, f, E)).firstChild, 1 === L.childNodes.length && (L = W), W || E)) {
            for (yt = (Q = _.map(Qe(L, "script"), ws)).length; ee < de; ee++) vt = L, ee !== Xt && (vt = _.clone(vt, !0, !0), yt && _.merge(Q, Qe(vt, "script"))), k.call(f[ee], vt, ee);
            if (yt)
                for (Lt = Q[Q.length - 1].ownerDocument, _.map(Q, Is), ee = 0; ee < yt; ee++) Ai.test((vt = Q[ee]).type || "") && !Be.access(vt, "globalEval") && _.contains(Lt, vt) && (vt.src && "module" !== (vt.type || "").toLowerCase() ? _._evalUrl && !vt.noModule && _._evalUrl(vt.src, {
                    nonce: vt.nonce || vt.getAttribute("nonce")
                }, Lt) : et(vt.textContent.replace(es, ""), vt, Lt))
        }
        return f
    }

    function ns(f, g, k) {
        for (var E, L = g ? _.filter(g, f) : f, W = 0; null != (E = L[W]); W++) k || 1 !== E.nodeType || _.cleanData(Qe(E)), E.parentNode && (k && bi(E) && hi(Qe(E, "script")), E.parentNode.removeChild(E));
        return f
    }
    _.extend({
        htmlPrefilter: function(f) {
            return f
        },
        clone: function(f, g, k) {
            var E, L, W, Q, yt, vt, Lt, ee = f.cloneNode(!0),
                de = bi(f);
            if (!(tt.noCloneChecked || 1 !== f.nodeType && 11 !== f.nodeType || _.isXMLDoc(f)))
                for (Q = Qe(ee), E = 0, L = (W = Qe(f)).length; E < L; E++) yt = W[E], "input" === (Lt = (vt = Q[E]).nodeName.toLowerCase()) && si.test(yt.type) ? vt.checked = yt.checked : "input" !== Lt && "textarea" !== Lt || (vt.defaultValue = yt.defaultValue);
            if (g)
                if (k)
                    for (W = W || Qe(f), Q = Q || Qe(ee), E = 0, L = W.length; E < L; E++) tr(W[E], Q[E]);
                else tr(f, ee);
            return 0 < (Q = Qe(ee, "script")).length && hi(Q, !de && Qe(f, "script")), ee
        },
        cleanData: function(f) {
            for (var g, k, E, L = _.event.special, W = 0; void 0 !== (k = f[W]); W++)
                if (Pn(k)) {
                    if (g = k[Be.expando]) {
                        if (g.events)
                            for (E in g.events) L[E] ? _.event.remove(k, E) : _.removeEvent(k, E, g.handle);
                        k[Be.expando] = void 0
                    }
                    k[qe.expando] && (k[qe.expando] = void 0)
                }
        }
    }), _.fn.extend({
        detach: function(f) {
            return ns(this, f, !0)
        },
        remove: function(f) {
            return ns(this, f)
        },
        text: function(f) {
            return Me(this, function(g) {
                return void 0 === g ? _.text(this) : this.empty().each(function() {
                    1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = g)
                })
            }, null, f, arguments.length)
        },
        append: function() {
            return lr(this, arguments, function(f) {
                1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || pr(this, f).appendChild(f)
            })
        },
        prepend: function() {
            return lr(this, arguments, function(f) {
                if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                    var g = pr(this, f);
                    g.insertBefore(f, g.firstChild)
                }
            })
        },
        before: function() {
            return lr(this, arguments, function(f) {
                this.parentNode && this.parentNode.insertBefore(f, this)
            })
        },
        after: function() {
            return lr(this, arguments, function(f) {
                this.parentNode && this.parentNode.insertBefore(f, this.nextSibling)
            })
        },
        empty: function() {
            for (var f, g = 0; null != (f = this[g]); g++) 1 === f.nodeType && (_.cleanData(Qe(f, !1)), f.textContent = "");
            return this
        },
        clone: function(f, g) {
            return f = null != f && f, g = g ? ? f, this.map(function() {
                return _.clone(this, f, g)
            })
        },
        html: function(f) {
            return Me(this, function(g) {
                var k = this[0] || {},
                    E = 0,
                    L = this.length;
                if (void 0 === g && 1 === k.nodeType) return k.innerHTML;
                if ("string" == typeof g && !Cr.test(g) && !An[(Ke.exec(g) || ["", ""])[1].toLowerCase()]) {
                    g = _.htmlPrefilter(g);
                    try {
                        for (; E < L; E++) 1 === (k = this[E] || {}).nodeType && (_.cleanData(Qe(k, !1)), k.innerHTML = g);
                        k = 0
                    } catch {}
                }
                k && this.empty().append(g)
            }, null, f, arguments.length)
        },
        replaceWith: function() {
            var f = [];
            return lr(this, arguments, function(g) {
                var k = this.parentNode;
                _.inArray(this, f) < 0 && (_.cleanData(Qe(this)), k && k.replaceChild(g, this))
            }, f)
        }
    }), _.each({
        appendTo: "append",
        prependTo: "prepend",
        insertBefore: "before",
        insertAfter: "after",
        replaceAll: "replaceWith"
    }, function(f, g) {
        _.fn[f] = function(k) {
            for (var E, L = [], W = _(k), Q = W.length - 1, yt = 0; yt <= Q; yt++) E = yt === Q ? this : this.clone(!0), _(W[yt])[g](E), K.apply(L, E.get());
            return this.pushStack(L)
        }
    });
    var er = new RegExp("^(" + Ni + ")(?!px)[a-z%]+$", "i"),
        Mi = /^--/,
        zi = function(f) {
            var g = f.ownerDocument.defaultView;
            return g && g.opener || (g = p), g.getComputedStyle(f)
        },
        Ti = function(f, g, k) {
            var E, L, W = {};
            for (L in g) W[L] = f.style[L], f.style[L] = g[L];
            for (L in E = k.call(f), g) f.style[L] = W[L];
            return E
        },
        ji = new RegExp(Un.join("|"), "i");

    function nr(f, g, k) {
        var E, L, W, Q, yt = Mi.test(g),
            vt = f.style;
        return (k = k || zi(f)) && (Q = k.getPropertyValue(g) || k[g], yt && Q && (Q = Q.replace(Ft, "$1") || void 0), "" !== Q || bi(f) || (Q = _.style(f, g)), !tt.pixelBoxStyles() && er.test(Q) && ji.test(g) && (E = vt.width, L = vt.minWidth, W = vt.maxWidth, vt.minWidth = vt.maxWidth = vt.width = Q, Q = k.width, vt.width = E, vt.minWidth = L, vt.maxWidth = W)), void 0 !== Q ? Q + "" : Q
    }

    function fi(f, g) {
        return {
            get: function() {
                if (!f()) return (this.get = g).apply(this, arguments);
                delete this.get
            }
        }
    }! function() {
        function f() {
            if (Lt) {
                vt.style.cssText = "position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0", Lt.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%", Xn.appendChild(vt).appendChild(Lt);
                var ee = p.getComputedStyle(Lt);
                k = "1%" !== ee.top, yt = 12 === g(ee.marginLeft), Lt.style.right = "60%", W = 36 === g(ee.right), E = 36 === g(ee.width), Lt.style.position = "absolute", L = 12 === g(Lt.offsetWidth / 3), Xn.removeChild(vt), Lt = null
            }
        }

        function g(ee) {
            return Math.round(parseFloat(ee))
        }
        var k, E, L, W, Q, yt, vt = M.createElement("div"),
            Lt = M.createElement("div");
        Lt.style && (Lt.style.backgroundClip = "content-box", Lt.cloneNode(!0).style.backgroundClip = "", tt.clearCloneStyle = "content-box" === Lt.style.backgroundClip, _.extend(tt, {
            boxSizingReliable: function() {
                return f(), E
            },
            pixelBoxStyles: function() {
                return f(), W
            },
            pixelPosition: function() {
                return f(), k
            },
            reliableMarginLeft: function() {
                return f(), yt
            },
            scrollboxSize: function() {
                return f(), L
            },
            reliableTrDimensions: function() {
                var ee, de, Xt, pe;
                return null == Q && (ee = M.createElement("table"), de = M.createElement("tr"), Xt = M.createElement("div"), ee.style.cssText = "position:absolute;left:-11111px;border-collapse:separate", de.style.cssText = "box-sizing:content-box;border:1px solid", de.style.height = "1px", Xt.style.height = "9px", Xt.style.display = "block", Xn.appendChild(ee).appendChild(de).appendChild(Xt), pe = p.getComputedStyle(de), Q = parseInt(pe.height, 10) + parseInt(pe.borderTopWidth, 10) + parseInt(pe.borderBottomWidth, 10) === de.offsetHeight, Xn.removeChild(ee)), Q
            }
        }))
    }();
    var Sr = ["Webkit", "Moz", "ms"],
        Mr = M.createElement("div").style,
        ds = {};

    function cr(f) {
        return _.cssProps[f] || ds[f] || (f in Mr ? f : ds[f] = function(k) {
            for (var E = k[0].toUpperCase() + k.slice(1), L = Sr.length; L--;)
                if ((k = Sr[L] + E) in Mr) return k
        }(f) || f)
    }
    var ps = /^(none|table(?!-c[ea]).+)/,
        ro = {
            position: "absolute",
            visibility: "hidden",
            display: "block"
        },
        is = {
            letterSpacing: "0",
            fontWeight: "400"
        };

    function Cs(f, g, k) {
        var E = Pi.exec(g);
        return E ? Math.max(0, E[2] - (k || 0)) + (E[3] || "px") : g
    }

    function rs(f, g, k, E, L, W) {
        var Q = "width" === g ? 1 : 0,
            yt = 0,
            vt = 0,
            Lt = 0;
        if (k === (E ? "border" : "content")) return 0;
        for (; Q < 4; Q += 2) "margin" === k && (Lt += _.css(f, k + Un[Q], !0, L)), E ? ("content" === k && (vt -= _.css(f, "padding" + Un[Q], !0, L)), "margin" !== k && (vt -= _.css(f, "border" + Un[Q] + "Width", !0, L))) : (vt += _.css(f, "padding" + Un[Q], !0, L), "padding" !== k ? vt += _.css(f, "border" + Un[Q] + "Width", !0, L) : yt += _.css(f, "border" + Un[Q] + "Width", !0, L));
        return !E && 0 <= W && (vt += Math.max(0, Math.ceil(f["offset" + g[0].toUpperCase() + g.slice(1)] - W - vt - yt - .5)) || 0), vt + Lt
    }

    function ir(f, g, k) {
        var E = zi(f),
            L = (!tt.boxSizingReliable() || k) && "border-box" === _.css(f, "boxSizing", !1, E),
            W = L,
            Q = nr(f, g, E),
            yt = "offset" + g[0].toUpperCase() + g.slice(1);
        if (er.test(Q)) {
            if (!k) return Q;
            Q = "auto"
        }
        return (!tt.boxSizingReliable() && L || !tt.reliableTrDimensions() && jt(f, "tr") || "auto" === Q || !parseFloat(Q) && "inline" === _.css(f, "display", !1, E)) && f.getClientRects().length && (L = "border-box" === _.css(f, "boxSizing", !1, E), (W = yt in f) && (Q = f[yt])), (Q = parseFloat(Q) || 0) + rs(f, g, k || (L ? "border" : "content"), W, E, Q) + "px"
    }

    function Ii(f, g, k, E, L) {
        return new Ii.prototype.init(f, g, k, E, L)
    }
    _.extend({
        cssHooks: {
            opacity: {
                get: function(f, g) {
                    if (g) {
                        var k = nr(f, "opacity");
                        return "" === k ? "1" : k
                    }
                }
            }
        },
        cssNumber: {
            animationIterationCount: !0,
            aspectRatio: !0,
            borderImageSlice: !0,
            columnCount: !0,
            flexGrow: !0,
            flexShrink: !0,
            fontWeight: !0,
            gridArea: !0,
            gridColumn: !0,
            gridColumnEnd: !0,
            gridColumnStart: !0,
            gridRow: !0,
            gridRowEnd: !0,
            gridRowStart: !0,
            lineHeight: !0,
            opacity: !0,
            order: !0,
            orphans: !0,
            scale: !0,
            widows: !0,
            zIndex: !0,
            zoom: !0,
            fillOpacity: !0,
            floodOpacity: !0,
            stopOpacity: !0,
            strokeMiterlimit: !0,
            strokeOpacity: !0
        },
        cssProps: {},
        style: function(f, g, k, E) {
            if (f && 3 !== f.nodeType && 8 !== f.nodeType && f.style) {
                var L, W, Q, yt = te(g),
                    vt = Mi.test(g),
                    Lt = f.style;
                if (vt || (g = cr(yt)), Q = _.cssHooks[g] || _.cssHooks[yt], void 0 === k) return Q && "get" in Q && void 0 !== (L = Q.get(f, !1, E)) ? L : Lt[g];
                "string" == (W = typeof k) && (L = Pi.exec(k)) && L[1] && (k = v(f, g, L), W = "number"), null != k && k == k && ("number" !== W || vt || (k += L && L[3] || (_.cssNumber[yt] ? "" : "px")), tt.clearCloneStyle || "" !== k || 0 !== g.indexOf("background") || (Lt[g] = "inherit"), Q && "set" in Q && void 0 === (k = Q.set(f, k, E)) || (vt ? Lt.setProperty(g, k) : Lt[g] = k))
            }
        },
        css: function(f, g, k, E) {
            var L, W, Q, yt = te(g);
            return Mi.test(g) || (g = cr(yt)), (Q = _.cssHooks[g] || _.cssHooks[yt]) && "get" in Q && (L = Q.get(f, !0, k)), void 0 === L && (L = nr(f, g, E)), "normal" === L && g in is && (L = is[g]), "" === k || k ? (W = parseFloat(L), !0 === k || isFinite(W) ? W || 0 : L) : L
        }
    }), _.each(["height", "width"], function(f, g) {
        _.cssHooks[g] = {
            get: function(k, E, L) {
                if (E) return !ps.test(_.css(k, "display")) || k.getClientRects().length && k.getBoundingClientRect().width ? ir(k, g, L) : Ti(k, ro, function() {
                    return ir(k, g, L)
                })
            },
            set: function(k, E, L) {
                var W, Q = zi(k),
                    yt = !tt.scrollboxSize() && "absolute" === Q.position,
                    vt = (yt || L) && "border-box" === _.css(k, "boxSizing", !1, Q),
                    Lt = L ? rs(k, g, L, vt, Q) : 0;
                return vt && yt && (Lt -= Math.ceil(k["offset" + g[0].toUpperCase() + g.slice(1)] - parseFloat(Q[g]) - rs(k, g, "border", !1, Q) - .5)), Lt && (W = Pi.exec(E)) && "px" !== (W[3] || "px") && (k.style[g] = E, E = _.css(k, g)), Cs(0, E, Lt)
            }
        }
    }), _.cssHooks.marginLeft = fi(tt.reliableMarginLeft, function(f, g) {
        if (g) return (parseFloat(nr(f, "marginLeft")) || f.getBoundingClientRect().left - Ti(f, {
            marginLeft: 0
        }, function() {
            return f.getBoundingClientRect().left
        })) + "px"
    }), _.each({
        margin: "",
        padding: "",
        border: "Width"
    }, function(f, g) {
        _.cssHooks[f + g] = {
            expand: function(k) {
                for (var E = 0, L = {}, W = "string" == typeof k ? k.split(" ") : [k]; E < 4; E++) L[f + Un[E] + g] = W[E] || W[E - 2] || W[0];
                return L
            }
        }, "margin" !== f && (_.cssHooks[f + g].set = Cs)
    }), _.fn.extend({
        css: function(f, g) {
            return Me(this, function(k, E, L) {
                var W, Q, yt = {},
                    vt = 0;
                if (Array.isArray(E)) {
                    for (W = zi(k), Q = E.length; vt < Q; vt++) yt[E[vt]] = _.css(k, E[vt], !1, W);
                    return yt
                }
                return void 0 !== L ? _.style(k, E, L) : _.css(k, E)
            }, f, g, 1 < arguments.length)
        }
    }), ((_.Tween = Ii).prototype = {
        constructor: Ii,
        init: function(f, g, k, E, L, W) {
            this.elem = f, this.prop = k, this.easing = L || _.easing._default, this.options = g, this.start = this.now = this.cur(), this.end = E, this.unit = W || (_.cssNumber[k] ? "" : "px")
        },
        cur: function() {
            var f = Ii.propHooks[this.prop];
            return f && f.get ? f.get(this) : Ii.propHooks._default.get(this)
        },
        run: function(f) {
            var g, k = Ii.propHooks[this.prop];
            return this.pos = g = this.options.duration ? _.easing[this.easing](f, this.options.duration * f, 0, 1, this.options.duration) : f, this.now = (this.end - this.start) * g + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), k && k.set ? k.set(this) : Ii.propHooks._default.set(this), this
        }
    }).init.prototype = Ii.prototype, (Ii.propHooks = {
        _default: {
            get: function(f) {
                var g;
                return 1 !== f.elem.nodeType || null != f.elem[f.prop] && null == f.elem.style[f.prop] ? f.elem[f.prop] : (g = _.css(f.elem, f.prop, "")) && "auto" !== g ? g : 0
            },
            set: function(f) {
                _.fx.step[f.prop] ? _.fx.step[f.prop](f) : 1 !== f.elem.nodeType || !_.cssHooks[f.prop] && null == f.elem.style[cr(f.prop)] ? f.elem[f.prop] = f.now : _.style(f.elem, f.prop, f.now + f.unit)
            }
        }
    }).scrollTop = Ii.propHooks.scrollLeft = {
        set: function(f) {
            f.elem.nodeType && f.elem.parentNode && (f.elem[f.prop] = f.now)
        }
    }, _.easing = {
        linear: function(f) {
            return f
        },
        swing: function(f) {
            return .5 - Math.cos(f * Math.PI) / 2
        },
        _default: "swing"
    }, _.fx = Ii.prototype.init, _.fx.step = {};
    var kr, Nr, Hr, Ls, Ss = /^(?:toggle|show|hide)$/,
        ks = /queueHooks$/;

    function zr() {
        Nr && (!1 === M.hidden && p.requestAnimationFrame ? p.requestAnimationFrame(zr) : p.setTimeout(zr, _.fx.interval), _.fx.tick())
    }

    function Yi() {
        return p.setTimeout(function() {
            kr = void 0
        }), kr = Date.now()
    }

    function ht(f, g) {
        var k, E = 0,
            L = {
                height: f
            };
        for (g = g ? 1 : 0; E < 4; E += 2 - g) L["margin" + (k = Un[E])] = L["padding" + k] = f;
        return g && (L.opacity = L.width = f), L
    }

    function Et(f, g, k) {
        for (var E, L = (Rt.tweeners[g] || []).concat(Rt.tweeners["*"]), W = 0, Q = L.length; W < Q; W++)
            if (E = L[W].call(k, g, f)) return E
    }

    function Rt(f, g, k) {
        var E, L, W = 0,
            Q = Rt.prefilters.length,
            yt = _.Deferred().always(function() {
                delete vt.elem
            }),
            vt = function() {
                if (L) return !1;
                for (var de = kr || Yi(), Xt = Math.max(0, Lt.startTime + Lt.duration - de), pe = 1 - (Xt / Lt.duration || 0), Ye = 0, hn = Lt.tweens.length; Ye < hn; Ye++) Lt.tweens[Ye].run(pe);
                return yt.notifyWith(f, [Lt, pe, Xt]), pe < 1 && hn ? Xt : (hn || yt.notifyWith(f, [Lt, 1, 0]), yt.resolveWith(f, [Lt]), !1)
            },
            Lt = yt.promise({
                elem: f,
                props: _.extend({}, g),
                opts: _.extend(!0, {
                    specialEasing: {},
                    easing: _.easing._default
                }, k),
                originalProperties: g,
                originalOptions: k,
                startTime: kr || Yi(),
                duration: k.duration,
                tweens: [],
                createTween: function(de, Xt) {
                    var pe = _.Tween(f, Lt.opts, de, Xt, Lt.opts.specialEasing[de] || Lt.opts.easing);
                    return Lt.tweens.push(pe), pe
                },
                stop: function(de) {
                    var Xt = 0,
                        pe = de ? Lt.tweens.length : 0;
                    if (L) return this;
                    for (L = !0; Xt < pe; Xt++) Lt.tweens[Xt].run(1);
                    return de ? (yt.notifyWith(f, [Lt, 1, 0]), yt.resolveWith(f, [Lt, de])) : yt.rejectWith(f, [Lt, de]), this
                }
            }),
            ee = Lt.props;
        for (function(de, Xt) {
                var pe, Ye, hn, on, ni;
                for (pe in de)
                    if (hn = Xt[Ye = te(pe)], on = de[pe], Array.isArray(on) && (hn = on[1], on = de[pe] = on[0]), pe !== Ye && (de[Ye] = on, delete de[pe]), (ni = _.cssHooks[Ye]) && "expand" in ni)
                        for (pe in on = ni.expand(on), delete de[Ye], on) pe in de || (de[pe] = on[pe], Xt[pe] = hn);
                    else Xt[Ye] = hn
            }(ee, Lt.opts.specialEasing); W < Q; W++)
            if (E = Rt.prefilters[W].call(Lt, f, ee, Lt.opts)) return nt(E.stop) && (_._queueHooks(Lt.elem, Lt.opts.queue).stop = E.stop.bind(E)), E;
        return _.map(ee, Et, Lt), nt(Lt.opts.start) && Lt.opts.start.call(f, Lt), Lt.progress(Lt.opts.progress).done(Lt.opts.done, Lt.opts.complete).fail(Lt.opts.fail).always(Lt.opts.always), _.fx.timer(_.extend(vt, {
            elem: f,
            anim: Lt,
            queue: Lt.opts.queue
        })), Lt
    }
    _.Animation = _.extend(Rt, {
        tweeners: {
            "*": [function(f, g) {
                var k = this.createTween(f, g);
                return v(k.elem, f, Pi.exec(g), k), k
            }]
        },
        tweener: function(f, g) {
            nt(f) ? (g = f, f = ["*"]) : f = f.match(Tt);
            for (var k, E = 0, L = f.length; E < L; E++)(Rt.tweeners[k = f[E]] = Rt.tweeners[k] || []).unshift(g)
        },
        prefilters: [function(f, g, k) {
            var E, L, W, Q, yt, vt, Lt, ee, de = "width" in g || "height" in g,
                Xt = this,
                pe = {},
                Ye = f.style,
                hn = f.nodeType && mn(f),
                on = Be.get(f, "fxshow");
            for (E in k.queue || (null == (Q = _._queueHooks(f, "fx")).unqueued && (Q.unqueued = 0, yt = Q.empty.fire, Q.empty.fire = function() {
                    Q.unqueued || yt()
                }), Q.unqueued++, Xt.always(function() {
                    Xt.always(function() {
                        Q.unqueued--, _.queue(f, "fx").length || Q.empty.fire()
                    })
                })), g)
                if (Ss.test(L = g[E])) {
                    if (delete g[E], W = W || "toggle" === L, L === (hn ? "hide" : "show")) {
                        if ("show" !== L || !on || void 0 === on[E]) continue;
                        hn = !0
                    }
                    pe[E] = on && on[E] || _.style(f, E)
                }
            if ((vt = !_.isEmptyObject(g)) || !_.isEmptyObject(pe))
                for (E in de && 1 === f.nodeType && (k.overflow = [Ye.overflow, Ye.overflowX, Ye.overflowY], null == (Lt = on && on.display) && (Lt = Be.get(f, "display")), "none" === (ee = _.css(f, "display")) && (Lt ? ee = Lt : (ci([f], !0), Lt = f.style.display || Lt, ee = _.css(f, "display"), ci([f]))), ("inline" === ee || "inline-block" === ee && null != Lt) && "none" === _.css(f, "float") && (vt || (Xt.done(function() {
                        Ye.display = Lt
                    }), null == Lt && (Lt = "none" === (ee = Ye.display) ? "" : ee)), Ye.display = "inline-block")), k.overflow && (Ye.overflow = "hidden", Xt.always(function() {
                        Ye.overflow = k.overflow[0], Ye.overflowX = k.overflow[1], Ye.overflowY = k.overflow[2]
                    })), vt = !1, pe) vt || (on ? "hidden" in on && (hn = on.hidden) : on = Be.access(f, "fxshow", {
                    display: Lt
                }), W && (on.hidden = !hn), hn && ci([f], !0), Xt.done(function() {
                    for (E in hn || ci([f]), Be.remove(f, "fxshow"), pe) _.style(f, E, pe[E])
                })), vt = Et(hn ? on[E] : 0, E, Xt), E in on || (on[E] = vt.start, hn && (vt.end = vt.start, vt.start = 0))
        }],
        prefilter: function(f, g) {
            g ? Rt.prefilters.unshift(f) : Rt.prefilters.push(f)
        }
    }), _.speed = function(f, g, k) {
        var E = f && "object" == typeof f ? _.extend({}, f) : {
            complete: k || !k && g || nt(f) && f,
            duration: f,
            easing: k && g || g && !nt(g) && g
        };
        return _.fx.off ? E.duration = 0 : "number" != typeof E.duration && (E.duration = E.duration in _.fx.speeds ? _.fx.speeds[E.duration] : _.fx.speeds._default), null != E.queue && !0 !== E.queue || (E.queue = "fx"), E.old = E.complete, E.complete = function() {
            nt(E.old) && E.old.call(this), E.queue && _.dequeue(this, E.queue)
        }, E
    }, _.fn.extend({
        fadeTo: function(f, g, k, E) {
            return this.filter(mn).css("opacity", 0).show().end().animate({
                opacity: g
            }, f, k, E)
        },
        animate: function(f, g, k, E) {
            var L = _.isEmptyObject(f),
                W = _.speed(g, k, E),
                Q = function() {
                    var yt = Rt(this, _.extend({}, f), W);
                    (L || Be.get(this, "finish")) && yt.stop(!0)
                };
            return Q.finish = Q, L || !1 === W.queue ? this.each(Q) : this.queue(W.queue, Q)
        },
        stop: function(f, g, k) {
            var E = function(L) {
                var W = L.stop;
                delete L.stop, W(k)
            };
            return "string" != typeof f && (k = g, g = f, f = void 0), g && this.queue(f || "fx", []), this.each(function() {
                var L = !0,
                    W = null != f && f + "queueHooks",
                    Q = _.timers,
                    yt = Be.get(this);
                if (W) yt[W] && yt[W].stop && E(yt[W]);
                else
                    for (W in yt) yt[W] && yt[W].stop && ks.test(W) && E(yt[W]);
                for (W = Q.length; W--;) Q[W].elem !== this || null != f && Q[W].queue !== f || (Q[W].anim.stop(k), L = !1, Q.splice(W, 1));
                !L && k || _.dequeue(this, f)
            })
        },
        finish: function(f) {
            return !1 !== f && (f = f || "fx"), this.each(function() {
                var g, k = Be.get(this),
                    E = k[f + "queue"],
                    L = k[f + "queueHooks"],
                    W = _.timers,
                    Q = E ? E.length : 0;
                for (k.finish = !0, _.queue(this, f, []), L && L.stop && L.stop.call(this, !0), g = W.length; g--;) W[g].elem === this && W[g].queue === f && (W[g].anim.stop(!0), W.splice(g, 1));
                for (g = 0; g < Q; g++) E[g] && E[g].finish && E[g].finish.call(this);
                delete k.finish
            })
        }
    }), _.each(["toggle", "show", "hide"], function(f, g) {
        var k = _.fn[g];
        _.fn[g] = function(E, L, W) {
            return null == E || "boolean" == typeof E ? k.apply(this, arguments) : this.animate(ht(g, !0), E, L, W)
        }
    }), _.each({
        slideDown: ht("show"),
        slideUp: ht("hide"),
        slideToggle: ht("toggle"),
        fadeIn: {
            opacity: "show"
        },
        fadeOut: {
            opacity: "hide"
        },
        fadeToggle: {
            opacity: "toggle"
        }
    }, function(f, g) {
        _.fn[f] = function(k, E, L) {
            return this.animate(g, k, E, L)
        }
    }), _.timers = [], _.fx.tick = function() {
        var f, g = 0,
            k = _.timers;
        for (kr = Date.now(); g < k.length; g++)(f = k[g])() || k[g] !== f || k.splice(g--, 1);
        k.length || _.fx.stop(), kr = void 0
    }, _.fx.timer = function(f) {
        _.timers.push(f), _.fx.start()
    }, _.fx.interval = 13, _.fx.start = function() {
        Nr || (Nr = !0, zr())
    }, _.fx.stop = function() {
        Nr = null
    }, _.fx.speeds = {
        slow: 600,
        fast: 200,
        _default: 400
    }, _.fn.delay = function(f, g) {
        return f = _.fx && _.fx.speeds[f] || f, this.queue(g = g || "fx", function(k, E) {
            var L = p.setTimeout(k, f);
            E.stop = function() {
                p.clearTimeout(L)
            }
        })
    }, Hr = M.createElement("input"), Ls = M.createElement("select").appendChild(M.createElement("option")), Hr.type = "checkbox", tt.checkOn = "" !== Hr.value, tt.optSelected = Ls.selected, (Hr = M.createElement("input")).value = "t", Hr.type = "radio", tt.radioValue = "t" === Hr.value;
    var ge, xe = _.expr.attrHandle;
    _.fn.extend({
        attr: function(f, g) {
            return Me(this, _.attr, f, g, 1 < arguments.length)
        },
        removeAttr: function(f) {
            return this.each(function() {
                _.removeAttr(this, f)
            })
        }
    }), _.extend({
        attr: function(f, g, k) {
            var E, L, W = f.nodeType;
            if (3 !== W && 8 !== W && 2 !== W) return typeof f.getAttribute > "u" ? _.prop(f, g, k) : (1 === W && _.isXMLDoc(f) || (L = _.attrHooks[g.toLowerCase()] || (_.expr.match.bool.test(g) ? ge : void 0)), void 0 !== k ? null === k ? void _.removeAttr(f, g) : L && "set" in L && void 0 !== (E = L.set(f, k, g)) ? E : (f.setAttribute(g, k + ""), k) : L && "get" in L && null !== (E = L.get(f, g)) ? E : null == (E = _.find.attr(f, g)) ? void 0 : E)
        },
        attrHooks: {
            type: {
                set: function(f, g) {
                    if (!tt.radioValue && "radio" === g && jt(f, "input")) {
                        var k = f.value;
                        return f.setAttribute("type", g), k && (f.value = k), g
                    }
                }
            }
        },
        removeAttr: function(f, g) {
            var k, E = 0,
                L = g && g.match(Tt);
            if (L && 1 === f.nodeType)
                for (; k = L[E++];) f.removeAttribute(k)
        }
    }), ge = {
        set: function(f, g, k) {
            return !1 === g ? _.removeAttr(f, k) : f.setAttribute(k, k), k
        }
    }, _.each(_.expr.match.bool.source.match(/\w+/g), function(f, g) {
        var k = xe[g] || _.find.attr;
        xe[g] = function(E, L, W) {
            var Q, yt, vt = L.toLowerCase();
            return W || (yt = xe[vt], xe[vt] = Q, Q = null != k(E, L, W) ? vt : null, xe[vt] = yt), Q
        }
    });
    var Ge = /^(?:input|select|textarea|button)$/i,
        De = /^(?:a|area)$/i;

    function Cn(f) {
        return (f.match(Tt) || []).join(" ")
    }

    function zn(f) {
        return f.getAttribute && f.getAttribute("class") || ""
    }

    function Wi(f) {
        return Array.isArray(f) ? f : "string" == typeof f && f.match(Tt) || []
    }
    _.fn.extend({
        prop: function(f, g) {
            return Me(this, _.prop, f, g, 1 < arguments.length)
        },
        removeProp: function(f) {
            return this.each(function() {
                delete this[_.propFix[f] || f]
            })
        }
    }), _.extend({
        prop: function(f, g, k) {
            var E, L, W = f.nodeType;
            if (3 !== W && 8 !== W && 2 !== W) return 1 === W && _.isXMLDoc(f) || (L = _.propHooks[g = _.propFix[g] || g]), void 0 !== k ? L && "set" in L && void 0 !== (E = L.set(f, k, g)) ? E : f[g] = k : L && "get" in L && null !== (E = L.get(f, g)) ? E : f[g]
        },
        propHooks: {
            tabIndex: {
                get: function(f) {
                    var g = _.find.attr(f, "tabindex");
                    return g ? parseInt(g, 10) : Ge.test(f.nodeName) || De.test(f.nodeName) && f.href ? 0 : -1
                }
            }
        },
        propFix: {
            for: "htmlFor",
            class: "className"
        }
    }), tt.optSelected || (_.propHooks.selected = {
        get: function(f) {
            return null
        },
        set: function(f) {}
    }), _.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function() {
        _.propFix[this.toLowerCase()] = this
    }), _.fn.extend({
        addClass: function(f) {
            var g, k, E, L, W, Q;
            return nt(f) ? this.each(function(yt) {
                _(this).addClass(f.call(this, yt, zn(this)))
            }) : (g = Wi(f)).length ? this.each(function() {
                if (E = zn(this), k = 1 === this.nodeType && " " + Cn(E) + " ") {
                    for (W = 0; W < g.length; W++) k.indexOf(" " + (L = g[W]) + " ") < 0 && (k += L + " ");
                    Q = Cn(k), E !== Q && this.setAttribute("class", Q)
                }
            }) : this
        },
        removeClass: function(f) {
            var g, k, E, L, W, Q;
            return nt(f) ? this.each(function(yt) {
                _(this).removeClass(f.call(this, yt, zn(this)))
            }) : arguments.length ? (g = Wi(f)).length ? this.each(function() {
                if (E = zn(this), k = 1 === this.nodeType && " " + Cn(E) + " ") {
                    for (W = 0; W < g.length; W++)
                        for (L = g[W]; - 1 < k.indexOf(" " + L + " ");) k = k.replace(" " + L + " ", " ");
                    Q = Cn(k), E !== Q && this.setAttribute("class", Q)
                }
            }) : this : this.attr("class", "")
        },
        toggleClass: function(f, g) {
            var k, E, L, W, Q = typeof f,
                yt = "string" === Q || Array.isArray(f);
            return nt(f) ? this.each(function(vt) {
                _(this).toggleClass(f.call(this, vt, zn(this), g), g)
            }) : "boolean" == typeof g && yt ? g ? this.addClass(f) : this.removeClass(f) : (k = Wi(f), this.each(function() {
                if (yt)
                    for (W = _(this), L = 0; L < k.length; L++) W.hasClass(E = k[L]) ? W.removeClass(E) : W.addClass(E);
                else void 0 !== f && "boolean" !== Q || ((E = zn(this)) && Be.set(this, "__className__", E), this.setAttribute && this.setAttribute("class", E || !1 === f ? "" : Be.get(this, "__className__") || ""))
            }))
        },
        hasClass: function(f) {
            var g, k, E = 0;
            for (g = " " + f + " "; k = this[E++];)
                if (1 === k.nodeType && -1 < (" " + Cn(zn(k)) + " ").indexOf(g)) return !0;
            return !1
        }
    });
    var Vi = /\r/g;
    _.fn.extend({
        val: function(f) {
            var g, k, E, L = this[0];
            return arguments.length ? (E = nt(f), this.each(function(W) {
                var Q;
                1 === this.nodeType && (null == (Q = E ? f.call(this, W, _(this).val()) : f) ? Q = "" : "number" == typeof Q ? Q += "" : Array.isArray(Q) && (Q = _.map(Q, function(yt) {
                    return null == yt ? "" : yt + ""
                })), (g = _.valHooks[this.type] || _.valHooks[this.nodeName.toLowerCase()]) && "set" in g && void 0 !== g.set(this, Q, "value") || (this.value = Q))
            })) : L ? (g = _.valHooks[L.type] || _.valHooks[L.nodeName.toLowerCase()]) && "get" in g && void 0 !== (k = g.get(L, "value")) ? k : "string" == typeof(k = L.value) ? k.replace(Vi, "") : k ? ? "" : void 0
        }
    }), _.extend({
        valHooks: {
            option: {
                get: function(f) {
                    return _.find.attr(f, "value") ? ? Cn(_.text(f))
                }
            },
            select: {
                get: function(f) {
                    var g, k, E, L = f.options,
                        W = f.selectedIndex,
                        Q = "select-one" === f.type,
                        yt = Q ? null : [],
                        vt = Q ? W + 1 : L.length;
                    for (E = W < 0 ? vt : Q ? W : 0; E < vt; E++)
                        if (((k = L[E]).selected || E === W) && !k.disabled && (!k.parentNode.disabled || !jt(k.parentNode, "optgroup"))) {
                            if (g = _(k).val(), Q) return g;
                            yt.push(g)
                        }
                    return yt
                },
                set: function(f, g) {
                    for (var k, E, L = f.options, W = _.makeArray(g), Q = L.length; Q--;)((E = L[Q]).selected = -1 < _.inArray(_.valHooks.option.get(E), W)) && (k = !0);
                    return k || (f.selectedIndex = -1), W
                }
            }
        }
    }), _.each(["radio", "checkbox"], function() {
        _.valHooks[this] = {
            set: function(f, g) {
                if (Array.isArray(g)) return f.checked = -1 < _.inArray(_(f).val(), g)
            }
        }, tt.checkOn || (_.valHooks[this].get = function(f) {
            return null === f.getAttribute("value") ? "on" : f.value
        })
    });
    var hr = p.location,
        gs = {
            guid: Date.now()
        },
        jr = /\?/;
    _.parseXML = function(f) {
        var g, k;
        if (!f || "string" != typeof f) return null;
        try {
            g = (new p.DOMParser).parseFromString(f, "text/xml")
        } catch {}
        return k = g && g.getElementsByTagName("parsererror")[0], g && !k || _.error("Invalid XML: " + (k ? _.map(k.childNodes, function(E) {
            return E.textContent
        }).join("\n") : f)), g
    };
    var Ir = /^(?:focusinfocus|focusoutblur)$/,
        $s = function(f) {
            f.stopPropagation()
        };
    _.extend(_.event, {
        trigger: function(f, g, k, E) {
            var L, W, Q, yt, vt, Lt, ee, de, Xt = [k || M],
                pe = Z.call(f, "type") ? f.type : f,
                Ye = Z.call(f, "namespace") ? f.namespace.split(".") : [];
            if (W = de = Q = k = k || M, 3 !== k.nodeType && 8 !== k.nodeType && !Ir.test(pe + _.event.triggered) && (-1 < pe.indexOf(".") && (pe = (Ye = pe.split(".")).shift(), Ye.sort()), vt = pe.indexOf(":") < 0 && "on" + pe, (f = f[_.expando] ? f : new _.Event(pe, "object" == typeof f && f)).isTrigger = E ? 2 : 3, f.namespace = Ye.join("."), f.rnamespace = f.namespace ? new RegExp("(^|\\.)" + Ye.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, f.result = void 0, f.target || (f.target = k), g = null == g ? [f] : _.makeArray(g, [f]), ee = _.event.special[pe] || {}, E || !ee.trigger || !1 !== ee.trigger.apply(k, g))) {
                if (!E && !ee.noBubble && !lt(k)) {
                    for (Ir.test((yt = ee.delegateType || pe) + pe) || (W = W.parentNode); W; W = W.parentNode) Xt.push(W), Q = W;
                    Q === (k.ownerDocument || M) && Xt.push(Q.defaultView || Q.parentWindow || p)
                }
                for (L = 0;
                    (W = Xt[L++]) && !f.isPropagationStopped();) de = W, f.type = 1 < L ? yt : ee.bindType || pe, (Lt = (Be.get(W, "events") || Object.create(null))[f.type] && Be.get(W, "handle")) && Lt.apply(W, g), (Lt = vt && W[vt]) && Lt.apply && Pn(W) && (f.result = Lt.apply(W, g), !1 === f.result && f.preventDefault());
                return f.type = pe, E || f.isDefaultPrevented() || ee._default && !1 !== ee._default.apply(Xt.pop(), g) || !Pn(k) || vt && nt(k[pe]) && !lt(k) && ((Q = k[vt]) && (k[vt] = null), _.event.triggered = pe, f.isPropagationStopped() && de.addEventListener(pe, $s), k[pe](), f.isPropagationStopped() && de.removeEventListener(pe, $s), _.event.triggered = void 0, Q && (k[vt] = Q)), f.result
            }
        },
        simulate: function(f, g, k) {
            var E = _.extend(new _.Event, k, {
                type: f,
                isSimulated: !0
            });
            _.event.trigger(E, null, g)
        }
    }), _.fn.extend({
        trigger: function(f, g) {
            return this.each(function() {
                _.event.trigger(f, g, this)
            })
        },
        triggerHandler: function(f, g) {
            var k = this[0];
            if (k) return _.event.trigger(f, g, k, !0)
        }
    });
    var Zi = /\[\]$/,
        Bs = /\r?\n/g,
        Di = /^(?:submit|button|image|reset|file)$/i,
        ms = /^(?:input|select|textarea|keygen)/i;

    function Lr(f, g, k, E) {
        var L;
        if (Array.isArray(g)) _.each(g, function(W, Q) {
            k || Zi.test(f) ? E(f, Q) : Lr(f + "[" + ("object" == typeof Q && null != Q ? W : "") + "]", Q, k, E)
        });
        else if (k || "object" !== dt(g)) E(f, g);
        else
            for (L in g) Lr(f + "[" + L + "]", g[L], k, E)
    }
    _.param = function(f, g) {
        var k, E = [],
            L = function(W, Q) {
                var yt = nt(Q) ? Q() : Q;
                E[E.length] = encodeURIComponent(W) + "=" + encodeURIComponent(yt ? ? "")
            };
        if (null == f) return "";
        if (Array.isArray(f) || f.jquery && !_.isPlainObject(f)) _.each(f, function() {
            L(this.name, this.value)
        });
        else
            for (k in f) Lr(k, f[k], g, L);
        return E.join("&")
    }, _.fn.extend({
        serialize: function() {
            return _.param(this.serializeArray())
        },
        serializeArray: function() {
            return this.map(function() {
                var f = _.prop(this, "elements");
                return f ? _.makeArray(f) : this
            }).filter(function() {
                var f = this.type;
                return this.name && !_(this).is(":disabled") && ms.test(this.nodeName) && !Di.test(f) && (this.checked || !si.test(f))
            }).map(function(f, g) {
                var k = _(this).val();
                return null == k ? null : Array.isArray(k) ? _.map(k, function(E) {
                    return {
                        name: g.name,
                        value: E.replace(Bs, "\r\n")
                    }
                }) : {
                    name: g.name,
                    value: k.replace(Bs, "\r\n")
                }
            }).get()
        }
    });
    var Ui = /%20/g,
        Fs = /#.*$/,
        mo = /([?&])_=[^&]*/,
        ei = /^(.*?):[ \t]*([^\r\n]*)$/gm,
        $i = /^(?:GET|HEAD)$/,
        bs = /^\/\//,
        Us = {},
        vs = {},
        Es = "*/".concat("*"),
        Wr = M.createElement("a");

    function Rs(f) {
        return function(g, k) {
            "string" != typeof g && (k = g, g = "*");
            var E, L = 0,
                W = g.toLowerCase().match(Tt) || [];
            if (nt(k))
                for (; E = W[L++];) "+" === E[0] ? (E = E.slice(1) || "*", (f[E] = f[E] || []).unshift(k)) : (f[E] = f[E] || []).push(k)
        }
    }

    function Vr(f, g, k, E) {
        var L = {},
            W = f === vs;

        function Q(yt) {
            var vt;
            return L[yt] = !0, _.each(f[yt] || [], function(Lt, ee) {
                var de = ee(g, k, E);
                return "string" != typeof de || W || L[de] ? W ? !(vt = de) : void 0 : (g.dataTypes.unshift(de), Q(de), !1)
            }), vt
        }
        return Q(g.dataTypes[0]) || !L["*"] && Q("*")
    }

    function Xs(f, g) {
        var k, E, L = _.ajaxSettings.flatOptions || {};
        for (k in g) void 0 !== g[k] && ((L[k] ? f : E || (E = {}))[k] = g[k]);
        return E && _.extend(!0, f, E), f
    }
    Wr.href = hr.href, _.extend({
        active: 0,
        lastModified: {},
        etag: {},
        ajaxSettings: {
            url: hr.href,
            type: "GET",
            isLocal: /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(hr.protocol),
            global: !0,
            processData: !0,
            async: !0,
            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
            accepts: {
                "*": Es,
                text: "text/plain",
                html: "text/html",
                xml: "application/xml, text/xml",
                json: "application/json, text/javascript"
            },
            contents: {
                xml: /\bxml\b/,
                html: /\bhtml/,
                json: /\bjson\b/
            },
            responseFields: {
                xml: "responseXML",
                text: "responseText",
                json: "responseJSON"
            },
            converters: {
                "* text": String,
                "text html": !0,
                "text json": JSON.parse,
                "text xml": _.parseXML
            },
            flatOptions: {
                url: !0,
                context: !0
            }
        },
        ajaxSetup: function(f, g) {
            return g ? Xs(Xs(f, _.ajaxSettings), g) : Xs(_.ajaxSettings, f)
        },
        ajaxPrefilter: Rs(Us),
        ajaxTransport: Rs(vs),
        ajax: function(f, g) {
            "object" == typeof f && (g = f, f = void 0);
            var k, E, L, W, Q, yt, vt, Lt, ee, de, Xt = _.ajaxSetup({}, g = g || {}),
                pe = Xt.context || Xt,
                Ye = Xt.context && (pe.nodeType || pe.jquery) ? _(pe) : _.event,
                hn = _.Deferred(),
                on = _.Callbacks("once memory"),
                ni = Xt.statusCode || {},
                vi = {},
                gr = {},
                Xi = "canceled",
                Dn = {
                    readyState: 0,
                    getResponseHeader: function(Mn) {
                        var Kn;
                        if (vt) {
                            if (!W)
                                for (W = {}; Kn = ei.exec(L);) W[Kn[1].toLowerCase() + " "] = (W[Kn[1].toLowerCase() + " "] || []).concat(Kn[2]);
                            Kn = W[Mn.toLowerCase() + " "]
                        }
                        return null == Kn ? null : Kn.join(", ")
                    },
                    getAllResponseHeaders: function() {
                        return vt ? L : null
                    },
                    setRequestHeader: function(Mn, Kn) {
                        return null == vt && (Mn = gr[Mn.toLowerCase()] = gr[Mn.toLowerCase()] || Mn, vi[Mn] = Kn), this
                    },
                    overrideMimeType: function(Mn) {
                        return null == vt && (Xt.mimeType = Mn), this
                    },
                    statusCode: function(Mn) {
                        var Kn;
                        if (Mn)
                            if (vt) Dn.always(Mn[Dn.status]);
                            else
                                for (Kn in Mn) ni[Kn] = [ni[Kn], Mn[Kn]];
                        return this
                    },
                    abort: function(Mn) {
                        var Kn = Mn || Xi;
                        return k && k.abort(Kn), Ts(0, Kn), this
                    }
                };
            if (hn.promise(Dn), Xt.url = ((f || Xt.url || hr.href) + "").replace(bs, hr.protocol + "//"), Xt.type = g.method || g.type || Xt.method || Xt.type, Xt.dataTypes = (Xt.dataType || "*").toLowerCase().match(Tt) || [""], null == Xt.crossDomain) {
                yt = M.createElement("a");
                try {
                    yt.href = Xt.url, yt.href = yt.href, Xt.crossDomain = Wr.protocol + "//" + Wr.host != yt.protocol + "//" + yt.host
                } catch {
                    Xt.crossDomain = !0
                }
            }
            if (Xt.data && Xt.processData && "string" != typeof Xt.data && (Xt.data = _.param(Xt.data, Xt.traditional)), Vr(Us, Xt, g, Dn), vt) return Dn;
            for (ee in (Lt = _.event && Xt.global) && 0 == _.active++ && _.event.trigger("ajaxStart"), Xt.type = Xt.type.toUpperCase(), Xt.hasContent = !$i.test(Xt.type), E = Xt.url.replace(Fs, ""), Xt.hasContent ? Xt.data && Xt.processData && 0 === (Xt.contentType || "").indexOf("application/x-www-form-urlencoded") && (Xt.data = Xt.data.replace(Ui, "+")) : (de = Xt.url.slice(E.length), Xt.data && (Xt.processData || "string" == typeof Xt.data) && (E += (jr.test(E) ? "&" : "?") + Xt.data, delete Xt.data), !1 === Xt.cache && (E = E.replace(mo, "$1"), de = (jr.test(E) ? "&" : "?") + "_=" + gs.guid++ + de), Xt.url = E + de), Xt.ifModified && (_.lastModified[E] && Dn.setRequestHeader("If-Modified-Since", _.lastModified[E]), _.etag[E] && Dn.setRequestHeader("If-None-Match", _.etag[E])), (Xt.data && Xt.hasContent && !1 !== Xt.contentType || g.contentType) && Dn.setRequestHeader("Content-Type", Xt.contentType), Dn.setRequestHeader("Accept", Xt.dataTypes[0] && Xt.accepts[Xt.dataTypes[0]] ? Xt.accepts[Xt.dataTypes[0]] + ("*" !== Xt.dataTypes[0] ? ", " + Es + "; q=0.01" : "") : Xt.accepts["*"]), Xt.headers) Dn.setRequestHeader(ee, Xt.headers[ee]);
            if (Xt.beforeSend && (!1 === Xt.beforeSend.call(pe, Dn, Xt) || vt)) return Dn.abort();
            if (Xi = "abort", on.add(Xt.complete), Dn.done(Xt.success), Dn.fail(Xt.error), k = Vr(vs, Xt, g, Dn)) {
                if (Dn.readyState = 1, Lt && Ye.trigger("ajaxSend", [Dn, Xt]), vt) return Dn;
                Xt.async && 0 < Xt.timeout && (Q = p.setTimeout(function() {
                    Dn.abort("timeout")
                }, Xt.timeout));
                try {
                    vt = !1, k.send(vi, Ts)
                } catch (Mn) {
                    if (vt) throw Mn;
                    Ts(-1, Mn)
                }
            } else Ts(-1, "No Transport");

            function Ts(Mn, Kn, Ys, Zs) {
                var ur, $r, mr, br, qi, Fi = Kn;
                vt || (vt = !0, Q && p.clearTimeout(Q), k = void 0, L = Zs || "", Dn.readyState = 0 < Mn ? 4 : 0, ur = 200 <= Mn && Mn < 300 || 304 === Mn, Ys && (br = function(ui, _i, rr) {
                    for (var vr, sr, en, xi, Oi = ui.contents, qn = ui.dataTypes;
                        "*" === qn[0];) qn.shift(), void 0 === vr && (vr = ui.mimeType || _i.getResponseHeader("Content-Type"));
                    if (vr)
                        for (sr in Oi)
                            if (Oi[sr] && Oi[sr].test(vr)) {
                                qn.unshift(sr);
                                break
                            }
                    if (qn[0] in rr) en = qn[0];
                    else {
                        for (sr in rr) {
                            if (!qn[0] || ui.converters[sr + " " + qn[0]]) {
                                en = sr;
                                break
                            }
                            xi || (xi = sr)
                        }
                        en = en || xi
                    }
                    if (en) return en !== qn[0] && qn.unshift(en), rr[en]
                }(Xt, Dn, Ys)), !ur && -1 < _.inArray("script", Xt.dataTypes) && _.inArray("json", Xt.dataTypes) < 0 && (Xt.converters["text script"] = function() {}), br = function(ui, _i, rr, vr) {
                    var sr, en, xi, Oi, qn, Br = {},
                        Qn = ui.dataTypes.slice();
                    if (Qn[1])
                        for (xi in ui.converters) Br[xi.toLowerCase()] = ui.converters[xi];
                    for (en = Qn.shift(); en;)
                        if (ui.responseFields[en] && (rr[ui.responseFields[en]] = _i), !qn && vr && ui.dataFilter && (_i = ui.dataFilter(_i, ui.dataType)), qn = en, en = Qn.shift())
                            if ("*" === en) en = qn;
                            else if ("*" !== qn && qn !== en) {
                        if (!(xi = Br[qn + " " + en] || Br["* " + en]))
                            for (sr in Br)
                                if ((Oi = sr.split(" "))[1] === en && (xi = Br[qn + " " + Oi[0]] || Br["* " + Oi[0]])) {
                                    !0 === xi ? xi = Br[sr] : !0 !== Br[sr] && (en = Oi[0], Qn.unshift(Oi[1]));
                                    break
                                }
                        if (!0 !== xi)
                            if (xi && ui.throws) _i = xi(_i);
                            else try {
                                _i = xi(_i)
                            } catch (Ci) {
                                return {
                                    state: "parsererror",
                                    error: xi ? Ci : "No conversion from " + qn + " to " + en
                                }
                            }
                    }
                    return {
                        state: "success",
                        data: _i
                    }
                }(Xt, br, Dn, ur), ur ? (Xt.ifModified && ((qi = Dn.getResponseHeader("Last-Modified")) && (_.lastModified[E] = qi), (qi = Dn.getResponseHeader("etag")) && (_.etag[E] = qi)), 204 === Mn || "HEAD" === Xt.type ? Fi = "nocontent" : 304 === Mn ? Fi = "notmodified" : (Fi = br.state, $r = br.data, ur = !(mr = br.error))) : (mr = Fi, !Mn && Fi || (Fi = "error", Mn < 0 && (Mn = 0))), Dn.status = Mn, Dn.statusText = (Kn || Fi) + "", ur ? hn.resolveWith(pe, [$r, Fi, Dn]) : hn.rejectWith(pe, [Dn, Fi, mr]), Dn.statusCode(ni), ni = void 0, Lt && Ye.trigger(ur ? "ajaxSuccess" : "ajaxError", [Dn, Xt, ur ? $r : mr]), on.fireWith(pe, [Dn, Fi]), Lt && (Ye.trigger("ajaxComplete", [Dn, Xt]), --_.active || _.event.trigger("ajaxStop")))
            }
            return Dn
        },
        getJSON: function(f, g, k) {
            return _.get(f, g, k, "json")
        },
        getScript: function(f, g) {
            return _.get(f, void 0, g, "script")
        }
    }), _.each(["get", "post"], function(f, g) {
        _[g] = function(k, E, L, W) {
            return nt(E) && (W = W || L, L = E, E = void 0), _.ajax(_.extend({
                url: k,
                type: g,
                dataType: W,
                data: E,
                success: L
            }, _.isPlainObject(k) && k))
        }
    }), _.ajaxPrefilter(function(f) {
        var g;
        for (g in f.headers) "content-type" === g.toLowerCase() && (f.contentType = f.headers[g] || "")
    }), _._evalUrl = function(f, g, k) {
        return _.ajax({
            url: f,
            type: "GET",
            dataType: "script",
            cache: !0,
            async: !1,
            global: !1,
            converters: {
                "text script": function() {}
            },
            dataFilter: function(E) {
                _.globalEval(E, g, k)
            }
        })
    }, _.fn.extend({
        wrapAll: function(f) {
            var g;
            return this[0] && (nt(f) && (f = f.call(this[0])), g = _(f, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && g.insertBefore(this[0]), g.map(function() {
                for (var k = this; k.firstElementChild;) k = k.firstElementChild;
                return k
            }).append(this)), this
        },
        wrapInner: function(f) {
            return nt(f) ? this.each(function(g) {
                _(this).wrapInner(f.call(this, g))
            }) : this.each(function() {
                var g = _(this),
                    k = g.contents();
                k.length ? k.wrapAll(f) : g.append(f)
            })
        },
        wrap: function(f) {
            var g = nt(f);
            return this.each(function(k) {
                _(this).wrapAll(g ? f.call(this, k) : f)
            })
        },
        unwrap: function(f) {
            return this.parent(f).not("body").each(function() {
                _(this).replaceWith(this.childNodes)
            }), this
        }
    }), _.expr.pseudos.hidden = function(f) {
        return !_.expr.pseudos.visible(f)
    }, _.expr.pseudos.visible = function(f) {
        return !!(f.offsetWidth || f.offsetHeight || f.getClientRects().length)
    }, _.ajaxSettings.xhr = function() {
        try {
            return new p.XMLHttpRequest
        } catch {}
    };
    var qs = {
            0: 200,
            1223: 204
        },
        fr = _.ajaxSettings.xhr();
    tt.cors = !!fr && "withCredentials" in fr, tt.ajax = fr = !!fr, _.ajaxTransport(function(f) {
        var g, k;
        if (tt.cors || fr && !f.crossDomain) return {
            send: function(E, L) {
                var W, Q = f.xhr();
                if (Q.open(f.type, f.url, f.async, f.username, f.password), f.xhrFields)
                    for (W in f.xhrFields) Q[W] = f.xhrFields[W];
                for (W in f.mimeType && Q.overrideMimeType && Q.overrideMimeType(f.mimeType), f.crossDomain || E["X-Requested-With"] || (E["X-Requested-With"] = "XMLHttpRequest"), E) Q.setRequestHeader(W, E[W]);
                g = function(yt) {
                    return function() {
                        g && (g = k = Q.onload = Q.onerror = Q.onabort = Q.ontimeout = Q.onreadystatechange = null, "abort" === yt ? Q.abort() : "error" === yt ? "number" != typeof Q.status ? L(0, "error") : L(Q.status, Q.statusText) : L(qs[Q.status] || Q.status, Q.statusText, "text" !== (Q.responseType || "text") || "string" != typeof Q.responseText ? {
                            binary: Q.response
                        } : {
                            text: Q.responseText
                        }, Q.getAllResponseHeaders()))
                    }
                }, Q.onload = g(), k = Q.onerror = Q.ontimeout = g("error"), void 0 !== Q.onabort ? Q.onabort = k : Q.onreadystatechange = function() {
                    4 === Q.readyState && p.setTimeout(function() {
                        g && k()
                    })
                }, g = g("abort");
                try {
                    Q.send(f.hasContent && f.data || null)
                } catch (yt) {
                    if (g) throw yt
                }
            },
            abort: function() {
                g && g()
            }
        }
    }), _.ajaxPrefilter(function(f) {
        f.crossDomain && (f.contents.script = !1)
    }), _.ajaxSetup({
        accepts: {
            script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
        },
        contents: {
            script: /\b(?:java|ecma)script\b/
        },
        converters: {
            "text script": function(f) {
                return _.globalEval(f), f
            }
        }
    }), _.ajaxPrefilter("script", function(f) {
        void 0 === f.cache && (f.cache = !1), f.crossDomain && (f.type = "GET")
    }), _.ajaxTransport("script", function(f) {
        var g, k;
        if (f.crossDomain || f.scriptAttrs) return {
            send: function(E, L) {
                g = _("<script>").attr(f.scriptAttrs || {}).prop({
                    charset: f.scriptCharset,
                    src: f.url
                }).on("load error", k = function(W) {
                    g.remove(), k = null, W && L("error" === W.type ? 404 : 200, W.type)
                }), M.head.appendChild(g[0])
            },
            abort: function() {
                k && k()
            }
        }
    });
    var so, Ur = [],
        Ji = /(=)\?(?=&|$)|\?\?/;
    _.ajaxSetup({
        jsonp: "callback",
        jsonpCallback: function() {
            var f = Ur.pop() || _.expando + "_" + gs.guid++;
            return this[f] = !0, f
        }
    }), _.ajaxPrefilter("json jsonp", function(f, g, k) {
        var E, L, W, Q = !1 !== f.jsonp && (Ji.test(f.url) ? "url" : "string" == typeof f.data && 0 === (f.contentType || "").indexOf("application/x-www-form-urlencoded") && Ji.test(f.data) && "data");
        if (Q || "jsonp" === f.dataTypes[0]) return E = f.jsonpCallback = nt(f.jsonpCallback) ? f.jsonpCallback() : f.jsonpCallback, Q ? f[Q] = f[Q].replace(Ji, "$1" + E) : !1 !== f.jsonp && (f.url += (jr.test(f.url) ? "&" : "?") + f.jsonp + "=" + E), f.converters["script json"] = function() {
            return W || _.error(E + " was not called"), W[0]
        }, f.dataTypes[0] = "json", L = p[E], p[E] = function() {
            W = arguments
        }, k.always(function() {
            void 0 === L ? _(p).removeProp(E) : p[E] = L, f[E] && (f.jsonpCallback = g.jsonpCallback, Ur.push(E)), W && nt(L) && L(W[0]), W = L = void 0
        }), "script"
    }), tt.createHTMLDocument = ((so = M.implementation.createHTMLDocument("").body).innerHTML = "<form></form><form></form>", 2 === so.childNodes.length), _.parseHTML = function(f, g, k) {
        return "string" != typeof f ? [] : ("boolean" == typeof g && (k = g, g = !1), g || (tt.createHTMLDocument ? ((E = (g = M.implementation.createHTMLDocument("")).createElement("base")).href = M.location.href, g.head.appendChild(E)) : g = M), W = !k && [], (L = z.exec(f)) ? [g.createElement(L[1])] : (L = Pr([f], g, W), W && W.length && _(W).remove(), _.merge([], L.childNodes)));
        var E, L, W
    }, _.fn.load = function(f, g, k) {
        var E, L, W, Q = this,
            yt = f.indexOf(" ");
        return -1 < yt && (E = Cn(f.slice(yt)), f = f.slice(0, yt)), nt(g) ? (k = g, g = void 0) : g && "object" == typeof g && (L = "POST"), 0 < Q.length && _.ajax({
            url: f,
            type: L || "GET",
            dataType: "html",
            data: g
        }).done(function(vt) {
            W = arguments, Q.html(E ? _("<div>").append(_.parseHTML(vt)).find(E) : vt)
        }).always(k && function(vt, Lt) {
            Q.each(function() {
                k.apply(this, W || [vt.responseText, Lt, vt])
            })
        }), this
    }, _.expr.pseudos.animated = function(f) {
        return _.grep(_.timers, function(g) {
            return f === g.elem
        }).length
    }, _.offset = {
        setOffset: function(f, g, k) {
            var E, L, W, Q, yt, vt, Lt = _.css(f, "position"),
                ee = _(f),
                de = {};
            "static" === Lt && (f.style.position = "relative"), yt = ee.offset(), W = _.css(f, "top"), vt = _.css(f, "left"), ("absolute" === Lt || "fixed" === Lt) && -1 < (W + vt).indexOf("auto") ? (Q = (E = ee.position()).top, L = E.left) : (Q = parseFloat(W) || 0, L = parseFloat(vt) || 0), nt(g) && (g = g.call(f, k, _.extend({}, yt))), null != g.top && (de.top = g.top - yt.top + Q), null != g.left && (de.left = g.left - yt.left + L), "using" in g ? g.using.call(f, de) : ee.css(de)
        }
    }, _.fn.extend({
        offset: function(f) {
            if (arguments.length) return void 0 === f ? this : this.each(function(L) {
                _.offset.setOffset(this, f, L)
            });
            var g, k, E = this[0];
            return E ? E.getClientRects().length ? {
                top: (g = E.getBoundingClientRect()).top + (k = E.ownerDocument.defaultView).pageYOffset,
                left: g.left + k.pageXOffset
            } : {
                top: 0,
                left: 0
            } : void 0
        },
        position: function() {
            if (this[0]) {
                var f, g, k, E = this[0],
                    L = {
                        top: 0,
                        left: 0
                    };
                if ("fixed" === _.css(E, "position")) g = E.getBoundingClientRect();
                else {
                    for (g = this.offset(), k = E.ownerDocument, f = E.offsetParent || k.documentElement; f && (f === k.body || f === k.documentElement) && "static" === _.css(f, "position");) f = f.parentNode;
                    f && f !== E && 1 === f.nodeType && ((L = _(f).offset()).top += _.css(f, "borderTopWidth", !0), L.left += _.css(f, "borderLeftWidth", !0))
                }
                return {
                    top: g.top - L.top - _.css(E, "marginTop", !0),
                    left: g.left - L.left - _.css(E, "marginLeft", !0)
                }
            }
        },
        offsetParent: function() {
            return this.map(function() {
                for (var f = this.offsetParent; f && "static" === _.css(f, "position");) f = f.offsetParent;
                return f || Xn
            })
        }
    }), _.each({
        scrollLeft: "pageXOffset",
        scrollTop: "pageYOffset"
    }, function(f, g) {
        var k = "pageYOffset" === g;
        _.fn[f] = function(E) {
            return Me(this, function(L, W, Q) {
                var yt;
                if (lt(L) ? yt = L : 9 === L.nodeType && (yt = L.defaultView), void 0 === Q) return yt ? yt[g] : L[W];
                yt ? yt.scrollTo(k ? yt.pageXOffset : Q, k ? Q : yt.pageYOffset) : L[W] = Q
            }, f, E, arguments.length)
        }
    }), _.each(["top", "left"], function(f, g) {
        _.cssHooks[g] = fi(tt.pixelPosition, function(k, E) {
            if (E) return E = nr(k, g), er.test(E) ? _(k).position()[g] + "px" : E
        })
    }), _.each({
        Height: "height",
        Width: "width"
    }, function(f, g) {
        _.each({
            padding: "inner" + f,
            content: g,
            "": "outer" + f
        }, function(k, E) {
            _.fn[E] = function(L, W) {
                var Q = arguments.length && (k || "boolean" != typeof L),
                    yt = k || (!0 === L || !0 === W ? "margin" : "border");
                return Me(this, function(vt, Lt, ee) {
                    var de;
                    return lt(vt) ? 0 === E.indexOf("outer") ? vt["inner" + f] : vt.document.documentElement["client" + f] : 9 === vt.nodeType ? (de = vt.documentElement, Math.max(vt.body["scroll" + f], de["scroll" + f], vt.body["offset" + f], de["offset" + f], de["client" + f])) : void 0 === ee ? _.css(vt, Lt, yt) : _.style(vt, Lt, ee, yt)
                }, g, Q ? L : void 0, Q)
            }
        })
    }), _.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(f, g) {
        _.fn[g] = function(k) {
            return this.on(g, k)
        }
    }), _.fn.extend({
        bind: function(f, g, k) {
            return this.on(f, null, g, k)
        },
        unbind: function(f, g) {
            return this.off(f, null, g)
        },
        delegate: function(f, g, k, E) {
            return this.on(g, f, k, E)
        },
        undelegate: function(f, g, k) {
            return 1 === arguments.length ? this.off(f, "**") : this.off(g, f || "**", k)
        },
        hover: function(f, g) {
            return this.on("mouseenter", f).on("mouseleave", g || f)
        }
    }), _.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "), function(f, g) {
        _.fn[g] = function(k, E) {
            return 0 < arguments.length ? this.on(g, null, k, E) : this.trigger(g)
        }
    });
    var ss = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
    _.proxy = function(f, g) {
        var k, E, L;
        if ("string" == typeof g && (k = f[g], g = f, f = k), nt(f)) return E = H.call(arguments, 2), (L = function() {
            return f.apply(g || this, E.concat(H.call(arguments)))
        }).guid = f.guid = f.guid || _.guid++, L
    }, _.holdReady = function(f) {
        f ? _.readyWait++ : _.ready(!0)
    }, _.isArray = Array.isArray, _.parseJSON = JSON.parse, _.nodeName = jt, _.isFunction = nt, _.isWindow = lt, _.camelCase = te, _.type = dt, _.now = Date.now, _.isNumeric = function(f) {
        var g = _.type(f);
        return ("number" === g || "string" === g) && !isNaN(f - parseFloat(f))
    }, _.trim = function(f) {
        return null == f ? "" : (f + "").replace(ss, "$1")
    }, "function" == typeof define && define.amd && define("jquery", [], function() {
        return _
    });
    var os = p.jQuery,
        Gs = p.$;
    return _.noConflict = function(f) {
        return p.$ === _ && (p.$ = Gs), f && p.jQuery === _ && (p.jQuery = os), _
    }, typeof R > "u" && (p.jQuery = p.$ = _), _
}), typeof jQuery.migrateMute > "u" && (jQuery.migrateMute = !0),
    function(p) {
        "use strict";
        "function" == typeof define && define.amd ? define(["jquery"], function(R) {
            return p(R, window)
        }) : "object" == typeof module && module.exports ? module.exports = p(require("jquery"), window) : p(jQuery, window)
    }(function(p, R) {
        "use strict";

        function y(pt) {
            return 0 <= function(Tt, Dt) {
                for (var ce = /^(\d+)\.(\d+)\.(\d+)/, le = ce.exec(Tt) || [], Ce = ce.exec(Dt) || [], Ne = 1; Ne <= 3; Ne++) {
                    if (+Ce[Ne] < +le[Ne]) return 1;
                    if (+le[Ne] < +Ce[Ne]) return -1
                }
                return 0
            }(p.fn.jquery, pt)
        }
        p.migrateVersion = "3.5.0";
        var I = Object.create(null);
        p.migrateDisablePatches = function() {
            for (var pt = 0; pt < arguments.length; pt++) I[arguments[pt]] = !0
        }, p.migrateEnablePatches = function() {
            for (var pt = 0; pt < arguments.length; pt++) delete I[arguments[pt]]
        }, p.migrateIsPatchEnabled = function(pt) {
            return !I[pt]
        }, R.console && R.console.log && (p && y("3.0.0") && !y("5.0.0") || R.console.log("JQMIGRATE: jQuery 3.x-4.x REQUIRED"), p.migrateWarnings && R.console.log("JQMIGRATE: Migrate plugin loaded multiple times"), R.console.log("JQMIGRATE: Migrate is installed" + (p.migrateMute ? "" : " with logging active") + ", version " + p.migrateVersion));
        var H = {};

        function P(pt, Tt) {
            var Dt = R.console;
            !p.migrateIsPatchEnabled(pt) || p.migrateDeduplicateWarnings && H[Tt] || (H[Tt] = !0, p.migrateWarnings.push(Tt + " [" + pt + "]"), Dt && Dt.warn && !p.migrateMute && (Dt.warn("JQMIGRATE: " + Tt), p.migrateTrace && Dt.trace && Dt.trace()))
        }

        function K(pt, Tt, Dt, ce, le) {
            Object.defineProperty(pt, Tt, {
                configurable: !0,
                enumerable: !0,
                get: function() {
                    return P(ce, le), Dt
                },
                set: function(Ce) {
                    P(ce, le), Dt = Ce
                }
            })
        }

        function O(pt, Tt, Dt, ce, le) {
            var Ce = pt[Tt];
            pt[Tt] = function() {
                return le && P(ce, le), (p.migrateIsPatchEnabled(ce) ? Dt : Ce || p.noop).apply(this, arguments)
            }
        }

        function J(pt, Tt, Dt, ce, le) {
            if (!le) throw new Error("No warning message provided");
            return O(pt, Tt, Dt, ce, le), 0
        }

        function mt(pt, Tt, Dt, ce) {
            return O(pt, Tt, Dt, ce), 0
        }
        p.migrateDeduplicateWarnings = !0, p.migrateWarnings = [], void 0 === p.migrateTrace && (p.migrateTrace = !0), p.migrateReset = function() {
            H = {}, p.migrateWarnings.length = 0
        }, "BackCompat" === R.document.compatMode && P("quirks", "jQuery is not compatible with Quirks Mode");
        var Z, A, q, tt = {},
            nt = p.fn.init,
            lt = p.find,
            M = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,
            G = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g,
            et = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
        for (Z in mt(p.fn, "init", function(pt) {
                var Tt = Array.prototype.slice.call(arguments);
                return p.migrateIsPatchEnabled("selector-empty-id") && "string" == typeof pt && "#" === pt && (P("selector-empty-id", "jQuery( '#' ) is not a valid selector"), Tt[0] = []), nt.apply(this, Tt)
            }, "selector-empty-id"), p.fn.init.prototype = p.fn, mt(p, "find", function(pt) {
                var Tt = Array.prototype.slice.call(arguments);
                if ("string" == typeof pt && M.test(pt)) try {
                    R.document.querySelector(pt)
                } catch {
                    pt = pt.replace(G, function(ce, le, Ce, Ne) {
                        return "[" + le + Ce + '"' + Ne + '"]'
                    });
                    try {
                        R.document.querySelector(pt), P("selector-hash", "Attribute selector with '#' must be quoted: " + Tt[0]), Tt[0] = pt
                    } catch {
                        P("selector-hash", "Attribute selector with '#' was not fixed: " + Tt[0])
                    }
                }
                return lt.apply(this, Tt)
            }, "selector-hash"), lt) Object.prototype.hasOwnProperty.call(lt, Z) && (p.find[Z] = lt[Z]);
        J(p.fn, "size", function() {
            return this.length
        }, "size", "jQuery.fn.size() is deprecated and removed; use the .length property"), J(p, "parseJSON", function() {
            return JSON.parse.apply(null, arguments)
        }, "parseJSON", "jQuery.parseJSON is deprecated; use JSON.parse"), J(p, "holdReady", p.holdReady, "holdReady", "jQuery.holdReady is deprecated"), J(p, "unique", p.uniqueSort, "unique", "jQuery.unique is deprecated; use jQuery.uniqueSort"), K(p.expr, "filters", p.expr.pseudos, "expr-pre-pseudos", "jQuery.expr.filters is deprecated; use jQuery.expr.pseudos"), K(p.expr, ":", p.expr.pseudos, "expr-pre-pseudos", "jQuery.expr[':'] is deprecated; use jQuery.expr.pseudos"), y("3.1.1") && J(p, "trim", function(pt) {
            return null == pt ? "" : (pt + "").replace(et, "$1")
        }, "trim", "jQuery.trim is deprecated; use String.prototype.trim"), y("3.2.0") && (J(p, "nodeName", function(pt, Tt) {
            return pt.nodeName && pt.nodeName.toLowerCase() === Tt.toLowerCase()
        }, "nodeName", "jQuery.nodeName is deprecated"), J(p, "isArray", Array.isArray, "isArray", "jQuery.isArray is deprecated; use Array.isArray")), y("3.3.0") && (J(p, "isNumeric", function(pt) {
            var Tt = typeof pt;
            return ("number" == Tt || "string" == Tt) && !isNaN(pt - parseFloat(pt))
        }, "isNumeric", "jQuery.isNumeric() is deprecated"), p.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function(pt, Tt) {
            tt["[object " + Tt + "]"] = Tt.toLowerCase()
        }), J(p, "type", function(pt) {
            return null == pt ? pt + "" : "object" == typeof pt || "function" == typeof pt ? tt[Object.prototype.toString.call(pt)] || "object" : typeof pt
        }, "type", "jQuery.type is deprecated"), J(p, "isFunction", function(pt) {
            return "function" == typeof pt
        }, "isFunction", "jQuery.isFunction() is deprecated"), J(p, "isWindow", function(pt) {
            return null != pt && pt === pt.window
        }, "isWindow", "jQuery.isWindow() is deprecated")), p.ajax && (A = p.ajax, q = /(=)\?(?=&|$)|\?\?/, mt(p, "ajax", function() {
            var pt = A.apply(this, arguments);
            return pt.promise && (J(pt, "success", pt.done, "jqXHR-methods", "jQXHR.success is deprecated and removed"), J(pt, "error", pt.fail, "jqXHR-methods", "jQXHR.error is deprecated and removed"), J(pt, "complete", pt.always, "jqXHR-methods", "jQXHR.complete is deprecated and removed")), pt
        }, "jqXHR-methods"), y("4.0.0") || p.ajaxPrefilter("+json", function(pt) {
            !1 !== pt.jsonp && (q.test(pt.url) || "string" == typeof pt.data && 0 === (pt.contentType || "").indexOf("application/x-www-form-urlencoded") && q.test(pt.data)) && P("jsonp-promotion", "JSON-to-JSONP auto-promotion is deprecated")
        }));
        var dt = p.fn.removeAttr,
            Bt = p.fn.toggleClass,
            wt = /^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$/i,
            _ = /\S+/g;

        function Jt(pt) {
            return pt.replace(/-([a-z])/g, function(Tt, Dt) {
                return Dt.toUpperCase()
            })
        }
        mt(p.fn, "removeAttr", function(pt) {
            var Tt = this,
                Dt = !1;
            return p.each(pt.match(_), function(ce, le) {
                wt.test(le) && Tt.each(function() {
                    if (!1 !== p(this).prop(le)) return !(Dt = !0)
                }), Dt && (P("removeAttr-bool", "jQuery.fn.removeAttr no longer sets boolean properties: " + le), Tt.prop(le, !1))
            }), dt.apply(this, arguments)
        }, "removeAttr-bool"), mt(p.fn, "toggleClass", function(pt) {
            return void 0 !== pt && "boolean" != typeof pt ? Bt.apply(this, arguments) : (P("toggleClass-bool", "jQuery.fn.toggleClass( boolean ) is deprecated"), this.each(function() {
                var Tt = this.getAttribute && this.getAttribute("class") || "";
                Tt && p.data(this, "__className__", Tt), this.setAttribute && this.setAttribute("class", !Tt && !1 !== pt && p.data(this, "__className__") || "")
            }))
        }, "toggleClass-bool");
        var jt, Wt, be = !1,
            Kt = /^[a-z]/,
            Qt = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;
        p.swap && p.each(["height", "width", "reliableMarginRight"], function(pt, Tt) {
            var Dt = p.cssHooks[Tt] && p.cssHooks[Tt].get;
            Dt && (p.cssHooks[Tt].get = function() {
                var ce;
                return be = !0, ce = Dt.apply(this, arguments), be = !1, ce
            })
        }), mt(p, "swap", function(pt, Tt, Dt, ce) {
            var le, Ce, Ne = {};
            for (Ce in be || P("swap", "jQuery.swap() is undocumented and deprecated"), Tt) Ne[Ce] = pt.style[Ce], pt.style[Ce] = Tt[Ce];
            for (Ce in le = Dt.apply(pt, ce || []), Tt) pt.style[Ce] = Ne[Ce];
            return le
        }, "swap"), y("3.4.0") && typeof Proxy < "u" && (p.cssProps = new Proxy(p.cssProps || {}, {
            set: function() {
                return P("cssProps", "jQuery.cssProps is deprecated"), Reflect.set.apply(this, arguments)
            }
        })), y("4.0.0") ? (Wt = {
            animationIterationCount: !0,
            aspectRatio: !0,
            borderImageSlice: !0,
            columnCount: !0,
            flexGrow: !0,
            flexShrink: !0,
            fontWeight: !0,
            gridArea: !0,
            gridColumn: !0,
            gridColumnEnd: !0,
            gridColumnStart: !0,
            gridRow: !0,
            gridRowEnd: !0,
            gridRowStart: !0,
            lineHeight: !0,
            opacity: !0,
            order: !0,
            orphans: !0,
            scale: !0,
            widows: !0,
            zIndex: !0,
            zoom: !0,
            fillOpacity: !0,
            floodOpacity: !0,
            stopOpacity: !0,
            strokeMiterlimit: !0,
            strokeOpacity: !0
        }, p.cssNumber = typeof Proxy < "u" ? new Proxy(Wt, {
            get: function() {
                return P("css-number", "jQuery.cssNumber is deprecated"), Reflect.get.apply(this, arguments)
            },
            set: function() {
                return P("css-number", "jQuery.cssNumber is deprecated"), Reflect.set.apply(this, arguments)
            }
        }) : Wt) : Wt = p.cssNumber, jt = p.fn.css, mt(p.fn, "css", function(pt, Tt) {
            var Dt, ce, le = this;
            return pt && "object" == typeof pt && !Array.isArray(pt) ? (p.each(pt, function(Ce, Ne) {
                p.fn.css.call(le, Ce, Ne)
            }), this) : ("number" == typeof Tt && (Dt = Jt(pt), Kt.test(ce = Dt) && Qt.test(ce[0].toUpperCase() + ce.slice(1)) || Wt[Dt] || P("css-number", 'Number-typed values are deprecated for jQuery.fn.css( "' + pt + '", value )')), jt.apply(this, arguments))
        }, "css-number");
        var Ft, Yt, it, ot, St = p.data;
        mt(p, "data", function(pt, Tt, Dt) {
            var ce, le, Ce;
            if (Tt && "object" == typeof Tt && 2 === arguments.length) {
                for (Ce in ce = p.hasData(pt) && St.call(this, pt), le = {}, Tt) Ce !== Jt(Ce) ? (P("data-camelCase", "jQuery.data() always sets/gets camelCased names: " + Ce), ce[Ce] = Tt[Ce]) : le[Ce] = Tt[Ce];
                return St.call(this, pt, le), Tt
            }
            return Tt && "string" == typeof Tt && Tt !== Jt(Tt) && (ce = p.hasData(pt) && St.call(this, pt)) && Tt in ce ? (P("data-camelCase", "jQuery.data() always sets/gets camelCased names: " + Tt), 2 < arguments.length && (ce[Tt] = Dt), ce[Tt]) : St.apply(this, arguments)
        }, "data-camelCase"), p.fx && (it = p.Tween.prototype.run, ot = function(pt) {
            return pt
        }, mt(p.Tween.prototype, "run", function() {
            1 < p.easing[this.easing].length && (P("easing-one-arg", "'jQuery.easing." + this.easing.toString() + "' should use only one argument"), p.easing[this.easing] = ot), it.apply(this, arguments)
        }, "easing-one-arg"), Ft = p.fx.interval, Yt = "jQuery.fx.interval is deprecated", R.requestAnimationFrame && Object.defineProperty(p.fx, "interval", {
            configurable: !0,
            enumerable: !0,
            get: function() {
                return R.document.hidden || P("fx-interval", Yt), p.migrateIsPatchEnabled("fx-interval") && void 0 === Ft ? 13 : Ft
            },
            set: function(pt) {
                P("fx-interval", Yt), Ft = pt
            }
        }));
        var V = p.fn.load,
            rt = p.event.add,
            ut = p.event.fix;

        function z(pt) {
            var Tt = R.document.implementation.createHTMLDocument("");
            return Tt.body.innerHTML = pt, Tt.body && Tt.body.innerHTML
        }
        p.event.props = [], p.event.fixHooks = {}, K(p.event.props, "concat", p.event.props.concat, "event-old-patch", "jQuery.event.props.concat() is deprecated and removed"), mt(p.event, "fix", function(pt) {
            var Tt, Dt = pt.type,
                ce = this.fixHooks[Dt],
                le = p.event.props;
            if (le.length)
                for (P("event-old-patch", "jQuery.event.props are deprecated and removed: " + le.join()); le.length;) p.event.addProp(le.pop());
            if (ce && !ce._migrated_ && (ce._migrated_ = !0, P("event-old-patch", "jQuery.event.fixHooks are deprecated and removed: " + Dt), (le = ce.props) && le.length))
                for (; le.length;) p.event.addProp(le.pop());
            return Tt = ut.call(this, pt), ce && ce.filter ? ce.filter(Tt, pt) : Tt
        }, "event-old-patch"), mt(p.event, "add", function(pt, Tt) {
            return pt === R && "load" === Tt && "complete" === R.document.readyState && P("load-after-event", "jQuery(window).on('load'...) called after load event occurred"), rt.apply(this, arguments)
        }, "load-after-event"), p.each(["load", "unload", "error"], function(pt, Tt) {
            mt(p.fn, Tt, function() {
                var Dt = Array.prototype.slice.call(arguments, 0);
                return "load" === Tt && "string" == typeof Dt[0] ? V.apply(this, Dt) : (P("shorthand-removed-v3", "jQuery.fn." + Tt + "() is deprecated"), Dt.splice(0, 0, Tt), arguments.length ? this.on.apply(this, Dt) : (this.triggerHandler.apply(this, Dt), this))
            }, "shorthand-removed-v3")
        }), p.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "), function(pt, Tt) {
            J(p.fn, Tt, function(Dt, ce) {
                return 0 < arguments.length ? this.on(Tt, null, Dt, ce) : this.trigger(Tt)
            }, "shorthand-deprecated-v3", "jQuery.fn." + Tt + "() event shorthand is deprecated")
        }), p(function() {
            p(R.document).triggerHandler("ready")
        }), p.event.special.ready = {
            setup: function() {
                this === R.document && P("ready-event", "'ready' event is deprecated")
            }
        }, J(p.fn, "bind", function(pt, Tt, Dt) {
            return this.on(pt, null, Tt, Dt)
        }, "pre-on-methods", "jQuery.fn.bind() is deprecated"), J(p.fn, "unbind", function(pt, Tt) {
            return this.off(pt, null, Tt)
        }, "pre-on-methods", "jQuery.fn.unbind() is deprecated"), J(p.fn, "delegate", function(pt, Tt, Dt, ce) {
            return this.on(Tt, pt, Dt, ce)
        }, "pre-on-methods", "jQuery.fn.delegate() is deprecated"), J(p.fn, "undelegate", function(pt, Tt, Dt) {
            return 1 === arguments.length ? this.off(pt, "**") : this.off(Tt, pt || "**", Dt)
        }, "pre-on-methods", "jQuery.fn.undelegate() is deprecated"), J(p.fn, "hover", function(pt, Tt) {
            return this.on("mouseenter", pt).on("mouseleave", Tt || pt)
        }, "pre-on-methods", "jQuery.fn.hover() is deprecated");
        var X = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi;
        J(p, "UNSAFE_restoreLegacyHtmlPrefilter", function() {
            p.migrateEnablePatches("self-closed-tags")
        }, "legacy-self-closed-tags", 'jQuery.UNSAFE_restoreLegacyHtmlPrefilter deprecated; use `jQuery.migrateEnablePatches( "self-closed-tags" )`'), mt(p, "htmlPrefilter", function(pt) {
            var Tt, Dt;
            return (Dt = (Tt = pt).replace(X, "<$1></$2>")) !== Tt && z(Tt) !== z(Dt) && P("self-closed-tags", "HTML tags must be properly nested and closed: " + Tt), pt.replace(X, "<$1></$2>")
        }, "self-closed-tags"), p.migrateDisablePatches("self-closed-tags");
        var _t, Mt, Gt, xt = p.fn.offset;
        return mt(p.fn, "offset", function() {
            var pt = this[0];
            return !pt || pt.nodeType && pt.getBoundingClientRect ? xt.apply(this, arguments) : (P("offset-valid-elem", "jQuery.fn.offset() requires a valid DOM element"), arguments.length ? this : void 0)
        }, "offset-valid-elem"), p.ajax && (_t = p.param, mt(p, "param", function(pt, Tt) {
            var Dt = p.ajaxSettings && p.ajaxSettings.traditional;
            return void 0 === Tt && Dt && (P("param-ajax-traditional", "jQuery.param() no longer uses jQuery.ajaxSettings.traditional"), Tt = Dt), _t.call(this, pt, Tt)
        }, "param-ajax-traditional")), J(p.fn, "andSelf", p.fn.addBack, "andSelf", "jQuery.fn.andSelf() is deprecated and removed, use jQuery.fn.addBack()"), p.Deferred && (Mt = p.Deferred, Gt = [
            ["resolve", "done", p.Callbacks("once memory"), p.Callbacks("once memory"), "resolved"],
            ["reject", "fail", p.Callbacks("once memory"), p.Callbacks("once memory"), "rejected"],
            ["notify", "progress", p.Callbacks("memory"), p.Callbacks("memory")]
        ], mt(p, "Deferred", function(pt) {
            var Tt = Mt(),
                Dt = Tt.promise();

            function ce() {
                var le = arguments;
                return p.Deferred(function(Ce) {
                    p.each(Gt, function(Ne, dn) {
                        var Me = "function" == typeof le[Ne] && le[Ne];
                        Tt[dn[1]](function() {
                            var cn = Me && Me.apply(this, arguments);
                            cn && "function" == typeof cn.promise ? cn.promise().done(Ce.resolve).fail(Ce.reject).progress(Ce.notify) : Ce[dn[0] + "With"](this === Dt ? Ce.promise() : this, Me ? [cn] : arguments)
                        })
                    }), le = null
                }).promise()
            }
            return J(Tt, "pipe", ce, "deferred-pipe", "deferred.pipe() is deprecated"), J(Dt, "pipe", ce, "deferred-pipe", "deferred.pipe() is deprecated"), pt && pt.call(Tt, Tt), Tt
        }, "deferred-pipe"), p.Deferred.exceptionHook = Mt.exceptionHook), p
    });
var JSZip = function(p, R) {
    this.files = {}, this.root = "", p && this.load(p, R)
};
JSZip.signature = {
        LOCAL_FILE_HEADER: "PK\x03\x04",
        CENTRAL_FILE_HEADER: "PK\x01\x02",
        CENTRAL_DIRECTORY_END: "PK\x05\x06",
        ZIP64_CENTRAL_DIRECTORY_LOCATOR: "PK\x06\x07",
        ZIP64_CENTRAL_DIRECTORY_END: "PK\x06\x06",
        DATA_DESCRIPTOR: "PK\x07\b"
    }, JSZip.defaults = {
        base64: !1,
        binary: !1,
        dir: !1,
        date: null,
        compression: null
    }, JSZip.support = {
        arraybuffer: typeof ArrayBuffer < "u" && typeof Uint8Array < "u",
        nodebuffer: typeof Buffer < "u",
        uint8array: typeof Uint8Array < "u",
        blob: function() {
            if (typeof ArrayBuffer > "u") return !1;
            var p = new ArrayBuffer(0);
            try {
                return 0 === new Blob([p], {
                    type: "application/zip"
                }).size
            } catch {}
            try {
                var y = new(window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder);
                return y.append(p), 0 === y.getBlob("application/zip").size
            } catch {}
            return !1
        }()
    }, JSZip.prototype = function() {
        var p, R;
        JSZip.support.uint8array && "function" == typeof TextEncoder && "function" == typeof TextDecoder && (p = new TextEncoder("utf-8"), R = new TextDecoder("utf-8"));
        var y = function(M) {
                if (M._data instanceof JSZip.CompressedObject && (M._data = M._data.getContent(), M.options.binary = !0, M.options.base64 = !1, "uint8array" === JSZip.utils.getTypeOf(M._data))) {
                    var G = M._data;
                    M._data = new Uint8Array(G.length), 0 !== G.length && M._data.set(G, 0)
                }
                return M._data
            },
            I = function(M) {
                var G = y(M);
                if ("string" === JSZip.utils.getTypeOf(G)) {
                    if (!M.options.binary) {
                        if (p) return p.encode(G);
                        if (JSZip.support.nodebuffer) return new Buffer(G, "utf-8")
                    }
                    return M.asBinary()
                }
                return G
            },
            H = function(M) {
                var G = y(this);
                return null === G || typeof G > "u" ? "" : (this.options.base64 && (G = JSZip.base64.decode(G)), G = M && this.options.binary ? JSZip.prototype.utf8decode(G) : JSZip.utils.transformTo("string", G), !M && !this.options.binary && (G = JSZip.prototype.utf8encode(G)), G)
            },
            P = function(M, G, et) {
                this.name = M, this._data = G, this.options = et
            };
        P.prototype = {
            asText: function() {
                return H.call(this, !0)
            },
            asBinary: function() {
                return H.call(this, !1)
            },
            asNodeBuffer: function() {
                var M = I(this);
                return JSZip.utils.transformTo("nodebuffer", M)
            },
            asUint8Array: function() {
                var M = I(this);
                return JSZip.utils.transformTo("uint8array", M)
            },
            asArrayBuffer: function() {
                return this.asUint8Array().buffer
            }
        };
        var K = function(M, G) {
                var dt, et = "";
                for (dt = 0; dt < G; dt++) et += String.fromCharCode(255 & M), M >>>= 8;
                return et
            },
            O = function() {
                var G, et, M = {};
                for (G = 0; G < arguments.length; G++)
                    for (et in arguments[G]) arguments[G].hasOwnProperty(et) && typeof M[et] > "u" && (M[et] = arguments[G][et]);
                return M
            },
            mt = function(M, G, et) {
                var dt = Z(M),
                    Bt = JSZip.utils.getTypeOf(G);
                if (dt && A.call(this, dt), et = function(M) {
                        return !0 === (M = M || {}).base64 && null == M.binary && (M.binary = !0), (M = O(M, JSZip.defaults)).date = M.date || new Date, null !== M.compression && (M.compression = M.compression.toUpperCase()), M
                    }(et), et.dir || null === G || typeof G > "u") et.base64 = !1, et.binary = !1, G = null;
                else if ("string" === Bt) et.binary && !et.base64 && !0 !== et.optimizedBinaryString && (G = JSZip.utils.string2binary(G));
                else {
                    if (et.base64 = !1, et.binary = !0, !(Bt || G instanceof JSZip.CompressedObject)) throw new Error("The data of '" + M + "' is in an unsupported format !");
                    "arraybuffer" === Bt && (G = JSZip.utils.transformTo("uint8array", G))
                }
                var wt = new P(M, G, et);
                return this.files[M] = wt, wt
            },
            Z = function(M) {
                "/" == M.slice(-1) && (M = M.substring(0, M.length - 1));
                var G = M.lastIndexOf("/");
                return G > 0 ? M.substring(0, G) : ""
            },
            A = function(M) {
                return "/" != M.slice(-1) && (M += "/"), this.files[M] || mt.call(this, M, null, {
                    dir: !0
                }), this.files[M]
            },
            q = function(M, G) {
                var dt, et = new JSZip.CompressedObject;
                return M._data instanceof JSZip.CompressedObject ? (et.uncompressedSize = M._data.uncompressedSize, et.crc32 = M._data.crc32, 0 === et.uncompressedSize || M.options.dir ? (G = JSZip.compressions.STORE, et.compressedContent = "", et.crc32 = 0) : M._data.compressionMethod === G.magic ? et.compressedContent = M._data.getCompressedContent() : (dt = M._data.getContent(), et.compressedContent = G.compress(JSZip.utils.transformTo(G.compressInputType, dt)))) : ((!(dt = I(M)) || 0 === dt.length || M.options.dir) && (G = JSZip.compressions.STORE, dt = ""), et.uncompressedSize = dt.length, et.crc32 = this.crc32(dt), et.compressedContent = G.compress(JSZip.utils.transformTo(G.compressInputType, dt))), et.compressedSize = et.compressedContent.length, et.compressionMethod = G.magic, et
            },
            tt = function(M, G, et, dt) {
                var jt, Wt, wt = this.utf8encode(G.name),
                    _ = wt !== G.name,
                    Jt = G.options;
                jt = Jt.date.getHours(), jt <<= 6, jt |= Jt.date.getMinutes(), jt <<= 5, jt |= Jt.date.getSeconds() / 2, Wt = Jt.date.getFullYear() - 1980, Wt <<= 4, Wt |= Jt.date.getMonth() + 1, Wt <<= 5, Wt |= Jt.date.getDate();
                var be = "";
                return be += "\n\0", be += _ ? "\0\b" : "\0\0", be += et.compressionMethod, be += K(jt, 2), be += K(Wt, 2), be += K(et.crc32, 4), be += K(et.compressedSize, 4), be += K(et.uncompressedSize, 4), be += K(wt.length, 2), {
                    fileRecord: JSZip.signature.LOCAL_FILE_HEADER + (be += "\0\0") + wt,
                    dirRecord: JSZip.signature.CENTRAL_FILE_HEADER + "\x14\0" + be + "\0\0\0\0\0\0" + (!0 === G.options.dir ? "\x10\0\0\0" : "\0\0\0\0") + K(dt, 4) + wt,
                    compressedObject: et
                }
            },
            nt = function() {
                this.data = []
            };
        nt.prototype = {
            append: function(M) {
                M = JSZip.utils.transformTo("string", M), this.data.push(M)
            },
            finalize: function() {
                return this.data.join("")
            }
        };
        var lt = function(M) {
            this.data = new Uint8Array(M), this.index = 0
        };
        return lt.prototype = {
            append: function(M) {
                0 !== M.length && (M = JSZip.utils.transformTo("uint8array", M), this.data.set(M, this.index), this.index += M.length)
            },
            finalize: function() {
                return this.data
            }
        }, {
            load: function(M, G) {
                throw new Error("Load method is not defined. Is the file jszip-load.js included ?")
            },
            filter: function(M) {
                var et, dt, Bt, wt, G = [];
                for (et in this.files) this.files.hasOwnProperty(et) && (wt = new P((Bt = this.files[et]).name, Bt._data, O(Bt.options)), dt = et.slice(this.root.length, et.length), et.slice(0, this.root.length) === this.root && M(dt, wt) && G.push(wt));
                return G
            },
            file: function(M, G, et) {
                if (1 === arguments.length) {
                    if (JSZip.utils.isRegExp(M)) {
                        var dt = M;
                        return this.filter(function(Bt, wt) {
                            return !wt.options.dir && dt.test(Bt)
                        })
                    }
                    return this.filter(function(Bt, wt) {
                        return !wt.options.dir && Bt === M
                    })[0] || null
                }
                return mt.call(this, M = this.root + M, G, et), this
            },
            folder: function(M) {
                if (!M) return this;
                if (JSZip.utils.isRegExp(M)) return this.filter(function(Bt, wt) {
                    return wt.options.dir && M.test(Bt)
                });
                var et = A.call(this, this.root + M),
                    dt = this.clone();
                return dt.root = et.name, dt
            },
            remove: function(M) {
                var G = this.files[M = this.root + M];
                if (G || ("/" != M.slice(-1) && (M += "/"), G = this.files[M]), G)
                    if (G.options.dir)
                        for (var et = this.filter(function(Bt, wt) {
                                return wt.name.slice(0, M.length) === M
                            }), dt = 0; dt < et.length; dt++) delete this.files[et[dt].name];
                    else delete this.files[M];
                return this
            },
            generate: function(M) {
                M = O(M || {}, {
                    base64: !0,
                    compression: "STORE",
                    type: "base64"
                }), JSZip.utils.checkSupport(M.type);
                var Bt, wt, Qt, G = [],
                    et = 0,
                    dt = 0;
                for (var _ in this.files)
                    if (this.files.hasOwnProperty(_)) {
                        var Jt = this.files[_],
                            jt = Jt.options.compression || M.compression.toUpperCase(),
                            Wt = JSZip.compressions[jt];
                        if (!Wt) throw new Error(jt + " is not a valid compression method !");
                        var be = q.call(this, Jt, Wt),
                            Kt = tt.call(this, _, Jt, be, et);
                        et += Kt.fileRecord.length + be.compressedSize, dt += Kt.dirRecord.length, G.push(Kt)
                    }
                switch (Qt = JSZip.signature.CENTRAL_DIRECTORY_END + "\0\0\0\0" + K(G.length, 2) + K(G.length, 2) + K(dt, 4) + K(et, 4) + "\0\0", M.type.toLowerCase()) {
                    case "uint8array":
                    case "arraybuffer":
                    case "blob":
                    case "nodebuffer":
                        Bt = new lt(et + dt + Qt.length);
                        break;
                    default:
                        Bt = new nt(et + dt + Qt.length)
                }
                for (wt = 0; wt < G.length; wt++) Bt.append(G[wt].fileRecord), Bt.append(G[wt].compressedObject.compressedContent);
                for (wt = 0; wt < G.length; wt++) Bt.append(G[wt].dirRecord);
                Bt.append(Qt);
                var Ft = Bt.finalize();
                switch (M.type.toLowerCase()) {
                    case "uint8array":
                    case "arraybuffer":
                    case "nodebuffer":
                        return JSZip.utils.transformTo(M.type.toLowerCase(), Ft);
                    case "blob":
                        return JSZip.utils.arrayBuffer2Blob(JSZip.utils.transformTo("arraybuffer", Ft));
                    case "base64":
                        return M.base64 ? JSZip.base64.encode(Ft) : Ft;
                    default:
                        return Ft
                }
            },
            crc32: function(G, et) {
                if (typeof G > "u" || !G.length) return 0;
                var dt = "string" !== JSZip.utils.getTypeOf(G),
                    Bt = [0, 1996959894, 3993919788, 2567524794, 124634137, 1886057615, 3915621685, 2657392035, 249268274, 2044508324, 3772115230, 2547177864, 162941995, 2125561021, 3887607047, 2428444049, 498536548, 1789927666, 4089016648, 2227061214, 450548861, 1843258603, 4107580753, 2211677639, 325883990, 1684777152, 4251122042, 2321926636, 335633487, 1661365465, 4195302755, 2366115317, 997073096, 1281953886, 3579855332, 2724688242, 1006888145, 1258607687, 3524101629, 2768942443, 901097722, 1119000684, 3686517206, 2898065728, 853044451, 1172266101, 3705015759, 2882616665, 651767980, 1373503546, 3369554304, 3218104598, 565507253, 1454621731, 3485111705, 3099436303, 671266974, 1594198024, 3322730930, 2970347812, 795835527, 1483230225, 3244367275, 3060149565, 1994146192, 31158534, 2563907772, 4023717930, 1907459465, 112637215, 2680153253, 3904427059, 2013776290, 251722036, 2517215374, 3775830040, 2137656763, 141376813, 2439277719, 3865271297, 1802195444, 476864866, 2238001368, 4066508878, 1812370925, 453092731, 2181625025, 4111451223, 1706088902, 314042704, 2344532202, 4240017532, 1658658271, 366619977, 2362670323, 4224994405, 1303535960, 984961486, 2747007092, 3569037538, 1256170817, 1037604311, 2765210733, 3554079995, 1131014506, 879679996, 2909243462, 3663771856, 1141124467, 855842277, 2852801631, 3708648649, 1342533948, 654459306, 3188396048, 3373015174, 1466479909, 544179635, 3110523913, 3462522015, 1591671054, 702138776, 2966460450, 3352799412, 1504918807, 783551873, 3082640443, 3233442989, 3988292384, 2596254646, 62317068, 1957810842, 3939845945, 2647816111, 81470997, 1943803523, 3814918930, 2489596804, 225274430, 2053790376, 3826175755, 2466906013, 167816743, 2097651377, 4027552580, 2265490386, 503444072, 1762050814, 4150417245, 2154129355, 426522225, 1852507879, 4275313526, 2312317920, 282753626, 1742555852, 4189708143, 2394877945, 397917763, 1622183637, 3604390888, 2714866558, 953729732, 1340076626, 3518719985, 2797360999, 1068828381, 1219638859, 3624741850, 2936675148, 906185462, 1090812512, 3747672003, 2825379669, 829329135, 1181335161, 3412177804, 3160834842, 628085408, 1382605366, 3423369109, 3138078467, 570562233, 1426400815, 3317316542, 2998733608, 733239954, 1555261956, 3268935591, 3050360625, 752459403, 1541320221, 2607071920, 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 1913087877, 83908371, 2512341634, 3803740692, 2075208622, 213261112, 2463272603, 3855990285, 2094854071, 198958881, 2262029012, 4057260610, 1759359992, 534414190, 2176718541, 4139329115, 1873836001, 414664567, 2282248934, 4279200368, 1711684554, 285281116, 2405801727, 4167216745, 1634467795, 376229701, 2685067896, 3608007406, 1308918612, 956543938, 2808555105, 3495958263, 1231636301, 1047427035, 2932959818, 3654703836, 1088359270, 936918e3, 2847714899, 3736837829, 1202900863, 817233897, 3183342108, 3401237130, 1404277552, 615818150, 3134207493, 3453421203, 1423857449, 601450431, 3009837614, 3294710456, 1567103746, 711928724, 3020668471, 3272380065, 1510334235, 755167117];
                typeof et > "u" && (et = 0), et ^= -1;
                for (var jt = 0, Wt = G.length; jt < Wt; jt++) et = et >>> 8 ^ Bt[255 & (et ^ (dt ? G[jt] : G.charCodeAt(jt)))];
                return -1 ^ et
            },
            clone: function() {
                var M = new JSZip;
                for (var G in this) "function" != typeof this[G] && (M[G] = this[G]);
                return M
            },
            utf8encode: function(M) {
                if (p) {
                    var G = p.encode(M);
                    return JSZip.utils.transformTo("string", G)
                }
                if (JSZip.support.nodebuffer) return JSZip.utils.transformTo("string", new Buffer(M, "utf-8"));
                for (var et = [], dt = 0, Bt = 0; Bt < M.length; Bt++) {
                    var wt = M.charCodeAt(Bt);
                    wt < 128 ? et[dt++] = String.fromCharCode(wt) : wt > 127 && wt < 2048 ? (et[dt++] = String.fromCharCode(wt >> 6 | 192), et[dt++] = String.fromCharCode(63 & wt | 128)) : (et[dt++] = String.fromCharCode(wt >> 12 | 224), et[dt++] = String.fromCharCode(wt >> 6 & 63 | 128), et[dt++] = String.fromCharCode(63 & wt | 128))
                }
                return et.join("")
            },
            utf8decode: function(M) {
                var G = [],
                    et = 0,
                    Bt = "string" !== JSZip.utils.getTypeOf(M),
                    wt = 0,
                    _ = 0,
                    jt = 0,
                    Wt = 0;
                if (R) return R.decode(JSZip.utils.transformTo("uint8array", M));
                if (JSZip.support.nodebuffer) return JSZip.utils.transformTo("nodebuffer", M).toString("utf-8");
                for (; wt < M.length;)(_ = Bt ? M[wt] : M.charCodeAt(wt)) < 128 ? (G[et++] = String.fromCharCode(_), wt++) : _ > 191 && _ < 224 ? (jt = Bt ? M[wt + 1] : M.charCodeAt(wt + 1), G[et++] = String.fromCharCode((31 & _) << 6 | 63 & jt), wt += 2) : (jt = Bt ? M[wt + 1] : M.charCodeAt(wt + 1), Wt = Bt ? M[wt + 2] : M.charCodeAt(wt + 2), G[et++] = String.fromCharCode((15 & _) << 12 | (63 & jt) << 6 | 63 & Wt), wt += 3);
                return G.join("")
            }
        }
    }(), JSZip.compressions = {
        STORE: {
            magic: "\0\0",
            compress: function(p) {
                return p
            },
            uncompress: function(p) {
                return p
            },
            compressInputType: null,
            uncompressInputType: null
        }
    },
    function() {
        function p(P) {
            return P
        }

        function R(P, K) {
            for (var O = 0; O < P.length; ++O) K[O] = 255 & P.charCodeAt(O);
            return K
        }

        function y(P) {
            var K = 65536,
                O = [],
                J = P.length,
                mt = JSZip.utils.getTypeOf(P),
                Z = 0,
                A = !0;
            try {
                switch (mt) {
                    case "uint8array":
                        String.fromCharCode.apply(null, new Uint8Array(0));
                        break;
                    case "nodebuffer":
                        String.fromCharCode.apply(null, new Buffer(0))
                }
            } catch {
                A = !1
            }
            if (!A) {
                for (var q = "", tt = 0; tt < P.length; tt++) q += String.fromCharCode(P[tt]);
                return q
            }
            for (; Z < J && K > 1;) try {
                O.push(String.fromCharCode.apply(null, "array" === mt || "nodebuffer" === mt ? P.slice(Z, Math.min(Z + K, J)) : P.subarray(Z, Math.min(Z + K, J)))), Z += K
            } catch {
                K = Math.floor(K / 2)
            }
            return O.join("")
        }

        function I(P, K) {
            for (var O = 0; O < P.length; O++) K[O] = P[O];
            return K
        }
        JSZip.utils = {
            string2binary: function(P) {
                for (var K = "", O = 0; O < P.length; O++) K += String.fromCharCode(255 & P.charCodeAt(O));
                return K
            },
            string2Uint8Array: function(P) {
                return JSZip.utils.transformTo("uint8array", P)
            },
            uint8Array2String: function(P) {
                return JSZip.utils.transformTo("string", P)
            },
            arrayBuffer2Blob: function(P) {
                JSZip.utils.checkSupport("blob");
                try {
                    return new Blob([P], {
                        type: "application/zip"
                    })
                } catch {}
                try {
                    var O = new(window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder);
                    return O.append(P), O.getBlob("application/zip")
                } catch {}
                throw new Error("Bug : can't construct the Blob.")
            },
            string2Blob: function(P) {
                var K = JSZip.utils.transformTo("arraybuffer", P);
                return JSZip.utils.arrayBuffer2Blob(K)
            }
        };
        var H = {};
        H.string = {
            string: p,
            array: function(P) {
                return R(P, new Array(P.length))
            },
            arraybuffer: function(P) {
                return H.string.uint8array(P).buffer
            },
            uint8array: function(P) {
                return R(P, new Uint8Array(P.length))
            },
            nodebuffer: function(P) {
                return R(P, new Buffer(P.length))
            }
        }, H.array = {
            string: y,
            array: p,
            arraybuffer: function(P) {
                return new Uint8Array(P).buffer
            },
            uint8array: function(P) {
                return new Uint8Array(P)
            },
            nodebuffer: function(P) {
                return new Buffer(P)
            }
        }, H.arraybuffer = {
            string: function(P) {
                return y(new Uint8Array(P))
            },
            array: function(P) {
                return I(new Uint8Array(P), new Array(P.byteLength))
            },
            arraybuffer: p,
            uint8array: function(P) {
                return new Uint8Array(P)
            },
            nodebuffer: function(P) {
                return new Buffer(new Uint8Array(P))
            }
        }, H.uint8array = {
            string: y,
            array: function(P) {
                return I(P, new Array(P.length))
            },
            arraybuffer: function(P) {
                return P.buffer
            },
            uint8array: p,
            nodebuffer: function(P) {
                return new Buffer(P)
            }
        }, H.nodebuffer = {
            string: y,
            array: function(P) {
                return I(P, new Array(P.length))
            },
            arraybuffer: function(P) {
                return H.nodebuffer.uint8array(P).buffer
            },
            uint8array: function(P) {
                return I(P, new Uint8Array(P.length))
            },
            nodebuffer: p
        }, JSZip.utils.transformTo = function(P, K) {
            if (K || (K = ""), !P) return K;
            JSZip.utils.checkSupport(P);
            var O = JSZip.utils.getTypeOf(K);
            return H[O][P](K)
        }, JSZip.utils.getTypeOf = function(P) {
            return "string" == typeof P ? "string" : "[object Array]" === Object.prototype.toString.call(P) ? "array" : JSZip.support.nodebuffer && Buffer.isBuffer(P) ? "nodebuffer" : JSZip.support.uint8array && P instanceof Uint8Array ? "uint8array" : JSZip.support.arraybuffer && P instanceof ArrayBuffer ? "arraybuffer" : void 0
        }, JSZip.utils.isRegExp = function(P) {
            return "[object RegExp]" === Object.prototype.toString.call(P)
        }, JSZip.utils.checkSupport = function(P) {
            var K = !0;
            switch (P.toLowerCase()) {
                case "uint8array":
                    K = JSZip.support.uint8array;
                    break;
                case "arraybuffer":
                    K = JSZip.support.arraybuffer;
                    break;
                case "nodebuffer":
                    K = JSZip.support.nodebuffer;
                    break;
                case "blob":
                    K = JSZip.support.blob
            }
            if (!K) throw new Error(P + " is not supported by this browser")
        }
    }(), JSZip.CompressedObject = function() {
        this.compressedSize = 0, this.uncompressedSize = 0, this.crc32 = 0, this.compressionMethod = null, this.compressedContent = null
    }, JSZip.CompressedObject.prototype = {
        getContent: function() {
            return null
        },
        getCompressedContent: function() {
            return null
        }
    }, JSZip.base64 = function() {
        var p = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
        return {
            encode: function(R, y) {
                for (var H, P, K, O, J, mt, Z, I = "", A = 0; A < R.length;) O = (H = R.charCodeAt(A++)) >> 2, J = (3 & H) << 4 | (P = R.charCodeAt(A++)) >> 4, mt = (15 & P) << 2 | (K = R.charCodeAt(A++)) >> 6, Z = 63 & K, isNaN(P) ? mt = Z = 64 : isNaN(K) && (Z = 64), I = I + p.charAt(O) + p.charAt(J) + p.charAt(mt) + p.charAt(Z);
                return I
            },
            decode: function(R, y) {
                var P, K, O, J, mt, Z, I = "",
                    A = 0;
                for (R = R.replace(/[^A-Za-z0-9\+\/\=]/g, ""); A < R.length;) O = p.indexOf(R.charAt(A++)), P = (15 & (J = p.indexOf(R.charAt(A++)))) << 4 | (mt = p.indexOf(R.charAt(A++))) >> 2, K = (3 & mt) << 6 | (Z = p.indexOf(R.charAt(A++))), I += String.fromCharCode(O << 2 | J >> 4), 64 != mt && (I += String.fromCharCode(P)), 64 != Z && (I += String.fromCharCode(K));
                return I
            }
        }
    }(),
    function() {
        "use strict";
        if (!JSZip) throw "JSZip not defined";
        var p = {};
        (function() {
            (function() {
                var I = void 0,
                    H = !0,
                    P = this;

                function K(V, rt) {
                    var X, ut = V.split("."),
                        z = P;
                    !(ut[0] in z) && z.execScript && z.execScript("var " + ut[0]);
                    for (; ut.length && (X = ut.shift());) ut.length || rt === I ? z = z[X] ? z[X] : z[X] = {} : z[X] = rt
                }
                var O = typeof Uint8Array < "u" && typeof Uint16Array < "u" && typeof Uint32Array < "u";

                function J(V, rt) {
                    if (this.index = "number" == typeof rt ? rt : 0, this.d = 0, this.buffer = V instanceof(O ? Uint8Array : Array) ? V : new(O ? Uint8Array : Array)(32768), 2 * this.buffer.length <= this.index) throw Error("invalid index");
                    this.buffer.length <= this.index && mt(this)
                }

                function mt(V) {
                    var ut, rt = V.buffer,
                        z = rt.length,
                        X = new(O ? Uint8Array : Array)(z << 1);
                    if (O) X.set(rt);
                    else
                        for (ut = 0; ut < z; ++ut) X[ut] = rt[ut];
                    return V.buffer = X
                }
                J.prototype.a = function(V, rt, ut) {
                    var Gt, z = this.buffer,
                        X = this.index,
                        _t = this.d,
                        Mt = z[X];
                    if (ut && 1 < rt && (V = 8 < rt ? (lt[255 & V] << 24 | lt[V >>> 8 & 255] << 16 | lt[V >>> 16 & 255] << 8 | lt[V >>> 24 & 255]) >> 32 - rt : lt[V] >> 8 - rt), 8 > rt + _t) Mt = Mt << rt | V, _t += rt;
                    else
                        for (Gt = 0; Gt < rt; ++Gt) Mt = Mt << 1 | V >> rt - Gt - 1 & 1, 8 == ++_t && (_t = 0, z[X++] = lt[Mt], Mt = 0, X === z.length && (z = mt(this)));
                    z[X] = Mt, this.buffer = z, this.d = _t, this.index = X
                }, J.prototype.finish = function() {
                    var ut, V = this.buffer,
                        rt = this.index;
                    return 0 < this.d && (V[rt] <<= 8 - this.d, V[rt] = lt[V[rt]], rt++), O ? ut = V.subarray(0, rt) : (V.length = rt, ut = V), ut
                };
                var A, Z = new(O ? Uint8Array : Array)(256);
                for (A = 0; 256 > A; ++A) {
                    for (var q = nt = A, tt = 7, nt = nt >>> 1; nt; nt >>>= 1) q <<= 1, q |= 1 & nt, --tt;
                    Z[A] = (q << tt & 255) >>> 0
                }
                var lt = Z;

                function M(V) {
                    this.buffer = new(O ? Uint16Array : Array)(2 * V), this.length = 0
                }

                function G(V, rt) {
                    this.e = et, this.f = 0, this.input = O && V instanceof Array ? new Uint8Array(V) : V, this.c = 0, rt && (rt.lazy && (this.f = rt.lazy), "number" == typeof rt.compressionType && (this.e = rt.compressionType), rt.outputBuffer && (this.b = O && rt.outputBuffer instanceof Array ? new Uint8Array(rt.outputBuffer) : rt.outputBuffer), "number" == typeof rt.outputIndex && (this.c = rt.outputIndex)), this.b || (this.b = new(O ? Uint8Array : Array)(32768))
                }
                M.prototype.getParent = function(V) {
                    return 2 * ((V - 2) / 4 | 0)
                }, M.prototype.push = function(V, rt) {
                    var ut, z, _t, X = this.buffer;
                    for (ut = this.length, X[this.length++] = rt, X[this.length++] = V; 0 < ut && (z = this.getParent(ut), X[ut] > X[z]);) _t = X[ut], X[ut] = X[z], X[z] = _t, _t = X[ut + 1], X[ut + 1] = X[z + 1], X[z + 1] = _t, ut = z;
                    return this.length
                }, M.prototype.pop = function() {
                    var V, rt, z, X, _t, ut = this.buffer;
                    for (rt = ut[0], V = ut[1], this.length -= 2, ut[0] = ut[this.length], ut[1] = ut[this.length + 1], _t = 0; !((X = 2 * _t + 2) >= this.length) && (X + 2 < this.length && ut[X + 2] > ut[X] && (X += 2), ut[X] > ut[_t]);) z = ut[_t], ut[_t] = ut[X], ut[X] = z, z = ut[_t + 1], ut[_t + 1] = ut[X + 1], ut[X + 1] = z, _t = X;
                    return {
                        index: V,
                        value: rt,
                        length: this.length
                    }
                };
                var Bt, et = 2,
                    dt = [];
                for (Bt = 0; 288 > Bt; Bt++) switch (H) {
                    case 143 >= Bt:
                        dt.push([Bt + 48, 8]);
                        break;
                    case 255 >= Bt:
                        dt.push([Bt - 144 + 400, 9]);
                        break;
                    case 279 >= Bt:
                        dt.push([Bt - 256 + 0, 7]);
                        break;
                    case 287 >= Bt:
                        dt.push([Bt - 280 + 192, 8]);
                        break;
                    default:
                        throw "invalid literal: " + Bt
                }

                function wt(V, rt) {
                    this.length = V, this.g = rt
                }
                G.prototype.h = function() {
                    var V, rt, ut, z, X = this.input;
                    switch (this.e) {
                        case 0:
                            for (ut = 0, z = X.length; ut < z;) {
                                var xt, pt, _t = rt = O ? X.subarray(ut, ut + 65535) : X.slice(ut, ut + 65535),
                                    Mt = (ut += rt.length) === z,
                                    Tt = I,
                                    Dt = I,
                                    ce = this.b,
                                    le = this.c;
                                if (O) {
                                    for (ce = new Uint8Array(this.b.buffer); ce.length <= le + _t.length + 5;) ce = new Uint8Array(ce.length << 1);
                                    ce.set(this.b)
                                }
                                if (ce[le++] = 0 | (Mt ? 1 : 0), pt = 65536 + ~(xt = _t.length) & 65535, ce[le++] = 255 & xt, ce[le++] = xt >>> 8 & 255, ce[le++] = 255 & pt, ce[le++] = pt >>> 8 & 255, O) ce.set(_t, le), ce = ce.subarray(0, le += _t.length);
                                else {
                                    for (Tt = 0, Dt = _t.length; Tt < Dt; ++Tt) ce[le++] = _t[Tt];
                                    ce.length = le
                                }
                                this.c = le, this.b = ce
                            }
                            break;
                        case 1:
                            var Ce = new J(O ? new Uint8Array(this.b.buffer) : this.b, this.c);
                            Ce.a(1, 1, H), Ce.a(1, 2, H);
                            var dn, Me, cn, Ne = jt(this, X);
                            for (dn = 0, Me = Ne.length; dn < Me; dn++)
                                if (J.prototype.a.apply(Ce, dt[cn = Ne[dn]]), 256 < cn) Ce.a(Ne[++dn], Ne[++dn], H), Ce.a(Ne[++dn], 5), Ce.a(Ne[++dn], Ne[++dn], H);
                                else if (256 === cn) break;
                            this.b = Ce.finish(), this.c = this.b.length;
                            break;
                        case et:
                            var Wn, te, Pn, En, Be, gi, mi, ki, Ni, Pi, Xn, bi, Bi, mn, v, sn = new J(O ? new Uint8Array(this.b.buffer) : this.b, this.c),
                                qe = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15],
                                Un = Array(19);
                            for (Wn = et, sn.a(1, 1, H), sn.a(Wn, 2, H), te = jt(this, X), mi = Qt(gi = be(this.j, 15)), Ni = Qt(ki = be(this.i, 7)), Pn = 286; 257 < Pn && 0 === gi[Pn - 1]; Pn--);
                            for (En = 30; 1 < En && 0 === ki[En - 1]; En--);
                            var gn, si, Ke, Ai, Qe, hi, wr = Pn,
                                ci = En,
                                Ei = new(O ? Uint32Array : Array)(wr + ci),
                                An = new(O ? Uint32Array : Array)(316),
                                Jn = new(O ? Uint8Array : Array)(19);
                            for (gn = si = 0; gn < wr; gn++) Ei[si++] = gi[gn];
                            for (gn = 0; gn < ci; gn++) Ei[si++] = ki[gn];
                            if (!O)
                                for (gn = 0, Ai = Jn.length; gn < Ai; ++gn) Jn[gn] = 0;
                            for (gn = Qe = 0, Ai = Ei.length; gn < Ai; gn += si) {
                                for (si = 1; gn + si < Ai && Ei[gn + si] === Ei[gn]; ++si);
                                if (Ke = si, 0 === Ei[gn])
                                    if (3 > Ke)
                                        for (; 0 < Ke--;) An[Qe++] = 0, Jn[0]++;
                                    else
                                        for (; 0 < Ke;)(hi = 138 > Ke ? Ke : 138) > Ke - 3 && hi < Ke && (hi = Ke - 3), 10 >= hi ? (An[Qe++] = 17, An[Qe++] = hi - 3, Jn[17]++) : (An[Qe++] = 18, An[Qe++] = hi - 11, Jn[18]++), Ke -= hi;
                                else if (An[Qe++] = Ei[gn], Jn[Ei[gn]]++, 3 > --Ke)
                                    for (; 0 < Ke--;) An[Qe++] = Ei[gn], Jn[Ei[gn]]++;
                                else
                                    for (; 0 < Ke;)(hi = 6 > Ke ? Ke : 6) > Ke - 3 && hi < Ke && (hi = Ke - 3), An[Qe++] = 16, An[Qe++] = hi - 3, Jn[16]++, Ke -= hi
                            }
                            for (V = O ? An.subarray(0, Qe) : An.slice(0, Qe), Pi = be(Jn, 7), mn = 0; 19 > mn; mn++) Un[mn] = Pi[qe[mn]];
                            for (Be = 19; 4 < Be && 0 === Un[Be - 1]; Be--);
                            for (Xn = Qt(Pi), sn.a(Pn - 257, 5, H), sn.a(En - 1, 5, H), sn.a(Be - 4, 4, H), mn = 0; mn < Be; mn++) sn.a(Un[mn], 3, H);
                            for (mn = 0, v = V.length; mn < v; mn++)
                                if (sn.a(Xn[bi = V[mn]], Pi[bi], H), 16 <= bi) {
                                    switch (mn++, bi) {
                                        case 16:
                                            Bi = 2;
                                            break;
                                        case 17:
                                            Bi = 3;
                                            break;
                                        case 18:
                                            Bi = 7;
                                            break;
                                        default:
                                            throw "invalid code: " + bi
                                    }
                                    sn.a(V[mn], Bi, H)
                                }
                            var $n, Hi, Fn, wi, Cr, us, es, pr, Pr = [mi, gi],
                                oi = [Ni, ki];
                            for (Cr = Pr[0], us = Pr[1], es = oi[0], pr = oi[1], $n = 0, Hi = te.length; $n < Hi; ++$n)
                                if (sn.a(Cr[Fn = te[$n]], us[Fn], H), 256 < Fn) sn.a(te[++$n], te[++$n], H), wi = te[++$n], sn.a(es[wi], pr[wi], H), sn.a(te[++$n], te[++$n], H);
                                else if (256 === Fn) break;
                            this.b = sn.finish(), this.c = this.b.length;
                            break;
                        default:
                            throw "invalid compression type"
                    }
                    return this.b
                };
                var _ = function() {
                        function V(X) {
                            switch (H) {
                                case 3 === X:
                                    return [257, X - 3, 0];
                                case 4 === X:
                                    return [258, X - 4, 0];
                                case 5 === X:
                                    return [259, X - 5, 0];
                                case 6 === X:
                                    return [260, X - 6, 0];
                                case 7 === X:
                                    return [261, X - 7, 0];
                                case 8 === X:
                                    return [262, X - 8, 0];
                                case 9 === X:
                                    return [263, X - 9, 0];
                                case 10 === X:
                                    return [264, X - 10, 0];
                                case 12 >= X:
                                    return [265, X - 11, 1];
                                case 14 >= X:
                                    return [266, X - 13, 1];
                                case 16 >= X:
                                    return [267, X - 15, 1];
                                case 18 >= X:
                                    return [268, X - 17, 1];
                                case 22 >= X:
                                    return [269, X - 19, 2];
                                case 26 >= X:
                                    return [270, X - 23, 2];
                                case 30 >= X:
                                    return [271, X - 27, 2];
                                case 34 >= X:
                                    return [272, X - 31, 2];
                                case 42 >= X:
                                    return [273, X - 35, 3];
                                case 50 >= X:
                                    return [274, X - 43, 3];
                                case 58 >= X:
                                    return [275, X - 51, 3];
                                case 66 >= X:
                                    return [276, X - 59, 3];
                                case 82 >= X:
                                    return [277, X - 67, 4];
                                case 98 >= X:
                                    return [278, X - 83, 4];
                                case 114 >= X:
                                    return [279, X - 99, 4];
                                case 130 >= X:
                                    return [280, X - 115, 4];
                                case 162 >= X:
                                    return [281, X - 131, 5];
                                case 194 >= X:
                                    return [282, X - 163, 5];
                                case 226 >= X:
                                    return [283, X - 195, 5];
                                case 257 >= X:
                                    return [284, X - 227, 5];
                                case 258 === X:
                                    return [285, X - 258, 0];
                                default:
                                    throw "invalid length: " + X
                            }
                        }
                        var ut, z, rt = [];
                        for (ut = 3; 258 >= ut; ut++) z = V(ut), rt[ut] = z[2] << 24 | z[1] << 16 | z[0];
                        return rt
                    }(),
                    Jt = O ? new Uint32Array(_) : _;

                function jt(V, rt) {
                    function ut(sn, Wn) {
                        var Be, qe, gi, mi, te = sn.g,
                            Pn = [],
                            En = 0;
                        switch (Pn[En++] = 65535 & (Be = Jt[sn.length]), Pn[En++] = Be >> 16 & 255, Pn[En++] = Be >> 24, H) {
                            case 1 === te:
                                qe = [0, te - 1, 0];
                                break;
                            case 2 === te:
                                qe = [1, te - 2, 0];
                                break;
                            case 3 === te:
                                qe = [2, te - 3, 0];
                                break;
                            case 4 === te:
                                qe = [3, te - 4, 0];
                                break;
                            case 6 >= te:
                                qe = [4, te - 5, 1];
                                break;
                            case 8 >= te:
                                qe = [5, te - 7, 1];
                                break;
                            case 12 >= te:
                                qe = [6, te - 9, 2];
                                break;
                            case 16 >= te:
                                qe = [7, te - 13, 2];
                                break;
                            case 24 >= te:
                                qe = [8, te - 17, 3];
                                break;
                            case 32 >= te:
                                qe = [9, te - 25, 3];
                                break;
                            case 48 >= te:
                                qe = [10, te - 33, 4];
                                break;
                            case 64 >= te:
                                qe = [11, te - 49, 4];
                                break;
                            case 96 >= te:
                                qe = [12, te - 65, 5];
                                break;
                            case 128 >= te:
                                qe = [13, te - 97, 5];
                                break;
                            case 192 >= te:
                                qe = [14, te - 129, 6];
                                break;
                            case 256 >= te:
                                qe = [15, te - 193, 6];
                                break;
                            case 384 >= te:
                                qe = [16, te - 257, 7];
                                break;
                            case 512 >= te:
                                qe = [17, te - 385, 7];
                                break;
                            case 768 >= te:
                                qe = [18, te - 513, 8];
                                break;
                            case 1024 >= te:
                                qe = [19, te - 769, 8];
                                break;
                            case 1536 >= te:
                                qe = [20, te - 1025, 9];
                                break;
                            case 2048 >= te:
                                qe = [21, te - 1537, 9];
                                break;
                            case 3072 >= te:
                                qe = [22, te - 2049, 10];
                                break;
                            case 4096 >= te:
                                qe = [23, te - 3073, 10];
                                break;
                            case 6144 >= te:
                                qe = [24, te - 4097, 11];
                                break;
                            case 8192 >= te:
                                qe = [25, te - 6145, 11];
                                break;
                            case 12288 >= te:
                                qe = [26, te - 8193, 12];
                                break;
                            case 16384 >= te:
                                qe = [27, te - 12289, 12];
                                break;
                            case 24576 >= te:
                                qe = [28, te - 16385, 13];
                                break;
                            case 32768 >= te:
                                qe = [29, te - 24577, 13];
                                break;
                            default:
                                throw "invalid distance"
                        }
                        for (Pn[En++] = (Be = qe)[0], Pn[En++] = Be[1], Pn[En++] = Be[2], gi = 0, mi = Pn.length; gi < mi; ++gi) ce[le++] = Pn[gi];
                        Ne[Pn[0]]++, dn[Pn[3]]++, Ce = sn.length + Wn - 1, Dt = null
                    }
                    var z, X, _t, Mt, Gt, pt, Tt, Dt, cn, xt = {},
                        ce = O ? new Uint16Array(2 * rt.length) : [],
                        le = 0,
                        Ce = 0,
                        Ne = new(O ? Uint32Array : Array)(286),
                        dn = new(O ? Uint32Array : Array)(30),
                        Me = V.f;
                    if (!O) {
                        for (_t = 0; 285 >= _t;) Ne[_t++] = 0;
                        for (_t = 0; 29 >= _t;) dn[_t++] = 0
                    }
                    for (Ne[256] = 1, z = 0, X = rt.length; z < X; ++z) {
                        for (_t = Gt = 0, Mt = 3; _t < Mt && z + _t !== X; ++_t) Gt = Gt << 8 | rt[z + _t];
                        if (xt[Gt] === I && (xt[Gt] = []), pt = xt[Gt], !(0 < Ce--)) {
                            for (; 0 < pt.length && 32768 < z - pt[0];) pt.shift();
                            if (z + 3 >= X) {
                                for (Dt && ut(Dt, -1), _t = 0, Mt = X - z; _t < Mt; ++_t) ce[le++] = cn = rt[z + _t], ++Ne[cn];
                                break
                            }
                            0 < pt.length ? (Tt = Wt(rt, z, pt), Dt ? Dt.length < Tt.length ? (ce[le++] = cn = rt[z - 1], ++Ne[cn], ut(Tt, 0)) : ut(Dt, -1) : Tt.length < Me ? Dt = Tt : ut(Tt, 0)) : Dt ? ut(Dt, -1) : (ce[le++] = cn = rt[z], ++Ne[cn])
                        }
                        pt.push(z)
                    }
                    return ce[le++] = 256, Ne[256]++, V.j = Ne, V.i = dn, O ? ce.subarray(0, le) : ce
                }

                function Wt(V, rt, ut) {
                    var z, X, Mt, Gt, xt, pt, _t = 0,
                        Tt = V.length;
                    Gt = 0, pt = ut.length;
                    t: for (; Gt < pt; Gt++) {
                        if (z = ut[pt - Gt - 1], Mt = 3, 3 < _t) {
                            for (xt = _t; 3 < xt; xt--)
                                if (V[z + xt - 1] !== V[rt + xt - 1]) continue t;
                            Mt = _t
                        }
                        for (; 258 > Mt && rt + Mt < Tt && V[z + Mt] === V[rt + Mt];) ++Mt;
                        if (Mt > _t && (X = z, _t = Mt), 258 === Mt) break
                    }
                    return new wt(_t, rt - X)
                }

                function be(V, rt) {
                    var _t, Mt, Gt, xt, pt, ut = V.length,
                        z = new M(572),
                        X = new(O ? Uint8Array : Array)(ut);
                    if (!O)
                        for (xt = 0; xt < ut; xt++) X[xt] = 0;
                    for (xt = 0; xt < ut; ++xt) 0 < V[xt] && z.push(xt, V[xt]);
                    if (_t = Array(z.length / 2), Mt = new(O ? Uint32Array : Array)(z.length / 2), 1 === _t.length) return X[z.pop().index] = 1, X;
                    for (xt = 0, pt = z.length / 2; xt < pt; ++xt) _t[xt] = z.pop(), Mt[xt] = _t[xt].value;
                    for (Gt = function Kt(V, rt, ut) {
                            function z(Me) {
                                var cn = xt[Me][pt[Me]];
                                cn === rt ? (z(Me + 1), z(Me + 1)) : --Mt[cn], ++pt[Me]
                            }
                            var ce, le, Ce, Ne, dn, X = new(O ? Uint16Array : Array)(ut),
                                _t = new(O ? Uint8Array : Array)(ut),
                                Mt = new(O ? Uint8Array : Array)(rt),
                                Gt = Array(ut),
                                xt = Array(ut),
                                pt = Array(ut),
                                Tt = (1 << ut) - rt,
                                Dt = 1 << ut - 1;
                            for (X[ut - 1] = rt, le = 0; le < ut; ++le) Tt < Dt ? _t[le] = 0 : (_t[le] = 1, Tt -= Dt), Tt <<= 1, X[ut - 2 - le] = (X[ut - 1 - le] / 2 | 0) + rt;
                            for (X[0] = _t[0], Gt[0] = Array(X[0]), xt[0] = Array(X[0]), le = 1; le < ut; ++le) X[le] > 2 * X[le - 1] + _t[le] && (X[le] = 2 * X[le - 1] + _t[le]), Gt[le] = Array(X[le]), xt[le] = Array(X[le]);
                            for (ce = 0; ce < rt; ++ce) Mt[ce] = ut;
                            for (Ce = 0; Ce < X[ut - 1]; ++Ce) Gt[ut - 1][Ce] = V[Ce], xt[ut - 1][Ce] = Ce;
                            for (ce = 0; ce < ut; ++ce) pt[ce] = 0;
                            for (1 === _t[ut - 1] && (--Mt[0], ++pt[ut - 1]), le = ut - 2; 0 <= le; --le) {
                                for (Ne = ce = 0, dn = pt[le + 1], Ce = 0; Ce < X[le]; Ce++)(Ne = Gt[le + 1][dn] + Gt[le + 1][dn + 1]) > V[ce] ? (Gt[le][Ce] = Ne, xt[le][Ce] = rt, dn += 2) : (Gt[le][Ce] = V[ce], xt[le][Ce] = ce, ++ce);
                                pt[le] = 0, 1 === _t[le] && z(le)
                            }
                            return Mt
                        }(Mt, Mt.length, rt), xt = 0, pt = _t.length; xt < pt; ++xt) X[_t[xt].index] = Gt[xt];
                    return X
                }

                function Qt(V) {
                    var _t, Mt, Gt, xt, rt = new(O ? Uint16Array : Array)(V.length),
                        ut = [],
                        z = [],
                        X = 0;
                    for (_t = 0, Mt = V.length; _t < Mt; _t++) ut[V[_t]] = 1 + (0 | ut[V[_t]]);
                    for (_t = 1, Mt = 16; _t <= Mt; _t++) z[_t] = X, X += 0 | ut[_t], X <<= 1;
                    for (_t = 0, Mt = V.length; _t < Mt; _t++)
                        for (X = z[V[_t]], z[V[_t]] += 1, Gt = rt[_t] = 0, xt = V[_t]; Gt < xt; Gt++) rt[_t] = rt[_t] << 1 | 1 & X, X >>>= 1;
                    return rt
                }
                K("Zlib.RawDeflate", G), K("Zlib.RawDeflate.prototype.compress", G.prototype.h);
                var Yt, it, ot, St, Ft = {
                    NONE: 0,
                    FIXED: 1,
                    DYNAMIC: et
                };
                if (Object.keys) Yt = Object.keys(Ft);
                else
                    for (it in Yt = [], ot = 0, Ft) Yt[ot++] = it;
                for (ot = 0, St = Yt.length; ot < St; ++ot) K("Zlib.RawDeflate.CompressionType." + (it = Yt[ot]), Ft[it])
            }).call(this)
        }).call(p);
        var R = function(I) {
                return new p.Zlib.RawDeflate(I).compress()
            },
            y = typeof Uint8Array < "u" && typeof Uint16Array < "u" && typeof Uint32Array < "u";
        JSZip.compressions.DEFLATE ? (JSZip.compressions.DEFLATE.compress = R, JSZip.compressions.DEFLATE.compressInputType = y ? "uint8array" : "array") : JSZip.compressions.DEFLATE = {
            magic: "\b\0",
            compress: R,
            compressInputType: y ? "uint8array" : "array"
        }
    }(),
    function() {
        "use strict";
        if (!JSZip) throw "JSZip not defined";
        var p = {};
        (function() {
            (function() {
                var I = void 0,
                    H = this;

                function P(z, X) {
                    var Gt, _t = z.split("."),
                        Mt = H;
                    !(_t[0] in Mt) && Mt.execScript && Mt.execScript("var " + _t[0]);
                    for (; _t.length && (Gt = _t.shift());) _t.length || X === I ? Mt = Mt[Gt] ? Mt[Gt] : Mt[Gt] = {} : Mt[Gt] = X
                }
                var K = typeof Uint8Array < "u" && typeof Uint16Array < "u" && typeof Uint32Array < "u";

                function O(z) {
                    var Gt, xt, pt, Tt, Dt, ce, le, Ce, Ne, X = z.length,
                        _t = 0,
                        Mt = Number.POSITIVE_INFINITY;
                    for (Ce = 0; Ce < X; ++Ce) z[Ce] > _t && (_t = z[Ce]), z[Ce] < Mt && (Mt = z[Ce]);
                    for (Gt = 1 << _t, xt = new(K ? Uint32Array : Array)(Gt), pt = 1, Tt = 0, Dt = 2; pt <= _t;) {
                        for (Ce = 0; Ce < X; ++Ce)
                            if (z[Ce] === pt) {
                                for (ce = 0, le = Tt, Ne = 0; Ne < pt; ++Ne) ce = ce << 1 | 1 & le, le >>= 1;
                                for (Ne = ce; Ne < Gt; Ne += Dt) xt[Ne] = pt << 16 | Ce;
                                ++Tt
                            }++pt, Tt <<= 1, Dt <<= 1
                    }
                    return [xt, _t, Mt]
                }

                function J(z, X) {
                    switch (this.g = [], this.h = 32768, this.c = this.f = this.d = this.k = 0, this.input = K ? new Uint8Array(z) : z, this.l = !1, this.i = Z, this.p = !1, (X || !(X = {})) && (X.index && (this.d = X.index), X.bufferSize && (this.h = X.bufferSize), X.bufferType && (this.i = X.bufferType), X.resize && (this.p = X.resize)), this.i) {
                        case mt:
                            this.a = 32768, this.b = new(K ? Uint8Array : Array)(32768 + this.h + 258);
                            break;
                        case Z:
                            this.a = 0, this.b = new(K ? Uint8Array : Array)(this.h), this.e = this.u, this.m = this.r, this.j = this.s;
                            break;
                        default:
                            throw Error("invalid inflate mode")
                    }
                }
                var mt = 0,
                    Z = 1;
                J.prototype.t = function() {
                    for (; !this.l;) {
                        var z = Ft(this, 3);
                        switch (1 & z && (this.l = !0), z >>>= 1) {
                            case 0:
                                var X = this.input,
                                    _t = this.d,
                                    Mt = this.b,
                                    Gt = this.a,
                                    xt = I,
                                    pt = I,
                                    Tt = I,
                                    Dt = Mt.length,
                                    ce = I;
                                if (this.c = this.f = 0, (xt = X[_t++]) === I) throw Error("invalid uncompressed block header: LEN (first byte)");
                                if (pt = xt, (xt = X[_t++]) === I) throw Error("invalid uncompressed block header: LEN (second byte)");
                                if (pt |= xt << 8, (xt = X[_t++]) === I) throw Error("invalid uncompressed block header: NLEN (first byte)");
                                if (Tt = xt, (xt = X[_t++]) === I) throw Error("invalid uncompressed block header: NLEN (second byte)");
                                if (pt === ~(Tt |= xt << 8)) throw Error("invalid uncompressed block header: length verify");
                                if (_t + pt > X.length) throw Error("input buffer is broken");
                                switch (this.i) {
                                    case mt:
                                        for (; Gt + pt > Mt.length;) {
                                            if (pt -= ce = Dt - Gt, K) Mt.set(X.subarray(_t, _t + ce), Gt), Gt += ce, _t += ce;
                                            else
                                                for (; ce--;) Mt[Gt++] = X[_t++];
                                            this.a = Gt, Mt = this.e(), Gt = this.a
                                        }
                                        break;
                                    case Z:
                                        for (; Gt + pt > Mt.length;) Mt = this.e({
                                            o: 2
                                        });
                                        break;
                                    default:
                                        throw Error("invalid inflate mode")
                                }
                                if (K) Mt.set(X.subarray(_t, _t + pt), Gt), Gt += pt, _t += pt;
                                else
                                    for (; pt--;) Mt[Gt++] = X[_t++];
                                this.d = _t, this.a = Gt, this.b = Mt;
                                break;
                            case 1:
                                this.j(jt, Qt);
                                break;
                            case 2:
                                it(this);
                                break;
                            default:
                                throw Error("unknown BTYPE: " + z)
                        }
                    }
                    return this.m()
                };
                var _, Jt, A = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15],
                    q = K ? new Uint16Array(A) : A,
                    tt = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 258, 258],
                    nt = K ? new Uint16Array(tt) : tt,
                    lt = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0],
                    M = K ? new Uint8Array(lt) : lt,
                    G = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577],
                    et = K ? new Uint16Array(G) : G,
                    dt = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13],
                    Bt = K ? new Uint8Array(dt) : dt,
                    wt = new(K ? Uint8Array : Array)(288);
                for (_ = 0, Jt = wt.length; _ < Jt; ++_) wt[_] = 143 >= _ ? 8 : 255 >= _ ? 9 : 279 >= _ ? 7 : 8;
                var be, Kt, jt = O(wt),
                    Wt = new(K ? Uint8Array : Array)(30);
                for (be = 0, Kt = Wt.length; be < Kt; ++be) Wt[be] = 5;
                var Qt = O(Wt);

                function Ft(z, X) {
                    for (var pt, _t = z.f, Mt = z.c, Gt = z.input, xt = z.d; Mt < X;) {
                        if ((pt = Gt[xt++]) === I) throw Error("input buffer is broken");
                        _t |= pt << Mt, Mt += 8
                    }
                    return pt = _t & (1 << X) - 1, z.f = _t >>> X, z.c = Mt - X, z.d = xt, pt
                }

                function Yt(z, X) {
                    for (var Dt, ce, le, _t = z.f, Mt = z.c, Gt = z.input, xt = z.d, pt = X[0], Tt = X[1]; Mt < Tt && (Dt = Gt[xt++]) !== I;) _t |= Dt << Mt, Mt += 8;
                    return z.f = _t >> (le = (ce = pt[_t & (1 << Tt) - 1]) >>> 16), z.c = Mt - le, z.d = xt, 65535 & ce
                }

                function it(z) {
                    function X(le, Ce, Ne) {
                        var dn, Me, cn, sn;
                        for (sn = 0; sn < le;) switch (dn = Yt(this, Ce), dn) {
                            case 16:
                                for (cn = 3 + Ft(this, 2); cn--;) Ne[sn++] = Me;
                                break;
                            case 17:
                                for (cn = 3 + Ft(this, 3); cn--;) Ne[sn++] = 0;
                                Me = 0;
                                break;
                            case 18:
                                for (cn = 11 + Ft(this, 7); cn--;) Ne[sn++] = 0;
                                Me = 0;
                                break;
                            default:
                                Me = Ne[sn++] = dn
                        }
                        return Ne
                    }
                    var pt, Tt, Dt, ce, _t = Ft(z, 5) + 257,
                        Mt = Ft(z, 5) + 1,
                        Gt = Ft(z, 4) + 4,
                        xt = new(K ? Uint8Array : Array)(q.length);
                    for (ce = 0; ce < Gt; ++ce) xt[q[ce]] = Ft(z, 3);
                    pt = O(xt), Tt = new(K ? Uint8Array : Array)(_t), Dt = new(K ? Uint8Array : Array)(Mt), z.j(O(X.call(z, _t, pt, Tt)), O(X.call(z, Mt, pt, Dt)))
                }
                J.prototype.j = function(z, X) {
                    var _t = this.b,
                        Mt = this.a;
                    this.n = z;
                    for (var xt, pt, Tt, Dt, Gt = _t.length - 258; 256 !== (xt = Yt(this, z));)
                        if (256 > xt) Mt >= Gt && (this.a = Mt, _t = this.e(), Mt = this.a), _t[Mt++] = xt;
                        else
                            for (Dt = nt[pt = xt - 257], 0 < M[pt] && (Dt += Ft(this, M[pt])), xt = Yt(this, X), Tt = et[xt], 0 < Bt[xt] && (Tt += Ft(this, Bt[xt])), Mt >= Gt && (this.a = Mt, _t = this.e(), Mt = this.a); Dt--;) _t[Mt] = _t[Mt++ - Tt];
                    for (; 8 <= this.c;) this.c -= 8, this.d--;
                    this.a = Mt
                }, J.prototype.s = function(z, X) {
                    var _t = this.b,
                        Mt = this.a;
                    this.n = z;
                    for (var xt, pt, Tt, Dt, Gt = _t.length; 256 !== (xt = Yt(this, z));)
                        if (256 > xt) Mt >= Gt && (Gt = (_t = this.e()).length), _t[Mt++] = xt;
                        else
                            for (Dt = nt[pt = xt - 257], 0 < M[pt] && (Dt += Ft(this, M[pt])), xt = Yt(this, X), Tt = et[xt], 0 < Bt[xt] && (Tt += Ft(this, Bt[xt])), Mt + Dt > Gt && (Gt = (_t = this.e()).length); Dt--;) _t[Mt] = _t[Mt++ - Tt];
                    for (; 8 <= this.c;) this.c -= 8, this.d--;
                    this.a = Mt
                }, J.prototype.e = function() {
                    var _t, Mt, z = new(K ? Uint8Array : Array)(this.a - 32768),
                        X = this.a - 32768,
                        Gt = this.b;
                    if (K) z.set(Gt.subarray(32768, z.length));
                    else
                        for (_t = 0, Mt = z.length; _t < Mt; ++_t) z[_t] = Gt[_t + 32768];
                    if (this.g.push(z), this.k += z.length, K) Gt.set(Gt.subarray(X, X + 32768));
                    else
                        for (_t = 0; 32768 > _t; ++_t) Gt[_t] = Gt[X + _t];
                    return this.a = 32768, Gt
                }, J.prototype.u = function(z) {
                    var X, Gt, xt, _t = this.input.length / this.d + 1 | 0,
                        Tt = this.b;
                    return z && ("number" == typeof z.o && (_t = z.o), "number" == typeof z.q && (_t += z.q)), Gt = 2 > _t ? (xt = (this.input.length - this.d) / this.n[2] / 2 * 258 | 0) < Tt.length ? Tt.length + xt : Tt.length << 1 : Tt.length * _t, K ? (X = new Uint8Array(Gt)).set(Tt) : X = Tt, this.b = X
                }, J.prototype.m = function() {
                    var Mt, xt, pt, Tt, Dt, z = 0,
                        X = this.b,
                        _t = this.g,
                        Gt = new(K ? Uint8Array : Array)(this.k + (this.a - 32768));
                    if (0 === _t.length) return K ? this.b.subarray(32768, this.a) : this.b.slice(32768, this.a);
                    for (xt = 0, pt = _t.length; xt < pt; ++xt)
                        for (Tt = 0, Dt = (Mt = _t[xt]).length; Tt < Dt; ++Tt) Gt[z++] = Mt[Tt];
                    for (xt = 32768, pt = this.a; xt < pt; ++xt) Gt[z++] = X[xt];
                    return this.g = [], this.buffer = Gt
                }, J.prototype.r = function() {
                    var z, X = this.a;
                    return K ? this.p ? (z = new Uint8Array(X)).set(this.b.subarray(0, X)) : z = this.b.subarray(0, X) : (this.b.length > X && (this.b.length = X), z = this.b), this.buffer = z
                }, P("Zlib.RawInflate", J), P("Zlib.RawInflate.prototype.decompress", J.prototype.t);
                var St, V, rt, ut, ot = {
                    ADAPTIVE: Z,
                    BLOCK: mt
                };
                if (Object.keys) St = Object.keys(ot);
                else
                    for (V in St = [], rt = 0, ot) St[rt++] = V;
                for (rt = 0, ut = St.length; rt < ut; ++rt) P("Zlib.RawInflate.BufferType." + (V = St[rt]), ot[V])
            }).call(this)
        }).call(p);
        var R = function(I) {
                return new p.Zlib.RawInflate(I).decompress()
            },
            y = typeof Uint8Array < "u" && typeof Uint16Array < "u" && typeof Uint32Array < "u";
        JSZip.compressions.DEFLATE ? (JSZip.compressions.DEFLATE.uncompress = R, JSZip.compressions.DEFLATE.uncompressInputType = y ? "uint8array" : "array") : JSZip.compressions.DEFLATE = {
            magic: "\b\0",
            uncompress: R,
            uncompressInputType: y ? "uint8array" : "array"
        }
    }(),
    function(p) {
        "use strict";
        var R = 65535,
            y = -1,
            I = function(A) {
                var tt, nt, q = "";
                for (nt = 0; nt < (A || "").length; nt++) q += "\\x" + ((tt = A.charCodeAt(nt)) < 16 ? "0" : "") + tt.toString(16).toUpperCase();
                return q
            };

        function P(A) {
            this.data = null, this.length = 0, this.index = 0
        }

        function K(A, q) {
            this.data = A, q || (this.data = JSZip.utils.string2binary(this.data)), this.length = this.data.length, this.index = 0
        }

        function O(A) {
            A && (this.data = A, this.length = this.data.length, this.index = 0)
        }

        function J(A) {
            this.data = A, this.length = this.data.length, this.index = 0
        }

        function mt(A, q) {
            this.options = A, this.loadOptions = q
        }

        function Z(A, q) {
            this.files = [], this.loadOptions = q, A && this.load(A)
        }
        P.prototype = {
            checkOffset: function(A) {
                this.checkIndex(this.index + A)
            },
            checkIndex: function(A) {
                if (this.length < A || A < 0) throw new Error("End of data reached (data length = " + this.length + ", asked index = " + A + "). Corrupted zip ?")
            },
            setIndex: function(A) {
                this.checkIndex(A), this.index = A
            },
            skip: function(A) {
                this.setIndex(this.index + A)
            },
            byteAt: function(A) {},
            readInt: function(A) {
                var tt, q = 0;
                for (this.checkOffset(A), tt = this.index + A - 1; tt >= this.index; tt--) q = (q << 8) + this.byteAt(tt);
                return this.index += A, q
            },
            readString: function(A) {
                return JSZip.utils.transformTo("string", this.readData(A))
            },
            readData: function(A) {},
            lastIndexOfSignature: function(A) {},
            readDate: function() {
                var A = this.readInt(4);
                return new Date(1980 + (A >> 25 & 127), (A >> 21 & 15) - 1, A >> 16 & 31, A >> 11 & 31, A >> 5 & 63, (31 & A) << 1)
            }
        }, (K.prototype = new P).byteAt = function(A) {
            return this.data.charCodeAt(A)
        }, K.prototype.lastIndexOfSignature = function(A) {
            return this.data.lastIndexOf(A)
        }, K.prototype.readData = function(A) {
            this.checkOffset(A);
            var q = this.data.slice(this.index, this.index + A);
            return this.index += A, q
        }, (O.prototype = new P).byteAt = function(A) {
            return this.data[A]
        }, O.prototype.lastIndexOfSignature = function(A) {
            for (var q = A.charCodeAt(0), tt = A.charCodeAt(1), nt = A.charCodeAt(2), lt = A.charCodeAt(3), M = this.length - 4; M >= 0; --M)
                if (this.data[M] === q && this.data[M + 1] === tt && this.data[M + 2] === nt && this.data[M + 3] === lt) return M;
            return -1
        }, O.prototype.readData = function(A) {
            this.checkOffset(A);
            var q = this.data.subarray(this.index, this.index + A);
            return this.index += A, q
        }, (J.prototype = new O).readData = function(A) {
            this.checkOffset(A);
            var q = this.data.slice(this.index, this.index + A);
            return this.index += A, q
        }, mt.prototype = {
            isEncrypted: function() {
                return 1 == (1 & this.bitFlag)
            },
            useUTF8: function() {
                return 2048 == (2048 & this.bitFlag)
            },
            prepareCompressedContent: function(A, q, tt) {
                return function() {
                    var nt = A.index;
                    A.setIndex(q);
                    var lt = A.readData(tt);
                    return A.setIndex(nt), lt
                }
            },
            prepareContent: function(A, q, tt, nt, lt) {
                return function() {
                    var M = JSZip.utils.transformTo(nt.uncompressInputType, this.getCompressedContent()),
                        G = nt.uncompress(M);
                    if (G.length !== lt) throw new Error("Bug : uncompressed data size mismatch");
                    return G
                }
            },
            readLocalPart: function(A) {
                var q, tt;
                if (A.skip(22), this.fileNameLength = A.readInt(2), tt = A.readInt(2), this.fileName = A.readString(this.fileNameLength), A.skip(tt), -1 == this.compressedSize || -1 == this.uncompressedSize) throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory (compressedSize == -1 || uncompressedSize == -1)");
                if (q = function(A) {
                        for (var q in JSZip.compressions)
                            if (JSZip.compressions.hasOwnProperty(q) && JSZip.compressions[q].magic === A) return JSZip.compressions[q];
                        return null
                    }(this.compressionMethod), null === q) throw new Error("Corrupted zip : compression " + I(this.compressionMethod) + " unknown (inner file : " + this.fileName + ")");
                if (this.decompressed = new JSZip.CompressedObject, this.decompressed.compressedSize = this.compressedSize, this.decompressed.uncompressedSize = this.uncompressedSize, this.decompressed.crc32 = this.crc32, this.decompressed.compressionMethod = this.compressionMethod, this.decompressed.getCompressedContent = this.prepareCompressedContent(A, A.index, this.compressedSize, q), this.decompressed.getContent = this.prepareContent(A, A.index, this.compressedSize, q, this.uncompressedSize), this.loadOptions.checkCRC32 && (this.decompressed = JSZip.utils.transformTo("string", this.decompressed.getContent()), JSZip.prototype.crc32(this.decompressed) !== this.crc32)) throw new Error("Corrupted zip : CRC32 mismatch")
            },
            readCentralPart: function(A) {
                if (this.versionMadeBy = A.readString(2), this.versionNeeded = A.readInt(2), this.bitFlag = A.readInt(2), this.compressionMethod = A.readString(2), this.date = A.readDate(), this.crc32 = A.readInt(4), this.compressedSize = A.readInt(4), this.uncompressedSize = A.readInt(4), this.fileNameLength = A.readInt(2), this.extraFieldsLength = A.readInt(2), this.fileCommentLength = A.readInt(2), this.diskNumberStart = A.readInt(2), this.internalFileAttributes = A.readInt(2), this.externalFileAttributes = A.readInt(4), this.localHeaderOffset = A.readInt(4), this.isEncrypted()) throw new Error("Encrypted zip are not supported");
                this.fileName = A.readString(this.fileNameLength), this.readExtraFields(A), this.parseZIP64ExtraField(A), this.fileComment = A.readString(this.fileCommentLength), this.dir = !!(16 & this.externalFileAttributes)
            },
            parseZIP64ExtraField: function(A) {
                if (this.extraFields[1]) {
                    var q = new K(this.extraFields[1].value);
                    this.uncompressedSize === y && (this.uncompressedSize = q.readInt(8)), this.compressedSize === y && (this.compressedSize = q.readInt(8)), this.localHeaderOffset === y && (this.localHeaderOffset = q.readInt(8)), this.diskNumberStart === y && (this.diskNumberStart = q.readInt(4))
                }
            },
            readExtraFields: function(A) {
                var tt, nt, lt, q = A.index;
                for (this.extraFields = this.extraFields || {}; A.index < q + this.extraFieldsLength;) tt = A.readInt(2), nt = A.readInt(2), lt = A.readString(nt), this.extraFields[tt] = {
                    id: tt,
                    length: nt,
                    value: lt
                }
            },
            handleUTF8: function() {
                this.useUTF8() && (this.fileName = JSZip.prototype.utf8decode(this.fileName), this.fileComment = JSZip.prototype.utf8decode(this.fileComment))
            }
        }, Z.prototype = {
            checkSignature: function(A) {
                var q = this.reader.readString(4);
                if (q !== A) throw new Error("Corrupted zip or bug : unexpected signature (" + I(q) + ", expected " + I(A) + ")")
            },
            readBlockEndOfCentral: function() {
                this.diskNumber = this.reader.readInt(2), this.diskWithCentralDirStart = this.reader.readInt(2), this.centralDirRecordsOnThisDisk = this.reader.readInt(2), this.centralDirRecords = this.reader.readInt(2), this.centralDirSize = this.reader.readInt(4), this.centralDirOffset = this.reader.readInt(4), this.zipCommentLength = this.reader.readInt(2), this.zipComment = this.reader.readString(this.zipCommentLength)
            },
            readBlockZip64EndOfCentral: function() {
                this.zip64EndOfCentralSize = this.reader.readInt(8), this.versionMadeBy = this.reader.readString(2), this.versionNeeded = this.reader.readInt(2), this.diskNumber = this.reader.readInt(4), this.diskWithCentralDirStart = this.reader.readInt(4), this.centralDirRecordsOnThisDisk = this.reader.readInt(8), this.centralDirRecords = this.reader.readInt(8), this.centralDirSize = this.reader.readInt(8), this.centralDirOffset = this.reader.readInt(8), this.zip64ExtensibleData = {};
                for (var tt, nt, lt, A = this.zip64EndOfCentralSize - 44; 0 < A;) tt = this.reader.readInt(2), nt = this.reader.readInt(4), lt = this.reader.readString(nt), this.zip64ExtensibleData[tt] = {
                    id: tt,
                    length: nt,
                    value: lt
                }
            },
            readBlockZip64EndOfCentralLocator: function() {
                if (this.diskWithZip64CentralDirStart = this.reader.readInt(4), this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8), this.disksCount = this.reader.readInt(4), this.disksCount > 1) throw new Error("Multi-volumes zip are not supported")
            },
            readLocalFiles: function() {
                var A, q;
                for (A = 0; A < this.files.length; A++) this.reader.setIndex((q = this.files[A]).localHeaderOffset), this.checkSignature(JSZip.signature.LOCAL_FILE_HEADER), q.readLocalPart(this.reader), q.handleUTF8()
            },
            readCentralDir: function() {
                var A;
                for (this.reader.setIndex(this.centralDirOffset); this.reader.readString(4) === JSZip.signature.CENTRAL_FILE_HEADER;)(A = new mt({
                    zip64: this.zip64
                }, this.loadOptions)).readCentralPart(this.reader), this.files.push(A)
            },
            readEndOfCentral: function() {
                var A = this.reader.lastIndexOfSignature(JSZip.signature.CENTRAL_DIRECTORY_END);
                if (-1 === A) throw new Error("Corrupted zip : can't find end of central directory");
                if (this.reader.setIndex(A), this.checkSignature(JSZip.signature.CENTRAL_DIRECTORY_END), this.readBlockEndOfCentral(), this.diskNumber === R || this.diskWithCentralDirStart === R || this.centralDirRecordsOnThisDisk === R || this.centralDirRecords === R || this.centralDirSize === y || this.centralDirOffset === y) {
                    if (this.zip64 = !0, -1 === (A = this.reader.lastIndexOfSignature(JSZip.signature.ZIP64_CENTRAL_DIRECTORY_LOCATOR))) throw new Error("Corrupted zip : can't find the ZIP64 end of central directory locator");
                    this.reader.setIndex(A), this.checkSignature(JSZip.signature.ZIP64_CENTRAL_DIRECTORY_LOCATOR), this.readBlockZip64EndOfCentralLocator(), this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir), this.checkSignature(JSZip.signature.ZIP64_CENTRAL_DIRECTORY_END), this.readBlockZip64EndOfCentral()
                }
            },
            prepareReader: function(A) {
                var q = JSZip.utils.getTypeOf(A);
                this.reader = "string" !== q || JSZip.support.uint8array ? "nodebuffer" === q ? new J(A) : new O(JSZip.utils.transformTo("uint8array", A)) : new K(A, this.loadOptions.optimizedBinaryString)
            },
            load: function(A) {
                this.prepareReader(A), this.readEndOfCentral(), this.readCentralDir(), this.readLocalFiles()
            }
        }, JSZip.prototype.load = function(A, q) {
            var tt, lt, M;
            for ((q = q || {}).base64 && (A = JSZip.base64.decode(A)), tt = new Z(A, q).files, lt = 0; lt < tt.length; lt++) this.file((M = tt[lt]).fileName, M.decompressed, {
                binary: !0,
                optimizedBinaryString: !0,
                date: M.date,
                dir: M.dir
            });
            return this
        }
    }(), typeof exports < "u" && (exports.JSZip = JSZip);
var XLSX = {};
! function(p) {
    p.version = "0.7.7";

    function H(m) {
        m,
        typeof cptable < "u" && cptable
    }

    function P(m) {
        for (var C = [], w = 0; w != m.length; ++w) C[w] = m.charCodeAt(w);
        return C
    }

    function K(m) {
        return typeof cptable < "u" && 255 === m.charCodeAt(0) && 254 === m.charCodeAt(1) ? cptable.utils.decode(1200, P(m.substr(2))) : m
    }
    typeof module < "u" && typeof require < "u" && (typeof cptable > "u" && (cptable = require("./dist/cpexcel")), cptable);
    var Bt, wt, O = {},
        J = function(C) {
            function w(ve) {
                for (var he = "", ie = ve.length - 1; ie >= 0;) he += ve.charAt(ie--);
                return he
            }

            function T(ve, he) {
                for (var ie = ""; ie.length < he;) ie += ve;
                return ie
            }

            function N(ve, he) {
                var ie = "" + ve;
                return ie.length >= he ? ie : T("0", he - ie.length) + ie
            }

            function at(ve, he) {
                var ie = "" + ve;
                return ie.length >= he ? ie : T(" ", he - ie.length) + ie
            }

            function bt(ve, he) {
                var ie = "" + ve;
                return ie.length >= he ? ie : ie + T(" ", he - ie.length)
            }
            C.version = "0.8.1";
            var ye = Math.pow(2, 32);

            function Ee(ve, he) {
                return ve > ye || ve < -ye ? function Ht(ve, he) {
                    var ie = "" + Math.round(ve);
                    return ie.length >= he ? ie : T("0", he - ie.length) + ie
                }(ve, he) : function ne(ve, he) {
                    var ie = "" + ve;
                    return ie.length >= he ? ie : T("0", he - ie.length) + ie
                }(Math.round(ve), he)
            }

            function ze(ve, he) {
                return ve.length >= 7 + he && 103 == (32 | ve.charCodeAt(he)) && 101 == (32 | ve.charCodeAt(he + 1)) && 110 == (32 | ve.charCodeAt(he + 2)) && 101 == (32 | ve.charCodeAt(he + 3)) && 114 == (32 | ve.charCodeAt(he + 4)) && 97 == (32 | ve.charCodeAt(he + 5)) && 108 == (32 | ve.charCodeAt(he + 6))
            }
            var Pe = [
                ["date1904", 0],
                ["output", ""],
                ["WTF", !1]
            ];

            function _n(ve) {
                for (var he = 0; he != Pe.length; ++he) void 0 === ve[Pe[he][0]] && (ve[Pe[he][0]] = Pe[he][1])
            }
            C.opts = Pe;
            var Vn = {
                    0: "General",
                    1: "0",
                    2: "0.00",
                    3: "#,##0",
                    4: "#,##0.00",
                    9: "0%",
                    10: "0.00%",
                    11: "0.00E+00",
                    12: "# ?/?",
                    13: "# ??/??",
                    14: "m/d/yy",
                    15: "d-mmm-yy",
                    16: "d-mmm",
                    17: "mmm-yy",
                    18: "h:mm AM/PM",
                    19: "h:mm:ss AM/PM",
                    20: "h:mm",
                    21: "h:mm:ss",
                    22: "m/d/yy h:mm",
                    37: "#,##0 ;(#,##0)",
                    38: "#,##0 ;[Red](#,##0)",
                    39: "#,##0.00;(#,##0.00)",
                    40: "#,##0.00;[Red](#,##0.00)",
                    45: "mm:ss",
                    46: "[h]:mm:ss",
                    47: "mmss.0",
                    48: "##0.0E+0",
                    49: "@",
                    56: '"\u4e0a\u5348/\u4e0b\u5348 "hh"\u6642"mm"\u5206"ss"\u79d2 "',
                    65535: "General"
                },
                Ln = [
                    ["Sun", "Sunday"],
                    ["Mon", "Monday"],
                    ["Tue", "Tuesday"],
                    ["Wed", "Wednesday"],
                    ["Thu", "Thursday"],
                    ["Fri", "Friday"],
                    ["Sat", "Saturday"]
                ],
                Sn = [
                    ["J", "Jan", "January"],
                    ["F", "Feb", "February"],
                    ["M", "Mar", "March"],
                    ["A", "Apr", "April"],
                    ["M", "May", "May"],
                    ["J", "Jun", "June"],
                    ["J", "Jul", "July"],
                    ["A", "Aug", "August"],
                    ["S", "Sep", "September"],
                    ["O", "Oct", "October"],
                    ["N", "Nov", "November"],
                    ["D", "Dec", "December"]
                ];

            function nn(ve, he, ie) {
                for (var Bn = ve < 0 ? -1 : 1, Vt = ve * Bn, tn = 0, Ut = 1, $e = 0, Tn = 1, F = 0, d = 0, B = Math.floor(Vt); F < he && ($e = (B = Math.floor(Vt)) * Ut + tn, d = B * F + Tn, !(Vt - B < 5e-10));) Vt = 1 / (Vt - B), tn = Ut, Ut = $e, Tn = F, F = d;
                if (d > he && (d = F, $e = Ut), d > he && (d = Tn, $e = tn), !ie) return [0, Bn * $e, d];
                if (0 === d) throw "Unexpected state: " + $e + " " + Ut + " " + tn + " " + d + " " + F + " " + Tn;
                var Y = Math.floor(Bn * $e / d);
                return [Y, Bn * $e - Y * d, d]
            }

            function Yn(ve, he) {
                return "" + ve
            }
            C._general_int = Yn;
            var yn = function() {
                var he = /\.(\d*[1-9])0+$/,
                    ie = /\.0*$/,
                    Bn = /\.(\d*[1-9])0+/,
                    Vt = /\.0*[Ee]/,
                    tn = /(E[+-])(\d)$/;

                function F(d) {
                    return d.indexOf(".") > -1 ? d.replace(ie, "").replace(he, ".$1") : d
                }
                return function(B, Y) {
                    var It, Ot = Math.floor(Math.log(Math.abs(B)) * Math.LOG10E);
                    return It = Ot >= -4 && Ot <= -1 ? B.toPrecision(10 + Ot) : Math.abs(Ot) <= 9 ? function Ut(d) {
                        var B = d < 0 ? 12 : 11,
                            Y = F(d.toFixed(12));
                        return Y.length <= B || (Y = d.toPrecision(10)).length <= B ? Y : d.toExponential(5)
                    }(B) : 10 === Ot ? B.toFixed(10).substr(0, 12) : function $e(d) {
                        var B = d.toFixed(11).replace(he, ".$1");
                        return B.length > (d < 0 ? 12 : 11) && (B = d.toPrecision(6)), B
                    }(B), F(function Tn(d) {
                        for (var B = 0; B != d.length; ++B)
                            if (101 == (32 | d.charCodeAt(B))) return d.replace(Bn, ".$1").replace(Vt, "E").replace("e", "E").replace(tn, "$10$2");
                        return d
                    }(It))
                }
            }();

            function kn(ve, he) {
                switch (typeof ve) {
                    case "string":
                        return ve;
                    case "boolean":
                        return ve ? "TRUE" : "FALSE";
                    case "number":
                        return (0 | ve) === ve ? Yn(ve) : yn(ve, he)
                }
                throw new Error("unsupported value in General format: " + ve)
            }

            function Fr(ve, he, ie) {
                if (ve > 2958465 || ve < 0) return null;
                var Bn = 0 | ve,
                    Vt = Math.floor(86400 * (ve - Bn)),
                    tn = 0,
                    Ut = [],
                    $e = {
                        D: Bn,
                        T: Vt,
                        u: 86400 * (ve - Bn) - Vt,
                        y: 0,
                        m: 0,
                        d: 0,
                        H: 0,
                        M: 0,
                        S: 0,
                        q: 0
                    };
                if (Math.abs($e.u) < 1e-6 && ($e.u = 0), _n(he ? ? (he = [])), he.date1904 && (Bn += 1462), $e.u > .999 && ($e.u = 0, 86400 == ++Vt && (Vt = 0, ++Bn)), 60 === Bn) Ut = ie ? [1317, 10, 29] : [1900, 2, 29], tn = 3;
                else if (0 === Bn) Ut = ie ? [1317, 8, 29] : [1900, 1, 0], tn = 6;
                else {
                    Bn > 60 && --Bn;
                    var Tn = new Date(1900, 0, 1);
                    Tn.setDate(Tn.getDate() + Bn - 1), Ut = [Tn.getFullYear(), Tn.getMonth() + 1, Tn.getDate()], tn = Tn.getDay(), Bn < 60 && (tn = (tn + 6) % 7), ie && (tn = 0)
                }
                return $e.y = Ut[0], $e.m = Ut[1], $e.d = Ut[2], $e.S = Vt % 60, Vt = Math.floor(Vt / 60), $e.M = Vt % 60, Vt = Math.floor(Vt / 60), $e.H = Vt, $e.q = tn, $e
            }

            function go(ve, he, ie, Bn) {
                var Tn, Vt = "",
                    tn = 0,
                    Ut = 0,
                    $e = ie.y,
                    F = 0;
                switch (ve) {
                    case 98:
                        $e = ie.y + 543;
                    case 121:
                        switch (he.length) {
                            case 1:
                            case 2:
                                Tn = $e % 100, F = 2;
                                break;
                            default:
                                Tn = $e % 1e4, F = 4
                        }
                        break;
                    case 109:
                        switch (he.length) {
                            case 1:
                            case 2:
                                Tn = ie.m, F = he.length;
                                break;
                            case 3:
                                return Sn[ie.m - 1][1];
                            case 5:
                                return Sn[ie.m - 1][0];
                            default:
                                return Sn[ie.m - 1][2]
                        }
                        break;
                    case 100:
                        switch (he.length) {
                            case 1:
                            case 2:
                                Tn = ie.d, F = he.length;
                                break;
                            case 3:
                                return Ln[ie.q][0];
                            default:
                                return Ln[ie.q][1]
                        }
                        break;
                    case 104:
                        switch (he.length) {
                            case 1:
                            case 2:
                                Tn = 1 + (ie.H + 11) % 12, F = he.length;
                                break;
                            default:
                                throw "bad hour format: " + he
                        }
                        break;
                    case 72:
                        switch (he.length) {
                            case 1:
                            case 2:
                                Tn = ie.H, F = he.length;
                                break;
                            default:
                                throw "bad hour format: " + he
                        }
                        break;
                    case 77:
                        switch (he.length) {
                            case 1:
                            case 2:
                                Tn = ie.M, F = he.length;
                                break;
                            default:
                                throw "bad minute format: " + he
                        }
                        break;
                    case 115:
                        if (0 === ie.u) switch (he) {
                            case "s":
                            case "ss":
                                return N(ie.S, he.length)
                        }
                        switch (he) {
                            case "s":
                            case "ss":
                            case ".0":
                            case ".00":
                            case ".000":
                                return Ut = Bn >= 2 ? 3 === Bn ? 1e3 : 100 : 1 === Bn ? 10 : 1, (tn = Math.round(Ut * (ie.S + ie.u))) >= 60 * Ut && (tn = 0), "s" === he ? 0 === tn ? "0" : "" + tn / Ut : (Vt = N(tn, 2 + Bn), "ss" === he ? Vt.substr(0, 2) : "." + Vt.substr(2, he.length - 1));
                            default:
                                throw "bad second format: " + he
                        }
                    case 90:
                        switch (he) {
                            case "[h]":
                            case "[hh]":
                                Tn = 24 * ie.D + ie.H;
                                break;
                            case "[m]":
                            case "[mm]":
                                Tn = 60 * (24 * ie.D + ie.H) + ie.M;
                                break;
                            case "[s]":
                            case "[ss]":
                                Tn = 60 * (60 * (24 * ie.D + ie.H) + ie.M) + Math.round(ie.S + ie.u);
                                break;
                            default:
                                throw "bad abstime format: " + he
                        }
                        F = 3 === he.length ? 1 : 2;
                        break;
                    case 101:
                        Tn = $e, F = 1
                }
                return F > 0 ? N(Tn, F) : ""
            }

            function Rr(ve) {
                if (ve.length <= 3) return ve;
                for (var he = ve.length % 3, ie = ve.substr(0, he); he != ve.length; he += 3) ie += (ie.length > 0 ? "," : "") + ve.substr(he, 3);
                return ie
            }
            C._general_num = yn, C._general = kn, C.parse_date_code = Fr;
            var xs = function() {
                var he = /%/g,
                    tn = /# (\?+)( ?)\/( ?)(\d+)/,
                    Tn = /^#*0*\.(0+)/,
                    F = /\).*[0#]/,
                    d = /\(###\) ###\\?-####/;

                function B(zt) {
                    for (var Nt, Pt = "", ke = 0; ke != zt.length; ++ke) switch (Nt = zt.charCodeAt(ke)) {
                        case 35:
                            break;
                        case 63:
                            Pt += " ";
                            break;
                        case 48:
                            Pt += "0";
                            break;
                        default:
                            Pt += String.fromCharCode(Nt)
                    }
                    return Pt
                }

                function Y(zt, Pt) {
                    var Nt = Math.pow(10, Pt);
                    return "" + Math.round(zt * Nt) / Nt
                }

                function Ot(zt, Pt) {
                    return Math.round((zt - Math.floor(zt)) * Math.pow(10, Pt))
                }

                function oe(zt, Pt, Nt) {
                    if (40 === zt.charCodeAt(0) && !Pt.match(F)) {
                        var ke = Pt.replace(/\( */, "").replace(/ \)/, "").replace(/\)/, "");
                        return Nt >= 0 ? oe("n", ke, Nt) : "(" + oe("n", ke, -Nt) + ")"
                    }
                    if (44 === Pt.charCodeAt(Pt.length - 1)) return function Bn(zt, Pt, Nt) {
                        for (var ke = Pt.length - 1; 44 === Pt.charCodeAt(ke - 1);) --ke;
                        return xs(zt, Pt.substr(0, ke), Nt / Math.pow(10, 3 * (Pt.length - ke)))
                    }(zt, Pt, Nt);
                    if (-1 !== Pt.indexOf("%")) return function ie(zt, Pt, Nt) {
                        var ke = Pt.replace(he, ""),
                            ae = Pt.length - ke.length;
                        return xs(zt, ke, Nt * Math.pow(10, 2 * ae)) + T("%", ae)
                    }(zt, Pt, Nt);
                    if (-1 !== Pt.indexOf("E")) return function Vt(zt, Pt) {
                        var Nt, ke = zt.indexOf("E") - zt.indexOf(".") - 1;
                        if (zt.match(/^#+0.0E\+0$/)) {
                            var ae = zt.indexOf("."); - 1 === ae && (ae = zt.indexOf("E"));
                            var we = Math.floor(Math.log(Math.abs(Pt)) * Math.LOG10E) % ae;
                            if (we < 0 && (we += ae), -1 === (Nt = (Pt / Math.pow(10, we)).toPrecision(ke + 1 + (ae + we) % ae)).indexOf("e")) {
                                var Oe = Math.floor(Math.log(Math.abs(Pt)) * Math.LOG10E);
                                for (-1 === Nt.indexOf(".") ? Nt = Nt[0] + "." + Nt.substr(1) + "E+" + (Oe - Nt.length + we) : Nt += "E+" + (Oe - we);
                                    "0." === Nt.substr(0, 2);) Nt = (Nt = Nt[0] + Nt.substr(2, ae) + "." + Nt.substr(2 + ae)).replace(/^0+([1-9])/, "$1").replace(/^0+\./, "0.");
                                Nt = Nt.replace(/\+-/, "-")
                            }
                            Nt = Nt.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/, function(ln, rn, fn, Ve) {
                                return rn + fn + Ve.substr(0, (ae + we) % ae) + "." + Ve.substr(we) + "E"
                            })
                        } else Nt = Pt.toExponential(ke);
                        return zt.match(/E\+00$/) && Nt.match(/e[+-]\d$/) && (Nt = Nt.substr(0, Nt.length - 1) + "0" + Nt[Nt.length - 1]), zt.match(/E\-/) && Nt.match(/e\+/) && (Nt = Nt.replace(/e\+/, "e")), Nt.replace("e", "E")
                    }(Pt, Nt);
                    if (36 === Pt.charCodeAt(0)) return "$" + oe(zt, Pt.substr(" " == Pt[1] ? 2 : 1), Nt);
                    var ae, Oe, ln, rn, fn = Math.abs(Nt),
                        Ve = Nt < 0 ? "-" : "";
                    if (Pt.match(/^00+$/)) return Ve + Ee(fn, Pt.length);
                    if (Pt.match(/^[#?]+$/)) return "0" === (ae = Ee(Nt, 0)) && (ae = ""), ae.length > Pt.length ? ae : B(Pt.substr(0, Pt.length - ae.length)) + ae;
                    if (null !== (Oe = Pt.match(tn))) return function Ut(zt, Pt, Nt) {
                        var ke = parseInt(zt[4]),
                            ae = Math.round(Pt * ke),
                            we = Math.floor(ae / ke),
                            Oe = ae - we * ke,
                            ln = ke;
                        return Nt + (0 === we ? "" : "" + we) + " " + (0 === Oe ? T(" ", zt[1].length + 1 + zt[4].length) : at(Oe, zt[1].length) + zt[2] + "/" + zt[3] + N(ln, zt[4].length))
                    }(Oe, fn, Ve);
                    if (null !== Pt.match(/^#+0+$/)) return Ve + Ee(fn, Pt.length - Pt.indexOf("0"));
                    if (null !== (Oe = Pt.match(Tn))) return ae = Y(Nt, Oe[1].length).replace(/^([^\.]+)$/, "$1." + Oe[1]).replace(/\.$/, "." + Oe[1]).replace(/\.(\d*)$/, function(pi, Kr) {
                        return "." + Kr + T("0", Oe[1].length - Kr.length)
                    }), -1 !== Pt.indexOf("0.") ? ae : ae.replace(/^0\./, ".");
                    if (Pt = Pt.replace(/^#+([0.])/, "$1"), null !== (Oe = Pt.match(/^(0*)\.(#*)$/))) return Ve + Y(fn, Oe[2].length).replace(/\.(\d*[1-9])0*$/, ".$1").replace(/^(-?\d*)$/, "$1.").replace(/^0\./, Oe[1].length ? "0." : ".");
                    if (null !== (Oe = Pt.match(/^#,##0(\.?)$/))) return Ve + Rr(Ee(fn, 0));
                    if (null !== (Oe = Pt.match(/^#,##0\.([#0]*0)$/))) return Nt < 0 ? "-" + oe(zt, Pt, -Nt) : Rr("" + Math.floor(Nt)) + "." + N(Ot(Nt, Oe[1].length), Oe[1].length);
                    if (null !== (Oe = Pt.match(/^#,#*,#0/))) return oe(zt, Pt.replace(/^#,#*,/, ""), Nt);
                    if (null !== (Oe = Pt.match(/^([0#]+)(\\?-([0#]+))+$/))) return ae = w(oe(zt, Pt.replace(/[\\-]/g, ""), Nt)), ln = 0, w(w(Pt.replace(/\\/g, "")).replace(/[0#]/g, function(pi) {
                        return ln < ae.length ? ae[ln++] : "0" === pi ? "0" : ""
                    }));
                    if (null !== Pt.match(d)) return "(" + (ae = oe(zt, "##########", Nt)).substr(0, 3) + ") " + ae.substr(3, 3) + "-" + ae.substr(6);
                    var bn = "";
                    if (null !== (Oe = Pt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/))) return ln = Math.min(Oe[4].length, 7), rn = nn(fn, Math.pow(10, ln) - 1, !1), ae = "" + Ve, " " == (bn = xs("n", Oe[1], rn[1]))[bn.length - 1] && (bn = bn.substr(0, bn.length - 1) + "0"), ae += bn + Oe[2] + "/" + Oe[3], (bn = bt(rn[2], ln)).length < Oe[4].length && (bn = B(Oe[4].substr(Oe[4].length - bn.length)) + bn), ae += bn;
                    if (null !== (Oe = Pt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/))) return ln = Math.min(Math.max(Oe[1].length, Oe[4].length), 7), Ve + ((rn = nn(fn, Math.pow(10, ln) - 1, !0))[0] || (rn[1] ? "" : "0")) + " " + (rn[1] ? at(rn[1], ln) + Oe[2] + "/" + Oe[3] + bt(rn[2], ln) : T(" ", 2 * ln + 1 + Oe[2].length + Oe[3].length));
                    if (null !== (Oe = Pt.match(/^[#0?]+$/))) return ae = Ee(Nt, 0), Pt.length <= ae.length ? ae : B(Pt.substr(0, Pt.length - ae.length)) + ae;
                    if (null !== (Oe = Pt.match(/^([#0?]+)\.([#0]+)$/))) {
                        ae = "" + Nt.toFixed(Math.min(Oe[2].length, 10)).replace(/([^0])0+$/, "$1"), ln = ae.indexOf(".");
                        var Zn = Pt.indexOf(".") - ln,
                            ii = Pt.length - ae.length - Zn;
                        return B(Pt.substr(0, Zn) + ae + Pt.substr(Pt.length - ii))
                    }
                    if (null !== (Oe = Pt.match(/^00,000\.([#0]*0)$/))) return ln = Ot(Nt, Oe[1].length), Nt < 0 ? "-" + oe(zt, Pt, -Nt) : Rr(function It(zt) {
                        return zt < 2147483647 && zt > -2147483648 ? "" + (zt >= 0 ? 0 | zt : zt - 1 | 0) : "" + Math.floor(zt)
                    }(Nt)).replace(/^\d,\d{3}$/, "0$&").replace(/^\d*$/, function(pi) {
                        return "00," + (pi.length < 3 ? N(0, 3 - pi.length) : "") + pi
                    }) + "." + N(ln, Oe[1].length);
                    if ("#,###" === Pt) {
                        var Hn = Rr(Ee(fn, 0));
                        return "0" !== Hn ? Ve + Hn : ""
                    }
                    throw new Error("unsupported format |" + Pt + "|")
                }

                function Re(zt, Pt, Nt) {
                    if (40 === zt.charCodeAt(0) && !Pt.match(F)) {
                        var ke = Pt.replace(/\( */, "").replace(/ \)/, "").replace(/\)/, "");
                        return Nt >= 0 ? Re("n", ke, Nt) : "(" + Re("n", ke, -Nt) + ")"
                    }
                    if (44 === Pt.charCodeAt(Pt.length - 1)) return function me(zt, Pt, Nt) {
                        for (var ke = Pt.length - 1; 44 === Pt.charCodeAt(ke - 1);) --ke;
                        return xs(zt, Pt.substr(0, ke), Nt / Math.pow(10, 3 * (Pt.length - ke)))
                    }(zt, Pt, Nt);
                    if (-1 !== Pt.indexOf("%")) return function Ie(zt, Pt, Nt) {
                        var ke = Pt.replace(he, ""),
                            ae = Pt.length - ke.length;
                        return xs(zt, ke, Nt * Math.pow(10, 2 * ae)) + T("%", ae)
                    }(zt, Pt, Nt);
                    if (-1 !== Pt.indexOf("E")) return function We(zt, Pt) {
                        var Nt, ke = zt.indexOf("E") - zt.indexOf(".") - 1;
                        if (zt.match(/^#+0.0E\+0$/)) {
                            var ae = zt.indexOf("."); - 1 === ae && (ae = zt.indexOf("E"));
                            var we = Math.floor(Math.log(Math.abs(Pt)) * Math.LOG10E) % ae;
                            if (we < 0 && (we += ae), !(Nt = (Pt / Math.pow(10, we)).toPrecision(ke + 1 + (ae + we) % ae)).match(/[Ee]/)) {
                                var Oe = Math.floor(Math.log(Math.abs(Pt)) * Math.LOG10E); - 1 === Nt.indexOf(".") ? Nt = Nt[0] + "." + Nt.substr(1) + "E+" + (Oe - Nt.length + we) : Nt += "E+" + (Oe - we), Nt = Nt.replace(/\+-/, "-")
                            }
                            Nt = Nt.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/, function(ln, rn, fn, Ve) {
                                return rn + fn + Ve.substr(0, (ae + we) % ae) + "." + Ve.substr(we) + "E"
                            })
                        } else Nt = Pt.toExponential(ke);
                        return zt.match(/E\+00$/) && Nt.match(/e[+-]\d$/) && (Nt = Nt.substr(0, Nt.length - 1) + "0" + Nt[Nt.length - 1]), zt.match(/E\-/) && Nt.match(/e\+/) && (Nt = Nt.replace(/e\+/, "e")), Nt.replace("e", "E")
                    }(Pt, Nt);
                    if (36 === Pt.charCodeAt(0)) return "$" + Re(zt, Pt.substr(" " == Pt[1] ? 2 : 1), Nt);
                    var ae, we, Oe, ln, rn = Math.abs(Nt),
                        fn = Nt < 0 ? "-" : "";
                    if (Pt.match(/^00+$/)) return fn + N(rn, Pt.length);
                    if (Pt.match(/^[#?]+$/)) return ae = "" + Nt, 0 === Nt && (ae = ""), ae.length > Pt.length ? ae : B(Pt.substr(0, Pt.length - ae.length)) + ae;
                    if (null !== (we = Pt.match(tn))) return function $e(zt, Pt, Nt) {
                        return Nt + (0 === Pt ? "" : "" + Pt) + T(" ", zt[1].length + 2 + zt[4].length)
                    }(we, rn, fn);
                    if (null !== Pt.match(/^#+0+$/)) return fn + N(rn, Pt.length - Pt.indexOf("0"));
                    if (null !== (we = Pt.match(Tn))) return ae = ("" + Nt).replace(/^([^\.]+)$/, "$1." + we[1]).replace(/\.$/, "." + we[1]).replace(/\.(\d*)$/, function(Hn, pi) {
                        return "." + pi + T("0", we[1].length - pi.length)
                    }), -1 !== Pt.indexOf("0.") ? ae : ae.replace(/^0\./, ".");
                    if (Pt = Pt.replace(/^#+([0.])/, "$1"), null !== (we = Pt.match(/^(0*)\.(#*)$/))) return fn + ("" + rn).replace(/\.(\d*[1-9])0*$/, ".$1").replace(/^(-?\d*)$/, "$1.").replace(/^0\./, we[1].length ? "0." : ".");
                    if (null !== (we = Pt.match(/^#,##0(\.?)$/))) return fn + Rr("" + rn);
                    if (null !== (we = Pt.match(/^#,##0\.([#0]*0)$/))) return Nt < 0 ? "-" + Re(zt, Pt, -Nt) : Rr("" + Nt) + "." + T("0", we[1].length);
                    if (null !== (we = Pt.match(/^#,#*,#0/))) return Re(zt, Pt.replace(/^#,#*,/, ""), Nt);
                    if (null !== (we = Pt.match(/^([0#]+)(\\?-([0#]+))+$/))) return ae = w(Re(zt, Pt.replace(/[\\-]/g, ""), Nt)), Oe = 0, w(w(Pt.replace(/\\/g, "")).replace(/[0#]/g, function(Hn) {
                        return Oe < ae.length ? ae[Oe++] : "0" === Hn ? "0" : ""
                    }));
                    if (null !== Pt.match(d)) return "(" + (ae = Re(zt, "##########", Nt)).substr(0, 3) + ") " + ae.substr(3, 3) + "-" + ae.substr(6);
                    var Ve = "";
                    if (null !== (we = Pt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/))) return Oe = Math.min(we[4].length, 7), ln = nn(rn, Math.pow(10, Oe) - 1, !1), ae = "" + fn, " " == (Ve = xs("n", we[1], ln[1]))[Ve.length - 1] && (Ve = Ve.substr(0, Ve.length - 1) + "0"), ae += Ve + we[2] + "/" + we[3], (Ve = bt(ln[2], Oe)).length < we[4].length && (Ve = B(we[4].substr(we[4].length - Ve.length)) + Ve), ae += Ve;
                    if (null !== (we = Pt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/))) return Oe = Math.min(Math.max(we[1].length, we[4].length), 7), fn + ((ln = nn(rn, Math.pow(10, Oe) - 1, !0))[0] || (ln[1] ? "" : "0")) + " " + (ln[1] ? at(ln[1], Oe) + we[2] + "/" + we[3] + bt(ln[2], Oe) : T(" ", 2 * Oe + 1 + we[2].length + we[3].length));
                    if (null !== (we = Pt.match(/^[#0?]+$/))) return Pt.length <= (ae = "" + Nt).length ? ae : B(Pt.substr(0, Pt.length - ae.length)) + ae;
                    if (null !== (we = Pt.match(/^([#0]+)\.([#0]+)$/))) {
                        ae = "" + Nt.toFixed(Math.min(we[2].length, 10)).replace(/([^0])0+$/, "$1"), Oe = ae.indexOf(".");
                        var bn = Pt.indexOf(".") - Oe,
                            Zn = Pt.length - ae.length - bn;
                        return B(Pt.substr(0, bn) + ae + Pt.substr(Pt.length - Zn))
                    }
                    if (null !== (we = Pt.match(/^00,000\.([#0]*0)$/))) return Nt < 0 ? "-" + Re(zt, Pt, -Nt) : Rr("" + Nt).replace(/^\d,\d{3}$/, "0$&").replace(/^\d*$/, function(Hn) {
                        return "00," + (Hn.length < 3 ? N(0, 3 - Hn.length) : "") + Hn
                    }) + "." + N(0, we[1].length);
                    if ("#,###" === Pt) {
                        var ii = Rr("" + rn);
                        return "0" !== ii ? fn + ii : ""
                    }
                    throw new Error("unsupported format |" + Pt + "|")
                }
                return function(Pt, Nt, ke) {
                    return (0 | ke) === ke ? Re(Pt, Nt, ke) : oe(Pt, Nt, ke)
                }
            }();

            function no(ve) {
                for (var he = [], ie = !1, Vt = 0, tn = 0; Vt < ve.length; ++Vt) switch (ve.charCodeAt(Vt)) {
                    case 34:
                        ie = !ie;
                        break;
                    case 95:
                    case 42:
                    case 92:
                        ++Vt;
                        break;
                    case 59:
                        he[he.length] = ve.substr(tn, Vt - tn), tn = Vt + 1
                }
                if (he[he.length] = ve.substr(tn), !0 === ie) throw new Error("Format |" + ve + "| unterminated string ");
                return he
            }
            C._split = no;
            var hs = /\[[HhMmSs]*\]/;

            function fs(ve, he, ie, Bn) {
                for (var F, d, B, Y, Vt = [], tn = "", Ut = 0, $e = "", Tn = "t", Ot = "H"; Ut < ve.length;) switch ($e = ve[Ut]) {
                    case "G":
                        if (!ze(ve, Ut)) throw new Error("unrecognized character " + $e + " in " + ve);
                        Vt[Vt.length] = {
                            t: "G",
                            v: "General"
                        }, Ut += 7;
                        break;
                    case '"':
                        for (tn = ""; 34 !== (Y = ve.charCodeAt(++Ut)) && Ut < ve.length;) tn += String.fromCharCode(Y);
                        Vt[Vt.length] = {
                            t: "t",
                            v: tn
                        }, ++Ut;
                        break;
                    case "\\":
                        var It = ve[++Ut];
                        Vt[Vt.length] = {
                            t: "(" === It || ")" === It ? It : "t",
                            v: It
                        }, ++Ut;
                        break;
                    case "_":
                        Vt[Vt.length] = {
                            t: "t",
                            v: " "
                        }, Ut += 2;
                        break;
                    case "@":
                        Vt[Vt.length] = {
                            t: "T",
                            v: he
                        }, ++Ut;
                        break;
                    case "B":
                    case "b":
                        if ("1" === ve[Ut + 1] || "2" === ve[Ut + 1]) {
                            if (null == d && null == (d = Fr(he, ie, "2" === ve[Ut + 1]))) return "";
                            Vt[Vt.length] = {
                                t: "X",
                                v: ve.substr(Ut, 2)
                            }, Tn = $e, Ut += 2;
                            break
                        }
                    case "M":
                    case "D":
                    case "Y":
                    case "H":
                    case "S":
                    case "E":
                        $e = $e.toLowerCase();
                    case "m":
                    case "d":
                    case "y":
                    case "h":
                    case "s":
                    case "e":
                    case "g":
                        if (he < 0 || null == d && null == (d = Fr(he, ie))) return "";
                        for (tn = $e; ++Ut < ve.length && ve[Ut].toLowerCase() === $e;) tn += $e;
                        "m" === $e && "h" === Tn.toLowerCase() && ($e = "M"), "h" === $e && ($e = Ot), Vt[Vt.length] = {
                            t: $e,
                            v: tn
                        }, Tn = $e;
                        break;
                    case "A":
                        if (F = {
                                t: $e,
                                v: "A"
                            }, null == d && (d = Fr(he, ie)), "A/P" === ve.substr(Ut, 3) ? (null != d && (F.v = d.H >= 12 ? "P" : "A"), F.t = "T", Ot = "h", Ut += 3) : "AM/PM" === ve.substr(Ut, 5) ? (null != d && (F.v = d.H >= 12 ? "PM" : "AM"), F.t = "T", Ut += 5, Ot = "h") : (F.t = "t", ++Ut), null == d && "T" === F.t) return "";
                        Vt[Vt.length] = F, Tn = $e;
                        break;
                    case "[":
                        for (tn = $e;
                            "]" !== ve[Ut++] && Ut < ve.length;) tn += ve[Ut];
                        if ("]" !== tn.substr(-1)) throw 'unterminated "[" block: |' + tn + "|";
                        if (tn.match(hs)) {
                            if (null == d && null == (d = Fr(he, ie))) return "";
                            Vt[Vt.length] = {
                                t: "Z",
                                v: tn.toLowerCase()
                            }
                        } else tn = "";
                        break;
                    case ".":
                        if (null != d) {
                            for (tn = $e;
                                "0" === ($e = ve[++Ut]);) tn += $e;
                            Vt[Vt.length] = {
                                t: "s",
                                v: tn
                            };
                            break
                        }
                    case "0":
                    case "#":
                        for (tn = $e;
                            "0#?.,E+-%".indexOf($e = ve[++Ut]) > -1 || "\\" == $e && "-" == ve[Ut + 1] && "0#".indexOf(ve[Ut + 2]) > -1;) tn += $e;
                        Vt[Vt.length] = {
                            t: "n",
                            v: tn
                        };
                        break;
                    case "?":
                        for (tn = $e; ve[++Ut] === $e;) tn += $e;
                        Vt[Vt.length] = F = {
                            t: $e,
                            v: tn
                        }, Tn = $e;
                        break;
                    case "*":
                        (" " == ve[++Ut] || "*" == ve[Ut]) && ++Ut;
                        break;
                    case "(":
                    case ")":
                        Vt[Vt.length] = {
                            t: 1 === Bn ? "t" : $e,
                            v: $e
                        }, ++Ut;
                        break;
                    case "1":
                    case "2":
                    case "3":
                    case "4":
                    case "5":
                    case "6":
                    case "7":
                    case "8":
                    case "9":
                        for (tn = $e;
                            "0123456789".indexOf(ve[++Ut]) > -1;) tn += ve[Ut];
                        Vt[Vt.length] = {
                            t: "D",
                            v: tn
                        };
                        break;
                    case " ":
                        Vt[Vt.length] = {
                            t: $e,
                            v: $e
                        }, ++Ut;
                        break;
                    default:
                        if (-1 === ",$-+/():!^&'~{}<>=\u20acacfijklopqrtuvwxz".indexOf($e)) throw new Error("unrecognized character " + $e + " in " + ve);
                        Vt[Vt.length] = {
                            t: "t",
                            v: $e
                        }, ++Ut
                }
                var We, me = 0,
                    Ie = 0;
                for (Ut = Vt.length - 1, Tn = "t"; Ut >= 0; --Ut) switch (Vt[Ut].t) {
                    case "h":
                    case "H":
                        Vt[Ut].t = Ot, Tn = "h", me < 1 && (me = 1);
                        break;
                    case "s":
                        (We = Vt[Ut].v.match(/\.0+$/)) && (Ie = Math.max(Ie, We[0].length - 1)), me < 3 && (me = 3);
                    case "d":
                    case "y":
                    case "M":
                    case "e":
                        Tn = Vt[Ut].t;
                        break;
                    case "m":
                        "s" === Tn && (Vt[Ut].t = "M", me < 2 && (me = 2));
                        break;
                    case "X":
                        break;
                    case "Z":
                        me < 1 && Vt[Ut].v.match(/[Hh]/) && (me = 1), me < 2 && Vt[Ut].v.match(/[Mm]/) && (me = 2), me < 3 && Vt[Ut].v.match(/[Ss]/) && (me = 3)
                }
                switch (me) {
                    case 0:
                        break;
                    case 1:
                        d.u >= .5 && (d.u = 0, ++d.S), d.S >= 60 && (d.S = 0, ++d.M), d.M >= 60 && (d.M = 0, ++d.H);
                        break;
                    case 2:
                        d.u >= .5 && (d.u = 0, ++d.S), d.S >= 60 && (d.S = 0, ++d.M)
                }
                var zt, Re = "";
                for (Ut = 0; Ut < Vt.length; ++Ut) switch (Vt[Ut].t) {
                    case "t":
                    case "T":
                    case " ":
                    case "D":
                        break;
                    case "X":
                        Vt[Ut] = void 0;
                        break;
                    case "d":
                    case "m":
                    case "y":
                    case "h":
                    case "H":
                    case "M":
                    case "s":
                    case "e":
                    case "b":
                    case "Z":
                        Vt[Ut].v = go(Vt[Ut].t.charCodeAt(0), Vt[Ut].v, d, Ie), Vt[Ut].t = "t";
                        break;
                    case "n":
                    case "(":
                    case "?":
                        for (zt = Ut + 1; null != Vt[zt] && ("?" === ($e = Vt[zt].t) || "D" === $e || (" " === $e || "t" === $e) && null != Vt[zt + 1] && ("?" === Vt[zt + 1].t || "t" === Vt[zt + 1].t && "/" === Vt[zt + 1].v) || "(" === Vt[Ut].t && (" " === $e || "n" === $e || ")" === $e) || "t" === $e && ("/" === Vt[zt].v || "$\u20ac".indexOf(Vt[zt].v) > -1 || " " === Vt[zt].v && null != Vt[zt + 1] && "?" == Vt[zt + 1].t));) Vt[Ut].v += Vt[zt].v, Vt[zt] = void 0, ++zt;
                        Re += Vt[Ut].v, Ut = zt - 1;
                        break;
                    case "G":
                        Vt[Ut].t = "t", Vt[Ut].v = kn(he, ie)
                }
                var Nt, ke, Pt = "";
                if (Re.length > 0) {
                    Nt = he < 0 && 45 === Re.charCodeAt(0) ? -he : he, zt = (ke = xs(40 === Re.charCodeAt(0) ? "(" : "n", Re, Nt)).length - 1;
                    var ae = Vt.length;
                    for (Ut = 0; Ut < Vt.length; ++Ut)
                        if (null != Vt[Ut] && Vt[Ut].v.indexOf(".") > -1) {
                            ae = Ut;
                            break
                        }
                    var we = Vt.length;
                    if (ae === Vt.length && -1 === ke.indexOf("E")) {
                        for (Ut = Vt.length - 1; Ut >= 0; --Ut) null == Vt[Ut] || -1 === "n?(".indexOf(Vt[Ut].t) || (zt >= Vt[Ut].v.length - 1 ? Vt[Ut].v = ke.substr(1 + (zt -= Vt[Ut].v.length), Vt[Ut].v.length) : zt < 0 ? Vt[Ut].v = "" : (Vt[Ut].v = ke.substr(0, zt + 1), zt = -1), Vt[Ut].t = "t", we = Ut);
                        zt >= 0 && we < Vt.length && (Vt[we].v = ke.substr(0, zt + 1) + Vt[we].v)
                    } else if (ae !== Vt.length && -1 === ke.indexOf("E")) {
                        for (zt = ke.indexOf(".") - 1, Ut = ae; Ut >= 0; --Ut)
                            if (null != Vt[Ut] && -1 !== "n?(".indexOf(Vt[Ut].t)) {
                                for (B = Vt[Ut].v.indexOf(".") > -1 && Ut === ae ? Vt[Ut].v.indexOf(".") - 1 : Vt[Ut].v.length - 1, Pt = Vt[Ut].v.substr(B + 1); B >= 0; --B) zt >= 0 && ("0" === Vt[Ut].v[B] || "#" === Vt[Ut].v[B]) && (Pt = ke[zt--] + Pt);
                                Vt[Ut].v = Pt, Vt[Ut].t = "t", we = Ut
                            }
                        for (zt >= 0 && we < Vt.length && (Vt[we].v = ke.substr(0, zt + 1) + Vt[we].v), zt = ke.indexOf(".") + 1, Ut = ae; Ut < Vt.length; ++Ut)
                            if (null != Vt[Ut] && (-1 !== "n?(".indexOf(Vt[Ut].t) || Ut === ae)) {
                                for (B = Vt[Ut].v.indexOf(".") > -1 && Ut === ae ? Vt[Ut].v.indexOf(".") + 1 : 0, Pt = Vt[Ut].v.substr(0, B); B < Vt[Ut].v.length; ++B) zt < ke.length && (Pt += ke[zt++]);
                                Vt[Ut].v = Pt, Vt[Ut].t = "t", we = Ut
                            }
                    }
                }
                for (Ut = 0; Ut < Vt.length; ++Ut) null != Vt[Ut] && "n(?".indexOf(Vt[Ut].t) > -1 && (Vt[Ut].v = xs(Vt[Ut].t, Vt[Ut].v, Nt = Bn > 1 && he < 0 && Ut > 0 && "-" === Vt[Ut - 1].v ? -he : he), Vt[Ut].t = "t");
                var Oe = "";
                for (Ut = 0; Ut !== Vt.length; ++Ut) null != Vt[Ut] && (Oe += Vt[Ut].v);
                return Oe
            }
            C._eval = fs;
            var Zo = /\[[=<>]/,
                Ho = /\[([=<>]*)(-?\d+\.?\d*)\]/;

            function zo(ve, he) {
                if (null == he) return !1;
                var ie = parseFloat(he[2]);
                switch (he[1]) {
                    case "=":
                        if (ve == ie) return !0;
                        break;
                    case ">":
                        if (ve > ie) return !0;
                        break;
                    case "<":
                        if (ve < ie) return !0;
                        break;
                    case "<>":
                        if (ve != ie) return !0;
                        break;
                    case ">=":
                        if (ve >= ie) return !0;
                        break;
                    case "<=":
                        if (ve <= ie) return !0
                }
                return !1
            }
            C._table = Vn, C.load = function(he, ie) {
                Vn[ie] = he
            }, C.format = function ra(ve, he, ie) {
                _n(ie ? ? (ie = []));
                var Bn = "";
                switch (typeof ve) {
                    case "string":
                        Bn = ve;
                        break;
                    case "number":
                        Bn = (null != ie.table ? ie.table : Vn)[ve]
                }
                if (ze(Bn, 0)) return kn(he, ie);
                var Vt = function ia(ve, he) {
                    var ie = no(ve),
                        Bn = ie.length,
                        Vt = ie[Bn - 1].indexOf("@");
                    if (Bn < 4 && Vt > -1 && --Bn, ie.length > 4) throw "cannot find right format for |" + ie + "|";
                    if ("number" != typeof he) return [4, 4 === ie.length || Vt > -1 ? ie[ie.length - 1] : "@"];
                    switch (ie.length) {
                        case 1:
                            ie = Vt > -1 ? ["General", "General", "General", ie[0]] : [ie[0], ie[0], ie[0], "@"];
                            break;
                        case 2:
                            ie = Vt > -1 ? [ie[0], ie[0], ie[0], ie[1]] : [ie[0], ie[1], ie[0], "@"];
                            break;
                        case 3:
                            ie = Vt > -1 ? [ie[0], ie[1], ie[0], ie[2]] : [ie[0], ie[1], ie[2], "@"]
                    }
                    var tn = he > 0 ? ie[0] : he < 0 ? ie[1] : ie[2];
                    if (-1 === ie[0].indexOf("[") && -1 === ie[1].indexOf("[")) return [Bn, tn];
                    if (null != ie[0].match(Zo) || null != ie[1].match(Zo)) {
                        var Ut = ie[0].match(Ho),
                            $e = ie[1].match(Ho);
                        return zo(he, Ut) ? [Bn, ie[0]] : zo(he, $e) ? [Bn, ie[1]] : [Bn, ie[null != Ut && null != $e ? 2 : 1]]
                    }
                    return [Bn, tn]
                }(Bn, he);
                if (ze(Vt[1])) return kn(he, ie);
                if (!0 === he) he = "TRUE";
                else if (!1 === he) he = "FALSE";
                else if ("" === he || null == he) return "";
                return fs(Vt[1], he, ie, Vt[0])
            }, C.get_table = function() {
                return Vn
            }, C.load_table = function(he) {
                for (var ie = 0; 392 != ie; ++ie) void 0 !== he[ie] && C.load(he[ie], ie)
            }
        };

    function mt(m) {
        return null != m
    }

    function Z(m) {
        return Object.keys(m)
    }

    function tt(m) {
        for (var C = [], w = Z(m), T = 0; T !== w.length; ++T) C[m[w[T]]] = parseInt(w[T], 10);
        return C
    }

    function lt(m, C) {
        return C && (m += 1462), (Date.parse(m) + 22091616e5) / 864e5
    }

    function et(m, C) {
        var w = C;
        if (m.files[w] || (w = C.toLowerCase(), m.files[w]) || (w = w.replace(/\//g, "\\"), m.files[w])) return m.files[w];
        throw new Error("Cannot find file " + C + " in zip")
    }

    function dt(m, C, w) {
        if (!w) return function G(m) {
            if (!m) return null;
            if (".bin" === m.name.substr(-4)) {
                if (m.data) return P(m.data);
                if (m.asNodeBuffer && typeof Buffer < "u") return m.asNodeBuffer();
                if (m._data && m._data.getContent) return Array.prototype.slice.call(m._data.getContent())
            } else {
                if (m.data) return ".bin" !== m.name.substr(-4) ? K(m.data) : P(m.data);
                if (m.asNodeBuffer && typeof Buffer < "u") return K(m.asNodeBuffer().toString("binary"));
                if (m.asBinary) return K(m.asBinary());
                if (m._data && m._data.getContent) return K(function M(m) {
                    for (var C = "", w = 0; w != m.length; ++w) C += String.fromCharCode(m[w]);
                    return C
                }(Array.prototype.slice.call(m._data.getContent(), 0)))
            }
            return null
        }(et(m, C));
        if (!C) return null;
        try {
            return dt(m, C)
        } catch {
            return null
        }
    }
    J(O), typeof JSZip < "u" && (wt = JSZip), typeof exports < "u" && typeof module < "u" && module.exports && (typeof Buffer < "u" && typeof wt > "u" && (wt = require("jszip")), typeof wt > "u" && (wt = require("./jszip").JSZip), Bt = require("fs"));
    var _ = function(m) {
            return String.fromCharCode(m)
        },
        Jt = /\b[\w:]+=["'][^"]*['"]/g,
        jt = /<[^>]*>/g,
        Wt = /<\w*:/,
        be = /<(\/?)\w+:/;

    function Kt(m, C) {
        for (var w = [], T = 0, N = 0; T !== m.length && 32 !== (N = m.charCodeAt(T)) && 10 !== N && 13 !== N; ++T);
        if (C || (w[0] = m.substr(0, T)), T === m.length) return w;
        var at = m.match(Jt),
            bt = 0,
            ne = "",
            ye = 0,
            Ee = "",
            ze = "";
        if (at)
            for (ye = 0; ye != at.length; ++ye) {
                for (ze = at[ye], N = 0; N != ze.length && 61 !== ze.charCodeAt(N); ++N);
                for (Ee = ze.substr(0, N), ne = ze.substring(N + 2, ze.length - 1), bt = 0; bt != Ee.length && 58 !== Ee.charCodeAt(bt); ++bt);
                bt === Ee.length ? w[Ee] = ne : w[(5 === bt && "xmlns" === Ee.substr(0, 5) ? "xmlns" : "") + Ee.substr(bt + 1)] = ne
            }
        return w
    }
    var Ft = {
            "&quot;": '"',
            "&apos;": "'",
            "&gt;": ">",
            "&lt;": "<",
            "&amp;": "&"
        },
        Yt = function q(m) {
            for (var C = [], w = Z(m), T = 0; T !== w.length; ++T) C[m[w[T]]] = w[T];
            return C
        }(Ft),
        ot = ("&<>'\"".split(""), /&[a-z]*;/g),
        St = /_x([0-9a-fA-F]+)_/g;

    function V(m) {
        return (m + "").replace(ot, function(w) {
            return Ft[w]
        }).replace(St, function(w, T) {
            return _(parseInt(T, 16))
        })
    }
    var rt = /[&<>'"]/g,
        ut = /[\u0000-\u0008\u000b-\u001f]/g;

    function z(m) {
        return (m + "").replace(rt, function(w) {
            return Yt[w]
        }).replace(ut, function(w) {
            return "_x" + ("000" + w.charCodeAt(0).toString(16)).substr(-4) + "_"
        })
    }

    function X(m, C) {
        switch (m) {
            case "1":
            case "true":
            case "TRUE":
                return !0;
            default:
                return !1
        }
    }
    var _t = function(C) {
        for (var w = "", T = 0, N = 0, at = 0, bt = 0, ne = 0; T < C.length;)(N = C.charCodeAt(T++)) < 128 ? w += String.fromCharCode(N) : (at = C.charCodeAt(T++), N > 191 && N < 224 ? w += String.fromCharCode((31 & N) << 6 | 63 & at) : (bt = C.charCodeAt(T++), N < 240 ? w += String.fromCharCode((15 & N) << 12 | (63 & at) << 6 | 63 & bt) : (ne = ((7 & N) << 18 | (63 & at) << 12 | (63 & bt) << 6 | 63 & C.charCodeAt(T++)) - 65536, w += String.fromCharCode(55296 + (ne >>> 10 & 1023)), w += String.fromCharCode(56320 + (1023 & ne)))));
        return w
    };
    if (typeof Buffer < "u") {
        var Mt = function(C) {
                var T, N, ne, w = new Buffer(2 * C.length),
                    at = 1,
                    bt = 0,
                    Ht = 0;
                for (N = 0; N < C.length; N += at) at = 1, (ne = C.charCodeAt(N)) < 128 ? T = ne : ne < 224 ? (T = 64 * (31 & ne) + (63 & C.charCodeAt(N + 1)), at = 2) : ne < 240 ? (T = 4096 * (15 & ne) + 64 * (63 & C.charCodeAt(N + 1)) + (63 & C.charCodeAt(N + 2)), at = 3) : (at = 4, T = 262144 * (7 & ne) + 4096 * (63 & C.charCodeAt(N + 1)) + 64 * (63 & C.charCodeAt(N + 2)) + (63 & C.charCodeAt(N + 3)), Ht = 55296 + ((T -= 65536) >>> 10 & 1023), T = 56320 + (1023 & T)), 0 !== Ht && (w[bt++] = 255 & Ht, w[bt++] = Ht >>> 8, Ht = 0), w[bt++] = T % 256, w[bt++] = T >>> 8;
                return w.length = bt, w.toString("ucs2")
            },
            Gt = "foo bar baz\xe2\x98\x83\xf0\x9f\x8d\xa3";
        _t(Gt) == Mt(Gt) && (_t = Mt);
        var xt = function(C) {
            return Buffer(C, "binary").toString("utf8")
        };
        _t(Gt) == xt(Gt) && (_t = xt)
    }
    var m, pt = (m = {}, function(w, T) {
            var N = w + "|" + T;
            return void 0 !== m[N] ? m[N] : m[N] = new RegExp("<(?:\\w+:)?" + w + '(?: xml:space="preserve")?(?:[^>]*)>([^\u2603]*)</(?:\\w+:)?' + w + ">", T || "")
        }),
        Tt = function() {
            var m = {};
            return function(w) {
                return void 0 !== m[w] ? m[w] : m[w] = new RegExp("<vt:" + w + ">(.*?)</vt:" + w + ">", "g")
            }
        }(),
        Dt = /<\/?vt:variant>/g,
        ce = /<vt:([^>]*)>(.*)</;

    function le(m) {
        var C = Kt(m),
            w = m.match(Tt(C.baseType)) || [];
        if (w.length != C.size) throw "unexpected vector length " + w.length + " != " + C.size;
        var T = [];
        return w.forEach(function(N) {
            var at = N.replace(Dt, "").match(ce);
            T.push({
                v: at[2],
                t: at[1]
            })
        }), T
    }
    var Ce = /(^\s|\s$|\n)/;

    function Ne(m, C) {
        return "<" + m + (C.match(Ce) ? ' xml:space="preserve"' : "") + ">" + C + "</" + m + ">"
    }

    function Me(m, C, w) {
        return "<" + m + (mt(w) ? function dn(m) {
            return Z(m).map(function(C) {
                return " " + C + '="' + m[C] + '"'
            }).join("")
        }(w) : "") + (mt(C) ? (C.match(Ce) ? ' xml:space="preserve"' : "") + ">" + C + "</" + m : "/") + ">"
    }

    function cn(m, C) {
        try {
            return m.toISOString().replace(/\.\d*/, "")
        } catch (w) {
            if (C) throw w
        }
    }
    var En, Be, Wn = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r\n',
        te = {
            dc: "http://purl.org/dc/elements/1.1/",
            dcterms: "http://purl.org/dc/terms/",
            dcmitype: "http://purl.org/dc/dcmitype/",
            mx: "http://schemas.microsoft.com/office/mac/excel/2008/main",
            r: "http://schemas.openxmlformats.org/officeDocument/2006/relationships",
            sjs: "http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties",
            vt: "http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",
            xsi: "http://www.w3.org/2001/XMLSchema-instance",
            xsd: "http://www.w3.org/2001/XMLSchema",
            main: ["http://schemas.openxmlformats.org/spreadsheetml/2006/main", "http://purl.oclc.org/ooxml/spreadsheetml/main", "http://schemas.microsoft.com/office/excel/2006/main", "http://schemas.microsoft.com/office/excel/2006/2"]
        };
    En = Be = function(m) {
        for (var C = [], w = 0; w != m[0].length; ++w) C = C.concat(m[0][w]);
        return C
    }, typeof Buffer < "u" && (En = function(m) {
        return m[0].length > 0 && Buffer.isBuffer(m[0][0]) ? Buffer.concat(m[0]) : Be(m)
    });
    var qe = function(m, C) {
            return m.readUInt32LE ? m.readUInt32LE(C) : m[C + 3] * (1 << 24) + (m[C + 2] << 16) + (m[C + 1] << 8) + m[C]
        },
        gi = function(m, C) {
            return (m[C + 3] << 24) + (m[C + 2] << 16) + (m[C + 1] << 8) + m[C]
        },
        mi = function(m, C) {
            return m.readUInt8 ? m.readUInt8(C) : m[C]
        },
        ki = function(m, C) {
            return m.readUInt16LE ? m.readUInt16LE(C) : 256 * m[C + 1] + m[C]
        },
        Ni = function(m, C) {
            var w = ki(m, C);
            return 32768 & w ? -1 * (65535 - w + 1) : w
        },
        Pi = typeof Buffer < "u" ? function(m, C) {
            return Buffer.isBuffer(m) ? m.readUInt32LE(C) : qe(m, C)
        } : qe,
        Un = typeof Buffer < "u" ? function(m, C) {
            return Buffer.isBuffer(m) ? m.readInt32LE(C) : gi(m, C)
        } : gi,
        Xn = function(m, C) {
            return m.readDoubleLE ? m.readDoubleLE(C) : function Pn(m, C, w, T, N) {
                void 0 === w && (w = !0), T || (T = 8), !N && 8 === T && (N = 52);
                var at, bt, Ht = 8 * T - N - 1,
                    ne = (1 << Ht) - 1,
                    ye = ne >> 1,
                    Ee = -7,
                    ze = w ? -1 : 1,
                    Pe = w ? T - 1 : 0,
                    _n = m[C + Pe];
                for (Pe += ze, at = _n & (1 << -Ee) - 1, _n >>>= -Ee, Ee += Ht; Ee > 0; at = 256 * at + m[C + Pe], Pe += ze, Ee -= 8);
                for (bt = at & (1 << -Ee) - 1, at >>>= -Ee, Ee += N; Ee > 0; bt = 256 * bt + m[C + Pe], Pe += ze, Ee -= 8);
                return at === ne ? bt ? NaN : 1 / 0 * (_n ? -1 : 1) : (0 === at ? at = 1 - ye : (bt += Math.pow(2, N), at -= ye), (_n ? -1 : 1) * bt * Math.pow(2, at - N))
            }(m, C || 0)
        };

    function bi(m, C) {
        var bt, Ht, w = "";
        if ("dbcs" === C) {
            if (Ht = this.l, typeof Buffer < "u" && this instanceof Buffer) w = this.slice(this.l, this.l + 2 * m).toString("utf16le");
            else
                for (bt = 0; bt != m; ++bt) w += String.fromCharCode(ki(this, Ht)), Ht += 2;
            m *= 2
        } else switch (m) {
            case 1:
                w = mi(this, this.l);
                break;
            case 2:
                w = ("i" === C ? Ni : ki)(this, this.l);
                break;
            case 4:
                w = Pi(this, this.l);
                break;
            case 8:
                if ("f" === C) {
                    w = Xn(this, this.l);
                    break
                }
        }
        return this.l += m, w
    }

    function Bi(m, C, w) {
        var T, N;
        if ("dbcs" === w) {
            for (N = 0; N != C.length; ++N) this.writeUInt16LE(C.charCodeAt(N), this.l + 2 * N);
            T = 2 * C.length
        } else switch (m) {
            case 1:
                T = 1, this.writeUInt8(C, this.l);
                break;
            case 4:
                T = 4, this.writeUInt32LE(C, this.l);
                break;
            case 8:
                if (T = 8, "f" === w) {
                    this.writeDoubleLE(C, this.l);
                    break
                }
            case 16:
                break;
            case -4:
                T = 4, this.writeInt32LE(C, this.l)
        }
        return this.l += T, this
    }

    function mn(m, C) {
        m.l = C || 0, m.read_shift = bi, m.write_shift = Bi
    }

    function v(m, C) {
        m.l += C
    }

    function ci(m) {
        var C = typeof Buffer < "u" ? new Buffer(m) : new Array(m);
        return mn(C, 0), C
    }

    function gn(m, C, w) {
        var T, N, at;
        for (mn(m, m.l || 0); m.l < m.length;) {
            var bt = m.read_shift(1);
            128 & bt && (bt = (127 & bt) + ((127 & m.read_shift(1)) << 7));
            var Ht = x[bt] || x[65535];
            for (at = 127 & (T = m.read_shift(1)), N = 1; N < 4 && 128 & T; ++N) at += (127 & (T = m.read_shift(1))) << 7 * N;
            if (C(Ht.f(m, at, w), Ht, bt)) return
        }
    }

    function si() {
        var m = [],
            C = 2048,
            w = function(ye) {
                var Ee = ci(ye);
                return mn(Ee, 0), Ee
            },
            T = w(C),
            N = function() {
                T.length = T.l, T.length > 0 && m.push(T), T = null
            },
            at = function(ye) {
                return ye < T.length - T.l ? T : (N(), T = w(Math.max(ye + 1, C)))
            };
        return {
            next: at,
            push: function(ye) {
                N(), T = ye, at(C)
            },
            end: function() {
                return N(), En([m])
            },
            _bufs: m
        }
    }

    function Ke(m, C, w, T) {
        var at, N = j[C];
        T || (T = x[N].p || (w || []).length || 0), at = 1 + (N >= 128 ? 1 : 0) + 1 + T, T >= 128 && ++at, T >= 16384 && ++at, T >= 2097152 && ++at;
        var bt = m.next(at);
        N <= 127 ? bt.write_shift(1, N) : (bt.write_shift(1, 128 + (127 & N)), bt.write_shift(1, N >> 7));
        for (var Ht = 0; 4 != Ht; ++Ht) {
            if (!(T >= 128)) {
                bt.write_shift(1, T);
                break
            }
            bt.write_shift(1, 128 + (127 & T)), T >>= 7
        }
        T > 0 && function Ei(m) {
            return typeof Buffer < "u" && m instanceof Buffer || Array.isArray(m)
        }(w) && m.push(w)
    }

    function Ai(m, C) {
        return {
            ich: m.read_shift(2),
            ifnt: m.read_shift(2)
        }
    }

    function An(m, C) {
        var w = m.l,
            T = m.read_shift(1),
            N = oi(m),
            at = [],
            bt = {
                t: N,
                h: N
            };
        if (1 & T) {
            for (var Ht = m.read_shift(4), ne = 0; ne != Ht; ++ne) at.push(Ai(m));
            bt.r = at
        } else bt.r = "<t>" + z(N) + "</t>";
        return m.l = w + C, bt
    }

    function Qe(m) {
        var C = m.read_shift(4),
            w = m.read_shift(2);
        return w += m.read_shift(1) << 16, m.read_shift(1), {
            c: C,
            iStyleRef: w
        }
    }

    function Jn(m) {
        var C = m.read_shift(4);
        return 0 === C || 4294967295 === C ? "" : m.read_shift(C, "dbcs")
    }

    function oi(m) {
        var C = m.read_shift(4);
        return 0 === C ? "" : m.read_shift(C, "dbcs")
    }

    function $n(m, C) {
        return null == C && (C = ci(127)), C.write_shift(4, m.length), m.length > 0 && C.write_shift(0, m, "dbcs"), C
    }
    var Hi = Jn,
        Fn = function Pr(m, C) {
            return C || (C = ci(127)), C.write_shift(4, m.length > 0 ? m.length : 4294967295), m.length > 0 && C.write_shift(0, m, "dbcs"), C
        };

    function Cr(m) {
        var C = {
            s: {},
            e: {}
        };
        return C.s.r = m.read_shift(4), C.e.r = m.read_shift(4), C.s.c = m.read_shift(4), C.e.c = m.read_shift(4), C
    }

    function es(m, C) {
        return m.read_shift(8, "f")
    }
    var ws = {
            0: "#NULL!",
            7: "#DIV/0!",
            15: "#VALUE!",
            23: "#REF!",
            29: "#NAME?",
            36: "#NUM!",
            42: "#N/A",
            43: "#GETTING_DATA",
            255: "#WTF?"
        },
        Is = tt(ws),
        ns = {
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": "workbooks",
            "application/vnd.ms-excel.binIndexWs": "TODO",
            "application/vnd.ms-excel.chartsheet": "TODO",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": "TODO",
            "application/vnd.ms-excel.dialogsheet": "TODO",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": "TODO",
            "application/vnd.ms-excel.macrosheet": "TODO",
            "application/vnd.ms-excel.macrosheet+xml": "TODO",
            "application/vnd.ms-excel.intlmacrosheet": "TODO",
            "application/vnd.ms-excel.binIndexMs": "TODO",
            "application/vnd.openxmlformats-package.core-properties+xml": "coreprops",
            "application/vnd.openxmlformats-officedocument.custom-properties+xml": "custprops",
            "application/vnd.openxmlformats-officedocument.extended-properties+xml": "extprops",
            "application/vnd.openxmlformats-officedocument.customXmlProperties+xml": "TODO",
            "application/vnd.ms-excel.comments": "comments",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": "comments",
            "application/vnd.ms-excel.pivotTable": "TODO",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml": "TODO",
            "application/vnd.ms-excel.calcChain": "calcchains",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml": "calcchains",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings": "TODO",
            "application/vnd.ms-office.activeX": "TODO",
            "application/vnd.ms-office.activeX+xml": "TODO",
            "application/vnd.ms-excel.attachedToolbars": "TODO",
            "application/vnd.ms-excel.connections": "TODO",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": "TODO",
            "application/vnd.ms-excel.externalLink": "TODO",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml": "TODO",
            "application/vnd.ms-excel.sheetMetadata": "TODO",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml": "TODO",
            "application/vnd.ms-excel.pivotCacheDefinition": "TODO",
            "application/vnd.ms-excel.pivotCacheRecords": "TODO",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml": "TODO",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml": "TODO",
            "application/vnd.ms-excel.queryTable": "TODO",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml": "TODO",
            "application/vnd.ms-excel.userNames": "TODO",
            "application/vnd.ms-excel.revisionHeaders": "TODO",
            "application/vnd.ms-excel.revisionLog": "TODO",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml": "TODO",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml": "TODO",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml": "TODO",
            "application/vnd.ms-excel.tableSingleCells": "TODO",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml": "TODO",
            "application/vnd.ms-excel.slicer": "TODO",
            "application/vnd.ms-excel.slicerCache": "TODO",
            "application/vnd.ms-excel.slicer+xml": "TODO",
            "application/vnd.ms-excel.slicerCache+xml": "TODO",
            "application/vnd.ms-excel.wsSortMap": "TODO",
            "application/vnd.ms-excel.table": "TODO",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": "TODO",
            "application/vnd.openxmlformats-officedocument.theme+xml": "themes",
            "application/vnd.ms-excel.Timeline+xml": "TODO",
            "application/vnd.ms-excel.TimelineCache+xml": "TODO",
            "application/vnd.ms-office.vbaProject": "vba",
            "application/vnd.ms-office.vbaProjectSignature": "vba",
            "application/vnd.ms-office.volatileDependencies": "TODO",
            "application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml": "TODO",
            "application/vnd.ms-excel.controlproperties+xml": "TODO",
            "application/vnd.openxmlformats-officedocument.model+data": "TODO",
            "application/vnd.ms-excel.Survey+xml": "TODO",
            "application/vnd.openxmlformats-officedocument.drawing+xml": "TODO",
            "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": "TODO",
            "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": "TODO",
            "application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml": "TODO",
            "application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml": "TODO",
            "application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml": "TODO",
            "application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml": "TODO",
            "application/vnd.openxmlformats-officedocument.vmlDrawing": "TODO",
            "application/vnd.openxmlformats-package.relationships+xml": "rels",
            "application/vnd.openxmlformats-officedocument.oleObject": "TODO",
            sheet: "js"
        },
        er = function() {
            var m = {
                workbooks: {
                    xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
                    xlsm: "application/vnd.ms-excel.sheet.macroEnabled.main+xml",
                    xlsb: "application/vnd.ms-excel.sheet.binary.macroEnabled.main",
                    xltx: "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"
                },
                strs: {
                    xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",
                    xlsb: "application/vnd.ms-excel.sharedStrings"
                },
                sheets: {
                    xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",
                    xlsb: "application/vnd.ms-excel.worksheet"
                },
                styles: {
                    xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",
                    xlsb: "application/vnd.ms-excel.styles"
                }
            };
            return Z(m).forEach(function(C) {
                m[C].xlsm || (m[C].xlsm = m[C].xlsx)
            }), Z(m).forEach(function(C) {
                Z(m[C]).forEach(function(w) {
                    ns[m[C][w]] = C
                })
            }), m
        }(),
        Mi = function nt(m) {
            for (var C = [], w = Z(m), T = 0; T !== w.length; ++T) null == C[m[w[T]]] && (C[m[w[T]]] = []), C[m[w[T]]].push(w[T]);
            return C
        }(ns);
    te.CT = "http://schemas.openxmlformats.org/package/2006/content-types";
    var Ti = Me("Types", null, {
            xmlns: te.CT,
            "xmlns:xsd": te.xsd,
            "xmlns:xsi": te.xsi
        }),
        ji = [
            ["xml", "application/xml"],
            ["bin", "application/vnd.ms-excel.sheet.binary.macroEnabled.main"],
            ["rels", Mi.rels[0]]
        ].map(function(m) {
            return Me("Default", null, {
                Extension: m[0],
                ContentType: m[1]
            })
        }),
        fi = {
            WB: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",
            SHEET: "http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
        };

    function Sr(m, C) {
        if (!m) return m;
        "/" !== C.charAt(0) && (C = "/" + C);
        var w = {},
            T = {};
        return m.match(jt).forEach(function(at) {
            var bt = Kt(at);
            if ("<Relationship" === bt[0]) {
                var Ht = {};
                Ht.Type = bt.Type, Ht.Target = bt.Target, Ht.Id = bt.Id, Ht.TargetMode = bt.TargetMode;
                var ne = "External" === bt.TargetMode ? bt.Target : function(at) {
                    var bt = C.split("/");
                    bt.pop();
                    for (var Ht = at.split("/"); 0 !== Ht.length;) {
                        var ye = Ht.shift();
                        ".." === ye ? bt.pop() : "." !== ye && bt.push(ye)
                    }
                    return bt.join("/")
                }(bt.Target);
                w[ne] = Ht, T[bt.Id] = Ht
            }
        }), w["!id"] = T, w
    }
    te.RELS = "http://schemas.openxmlformats.org/package/2006/relationships";
    var Mr = Me("Relationships", null, {
        xmlns: te.RELS
    });

    function ds(m) {
        var C = [];
        return C[C.length] = Wn, C[C.length] = Mr, Z(m["!id"]).forEach(function(w) {
            C[C.length] = Me("Relationship", null, m["!id"][w])
        }), C.length > 2 && (C[C.length] = "</Relationships>", C[1] = C[1].replace("/>", ">")), C.join("")
    }
    var cr = [
        ["cp:category", "Category"],
        ["cp:contentStatus", "ContentStatus"],
        ["cp:keywords", "Keywords"],
        ["cp:lastModifiedBy", "LastAuthor"],
        ["cp:lastPrinted", "LastPrinted"],
        ["cp:revision", "RevNumber"],
        ["cp:version", "Version"],
        ["dc:creator", "Author"],
        ["dc:description", "Comments"],
        ["dc:identifier", "Identifier"],
        ["dc:language", "Language"],
        ["dc:subject", "Subject"],
        ["dc:title", "Title"],
        ["dcterms:created", "CreatedDate", "date"],
        ["dcterms:modified", "ModifiedDate", "date"]
    ];
    te.CORE_PROPS = "http://schemas.openxmlformats.org/package/2006/metadata/core-properties", fi.CORE_PROPS = "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties";
    var ro = Me("cp:coreProperties", null, {
        "xmlns:cp": te.CORE_PROPS,
        "xmlns:dc": te.dc,
        "xmlns:dcterms": te.dcterms,
        "xmlns:dcmitype": te.dcmitype,
        "xmlns:xsi": te.xsi
    });

    function is(m, C, w, T, N) {
        null != N[m] || null == C || "" === C || ("string" != typeof C && (C = String(C)), N[m] = C, T[T.length] = w ? Me(m, C, w) : Ne(m, C))
    }
    var rs = [
        ["Application", "Application", "string"],
        ["AppVersion", "AppVersion", "string"],
        ["Company", "Company", "string"],
        ["DocSecurity", "DocSecurity", "string"],
        ["Manager", "Manager", "string"],
        ["HyperlinksChanged", "HyperlinksChanged", "bool"],
        ["SharedDoc", "SharedDoc", "bool"],
        ["LinksUpToDate", "LinksUpToDate", "bool"],
        ["ScaleCrop", "ScaleCrop", "bool"],
        ["HeadingPairs", "HeadingPairs", "raw"],
        ["TitlesOfParts", "TitlesOfParts", "raw"]
    ];
    te.EXT_PROPS = "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties", fi.EXT_PROPS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties";
    var Ii = Me("Properties", null, {
        xmlns: te.EXT_PROPS,
        "xmlns:vt": te.vt
    });
    te.CUST_PROPS = "http://schemas.openxmlformats.org/officeDocument/2006/custom-properties", fi.CUST_PROPS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties";
    var Nr = /<[^>]+>[^<]*/g,
        Ls = Me("Properties", null, {
            xmlns: te.CUST_PROPS,
            "xmlns:vt": te.vt
        });
    var ks = {
            0: 1252,
            1: 65001,
            2: 65001,
            77: 1e4,
            128: 932,
            129: 949,
            130: 1361,
            134: 936,
            136: 950,
            161: 1253,
            162: 1254,
            163: 1258,
            177: 1255,
            178: 1256,
            186: 1257,
            204: 1251,
            222: 874,
            238: 1250,
            255: 1252,
            69: 6969
        },
        zr = function() {
            var C = pt("t"),
                w = pt("rPr"),
                T = /<r>/g,
                N = /<\/r>/,
                at = /\r\n/g,
                bt = function(ye, Ee, ze) {
                    var Pe = {},
                        _n = 65001,
                        Vn = ye.match(jt),
                        Ln = 0;
                    if (Vn)
                        for (; Ln != Vn.length; ++Ln) {
                            var Sn = Kt(Vn[Ln]);
                            switch (Sn[0]) {
                                case "<condense":
                                case "<extend":
                                case "<shadow":
                                case "<shadow/>":
                                    break;
                                case "<charset":
                                    if ("1" == Sn.val) break;
                                    _n = ks[parseInt(Sn.val, 10)];
                                    break;
                                case "<outline":
                                case "<outline/>":
                                    break;
                                case "<rFont":
                                    Pe.name = Sn.val;
                                    break;
                                case "<sz":
                                    Pe.sz = Sn.val;
                                    break;
                                case "<strike":
                                    if (!Sn.val) break;
                                case "<strike/>":
                                    Pe.strike = 1;
                                    break;
                                case "</strike>":
                                    break;
                                case "<u":
                                    if (!Sn.val) break;
                                case "<u/>":
                                    Pe.u = 1;
                                    break;
                                case "</u>":
                                    break;
                                case "<b":
                                    if (!Sn.val) break;
                                case "<b/>":
                                    Pe.b = 1;
                                    break;
                                case "</b>":
                                    break;
                                case "<i":
                                    if (!Sn.val) break;
                                case "<i/>":
                                    Pe.i = 1;
                                    break;
                                case "</i>":
                                    break;
                                case "<color":
                                    Sn.rgb && (Pe.color = Sn.rgb.substr(2, 6));
                                    break;
                                case "<family":
                                    Pe.family = Sn.val;
                                    break;
                                case "<vertAlign":
                                case "<scheme":
                                    break;
                                default:
                                    if (47 !== Sn[0].charCodeAt(1)) throw "Unrecognized rich format " + Sn[0]
                            }
                        }
                    var nn = [];
                    return Pe.b && nn.push("font-weight: bold;"), Pe.i && nn.push("font-style: italic;"), Ee.push('<span style="' + nn.join("") + '">'), ze.push("</span>"), _n
                };

            function Ht(ne) {
                var ye = [
                        [], "", []
                    ],
                    Ee = ne.match(C);
                if (!mt(Ee)) return "";
                ye[1] = Ee[1];
                var Pe = ne.match(w);
                return mt(Pe) && bt(Pe[1], ye[0], ye[2]), ye[0].join("") + ye[1].replace(at, "<br/>") + ye[2].join("")
            }
            return function(ye) {
                return ye.replace(T, "").split(N).map(Ht).join("")
            }
        }(),
        Yi = /<t[^>]*>([^<]*)<\/t>/g,
        ht = /<r>/;

    function Et(m, C) {
        var w = !C || C.cellHTML,
            T = {};
        return m ? (116 === m.charCodeAt(1) ? (T.t = _t(V(m.substr(m.indexOf(">") + 1).split(/<\/t>/)[0])), T.r = m, w && (T.h = T.t)) : m.match(ht) && (T.r = m, T.t = _t(V(m.match(Yi).join("").replace(jt, ""))), w && (T.h = zr(m))), T) : null
    }
    var Rt = /<sst([^>]*)>([\s\S]*)<\/sst>/,
        ge = /<(?:si|sstItem)>/g,
        xe = /<\/(?:si|sstItem)>/;

    function Ge(m, C) {
        var T, w = [],
            N = m.match(Rt);
        if (mt(N)) {
            T = N[2].replace(ge, "").split(xe);
            for (var at = 0; at != T.length; ++at) {
                var bt = Et(T[at], C);
                null != bt && (w[w.length] = bt)
            }
            N = Kt(N[1]), w.Count = N.count, w.Unique = N.uniqueCount
        }
        return w
    }

    function De(m, C) {
        if (!C.bookSST) return "";
        var w = [Wn];
        w[w.length] = Me("sst", null, {
            xmlns: te.main[0],
            count: m.Count,
            uniqueCount: m.Unique
        });
        for (var T = 0; T != m.length; ++T)
            if (null != m[T]) {
                var N = m[T],
                    at = "<si>";
                N.r ? at += N.r : (at += "<t", N.t.match(/^\s|\s$|[\t\n\r]/) && (at += ' xml:space="preserve"'), at += ">" + z(N.t) + "</t>"), w[w.length] = at += "</si>"
            }
        return w.length > 2 && (w[w.length] = "</sst>", w[1] = w[1].replace("/>", ">")), w.join("")
    }

    function zn(m, C) {
        var w = [],
            T = !1;
        return gn(m, function(at, bt, Ht) {
            switch (bt.n) {
                case "BrtBeginSst":
                    w.Count = at[0], w.Unique = at[1];
                    break;
                case "BrtSSTItem":
                    w.push(at);
                    break;
                case "BrtEndSst":
                    return !0;
                case "BrtFRTBegin":
                    T = !0;
                    break;
                case "BrtFRTEnd":
                    T = !1;
                    break;
                default:
                    if (!T || C.WTF) throw new Error("Unexpected record " + Ht + " " + bt.n)
            }
        }), w
    }

    function Wi(m, C) {}

    function Ir(m, C) {
        if (0 === C) return m;
        var w = function gs(m) {
            var C = m[0] / 255,
                w = m[1] / 255,
                T = m[2] / 255,
                N = Math.max(C, w, T),
                at = Math.min(C, w, T),
                bt = N - at;
            if (0 === bt) return [0, 0, C];
            var ne, Ht = 0,
                ye = N + at;
            switch (ne = bt / (ye > 1 ? 2 - ye : ye), N) {
                case C:
                    Ht = ((w - T) / bt + 6) % 6;
                    break;
                case w:
                    Ht = (T - C) / bt + 2;
                    break;
                case T:
                    Ht = (C - w) / bt + 4
            }
            return [Ht / 6, ne, ye / 2]
        }(function Vi(m) {
            var C = m.substr("#" === m[0] ? 1 : 0, 6);
            return [parseInt(C.substr(0, 2), 16), parseInt(C.substr(0, 2), 16), parseInt(C.substr(0, 2), 16)]
        }(m));
        return w[2] = C < 0 ? w[2] * (1 + C) : 1 - (1 - w[2]) * (1 - C),
            function hr(m) {
                for (var C = 0, w = 1; 3 != C; ++C) w = 256 * w + (m[C] > 255 ? 255 : m[C] < 0 ? 0 : m[C]);
                return w.toString(16).toUpperCase().substr(1)
            }(function jr(m) {
                var ne, w = m[1],
                    T = m[2],
                    N = 2 * w * (T < .5 ? T : 1 - T),
                    at = T - N / 2,
                    bt = [at, at, at],
                    Ht = 6 * m[0];
                if (0 !== w) switch (0 | Ht) {
                    case 0:
                    case 6:
                        ne = N * Ht, bt[0] += N, bt[1] += ne;
                        break;
                    case 1:
                        bt[0] += ne = N * (2 - Ht), bt[1] += N;
                        break;
                    case 2:
                        ne = N * (Ht - 2), bt[1] += N, bt[2] += ne;
                        break;
                    case 3:
                        bt[1] += ne = N * (4 - Ht), bt[2] += N;
                        break;
                    case 4:
                        ne = N * (Ht - 4), bt[2] += N, bt[0] += ne;
                        break;
                    case 5:
                        bt[2] += ne = N * (6 - Ht), bt[0] += N
                }
                for (var ye = 0; 3 != ye; ++ye) bt[ye] = Math.round(255 * bt[ye]);
                return bt
            }(w))
    }
    fi.SST = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings";
    var $s = 7,
        Zi = 15,
        Bs = 1,
        Di = $s;

    function ms(m) {
        return (m + (128 / Di | 0) / 256) * Di | 0
    }

    function Lr(m) {
        return ((m - 5) / Di * 100 + .5 | 0) / 100
    }

    function Ui(m) {
        return ((m * Di + 5) / Di * 256 | 0) / 256
    }

    function Fs(m) {
        return Ui(Lr(ms(m)))
    }

    function mo(m, C) {
        if (Fs(m) != m) {
            for (Di = $s; Di > Bs && Fs(m) !== m; --Di);
            if (Di === Bs)
                for (Di = $s + 1; Di < Zi && Fs(m) !== m; ++Di);
            Di === Zi && (Di = $s)
        }
    }
    var ei = {},
        $i = {};

    function Rs(m, C) {
        var w;
        return (w = m.match(/<numFmts([^>]*)>.*<\/numFmts>/)) && function Us(m, C) {
            ei.NumberFmt = [];
            for (var w = Z(O._table), T = 0; T != w.length; ++T) ei.NumberFmt[w[T]] = O._table[w[T]];
            var N = m[0].match(jt);
            for (T = 0; T != N.length; ++T) {
                var at = Kt(N[T]);
                switch (at[0]) {
                    case "<numFmts":
                    case "</numFmts>":
                    case "<numFmts/>":
                    case "<numFmts>":
                        break;
                    case "<numFmt":
                        var bt = V(at.formatCode),
                            Ht = parseInt(at.numFmtId, 10);
                        ei.NumberFmt[Ht] = bt, Ht > 0 && O.load(bt, Ht);
                        break;
                    default:
                        if (C.WTF) throw "unrecognized " + at[0] + " in numFmts"
                }
            }
        }(w, C), (w = m.match(/<fills([^>]*)>.*<\/fills>/)) && function bs(m, C) {
            ei.Fills = [];
            var w = {};
            m[0].match(jt).forEach(function(T) {
                var N = Kt(T);
                switch (N[0]) {
                    case "<fills":
                    case "<fills>":
                    case "</fills>":
                    case "<fill>":
                    case "<patternFill/>":
                    case "</patternFill>":
                    case "<bgColor/>":
                    case "</bgColor>":
                    case "<bgColor/>":
                    case "</fgColor>":
                        break;
                    case "</fill>":
                        ei.Fills.push(w), w = {};
                        break;
                    case "<patternFill":
                        N.patternType && (w.patternType = N.patternType);
                        break;
                    case "<bgColor":
                        w.bgColor || (w.bgColor = {}), N.indexed && (w.bgColor.indexed = parseInt(N.indexed, 10)), N.theme && (w.bgColor.theme = parseInt(N.theme, 10)), N.tint && (w.bgColor.tint = parseFloat(N.tint)), N.rgb && (w.bgColor.rgb = N.rgb.substring(N.rgb.length - 6));
                        break;
                    case "<fgColor":
                        w.fgColor || (w.fgColor = {}), N.theme && (w.fgColor.theme = parseInt(N.theme, 10)), N.tint && (w.fgColor.tint = parseFloat(N.tint)), N.rgb && (w.fgColor.rgb = N.rgb.substring(N.rgb.length - 6));
                        break;
                    default:
                        if (C.WTF) throw "unrecognized " + N[0] + " in fills"
                }
            })
        }(w, C), (w = m.match(/<cellXfs([^>]*)>.*<\/cellXfs>/)) && function Es(m, C) {
            ei.CellXf = [], m[0].match(jt).forEach(function(w) {
                var T = Kt(w);
                switch (T[0]) {
                    case "<cellXfs":
                    case "<cellXfs>":
                    case "<cellXfs/>":
                    case "</cellXfs>":
                    case "</xf>":
                    case "<alignment":
                    case "<alignment/>":
                    case "<protection":
                    case "</protection>":
                    case "<protection/>":
                    case "<extLst":
                    case "</extLst>":
                    case "<ext":
                        break;
                    case "<xf":
                        delete T[0], T.numFmtId && (T.numFmtId = parseInt(T.numFmtId, 10)), T.fillId && (T.fillId = parseInt(T.fillId, 10)), ei.CellXf.push(T);
                        break;
                    default:
                        if (C.WTF) throw "unrecognized " + T[0] + " in cellXfs"
                }
            })
        }(w, C), ei
    }
    var Vr = Me("styleSheet", null, {
        xmlns: te.main[0],
        "xmlns:vt": te.vt
    });

    function Xs(m, C) {
        var N, w = [];
        return w[w.length] = Wn, w[w.length] = Vr, (N = function vs(m, C) {
            var w = ["<numFmts>"];
            return [
                [5, 8],
                [23, 26],
                [41, 44],
                [63, 66],
                [164, 392]
            ].forEach(function(T) {
                for (var N = T[0]; N <= T[1]; ++N) void 0 !== m[N] && (w[w.length] = Me("numFmt", null, {
                    numFmtId: N,
                    formatCode: z(m[N])
                }))
            }), w[w.length] = "</numFmts>", 2 === w.length ? "" : (w[0] = Me("numFmts", null, {
                count: w.length - 2
            }).replace("/>", ">"), w.join(""))
        }(m.SSF)) && (w[w.length] = N), w[w.length] = '<fonts count="1"><font><sz val="12"/><color theme="1"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font></fonts>', w[w.length] = '<fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills>', w[w.length] = '<borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders>', w[w.length] = '<cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs>', (N = function Wr(m) {
            var C = [];
            return C[C.length] = Me("cellXfs", null), m.forEach(function(w) {
                C[C.length] = Me("xf", null, w)
            }), C[C.length] = "</cellXfs>", 2 === C.length ? "" : (C[0] = Me("cellXfs", null, {
                count: C.length - 2
            }).replace("/>", ">"), C.join(""))
        }(C.cellXfs)) && (w[w.length] = N), w[w.length] = '<cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles>', w[w.length] = '<dxfs count="0"/>', w[w.length] = '<tableStyles count="0" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleMedium4"/>', w.length > 2 && (w[w.length] = "</styleSheet>", w[1] = w[1].replace("/>", ">")), w.join("")
    }

    function Ur(m, C) {
        for (var w in ei.NumberFmt = [], O._table) ei.NumberFmt[w] = O._table[w];
        ei.CellXf = [];
        var T = "",
            N = !1;
        return gn(m, function(bt, Ht, ne) {
            switch (Ht.n) {
                case "BrtFmt":
                    ei.NumberFmt[bt[0]] = bt[1], O.load(bt[1], bt[0]);
                    break;
                case "BrtFont":
                case "BrtKnownFonts":
                case "BrtFill":
                case "BrtBorder":
                case "BrtStyle":
                case "BrtDXF":
                case "BrtMRUColor":
                case "BrtIndexedColor":
                case "BrtBeginStyleSheet":
                case "BrtEndStyleSheet":
                case "BrtBeginTableStyle":
                case "BrtTableStyleElement":
                case "BrtEndTableStyle":
                case "BrtBeginStyleSheetExt14":
                case "BrtBeginSlicerStyles":
                case "BrtEndSlicerStyles":
                case "BrtBeginTimelineStylesheetExt15":
                case "BrtEndTimelineStylesheetExt15":
                case "BrtBeginTimelineStyles":
                case "BrtEndTimelineStyles":
                case "BrtEndStyleSheetExt14":
                    break;
                case "BrtXF":
                    "CELLXFS" === T && ei.CellXf.push(bt);
                    break;
                case "BrtBeginFmts":
                    T = "FMTS";
                    break;
                case "BrtEndFmts":
                case "BrtEndFonts":
                case "BrtACEnd":
                case "BrtEndFills":
                case "BrtEndBorders":
                case "BrtEndCellStyleXFs":
                case "BrtEndCellXFs":
                case "BrtEndStyles":
                case "BrtEndDXFs":
                case "BrtEndTableStyles":
                case "BrtEndColorPalette":
                case "BrtEndIndexedColors":
                case "BrtEndMRUColors":
                    T = "";
                    break;
                case "BrtBeginFonts":
                    T = "FONTS";
                    break;
                case "BrtACBegin":
                    T = "ACFONTS";
                    break;
                case "BrtBeginFills":
                    T = "FILLS";
                    break;
                case "BrtBeginBorders":
                    T = "BORDERS";
                    break;
                case "BrtBeginCellStyleXFs":
                    T = "CELLSTYLEXFS";
                    break;
                case "BrtBeginCellXFs":
                    T = "CELLXFS";
                    break;
                case "BrtBeginStyles":
                    T = "STYLES";
                    break;
                case "BrtBeginDXFs":
                    T = "DXFS";
                    break;
                case "BrtBeginTableStyles":
                    T = "TABLESTYLES";
                    break;
                case "BrtBeginColorPalette":
                    T = "COLORPALETTE";
                    break;
                case "BrtBeginIndexedColors":
                    T = "INDEXEDCOLORS";
                    break;
                case "BrtBeginMRUColors":
                    T = "MRUCOLORS";
                    break;
                case "BrtFRTBegin":
                    N = !0;
                    break;
                case "BrtFRTEnd":
                    N = !1;
                    break;
                default:
                    if (!N || C.WTF) throw new Error("Unexpected record " + ne + " " + Ht.n)
            }
        }), ei
    }

    function Ji(m, C) {}
    fi.STY = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles", fi.THEME = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme";
    var os = /<a:clrScheme([^>]*)>.*<\/a:clrScheme>/;

    function g(m, C) {
        var w = [],
            N = 1;
        return (m.match(jt) || []).forEach(function(at) {
            var bt = Kt(at);
            switch (bt[0]) {
                case "<?xml":
                case "<calcChain":
                case "<calcChain>":
                case "</calcChain>":
                    break;
                case "<c":
                    delete bt[0], bt.i ? N = bt.i : bt.i = N, w.push(bt)
            }
        }), w
    }

    function L(m, C) {
        var w = [];
        return gn(m, function(at, bt, Ht) {
            switch (bt.n) {
                case "BrtCalcChainItem$":
                    w.push(at);
                    break;
                case "BrtBeginCalcChain$":
                case "BrtEndCalcChain$":
                    break;
                default:
                    throw new Error("Unexpected record " + Ht + " " + bt.n)
            }
        }), w
    }

    function yt(m, C, w) {
        w.forEach(function(T) {
            var N = C[T.ref];
            if (!N) {
                C[T.ref] = N = {};
                var at = Jr(C["!ref"] || "BDWGO1000001:A1"),
                    bt = Ao(T.ref);
                at.s.r > bt.r && (at.s.r = bt.r), at.e.r < bt.r && (at.e.r = bt.r), at.s.c > bt.c && (at.s.c = bt.c), at.e.c < bt.c && (at.e.c = bt.c);
                var Ht = po(at);
                Ht !== C["!ref"] && (C["!ref"] = Ht)
            }
            N.c || (N.c = []);
            var ne = {
                a: T.author,
                t: T.t,
                r: T.r
            };
            T.h && (ne.h = T.h), N.c.push(ne)
        })
    }

    function vt(m, C) {
        if (m.match(/<(?:\w+:)?comments *\/>/)) return [];
        var w = [],
            T = [];
        return m.match(/<(?:\w+:)?authors>([^\u2603]*)<\/(?:\w+:)?authors>/)[1].split(/<\/\w*:?author>/).forEach(function(N) {
            "" === N || "" === N.trim() || w.push(N.match(/<(?:\w+:)?author[^>]*>(.*)/)[1])
        }), (m.match(/<(?:\w+:)?commentList>([^\u2603]*)<\/(?:\w+:)?commentList>/) || ["", ""])[1].split(/<\/\w*:?comment>/).forEach(function(N, at) {
            if ("" !== N && "" !== N.trim()) {
                var bt = Kt(N.match(/<(?:\w+:)?comment[^>]*>/)[0]),
                    Ht = {
                        author: bt.authorId && w[bt.authorId] ? w[bt.authorId] : void 0,
                        ref: bt.ref,
                        guid: bt.guid
                    },
                    ne = Ao(bt.ref);
                if (!(C.sheetRows && C.sheetRows <= ne.r)) {
                    var ye = N.match(/<text>([^\u2603]*)<\/text>/);
                    if (ye && ye[1]) {
                        var Ee = Et(ye[1]);
                        Ht.r = Ee.r, Ht.t = Ee.t, C.cellHTML && (Ht.h = Ee.h), T.push(Ht)
                    }
                }
            }
        }), T
    }
    var de = oi,
        Xt = An;

    function pe(m, C) {
        var w = [],
            T = [],
            N = {};
        return gn(m, function(Ht, ne, ye) {
            switch (ne.n) {
                case "BrtCommentAuthor":
                    T.push(Ht);
                    break;
                case "BrtBeginComment":
                    N = Ht;
                    break;
                case "BrtCommentText":
                    N.t = Ht.t, N.h = Ht.h, N.r = Ht.r;
                    break;
                case "BrtEndComment":
                    if (N.author = T[N.iauthor], delete N.iauthor, C.sheetRows && C.sheetRows <= N.rfx.r) break;
                    delete N.rfx, w.push(N);
                    break;
                case "BrtBeginComments":
                case "BrtEndComments":
                case "BrtBeginCommentAuthors":
                case "BrtEndCommentAuthors":
                case "BrtBeginCommentList":
                case "BrtEndCommentList":
                    break;
                default:
                    throw new Error("Unexpected record " + ye + " " + ne.n)
            }
        }), w
    }

    function hn(m, C) {
        return m.read_shift(4), v(m, C - 4)
    }
    var on = {},
        ni = {};

    function gr(m, C, w) {
        for (var T = w.revssf[null != C.z ? C.z : "General"], N = 0; N != m.length; ++N)
            if (m[N].numFmtId === T) return N;
        return m[m.length] = {
            numFmtId: T,
            fontId: 0,
            fillId: 0,
            borderId: 0,
            xfId: 0,
            applyNumberFormat: 1
        }, m.length - 1
    }

    function Xi(m, C, w, T) {
        try {
            if (0 === C)
                if ("n" === m.t) m.w = (0 | m.v) === m.v ? O._general_int(m.v, ni) : O._general_num(m.v, ni);
                else {
                    if (void 0 === m.v) return "";
                    m.w = O._general(m.v, ni)
                }
            else m.w = O.format(C, m.v, ni);
            T.cellNF && (m.z = O._table[C])
        } catch (N) {
            if (T.WTF) throw N
        }
        if (w) try {
            m.s = ei.Fills[w], m.s.fgColor && m.s.fgColor.theme && (m.s.fgColor.rgb = Ir($i.themeElements.clrScheme[m.s.fgColor.theme].rgb, m.s.fgColor.tint || 0), T.WTF && (m.s.fgColor.raw_rgb = $i.themeElements.clrScheme[m.s.fgColor.theme].rgb)), m.s.bgColor && m.s.bgColor.theme && (m.s.bgColor.rgb = Ir($i.themeElements.clrScheme[m.s.bgColor.theme].rgb, m.s.bgColor.tint || 0), T.WTF && (m.s.bgColor.raw_rgb = $i.themeElements.clrScheme[m.s.bgColor.theme].rgb))
        } catch (N) {
            if (T.WTF) throw N
        }
    }
    fi.WS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet";
    var Ts = /<mergeCell ref="[A-Z0-9:]+"\s*\/>/g,
        Mn = /<(?:\w+:)?sheetData>([^\u2603]*)<\/(?:\w+:)?sheetData>/,
        Kn = /<hyperlink[^>]*\/>/g;

    function Ys(m, C, w) {
        if (!m) return m;
        var T = {},
            N = m.indexOf("<dimension");
        if (N > 0) {
            var at = m.substr(N, 50).match(/"(\w*:\w*)"/);
            null != at && function Dn(m, C) {
                var w = Jr(C);
                w.s.r <= w.e.r && w.s.c <= w.e.c && w.s.r >= 0 && w.e.r >= 0 && (m["!ref"] = po(w))
            }(T, at[1])
        }
        var bt = [];
        if (-1 !== m.indexOf("</mergeCells>")) {
            var Ht = m.match(Ts);
            for (N = 0; N != Ht.length; ++N) bt[N] = Jr(Ht[N].substr(Ht[N].indexOf('"') + 1))
        }
        var ne = [];
        C.cellStyles && -1 !== m.indexOf("</cols>") && function ur(m, C) {
            for (var w = !1, T = 0; T != C.length; ++T) {
                var N = Kt(C[T], !0),
                    at = parseInt(N.min, 10) - 1,
                    bt = parseInt(N.max, 10) - 1;
                for (delete N.min, delete N.max, !w && N.width && (w = !0, mo(+N.width)), N.width && (N.wpx = ms(+N.width), N.wch = Lr(N.wpx), N.MDW = Di); at <= bt;) m[at++] = N
            }
        }(ne, m.match(/<col[^>]*\/>/g));
        var Ee = {
                s: {
                    r: 1e6,
                    c: 1e6
                },
                e: {
                    r: 0,
                    c: 0
                }
            },
            ze = m.match(Mn);
        if (ze && br(ze[1], T, C, Ee), -1 !== m.indexOf("</hyperlinks>") && function Zs(m, C, w) {
                for (var T = 0; T != C.length; ++T) {
                    var N = Kt(C[T], !0);
                    if (!N.ref) return;
                    var at = w["!id"][N.id];
                    at && (N.Target = at.Target, N.location && (N.Target += "#" + N.location), N.Rel = at);
                    for (var bt = Jr(N.ref), Ht = bt.s.r; Ht <= bt.e.r; ++Ht)
                        for (var ne = bt.s.c; ne <= bt.e.c; ++ne) {
                            var ye = uo({
                                c: ne,
                                r: Ht
                            });
                            m[ye] || (m[ye] = {
                                t: "str",
                                v: void 0
                            }), m[ye].l = N
                        }
                }
            }(T, m.match(Kn), w), !T["!ref"] && Ee.e.c >= Ee.s.c && Ee.e.r >= Ee.s.r && (T["!ref"] = po(Ee)), C.sheetRows > 0 && T["!ref"]) {
            var Pe = Jr(T["!ref"]);
            C.sheetRows < +Pe.e.r && (Pe.e.r = C.sheetRows - 1, Pe.e.r > Ee.e.r && (Pe.e.r = Ee.e.r), Pe.e.r < Pe.s.r && (Pe.s.r = Pe.e.r), Pe.e.c > Ee.e.c && (Pe.e.c = Ee.e.c), Pe.e.c < Pe.s.c && (Pe.s.c = Pe.e.c), T["!fullref"] = T["!ref"], T["!ref"] = po(Pe))
        }
        return bt.length > 0 && (T["!merges"] = bt), ne.length > 0 && (T["!cols"] = ne), T
    }

    function mr(m, C, w, T, N, at) {
        if (void 0 === m.v) return "";
        var bt = "";
        switch (m.t) {
            case "b":
                bt = m.v ? "1" : "0";
                break;
            case "n":
            case "e":
                bt = "" + m.v;
                break;
            default:
                bt = m.v
        }
        var Ht = Ne("v", z(bt)),
            ne = {
                r: C
            },
            ye = gr(T.cellXfs, m, T);
        switch (0 !== ye && (ne.s = ye), m.t) {
            case "s":
            case "str":
                if (T.bookSST) {
                    Ht = Ne("v", "" + function vi(m, C) {
                        for (var w = 0; w != m.length; ++w)
                            if (m[w].t === C) return m.Count++, w;
                        return m[m.length] = {
                            t: C
                        }, m.Count++, m.Unique++, m.length - 1
                    }(T.Strings, m.v)), ne.t = "s";
                    break
                }
                ne.t = "str";
                break;
            case "n":
                break;
            case "b":
                ne.t = "b";
                break;
            case "e":
                ne.t = "e"
        }
        return Me("c", Ht, ne)
    }
    var C, w, T, N, at, bt, br = (C = /<(?:\w+:)?c /, w = /<\/(?:\w+:)?row>/, T = /r=["']([^"']*)["']/, N = /<is>([\S\s]*?)<\/is>/, at = pt("v"), bt = pt("f"), function(ne, ye, Ee, ze) {
            for (var kn, li, Fr, no, Pe = 0, _n = "", Vn = [], Ln = [], Sn = 0, nn = 0, Yn = 0, yn = "", go = 0, Rr = 0, xs = Array.isArray(ei.CellXf), hs = ne.split(w), fs = 0; fs != hs.length; ++fs)
                if (0 !== (_n = hs[fs].trim()).length) {
                    for (Pe = 0; Pe != _n.length && 62 !== _n.charCodeAt(Pe); ++Pe);
                    if (++Pe, li = Kt(_n.substr(0, Pe), !0), !(Ee.sheetRows && Ee.sheetRows < +li.r))
                        for (ze.s.r > li.r - 1 && (ze.s.r = li.r - 1), ze.e.r < li.r - 1 && (ze.e.r = li.r - 1), Vn = _n.substr(Pe).split(C), Pe = 0; Pe != Vn.length; ++Pe)
                            if (0 !== (_n = Vn[Pe].trim()).length) {
                                if (Ln = _n.match(T), Sn = Pe, nn = 0, Yn = 0, _n = "<c " + _n, null !== Ln && 2 === Ln.length) {
                                    for (Sn = 0, yn = Ln[1], nn = 0; nn != yn.length && !((Yn = yn.charCodeAt(nn) - 64) < 1 || Yn > 26); ++nn) Sn = 26 * Sn + Yn;
                                    --Sn
                                }
                                for (nn = 0; nn != _n.length && 62 !== _n.charCodeAt(nn); ++nn);
                                if (++nn, li = Kt(_n.substr(0, nn), !0), kn = {
                                        t: ""
                                    }, null !== (Ln = (yn = _n.substr(nn)).match(at)) && (kn.v = V(Ln[1])), Ee.cellFormula && null !== (Ln = yn.match(bt)) && (kn.f = V(Ln[1])), void 0 === li.t && void 0 === kn.v) {
                                    if (!Ee.sheetStubs) continue;
                                    kn.t = "str"
                                } else kn.t = li.t || "n";
                                switch (ze.s.c > Sn && (ze.s.c = Sn), ze.e.c < Sn && (ze.e.c = Sn), kn.t) {
                                    case "n":
                                        kn.v = parseFloat(kn.v);
                                        break;
                                    case "s":
                                        Fr = on[parseInt(kn.v, 10)], kn.v = Fr.t, kn.r = Fr.r, Ee.cellHTML && (kn.h = Fr.h);
                                        break;
                                    case "str":
                                        kn.v = null != kn.v ? _t(kn.v) : "";
                                        break;
                                    case "inlineStr":
                                        Ln = yn.match(N), kn.t = "str", null !== Ln ? (Fr = Et(Ln[1]), kn.v = Fr.t) : kn.v = "";
                                        break;
                                    case "b":
                                        kn.v = X(kn.v);
                                        break;
                                    case "d":
                                        kn.v = lt(kn.v), kn.t = "n";
                                        break;
                                    case "e":
                                        kn.raw = Is[kn.v]
                                }
                                go = Rr = 0, xs && void 0 !== li.s && null != (no = ei.CellXf[li.s]) && (null != no.numFmtId && (go = no.numFmtId), Ee.cellStyles && null != no.fillId && (Rr = no.fillId)), Xi(kn, go, Rr, Ee), ye[li.r] = kn
                            }
                }
        }),
        Fi = Me("worksheet", null, {
            xmlns: te.main[0],
            "xmlns:r": te.r
        });

    function ui(m, C, w) {
        var bt, T = [Wn, Fi],
            at = w.Sheets[w.SheetNames[m]] || {},
            Ht = "";
        return T[T.length] = Me("dimension", null, {
            ref: at["!ref"] || "A1"
        }), (at["!cols"] || []).length > 0 && (T[T.length] = function $r(m, C) {
            for (var T, N, w = ["<cols>"], at = 0; at != C.length; ++at)
                if (T = C[at]) {
                    var bt = {
                        min: at + 1,
                        max: at + 1
                    };
                    N = -1, T.wpx ? N = Lr(T.wpx) : T.wch && (N = T.wch), N > -1 && (bt.width = Ui(N), bt.customWidth = 1), w[w.length] = Me("col", null, bt)
                }
            return w[w.length] = "</cols>", w.join("")
        }(0, at["!cols"])), bt = T.length, T[T.length] = Me("sheetData", null), at["!ref"] && (Ht = function qi(m, C, w, T) {
            for (var Ht, ne, N = [], at = [], bt = Jr(m["!ref"]), ye = "", Ee = [], ze = bt.s.r; ze <= bt.e.r; ++ze) {
                at = [], ye = cs(ze);
                for (var Pe = bt.s.c; Pe <= bt.e.c; ++Pe) ze === bt.s.r && (Ee[Pe] = to(Pe)), m[ne = Ee[Pe] + ye] && (Ht = mr(m[ne], ne, 0, C)) && at.push(Ht);
                at.length && (N[N.length] = Me("row", at.join(""), {
                    r: ye
                }))
            }
            return N.join("")
        }(at, C)), Ht.length && (T[T.length] = Ht), T.length > bt + 1 && (T[T.length] = "</sheetData>", T[bt] = T[bt].replace("/>", ">")), T.length > 2 && (T[T.length] = "</worksheet>", T[1] = T[1].replace("/>", ">")), T.join("")
    }
    var rr = Cr,
        vr = function us(m, C) {
            return C || (C = ci(16)), C.write_shift(4, m.s.r), C.write_shift(4, m.e.r), C.write_shift(4, m.s.c), C.write_shift(4, m.e.c), C
        },
        qr = Cr;

    function Gr(m, C, w) {
        if (!m) return m;
        w || (w = {
            "!id": {}
        });
        var N, ne, ye, Ee, Pe, _n, Vn, Ln, T = {},
            at = {
                s: {
                    r: 1e6,
                    c: 1e6
                },
                e: {
                    r: 0,
                    c: 0
                }
            },
            bt = !1,
            Ht = !1,
            Sn = [];
        if (gn(m, function(yn, kn) {
                if (!Ht) switch (kn.n) {
                    case "BrtWsDim":
                        N = yn;
                        break;
                    case "BrtRowHdr":
                        ne = yn, C.sheetRows && C.sheetRows <= ne.r && (Ht = !0), Ln = cs(ne.r);
                        break;
                    case "BrtFmlaBool":
                    case "BrtFmlaError":
                    case "BrtFmlaNum":
                    case "BrtFmlaString":
                    case "BrtCellBool":
                    case "BrtCellError":
                    case "BrtCellIsst":
                    case "BrtCellReal":
                    case "BrtCellRk":
                    case "BrtCellSt":
                        switch (ye = {
                            t: yn[2]
                        }, yn[2]) {
                            case "n":
                                ye.v = yn[1];
                                break;
                            case "s":
                                ye.v = (Vn = on[yn[1]]).t, ye.r = Vn.r;
                                break;
                            case "b":
                                ye.v = !!yn[1];
                                break;
                            case "e":
                                ye.raw = yn[1], ye.v = ws[ye.raw];
                                break;
                            case "str":
                                ye.v = _t(yn[1])
                        }
                        C.cellFormula && yn.length > 3 && (ye.f = yn[3]), (Ee = ei.CellXf[yn[0].iStyleRef]) && Xi(ye, Ee.ifmt, null, C), T[to(Pe = yn[0].c) + Ln] = ye, at.s.r > ne.r && (at.s.r = ne.r), at.s.c > Pe && (at.s.c = Pe), at.e.r < ne.r && (at.e.r = ne.r), at.e.c < Pe && (at.e.c = Pe);
                        break;
                    case "BrtCellBlank":
                        if (!C.sheetStubs) break;
                        ye = {
                            t: "str",
                            v: void 0
                        }, T[to(Pe = yn[0].c) + Ln] = ye, at.s.r > ne.r && (at.s.r = ne.r), at.s.c > Pe && (at.s.c = Pe), at.e.r < ne.r && (at.e.r = ne.r), at.e.c < Pe && (at.e.c = Pe);
                        break;
                    case "BrtBeginMergeCells":
                    case "BrtEndMergeCells":
                    case "BrtArrFmla":
                    case "BrtShrFmla":
                    case "BrtBeginSheet":
                    case "BrtWsProp":
                    case "BrtSheetCalcProp":
                    case "BrtBeginWsViews":
                    case "BrtBeginWsView":
                    case "BrtPane":
                    case "BrtSel":
                    case "BrtEndWsView":
                    case "BrtEndWsViews":
                    case "BrtACBegin":
                    case "BrtRwDescent":
                    case "BrtACEnd":
                    case "BrtWsFmtInfoEx14":
                    case "BrtWsFmtInfo":
                    case "BrtBeginColInfos":
                    case "BrtColInfo":
                    case "BrtEndColInfos":
                    case "BrtBeginSheetData":
                    case "BrtEndSheetData":
                    case "BrtSheetProtection":
                    case "BrtPrintOptions":
                    case "BrtMargins":
                    case "BrtPageSetup":
                    case "BrtEndSheet":
                    case "BrtDrawing":
                    case "BrtLegacyDrawing":
                    case "BrtLegacyDrawingHF":
                    case "BrtPhoneticInfo":
                    case "BrtBeginHeaderFooter":
                    case "BrtEndHeaderFooter":
                    case "BrtBrk":
                    case "BrtBeginRwBrk":
                    case "BrtEndRwBrk":
                    case "BrtBeginColBrk":
                    case "BrtEndColBrk":
                    case "BrtBeginUserShViews":
                    case "BrtBeginUserShView":
                    case "BrtEndUserShView":
                    case "BrtEndUserShViews":
                    case "BrtBkHim":
                    case "BrtBeginOleObjects":
                    case "BrtOleObject":
                    case "BrtEndOleObjects":
                    case "BrtBeginListParts":
                    case "BrtListPart":
                    case "BrtEndListParts":
                    case "BrtBeginSortState":
                    case "BrtBeginSortCond":
                    case "BrtEndSortCond":
                    case "BrtEndSortState":
                    case "BrtBeginConditionalFormatting":
                    case "BrtEndConditionalFormatting":
                    case "BrtBeginCFRule":
                    case "BrtEndCFRule":
                    case "BrtBeginDVals":
                    case "BrtDVal":
                    case "BrtEndDVals":
                    case "BrtRangeProtection":
                    case "BrtBeginDCon":
                    case "BrtEndDCon":
                    case "BrtBeginDRefs":
                    case "BrtDRef":
                    case "BrtEndDRefs":
                    case "BrtBeginActiveXControls":
                    case "BrtActiveX":
                    case "BrtEndActiveXControls":
                    case "BrtBeginAFilter":
                    case "BrtEndAFilter":
                    case "BrtBeginFilterColumn":
                    case "BrtBeginFilters":
                    case "BrtFilter":
                    case "BrtEndFilters":
                    case "BrtEndFilterColumn":
                    case "BrtDynamicFilter":
                    case "BrtTop10Filter":
                    case "BrtBeginCustomFilters":
                    case "BrtCustomFilter":
                    case "BrtEndCustomFilters":
                    case "BrtBeginCellWatches":
                    case "BrtCellWatch":
                    case "BrtEndCellWatches":
                    case "BrtTable":
                    case "BrtBeginCellIgnoreECs":
                    case "BrtCellIgnoreEC":
                    case "BrtEndCellIgnoreECs":
                        break;
                    case "BrtMergeCell":
                        Sn.push(yn);
                        break;
                    case "BrtHLink":
                        var li = w["!id"][yn.relId];
                        for (li && (yn.Target = li.Target, yn.loc && (yn.Target += "#" + yn.loc), yn.Rel = li), kn = yn.rfx.s.r; kn <= yn.rfx.e.r; ++kn)
                            for (Pe = yn.rfx.s.c; Pe <= yn.rfx.e.c; ++Pe) _n = uo({
                                c: Pe,
                                r: kn
                            }), T[_n] || (T[_n] = {
                                t: "str",
                                v: void 0
                            }), T[_n].l = yn;
                        break;
                    case "BrtFRTBegin":
                        bt = !0;
                        break;
                    case "BrtFRTEnd":
                        bt = !1;
                        break;
                    default:
                        if (!bt || C.WTF) throw new Error("Unexpected record " + kn.n)
                }
            }, C), !T["!ref"] && (at.s.r < 1e6 || N.e.r > 0 || N.e.c > 0 || N.s.r > 0 || N.s.c > 0) && (T["!ref"] = po(N)), C.sheetRows && T["!ref"]) {
            var nn = Jr(T["!ref"]);
            C.sheetRows < +nn.e.r && (nn.e.r = C.sheetRows - 1, nn.e.r > at.e.r && (nn.e.r = at.e.r), nn.e.r < nn.s.r && (nn.s.r = nn.e.r), nn.e.c > at.e.c && (nn.e.c = at.e.c), nn.e.c < nn.s.c && (nn.s.c = nn.e.c), T["!fullref"] = T["!ref"], T["!ref"] = po(nn))
        }
        return Sn.length > 0 && (T["!merges"] = Sn), T
    }

    function As(m, C, w) {
        var T = si(),
            at = w.Sheets[w.SheetNames[m]] || {},
            bt = Jr(at["!ref"] || "A1");
        return Ke(T, "BrtBeginSheet"), Ke(T, "BrtWsDim", vr(bt)),
            function Js(m, C, w, T, N) {
                var at = Jr(C["!ref"] || "A1");
                Ke(m, "BrtBeginSheetData");
                for (var bt = at.s.r; bt <= at.e.r; ++bt);
                Ke(m, "BrtEndSheetData")
            }(T, at), Ke(T, "BrtEndSheet"), T.end()
    }
    var oo = [
            ["allowRefreshQuery", "0"],
            ["autoCompressPictures", "1"],
            ["backupFile", "0"],
            ["checkCompatibility", "0"],
            ["codeName", ""],
            ["date1904", "0"],
            ["dateCompatibility", "1"],
            ["filterPrivacy", "0"],
            ["hidePivotFieldList", "0"],
            ["promptedSolutions", "0"],
            ["publishItems", "0"],
            ["refreshAllConnections", !1],
            ["saveExternalLinkValues", "1"],
            ["showBorderUnselectedTables", "1"],
            ["showInkAnnotation", "1"],
            ["showObjects", "all"],
            ["showPivotChartFilter", "0"]
        ],
        ao = [
            ["activeTab", "0"],
            ["autoFilterDateGrouping", "1"],
            ["firstSheet", "0"],
            ["minimized", "0"],
            ["showHorizontalScroll", "1"],
            ["showSheetTabs", "1"],
            ["showVerticalScroll", "1"],
            ["tabRatio", "600"],
            ["visibility", "visible"]
        ],
        lo = [
            ["state", "visible"]
        ],
        Ks = [
            ["calcCompleted", "true"],
            ["calcMode", "auto"],
            ["calcOnSave", "true"],
            ["concurrentCalc", "true"],
            ["fullCalcOnLoad", "false"],
            ["fullPrecision", "true"],
            ["iterate", "false"],
            ["iterateCount", "100"],
            ["iterateDelta", "0.001"],
            ["refMode", "A1"]
        ];

    function At(m, C) {
        for (var w = 0; w != m.length; ++w)
            for (var T = m[w], N = 0; N != C.length; ++N) {
                var at = C[N];
                null == T[at[0]] && (T[at[0]] = at[1])
            }
    }

    function Zt(m, C) {
        for (var w = 0; w != C.length; ++w) {
            var T = C[w];
            null == m[T[0]] && (m[T[0]] = T[1])
        }
    }

    function se(m) {
        Zt(m.WBProps, oo), Zt(m.CalcPr, Ks), At(m.WBView, ao), At(m.Sheets, lo), ni.date1904 = X(m.WBProps.date1904)
    }

    function fe(m, C) {
        var w = {
                AppVersion: {},
                WBProps: {},
                WBView: [],
                Sheets: [],
                CalcPr: {},
                xmlns: ""
            },
            T = !1,
            N = "xmlns";
        if (m.match(jt).forEach(function(bt) {
                var Ht = Kt(bt);
                switch (function Qt(m) {
                    return m.replace(be, "<$1")
                }(Ht[0])) {
                    case "<?xml":
                    case "</workbook>":
                    case "<fileVersion/>":
                    case "<fileSharing":
                    case "<fileSharing/>":
                    case "<workbookProtection":
                    case "<workbookProtection/>":
                    case "<bookViews>":
                    case "</bookViews>":
                    case "<sheets>":
                    case "</sheets>":
                    case "<functionGroups":
                    case "<functionGroups/>":
                    case "<functionGroup":
                    case "<externalReferences":
                    case "</externalReferences>":
                    case "<externalReferences>":
                    case "<externalReference":
                    case "<definedNames/>":
                    case "<definedName":
                    case "<definedName/>":
                    case "</definedName>":
                    case "<oleSize":
                    case "<customWorkbookViews>":
                    case "</customWorkbookViews>":
                    case "<customWorkbookViews":
                    case "<customWorkbookView":
                    case "</customWorkbookView>":
                    case "<pivotCaches>":
                    case "</pivotCaches>":
                    case "<pivotCaches":
                    case "<pivotCache":
                    case "<smartTagPr":
                    case "<smartTagPr/>":
                    case "<smartTagTypes":
                    case "<smartTagTypes>":
                    case "</smartTagTypes>":
                    case "<smartTagType":
                    case "<webPublishing":
                    case "<webPublishing/>":
                    case "<fileRecoveryPr":
                    case "<fileRecoveryPr/>":
                    case "<webPublishObjects>":
                    case "<webPublishObjects":
                    case "</webPublishObjects>":
                    case "<webPublishObject":
                    case "<extLst>":
                    case "</extLst>":
                    case "<extLst/>":
                    case "<ArchID":
                        break;
                    case "<workbook":
                        bt.match(/<\w+:workbook/) && (N = "xmlns" + bt.match(/<(\w+):/)[1]), w.xmlns = Ht[N];
                        break;
                    case "<fileVersion":
                        delete Ht[0], w.AppVersion = Ht;
                        break;
                    case "<workbookPr":
                    case "<workbookPr/>":
                        delete Ht[0], w.WBProps = Ht;
                        break;
                    case "<workbookView":
                        delete Ht[0], w.WBView.push(Ht);
                        break;
                    case "<sheet":
                        delete Ht[0], Ht.name = _t(Ht.name), w.Sheets.push(Ht);
                        break;
                    case "<definedNames>":
                    case "<definedNames":
                    case "<ext":
                    case "<AlternateContent":
                        T = !0;
                        break;
                    case "</definedNames>":
                    case "</ext>":
                    case "</AlternateContent>":
                        T = !1;
                        break;
                    case "<calcPr":
                    case "<calcPr/>":
                        delete Ht[0], w.CalcPr = Ht;
                        break;
                    default:
                        if (!T && C.WTF) throw "unrecognized " + Ht[0] + " in workbook"
                }
            }), -1 === te.main.indexOf(w.xmlns)) throw new Error("Unknown Namespace: " + w.xmlns);
        return se(w), w
    }
    var je = Me("workbook", null, {
        xmlns: te.main[0],
        "xmlns:r": te.r
    });

    function Fe(m) {
        try {
            return X(m.Workbook.WBProps.date1904) ? "true" : "false"
        } catch {
            return "false"
        }
    }

    function Ze(m, C) {
        var w = [Wn];
        w[w.length] = je, w[w.length] = Me("workbookPr", null, {
            date1904: Fe(m)
        }), w[w.length] = "<sheets>";
        for (var T = 0; T != m.SheetNames.length; ++T) w[w.length] = Me("sheet", null, {
            name: m.SheetNames[T].substr(0, 31),
            sheetId: "" + (T + 1),
            "r:id": "rId" + (T + 1)
        });
        return w[w.length] = "</sheets>", w.length > 2 && (w[w.length] = "</workbook>", w[1] = w[1].replace("/>", ">")), w.join("")
    }

    function Nn(m, C) {
        return C || (C = ci(127)), C.write_shift(4, m.hsState), C.write_shift(4, m.iTabID), Fn(m.strRelID, C), $n(m.name.substr(0, 31), C), C
    }

    function pn(m, C) {
        var w = {
                AppVersion: {},
                WBProps: {},
                WBView: [],
                Sheets: [],
                CalcPr: {},
                xmlns: ""
            },
            T = !1;
        return gn(m, function(bt, Ht) {
            switch (Ht.n) {
                case "BrtBundleSh":
                    w.Sheets.push(bt);
                    break;
                case "BrtBeginBook":
                case "BrtFileVersion":
                case "BrtWbProp":
                case "BrtACBegin":
                case "BrtAbsPath15":
                case "BrtACEnd":
                case "BrtBookProtection":
                case "BrtBeginBookViews":
                case "BrtBookView":
                case "BrtEndBookViews":
                case "BrtBeginBundleShs":
                case "BrtEndBundleShs":
                case "BrtBeginFnGroup":
                case "BrtEndFnGroup":
                case "BrtBeginExternals":
                case "BrtSupSelf":
                case "BrtSupBookSrc":
                case "BrtExternSheet":
                case "BrtEndExternals":
                case "BrtName":
                case "BrtCalcProp":
                case "BrtUserBookView":
                case "BrtBeginPivotCacheIDs":
                case "BrtBeginPivotCacheID":
                case "BrtEndPivotCacheID":
                case "BrtEndPivotCacheIDs":
                case "BrtWebOpt":
                case "BrtFileRecover":
                case "BrtFileSharing":
                case "BrtFRTArchID$":
                case "BrtEndBook":
                    break;
                case "BrtFRTBegin":
                    T = !0;
                    break;
                case "BrtFRTEnd":
                    T = !1;
                    break;
                default:
                    if (!T) throw new Error("Unexpected record " + Ht.n)
            }
        }), se(w), w
    }

    function or(m, C) {
        var w = si();
        return Ke(w, "BrtBeginBook"), Ke(w, "BrtFileVersion", function ai(m, C) {
                C || (C = ci(127));
                for (var w = 0; 4 != w; ++w) C.write_shift(4, 0);
                return $n("SheetJS", C), $n(p.version, C), $n(p.version, C), $n("7262", C), C.length = C.l, C
            }()), Ke(w, "BrtWbProp", function xn(m, C) {
                return C || (C = ci(8)), C.write_shift(4, 0), C.write_shift(4, 0), C
            }()),
            function Li(m, C, w) {
                Ke(m, "BrtBeginBookViews"), Ke(m, "BrtEndBookViews")
            }(w),
            function di(m, C, w) {
                Ke(m, "BrtBeginBundleShs");
                for (var T = 0; T != C.SheetNames.length; ++T) Ke(m, "BrtBundleSh", Nn({
                    hsState: 0,
                    iTabID: T + 1,
                    strRelID: "rId" + (T + 1),
                    name: C.SheetNames[T]
                }));
                Ke(m, "BrtEndBundleShs")
            }(w, m), Ke(w, "BrtCalcProp", function Ki(m, C) {
                return C || (C = ci(26)), C.write_shift(4, 0), C.write_shift(4, 1), C.write_shift(4, 0),
                    function pr(m, C) {
                        (C || ci(8)).write_shift(8, "f", m)
                    }(0, C), C.write_shift(-4, 1023), C.write_shift(1, 51), C.write_shift(1, 0), C
            }()), Ke(w, "BrtFileRecover", function dr(m, C) {
                return C || (C = ci(1)), C.write_shift(1, 0), C
            }()), Ke(w, "BrtEndBook"), w.end()
    }

    function jn(m, C, w) {
        return (".bin" === C.substr(-4) ? pn : fe)(m, w)
    }

    function Ri(m, C, w, T) {
        return (".bin" === C.substr(-4) ? Gr : Ys)(m, w, T)
    }

    function Er(m, C, w) {
        return (".bin" === C.substr(-4) ? Ur : Rs)(m, w)
    }

    function ho(m, C, w) {
        return (".bin" === C.substr(-4) ? zn : Ge)(m, w)
    }

    function Ns(m, C, w) {
        return (".bin" === C.substr(-4) ? pe : vt)(m, w)
    }

    function Hs(m, C, w) {
        return (".bin" === C.substr(-4) ? L : g)(m, w)
    }

    function Co(m, C, w) {
        return (".bin" === C.substr(-4) ? or : Ze)(m, w)
    }

    function Fo(m, C, w, T) {
        return (".bin" === C.substr(-4) ? As : ui)(m, w, T)
    }

    function kt(m, C, w) {
        return (".bin" === C.substr(-4) ? Wi : De)(m, w)
    }
    var x = {
            0: {
                n: "BrtRowHdr",
                f: function _i(m, C) {
                    var w = [];
                    return w.r = m.read_shift(4), m.l += C - 4, w
                }
            },
            1: {
                n: "BrtCellBlank",
                f: function en(m, C) {
                    return [Qe(m)]
                }
            },
            2: {
                n: "BrtCellRk",
                f: function Qn(m, C) {
                    var w = Qe(m),
                        T = function wi(m) {
                            var C = m.slice(m.l, m.l + 4),
                                w = 1 & C[0],
                                T = 2 & C[0];
                            m.l += 4, C[0] &= 252;
                            var N = 0 === T ? Xn([0, 0, 0, 0, C[0], C[1], C[2], C[3]], 0) : Un(C, 0) >> 2;
                            return w ? N / 100 : N
                        }(m);
                    return [w, T, "n"]
                }
            },
            3: {
                n: "BrtCellError",
                f: function Oi(m, C) {
                    return [Qe(m), m.read_shift(1), "e"]
                }
            },
            4: {
                n: "BrtCellBool",
                f: function xi(m, C) {
                    return [Qe(m), m.read_shift(1), "b"]
                }
            },
            5: {
                n: "BrtCellReal",
                f: function Br(m, C) {
                    return [Qe(m), es(m), "n"]
                }
            },
            6: {
                n: "BrtCellSt",
                f: function Ci(m, C) {
                    return [Qe(m), oi(m), "str"]
                }
            },
            7: {
                n: "BrtCellIsst",
                f: function qn(m, C) {
                    return [Qe(m), m.read_shift(4), "s"]
                }
            },
            8: {
                n: "BrtFmlaString",
                f: function Xr(m, C, w) {
                    var T = m.l,
                        bt = [Qe(m), oi(m), "str"];
                    return w.cellFormula ? hn(m, T + C - m.l) : m.l = T + C, bt
                }
            },
            9: {
                n: "BrtFmlaNum",
                f: function ls(m, C, w) {
                    var at = [Qe(m), es(m), "n"];
                    return w.cellFormula ? (hn(m, C - 16), at[3] = "") : m.l += C - 16, at
                }
            },
            10: {
                n: "BrtFmlaBool",
                f: function ti(m, C, w) {
                    var at = [Qe(m), m.read_shift(1), "b"];
                    return w.cellFormula ? (hn(m, C - 9), at[3] = "") : m.l += C - 9, at
                }
            },
            11: {
                n: "BrtFmlaError",
                f: function as(m, C, w) {
                    var at = [Qe(m), m.read_shift(1), "e"];
                    return w.cellFormula ? (hn(m, C - 9), at[3] = "") : m.l += C - 9, at
                }
            },
            16: {
                n: "BrtFRTArchID$",
                f: function On(m, C) {
                    var w = {};
                    return m.read_shift(4), w.ArchID = m.read_shift(4), m.l += C - 8, w
                }
            },
            19: {
                n: "BrtSSTItem",
                f: An
            },
            20: {
                n: "BrtPCDIMissing",
                f: v
            },
            21: {
                n: "BrtPCDINumber",
                f: v
            },
            22: {
                n: "BrtPCDIBoolean",
                f: v
            },
            23: {
                n: "BrtPCDIError",
                f: v
            },
            24: {
                n: "BrtPCDIString",
                f: v
            },
            25: {
                n: "BrtPCDIDatetime",
                f: v
            },
            26: {
                n: "BrtPCDIIndex",
                f: v
            },
            27: {
                n: "BrtPCDIAMissing",
                f: v
            },
            28: {
                n: "BrtPCDIANumber",
                f: v
            },
            29: {
                n: "BrtPCDIABoolean",
                f: v
            },
            30: {
                n: "BrtPCDIAError",
                f: v
            },
            31: {
                n: "BrtPCDIAString",
                f: v
            },
            32: {
                n: "BrtPCDIADatetime",
                f: v
            },
            33: {
                n: "BrtPCRRecord",
                f: v
            },
            34: {
                n: "BrtPCRRecordDt",
                f: v
            },
            35: {
                n: "BrtFRTBegin",
                f: v
            },
            36: {
                n: "BrtFRTEnd",
                f: v
            },
            37: {
                n: "BrtACBegin",
                f: v
            },
            38: {
                n: "BrtACEnd",
                f: v
            },
            39: {
                n: "BrtName",
                f: v
            },
            40: {
                n: "BrtIndexRowBlock",
                f: v
            },
            42: {
                n: "BrtIndexBlock",
                f: v
            },
            43: {
                n: "BrtFont",
                f: function fr(m, C) {
                    var w = {
                        flags: {}
                    };
                    return w.dyHeight = m.read_shift(2), w.grbit = function lr(m, C) {
                        var w = m.read_shift(1);
                        return m.l++, {
                            fItalic: 2 & w,
                            fStrikeout: 8 & w,
                            fOutline: 16 & w,
                            fShadow: 32 & w,
                            fCondense: 64 & w,
                            fExtend: 128 & w
                        }
                    }(m), w.bls = m.read_shift(2), w.sss = m.read_shift(2), w.uls = m.read_shift(1), w.bFamily = m.read_shift(1), w.bCharSet = m.read_shift(1), m.l++, w.brtColor = function tr(m, C) {
                        var w = {},
                            T = m.read_shift(1);
                        w.fValidRGB = 1 & T, w.xColorType = T >>> 1, w.index = m.read_shift(1), w.nTintAndShade = m.read_shift(2, "i"), w.bRed = m.read_shift(1), w.bGreen = m.read_shift(1), w.bBlue = m.read_shift(1), w.bAlpha = m.read_shift(1)
                    }(m), w.bFontScheme = m.read_shift(1), w.name = oi(m), w.flags.Bold = 700 === w.bls, w.flags.Italic = w.grbit.fItalic, w.flags.Strikeout = w.grbit.fStrikeout, w.flags.Outline = w.grbit.fOutline, w.flags.Shadow = w.grbit.fShadow, w.flags.Condense = w.grbit.fCondense, w.flags.Extend = w.grbit.fExtend, w.flags.Sub = 2 & w.sss, w.flags.Sup = 1 & w.sss, w
                }
            },
            44: {
                n: "BrtFmt",
                f: function qs(m, C) {
                    return [m.read_shift(2), oi(m)]
                }
            },
            45: {
                n: "BrtFill",
                f: v
            },
            46: {
                n: "BrtBorder",
                f: v
            },
            47: {
                n: "BrtXF",
                f: function so(m, C) {
                    var w = m.read_shift(2),
                        T = m.read_shift(2);
                    return v(m, C - 4), {
                        ixfe: w,
                        ifmt: T
                    }
                }
            },
            48: {
                n: "BrtStyle",
                f: v
            },
            49: {
                n: "BrtCellMeta",
                f: v
            },
            50: {
                n: "BrtValueMeta",
                f: v
            },
            51: {
                n: "BrtMdb",
                f: v
            },
            52: {
                n: "BrtBeginFmd",
                f: v
            },
            53: {
                n: "BrtEndFmd",
                f: v
            },
            54: {
                n: "BrtBeginMdx",
                f: v
            },
            55: {
                n: "BrtEndMdx",
                f: v
            },
            56: {
                n: "BrtBeginMdxTuple",
                f: v
            },
            57: {
                n: "BrtEndMdxTuple",
                f: v
            },
            58: {
                n: "BrtMdxMbrIstr",
                f: v
            },
            59: {
                n: "BrtStr",
                f: v
            },
            60: {
                n: "BrtColInfo",
                f: v
            },
            62: {
                n: "BrtCellRString",
                f: v
            },
            63: {
                n: "BrtCalcChainItem$",
                f: function E(m, C) {
                    var w = {};
                    w.i = m.read_shift(4);
                    var T = {};
                    T.r = m.read_shift(4), T.c = m.read_shift(4), w.r = uo(T);
                    var N = m.read_shift(1);
                    return 2 & N && (w.l = "1"), 8 & N && (w.a = "1"), w
                }
            },
            64: {
                n: "BrtDVal",
                f: v
            },
            65: {
                n: "BrtSxvcellNum",
                f: v
            },
            66: {
                n: "BrtSxvcellStr",
                f: v
            },
            67: {
                n: "BrtSxvcellBool",
                f: v
            },
            68: {
                n: "BrtSxvcellErr",
                f: v
            },
            69: {
                n: "BrtSxvcellDate",
                f: v
            },
            70: {
                n: "BrtSxvcellNil",
                f: v
            },
            128: {
                n: "BrtFileVersion",
                f: v
            },
            129: {
                n: "BrtBeginSheet",
                f: v
            },
            130: {
                n: "BrtEndSheet",
                f: v
            },
            131: {
                n: "BrtBeginBook",
                f: v,
                p: 0
            },
            132: {
                n: "BrtEndBook",
                f: v
            },
            133: {
                n: "BrtBeginWsViews",
                f: v
            },
            134: {
                n: "BrtEndWsViews",
                f: v
            },
            135: {
                n: "BrtBeginBookViews",
                f: v
            },
            136: {
                n: "BrtEndBookViews",
                f: v
            },
            137: {
                n: "BrtBeginWsView",
                f: v
            },
            138: {
                n: "BrtEndWsView",
                f: v
            },
            139: {
                n: "BrtBeginCsViews",
                f: v
            },
            140: {
                n: "BrtEndCsViews",
                f: v
            },
            141: {
                n: "BrtBeginCsView",
                f: v
            },
            142: {
                n: "BrtEndCsView",
                f: v
            },
            143: {
                n: "BrtBeginBundleShs",
                f: v
            },
            144: {
                n: "BrtEndBundleShs",
                f: v
            },
            145: {
                n: "BrtBeginSheetData",
                f: v
            },
            146: {
                n: "BrtEndSheetData",
                f: v
            },
            147: {
                n: "BrtWsProp",
                f: function sr(m, C) {
                    var w = {};
                    return m.l += 19, w.name = function hi(m, C) {
                        return oi(m)
                    }(m), w
                }
            },
            148: {
                n: "BrtWsDim",
                f: rr,
                p: 16
            },
            151: {
                n: "BrtPane",
                f: v
            },
            152: {
                n: "BrtSel",
                f: v
            },
            153: {
                n: "BrtWbProp",
                f: function an(m, C) {
                    return m.read_shift(4), [m.read_shift(4), C > 8 ? oi(m) : ""]
                }
            },
            154: {
                n: "BrtWbFactoid",
                f: v
            },
            155: {
                n: "BrtFileRecover",
                f: v
            },
            156: {
                n: "BrtBundleSh",
                f: function He(m, C) {
                    var w = {};
                    return w.hsState = m.read_shift(4), w.iTabID = m.read_shift(4), w.strRelID = Hi(m, C - 8), w.name = oi(m), w
                }
            },
            157: {
                n: "BrtCalcProp",
                f: v
            },
            158: {
                n: "BrtBookView",
                f: v
            },
            159: {
                n: "BrtBeginSst",
                f: function Cn(m, C) {
                    return [m.read_shift(4), m.read_shift(4)]
                }
            },
            160: {
                n: "BrtEndSst",
                f: v
            },
            161: {
                n: "BrtBeginAFilter",
                f: v
            },
            162: {
                n: "BrtEndAFilter",
                f: v
            },
            163: {
                n: "BrtBeginFilterColumn",
                f: v
            },
            164: {
                n: "BrtEndFilterColumn",
                f: v
            },
            165: {
                n: "BrtBeginFilters",
                f: v
            },
            166: {
                n: "BrtEndFilters",
                f: v
            },
            167: {
                n: "BrtFilter",
                f: v
            },
            168: {
                n: "BrtColorFilter",
                f: v
            },
            169: {
                n: "BrtIconFilter",
                f: v
            },
            170: {
                n: "BrtTop10Filter",
                f: v
            },
            171: {
                n: "BrtDynamicFilter",
                f: v
            },
            172: {
                n: "BrtBeginCustomFilters",
                f: v
            },
            173: {
                n: "BrtEndCustomFilters",
                f: v
            },
            174: {
                n: "BrtCustomFilter",
                f: v
            },
            175: {
                n: "BrtAFilterDateGroupItem",
                f: v
            },
            176: {
                n: "BrtMergeCell",
                f: qr
            },
            177: {
                n: "BrtBeginMergeCells",
                f: v
            },
            178: {
                n: "BrtEndMergeCells",
                f: v
            },
            179: {
                n: "BrtBeginPivotCacheDef",
                f: v
            },
            180: {
                n: "BrtEndPivotCacheDef",
                f: v
            },
            181: {
                n: "BrtBeginPCDFields",
                f: v
            },
            182: {
                n: "BrtEndPCDFields",
                f: v
            },
            183: {
                n: "BrtBeginPCDField",
                f: v
            },
            184: {
                n: "BrtEndPCDField",
                f: v
            },
            185: {
                n: "BrtBeginPCDSource",
                f: v
            },
            186: {
                n: "BrtEndPCDSource",
                f: v
            },
            187: {
                n: "BrtBeginPCDSRange",
                f: v
            },
            188: {
                n: "BrtEndPCDSRange",
                f: v
            },
            189: {
                n: "BrtBeginPCDFAtbl",
                f: v
            },
            190: {
                n: "BrtEndPCDFAtbl",
                f: v
            },
            191: {
                n: "BrtBeginPCDIRun",
                f: v
            },
            192: {
                n: "BrtEndPCDIRun",
                f: v
            },
            193: {
                n: "BrtBeginPivotCacheRecords",
                f: v
            },
            194: {
                n: "BrtEndPivotCacheRecords",
                f: v
            },
            195: {
                n: "BrtBeginPCDHierarchies",
                f: v
            },
            196: {
                n: "BrtEndPCDHierarchies",
                f: v
            },
            197: {
                n: "BrtBeginPCDHierarchy",
                f: v
            },
            198: {
                n: "BrtEndPCDHierarchy",
                f: v
            },
            199: {
                n: "BrtBeginPCDHFieldsUsage",
                f: v
            },
            200: {
                n: "BrtEndPCDHFieldsUsage",
                f: v
            },
            201: {
                n: "BrtBeginExtConnection",
                f: v
            },
            202: {
                n: "BrtEndExtConnection",
                f: v
            },
            203: {
                n: "BrtBeginECDbProps",
                f: v
            },
            204: {
                n: "BrtEndECDbProps",
                f: v
            },
            205: {
                n: "BrtBeginECOlapProps",
                f: v
            },
            206: {
                n: "BrtEndECOlapProps",
                f: v
            },
            207: {
                n: "BrtBeginPCDSConsol",
                f: v
            },
            208: {
                n: "BrtEndPCDSConsol",
                f: v
            },
            209: {
                n: "BrtBeginPCDSCPages",
                f: v
            },
            210: {
                n: "BrtEndPCDSCPages",
                f: v
            },
            211: {
                n: "BrtBeginPCDSCPage",
                f: v
            },
            212: {
                n: "BrtEndPCDSCPage",
                f: v
            },
            213: {
                n: "BrtBeginPCDSCPItem",
                f: v
            },
            214: {
                n: "BrtEndPCDSCPItem",
                f: v
            },
            215: {
                n: "BrtBeginPCDSCSets",
                f: v
            },
            216: {
                n: "BrtEndPCDSCSets",
                f: v
            },
            217: {
                n: "BrtBeginPCDSCSet",
                f: v
            },
            218: {
                n: "BrtEndPCDSCSet",
                f: v
            },
            219: {
                n: "BrtBeginPCDFGroup",
                f: v
            },
            220: {
                n: "BrtEndPCDFGroup",
                f: v
            },
            221: {
                n: "BrtBeginPCDFGItems",
                f: v
            },
            222: {
                n: "BrtEndPCDFGItems",
                f: v
            },
            223: {
                n: "BrtBeginPCDFGRange",
                f: v
            },
            224: {
                n: "BrtEndPCDFGRange",
                f: v
            },
            225: {
                n: "BrtBeginPCDFGDiscrete",
                f: v
            },
            226: {
                n: "BrtEndPCDFGDiscrete",
                f: v
            },
            227: {
                n: "BrtBeginPCDSDTupleCache",
                f: v
            },
            228: {
                n: "BrtEndPCDSDTupleCache",
                f: v
            },
            229: {
                n: "BrtBeginPCDSDTCEntries",
                f: v
            },
            230: {
                n: "BrtEndPCDSDTCEntries",
                f: v
            },
            231: {
                n: "BrtBeginPCDSDTCEMembers",
                f: v
            },
            232: {
                n: "BrtEndPCDSDTCEMembers",
                f: v
            },
            233: {
                n: "BrtBeginPCDSDTCEMember",
                f: v
            },
            234: {
                n: "BrtEndPCDSDTCEMember",
                f: v
            },
            235: {
                n: "BrtBeginPCDSDTCQueries",
                f: v
            },
            236: {
                n: "BrtEndPCDSDTCQueries",
                f: v
            },
            237: {
                n: "BrtBeginPCDSDTCQuery",
                f: v
            },
            238: {
                n: "BrtEndPCDSDTCQuery",
                f: v
            },
            239: {
                n: "BrtBeginPCDSDTCSets",
                f: v
            },
            240: {
                n: "BrtEndPCDSDTCSets",
                f: v
            },
            241: {
                n: "BrtBeginPCDSDTCSet",
                f: v
            },
            242: {
                n: "BrtEndPCDSDTCSet",
                f: v
            },
            243: {
                n: "BrtBeginPCDCalcItems",
                f: v
            },
            244: {
                n: "BrtEndPCDCalcItems",
                f: v
            },
            245: {
                n: "BrtBeginPCDCalcItem",
                f: v
            },
            246: {
                n: "BrtEndPCDCalcItem",
                f: v
            },
            247: {
                n: "BrtBeginPRule",
                f: v
            },
            248: {
                n: "BrtEndPRule",
                f: v
            },
            249: {
                n: "BrtBeginPRFilters",
                f: v
            },
            250: {
                n: "BrtEndPRFilters",
                f: v
            },
            251: {
                n: "BrtBeginPRFilter",
                f: v
            },
            252: {
                n: "BrtEndPRFilter",
                f: v
            },
            253: {
                n: "BrtBeginPNames",
                f: v
            },
            254: {
                n: "BrtEndPNames",
                f: v
            },
            255: {
                n: "BrtBeginPName",
                f: v
            },
            256: {
                n: "BrtEndPName",
                f: v
            },
            257: {
                n: "BrtBeginPNPairs",
                f: v
            },
            258: {
                n: "BrtEndPNPairs",
                f: v
            },
            259: {
                n: "BrtBeginPNPair",
                f: v
            },
            260: {
                n: "BrtEndPNPair",
                f: v
            },
            261: {
                n: "BrtBeginECWebProps",
                f: v
            },
            262: {
                n: "BrtEndECWebProps",
                f: v
            },
            263: {
                n: "BrtBeginEcWpTables",
                f: v
            },
            264: {
                n: "BrtEndECWPTables",
                f: v
            },
            265: {
                n: "BrtBeginECParams",
                f: v
            },
            266: {
                n: "BrtEndECParams",
                f: v
            },
            267: {
                n: "BrtBeginECParam",
                f: v
            },
            268: {
                n: "BrtEndECParam",
                f: v
            },
            269: {
                n: "BrtBeginPCDKPIs",
                f: v
            },
            270: {
                n: "BrtEndPCDKPIs",
                f: v
            },
            271: {
                n: "BrtBeginPCDKPI",
                f: v
            },
            272: {
                n: "BrtEndPCDKPI",
                f: v
            },
            273: {
                n: "BrtBeginDims",
                f: v
            },
            274: {
                n: "BrtEndDims",
                f: v
            },
            275: {
                n: "BrtBeginDim",
                f: v
            },
            276: {
                n: "BrtEndDim",
                f: v
            },
            277: {
                n: "BrtIndexPartEnd",
                f: v
            },
            278: {
                n: "BrtBeginStyleSheet",
                f: v
            },
            279: {
                n: "BrtEndStyleSheet",
                f: v
            },
            280: {
                n: "BrtBeginSXView",
                f: v
            },
            281: {
                n: "BrtEndSXVI",
                f: v
            },
            282: {
                n: "BrtBeginSXVI",
                f: v
            },
            283: {
                n: "BrtBeginSXVIs",
                f: v
            },
            284: {
                n: "BrtEndSXVIs",
                f: v
            },
            285: {
                n: "BrtBeginSXVD",
                f: v
            },
            286: {
                n: "BrtEndSXVD",
                f: v
            },
            287: {
                n: "BrtBeginSXVDs",
                f: v
            },
            288: {
                n: "BrtEndSXVDs",
                f: v
            },
            289: {
                n: "BrtBeginSXPI",
                f: v
            },
            290: {
                n: "BrtEndSXPI",
                f: v
            },
            291: {
                n: "BrtBeginSXPIs",
                f: v
            },
            292: {
                n: "BrtEndSXPIs",
                f: v
            },
            293: {
                n: "BrtBeginSXDI",
                f: v
            },
            294: {
                n: "BrtEndSXDI",
                f: v
            },
            295: {
                n: "BrtBeginSXDIs",
                f: v
            },
            296: {
                n: "BrtEndSXDIs",
                f: v
            },
            297: {
                n: "BrtBeginSXLI",
                f: v
            },
            298: {
                n: "BrtEndSXLI",
                f: v
            },
            299: {
                n: "BrtBeginSXLIRws",
                f: v
            },
            300: {
                n: "BrtEndSXLIRws",
                f: v
            },
            301: {
                n: "BrtBeginSXLICols",
                f: v
            },
            302: {
                n: "BrtEndSXLICols",
                f: v
            },
            303: {
                n: "BrtBeginSXFormat",
                f: v
            },
            304: {
                n: "BrtEndSXFormat",
                f: v
            },
            305: {
                n: "BrtBeginSXFormats",
                f: v
            },
            306: {
                n: "BrtEndSxFormats",
                f: v
            },
            307: {
                n: "BrtBeginSxSelect",
                f: v
            },
            308: {
                n: "BrtEndSxSelect",
                f: v
            },
            309: {
                n: "BrtBeginISXVDRws",
                f: v
            },
            310: {
                n: "BrtEndISXVDRws",
                f: v
            },
            311: {
                n: "BrtBeginISXVDCols",
                f: v
            },
            312: {
                n: "BrtEndISXVDCols",
                f: v
            },
            313: {
                n: "BrtEndSXLocation",
                f: v
            },
            314: {
                n: "BrtBeginSXLocation",
                f: v
            },
            315: {
                n: "BrtEndSXView",
                f: v
            },
            316: {
                n: "BrtBeginSXTHs",
                f: v
            },
            317: {
                n: "BrtEndSXTHs",
                f: v
            },
            318: {
                n: "BrtBeginSXTH",
                f: v
            },
            319: {
                n: "BrtEndSXTH",
                f: v
            },
            320: {
                n: "BrtBeginISXTHRws",
                f: v
            },
            321: {
                n: "BrtEndISXTHRws",
                f: v
            },
            322: {
                n: "BrtBeginISXTHCols",
                f: v
            },
            323: {
                n: "BrtEndISXTHCols",
                f: v
            },
            324: {
                n: "BrtBeginSXTDMPS",
                f: v
            },
            325: {
                n: "BrtEndSXTDMPs",
                f: v
            },
            326: {
                n: "BrtBeginSXTDMP",
                f: v
            },
            327: {
                n: "BrtEndSXTDMP",
                f: v
            },
            328: {
                n: "BrtBeginSXTHItems",
                f: v
            },
            329: {
                n: "BrtEndSXTHItems",
                f: v
            },
            330: {
                n: "BrtBeginSXTHItem",
                f: v
            },
            331: {
                n: "BrtEndSXTHItem",
                f: v
            },
            332: {
                n: "BrtBeginMetadata",
                f: v
            },
            333: {
                n: "BrtEndMetadata",
                f: v
            },
            334: {
                n: "BrtBeginEsmdtinfo",
                f: v
            },
            335: {
                n: "BrtMdtinfo",
                f: v
            },
            336: {
                n: "BrtEndEsmdtinfo",
                f: v
            },
            337: {
                n: "BrtBeginEsmdb",
                f: v
            },
            338: {
                n: "BrtEndEsmdb",
                f: v
            },
            339: {
                n: "BrtBeginEsfmd",
                f: v
            },
            340: {
                n: "BrtEndEsfmd",
                f: v
            },
            341: {
                n: "BrtBeginSingleCells",
                f: v
            },
            342: {
                n: "BrtEndSingleCells",
                f: v
            },
            343: {
                n: "BrtBeginList",
                f: v
            },
            344: {
                n: "BrtEndList",
                f: v
            },
            345: {
                n: "BrtBeginListCols",
                f: v
            },
            346: {
                n: "BrtEndListCols",
                f: v
            },
            347: {
                n: "BrtBeginListCol",
                f: v
            },
            348: {
                n: "BrtEndListCol",
                f: v
            },
            349: {
                n: "BrtBeginListXmlCPr",
                f: v
            },
            350: {
                n: "BrtEndListXmlCPr",
                f: v
            },
            351: {
                n: "BrtListCCFmla",
                f: v
            },
            352: {
                n: "BrtListTrFmla",
                f: v
            },
            353: {
                n: "BrtBeginExternals",
                f: v
            },
            354: {
                n: "BrtEndExternals",
                f: v
            },
            355: {
                n: "BrtSupBookSrc",
                f: v
            },
            357: {
                n: "BrtSupSelf",
                f: v
            },
            358: {
                n: "BrtSupSame",
                f: v
            },
            359: {
                n: "BrtSupTabs",
                f: v
            },
            360: {
                n: "BrtBeginSupBook",
                f: v
            },
            361: {
                n: "BrtPlaceholderName",
                f: v
            },
            362: {
                n: "BrtExternSheet",
                f: v
            },
            363: {
                n: "BrtExternTableStart",
                f: v
            },
            364: {
                n: "BrtExternTableEnd",
                f: v
            },
            366: {
                n: "BrtExternRowHdr",
                f: v
            },
            367: {
                n: "BrtExternCellBlank",
                f: v
            },
            368: {
                n: "BrtExternCellReal",
                f: v
            },
            369: {
                n: "BrtExternCellBool",
                f: v
            },
            370: {
                n: "BrtExternCellError",
                f: v
            },
            371: {
                n: "BrtExternCellString",
                f: v
            },
            372: {
                n: "BrtBeginEsmdx",
                f: v
            },
            373: {
                n: "BrtEndEsmdx",
                f: v
            },
            374: {
                n: "BrtBeginMdxSet",
                f: v
            },
            375: {
                n: "BrtEndMdxSet",
                f: v
            },
            376: {
                n: "BrtBeginMdxMbrProp",
                f: v
            },
            377: {
                n: "BrtEndMdxMbrProp",
                f: v
            },
            378: {
                n: "BrtBeginMdxKPI",
                f: v
            },
            379: {
                n: "BrtEndMdxKPI",
                f: v
            },
            380: {
                n: "BrtBeginEsstr",
                f: v
            },
            381: {
                n: "BrtEndEsstr",
                f: v
            },
            382: {
                n: "BrtBeginPRFItem",
                f: v
            },
            383: {
                n: "BrtEndPRFItem",
                f: v
            },
            384: {
                n: "BrtBeginPivotCacheIDs",
                f: v
            },
            385: {
                n: "BrtEndPivotCacheIDs",
                f: v
            },
            386: {
                n: "BrtBeginPivotCacheID",
                f: v
            },
            387: {
                n: "BrtEndPivotCacheID",
                f: v
            },
            388: {
                n: "BrtBeginISXVIs",
                f: v
            },
            389: {
                n: "BrtEndISXVIs",
                f: v
            },
            390: {
                n: "BrtBeginColInfos",
                f: v
            },
            391: {
                n: "BrtEndColInfos",
                f: v
            },
            392: {
                n: "BrtBeginRwBrk",
                f: v
            },
            393: {
                n: "BrtEndRwBrk",
                f: v
            },
            394: {
                n: "BrtBeginColBrk",
                f: v
            },
            395: {
                n: "BrtEndColBrk",
                f: v
            },
            396: {
                n: "BrtBrk",
                f: v
            },
            397: {
                n: "BrtUserBookView",
                f: v
            },
            398: {
                n: "BrtInfo",
                f: v
            },
            399: {
                n: "BrtCUsr",
                f: v
            },
            400: {
                n: "BrtUsr",
                f: v
            },
            401: {
                n: "BrtBeginUsers",
                f: v
            },
            403: {
                n: "BrtEOF",
                f: v
            },
            404: {
                n: "BrtUCR",
                f: v
            },
            405: {
                n: "BrtRRInsDel",
                f: v
            },
            406: {
                n: "BrtRREndInsDel",
                f: v
            },
            407: {
                n: "BrtRRMove",
                f: v
            },
            408: {
                n: "BrtRREndMove",
                f: v
            },
            409: {
                n: "BrtRRChgCell",
                f: v
            },
            410: {
                n: "BrtRREndChgCell",
                f: v
            },
            411: {
                n: "BrtRRHeader",
                f: v
            },
            412: {
                n: "BrtRRUserView",
                f: v
            },
            413: {
                n: "BrtRRRenSheet",
                f: v
            },
            414: {
                n: "BrtRRInsertSh",
                f: v
            },
            415: {
                n: "BrtRRDefName",
                f: v
            },
            416: {
                n: "BrtRRNote",
                f: v
            },
            417: {
                n: "BrtRRConflict",
                f: v
            },
            418: {
                n: "BrtRRTQSIF",
                f: v
            },
            419: {
                n: "BrtRRFormat",
                f: v
            },
            420: {
                n: "BrtRREndFormat",
                f: v
            },
            421: {
                n: "BrtRRAutoFmt",
                f: v
            },
            422: {
                n: "BrtBeginUserShViews",
                f: v
            },
            423: {
                n: "BrtBeginUserShView",
                f: v
            },
            424: {
                n: "BrtEndUserShView",
                f: v
            },
            425: {
                n: "BrtEndUserShViews",
                f: v
            },
            426: {
                n: "BrtArrFmla",
                f: v
            },
            427: {
                n: "BrtShrFmla",
                f: v
            },
            428: {
                n: "BrtTable",
                f: v
            },
            429: {
                n: "BrtBeginExtConnections",
                f: v
            },
            430: {
                n: "BrtEndExtConnections",
                f: v
            },
            431: {
                n: "BrtBeginPCDCalcMems",
                f: v
            },
            432: {
                n: "BrtEndPCDCalcMems",
                f: v
            },
            433: {
                n: "BrtBeginPCDCalcMem",
                f: v
            },
            434: {
                n: "BrtEndPCDCalcMem",
                f: v
            },
            435: {
                n: "BrtBeginPCDHGLevels",
                f: v
            },
            436: {
                n: "BrtEndPCDHGLevels",
                f: v
            },
            437: {
                n: "BrtBeginPCDHGLevel",
                f: v
            },
            438: {
                n: "BrtEndPCDHGLevel",
                f: v
            },
            439: {
                n: "BrtBeginPCDHGLGroups",
                f: v
            },
            440: {
                n: "BrtEndPCDHGLGroups",
                f: v
            },
            441: {
                n: "BrtBeginPCDHGLGroup",
                f: v
            },
            442: {
                n: "BrtEndPCDHGLGroup",
                f: v
            },
            443: {
                n: "BrtBeginPCDHGLGMembers",
                f: v
            },
            444: {
                n: "BrtEndPCDHGLGMembers",
                f: v
            },
            445: {
                n: "BrtBeginPCDHGLGMember",
                f: v
            },
            446: {
                n: "BrtEndPCDHGLGMember",
                f: v
            },
            447: {
                n: "BrtBeginQSI",
                f: v
            },
            448: {
                n: "BrtEndQSI",
                f: v
            },
            449: {
                n: "BrtBeginQSIR",
                f: v
            },
            450: {
                n: "BrtEndQSIR",
                f: v
            },
            451: {
                n: "BrtBeginDeletedNames",
                f: v
            },
            452: {
                n: "BrtEndDeletedNames",
                f: v
            },
            453: {
                n: "BrtBeginDeletedName",
                f: v
            },
            454: {
                n: "BrtEndDeletedName",
                f: v
            },
            455: {
                n: "BrtBeginQSIFs",
                f: v
            },
            456: {
                n: "BrtEndQSIFs",
                f: v
            },
            457: {
                n: "BrtBeginQSIF",
                f: v
            },
            458: {
                n: "BrtEndQSIF",
                f: v
            },
            459: {
                n: "BrtBeginAutoSortScope",
                f: v
            },
            460: {
                n: "BrtEndAutoSortScope",
                f: v
            },
            461: {
                n: "BrtBeginConditionalFormatting",
                f: v
            },
            462: {
                n: "BrtEndConditionalFormatting",
                f: v
            },
            463: {
                n: "BrtBeginCFRule",
                f: v
            },
            464: {
                n: "BrtEndCFRule",
                f: v
            },
            465: {
                n: "BrtBeginIconSet",
                f: v
            },
            466: {
                n: "BrtEndIconSet",
                f: v
            },
            467: {
                n: "BrtBeginDatabar",
                f: v
            },
            468: {
                n: "BrtEndDatabar",
                f: v
            },
            469: {
                n: "BrtBeginColorScale",
                f: v
            },
            470: {
                n: "BrtEndColorScale",
                f: v
            },
            471: {
                n: "BrtCFVO",
                f: v
            },
            472: {
                n: "BrtExternValueMeta",
                f: v
            },
            473: {
                n: "BrtBeginColorPalette",
                f: v
            },
            474: {
                n: "BrtEndColorPalette",
                f: v
            },
            475: {
                n: "BrtIndexedColor",
                f: v
            },
            476: {
                n: "BrtMargins",
                f: v
            },
            477: {
                n: "BrtPrintOptions",
                f: v
            },
            478: {
                n: "BrtPageSetup",
                f: v
            },
            479: {
                n: "BrtBeginHeaderFooter",
                f: v
            },
            480: {
                n: "BrtEndHeaderFooter",
                f: v
            },
            481: {
                n: "BrtBeginSXCrtFormat",
                f: v
            },
            482: {
                n: "BrtEndSXCrtFormat",
                f: v
            },
            483: {
                n: "BrtBeginSXCrtFormats",
                f: v
            },
            484: {
                n: "BrtEndSXCrtFormats",
                f: v
            },
            485: {
                n: "BrtWsFmtInfo",
                f: v
            },
            486: {
                n: "BrtBeginMgs",
                f: v
            },
            487: {
                n: "BrtEndMGs",
                f: v
            },
            488: {
                n: "BrtBeginMGMaps",
                f: v
            },
            489: {
                n: "BrtEndMGMaps",
                f: v
            },
            490: {
                n: "BrtBeginMG",
                f: v
            },
            491: {
                n: "BrtEndMG",
                f: v
            },
            492: {
                n: "BrtBeginMap",
                f: v
            },
            493: {
                n: "BrtEndMap",
                f: v
            },
            494: {
                n: "BrtHLink",
                f: function _r(m, C, w) {
                    var T = m.l + C,
                        N = Cr(m),
                        at = Jn(m),
                        bt = oi(m),
                        Ht = oi(m),
                        ne = oi(m);
                    return m.l = T, {
                        rfx: N,
                        relId: at,
                        loc: bt,
                        tooltip: Ht,
                        display: ne
                    }
                }
            },
            495: {
                n: "BrtBeginDCon",
                f: v
            },
            496: {
                n: "BrtEndDCon",
                f: v
            },
            497: {
                n: "BrtBeginDRefs",
                f: v
            },
            498: {
                n: "BrtEndDRefs",
                f: v
            },
            499: {
                n: "BrtDRef",
                f: v
            },
            500: {
                n: "BrtBeginScenMan",
                f: v
            },
            501: {
                n: "BrtEndScenMan",
                f: v
            },
            502: {
                n: "BrtBeginSct",
                f: v
            },
            503: {
                n: "BrtEndSct",
                f: v
            },
            504: {
                n: "BrtSlc",
                f: v
            },
            505: {
                n: "BrtBeginDXFs",
                f: v
            },
            506: {
                n: "BrtEndDXFs",
                f: v
            },
            507: {
                n: "BrtDXF",
                f: v
            },
            508: {
                n: "BrtBeginTableStyles",
                f: v
            },
            509: {
                n: "BrtEndTableStyles",
                f: v
            },
            510: {
                n: "BrtBeginTableStyle",
                f: v
            },
            511: {
                n: "BrtEndTableStyle",
                f: v
            },
            512: {
                n: "BrtTableStyleElement",
                f: v
            },
            513: {
                n: "BrtTableStyleClient",
                f: v
            },
            514: {
                n: "BrtBeginVolDeps",
                f: v
            },
            515: {
                n: "BrtEndVolDeps",
                f: v
            },
            516: {
                n: "BrtBeginVolType",
                f: v
            },
            517: {
                n: "BrtEndVolType",
                f: v
            },
            518: {
                n: "BrtBeginVolMain",
                f: v
            },
            519: {
                n: "BrtEndVolMain",
                f: v
            },
            520: {
                n: "BrtBeginVolTopic",
                f: v
            },
            521: {
                n: "BrtEndVolTopic",
                f: v
            },
            522: {
                n: "BrtVolSubtopic",
                f: v
            },
            523: {
                n: "BrtVolRef",
                f: v
            },
            524: {
                n: "BrtVolNum",
                f: v
            },
            525: {
                n: "BrtVolErr",
                f: v
            },
            526: {
                n: "BrtVolStr",
                f: v
            },
            527: {
                n: "BrtVolBool",
                f: v
            },
            528: {
                n: "BrtBeginCalcChain$",
                f: v
            },
            529: {
                n: "BrtEndCalcChain$",
                f: v
            },
            530: {
                n: "BrtBeginSortState",
                f: v
            },
            531: {
                n: "BrtEndSortState",
                f: v
            },
            532: {
                n: "BrtBeginSortCond",
                f: v
            },
            533: {
                n: "BrtEndSortCond",
                f: v
            },
            534: {
                n: "BrtBookProtection",
                f: v
            },
            535: {
                n: "BrtSheetProtection",
                f: v
            },
            536: {
                n: "BrtRangeProtection",
                f: v
            },
            537: {
                n: "BrtPhoneticInfo",
                f: v
            },
            538: {
                n: "BrtBeginECTxtWiz",
                f: v
            },
            539: {
                n: "BrtEndECTxtWiz",
                f: v
            },
            540: {
                n: "BrtBeginECTWFldInfoLst",
                f: v
            },
            541: {
                n: "BrtEndECTWFldInfoLst",
                f: v
            },
            542: {
                n: "BrtBeginECTwFldInfo",
                f: v
            },
            548: {
                n: "BrtFileSharing",
                f: v
            },
            549: {
                n: "BrtOleSize",
                f: v
            },
            550: {
                n: "BrtDrawing",
                f: v
            },
            551: {
                n: "BrtLegacyDrawing",
                f: v
            },
            552: {
                n: "BrtLegacyDrawingHF",
                f: v
            },
            553: {
                n: "BrtWebOpt",
                f: v
            },
            554: {
                n: "BrtBeginWebPubItems",
                f: v
            },
            555: {
                n: "BrtEndWebPubItems",
                f: v
            },
            556: {
                n: "BrtBeginWebPubItem",
                f: v
            },
            557: {
                n: "BrtEndWebPubItem",
                f: v
            },
            558: {
                n: "BrtBeginSXCondFmt",
                f: v
            },
            559: {
                n: "BrtEndSXCondFmt",
                f: v
            },
            560: {
                n: "BrtBeginSXCondFmts",
                f: v
            },
            561: {
                n: "BrtEndSXCondFmts",
                f: v
            },
            562: {
                n: "BrtBkHim",
                f: v
            },
            564: {
                n: "BrtColor",
                f: v
            },
            565: {
                n: "BrtBeginIndexedColors",
                f: v
            },
            566: {
                n: "BrtEndIndexedColors",
                f: v
            },
            569: {
                n: "BrtBeginMRUColors",
                f: v
            },
            570: {
                n: "BrtEndMRUColors",
                f: v
            },
            572: {
                n: "BrtMRUColor",
                f: v
            },
            573: {
                n: "BrtBeginDVals",
                f: v
            },
            574: {
                n: "BrtEndDVals",
                f: v
            },
            577: {
                n: "BrtSupNameStart",
                f: v
            },
            578: {
                n: "BrtSupNameValueStart",
                f: v
            },
            579: {
                n: "BrtSupNameValueEnd",
                f: v
            },
            580: {
                n: "BrtSupNameNum",
                f: v
            },
            581: {
                n: "BrtSupNameErr",
                f: v
            },
            582: {
                n: "BrtSupNameSt",
                f: v
            },
            583: {
                n: "BrtSupNameNil",
                f: v
            },
            584: {
                n: "BrtSupNameBool",
                f: v
            },
            585: {
                n: "BrtSupNameFmla",
                f: v
            },
            586: {
                n: "BrtSupNameBits",
                f: v
            },
            587: {
                n: "BrtSupNameEnd",
                f: v
            },
            588: {
                n: "BrtEndSupBook",
                f: v
            },
            589: {
                n: "BrtCellSmartTagProperty",
                f: v
            },
            590: {
                n: "BrtBeginCellSmartTag",
                f: v
            },
            591: {
                n: "BrtEndCellSmartTag",
                f: v
            },
            592: {
                n: "BrtBeginCellSmartTags",
                f: v
            },
            593: {
                n: "BrtEndCellSmartTags",
                f: v
            },
            594: {
                n: "BrtBeginSmartTags",
                f: v
            },
            595: {
                n: "BrtEndSmartTags",
                f: v
            },
            596: {
                n: "BrtSmartTagType",
                f: v
            },
            597: {
                n: "BrtBeginSmartTagTypes",
                f: v
            },
            598: {
                n: "BrtEndSmartTagTypes",
                f: v
            },
            599: {
                n: "BrtBeginSXFilters",
                f: v
            },
            600: {
                n: "BrtEndSXFilters",
                f: v
            },
            601: {
                n: "BrtBeginSXFILTER",
                f: v
            },
            602: {
                n: "BrtEndSXFilter",
                f: v
            },
            603: {
                n: "BrtBeginFills",
                f: v
            },
            604: {
                n: "BrtEndFills",
                f: v
            },
            605: {
                n: "BrtBeginCellWatches",
                f: v
            },
            606: {
                n: "BrtEndCellWatches",
                f: v
            },
            607: {
                n: "BrtCellWatch",
                f: v
            },
            608: {
                n: "BrtBeginCRErrs",
                f: v
            },
            609: {
                n: "BrtEndCRErrs",
                f: v
            },
            610: {
                n: "BrtCrashRecErr",
                f: v
            },
            611: {
                n: "BrtBeginFonts",
                f: v
            },
            612: {
                n: "BrtEndFonts",
                f: v
            },
            613: {
                n: "BrtBeginBorders",
                f: v
            },
            614: {
                n: "BrtEndBorders",
                f: v
            },
            615: {
                n: "BrtBeginFmts",
                f: v
            },
            616: {
                n: "BrtEndFmts",
                f: v
            },
            617: {
                n: "BrtBeginCellXFs",
                f: v
            },
            618: {
                n: "BrtEndCellXFs",
                f: v
            },
            619: {
                n: "BrtBeginStyles",
                f: v
            },
            620: {
                n: "BrtEndStyles",
                f: v
            },
            625: {
                n: "BrtBigName",
                f: v
            },
            626: {
                n: "BrtBeginCellStyleXFs",
                f: v
            },
            627: {
                n: "BrtEndCellStyleXFs",
                f: v
            },
            628: {
                n: "BrtBeginComments",
                f: v
            },
            629: {
                n: "BrtEndComments",
                f: v
            },
            630: {
                n: "BrtBeginCommentAuthors",
                f: v
            },
            631: {
                n: "BrtEndCommentAuthors",
                f: v
            },
            632: {
                n: "BrtCommentAuthor",
                f: de
            },
            633: {
                n: "BrtBeginCommentList",
                f: v
            },
            634: {
                n: "BrtEndCommentList",
                f: v
            },
            635: {
                n: "BrtBeginComment",
                f: function ee(m, C) {
                    var w = {};
                    w.iauthor = m.read_shift(4);
                    var T = Cr(m);
                    return w.rfx = T.s, w.ref = uo(T.s), m.l += 16, w
                }
            },
            636: {
                n: "BrtEndComment",
                f: v
            },
            637: {
                n: "BrtCommentText",
                f: Xt
            },
            638: {
                n: "BrtBeginOleObjects",
                f: v
            },
            639: {
                n: "BrtOleObject",
                f: v
            },
            640: {
                n: "BrtEndOleObjects",
                f: v
            },
            641: {
                n: "BrtBeginSxrules",
                f: v
            },
            642: {
                n: "BrtEndSxRules",
                f: v
            },
            643: {
                n: "BrtBeginActiveXControls",
                f: v
            },
            644: {
                n: "BrtActiveX",
                f: v
            },
            645: {
                n: "BrtEndActiveXControls",
                f: v
            },
            646: {
                n: "BrtBeginPCDSDTCEMembersSortBy",
                f: v
            },
            648: {
                n: "BrtBeginCellIgnoreECs",
                f: v
            },
            649: {
                n: "BrtCellIgnoreEC",
                f: v
            },
            650: {
                n: "BrtEndCellIgnoreECs",
                f: v
            },
            651: {
                n: "BrtCsProp",
                f: v
            },
            652: {
                n: "BrtCsPageSetup",
                f: v
            },
            653: {
                n: "BrtBeginUserCsViews",
                f: v
            },
            654: {
                n: "BrtEndUserCsViews",
                f: v
            },
            655: {
                n: "BrtBeginUserCsView",
                f: v
            },
            656: {
                n: "BrtEndUserCsView",
                f: v
            },
            657: {
                n: "BrtBeginPcdSFCIEntries",
                f: v
            },
            658: {
                n: "BrtEndPCDSFCIEntries",
                f: v
            },
            659: {
                n: "BrtPCDSFCIEntry",
                f: v
            },
            660: {
                n: "BrtBeginListParts",
                f: v
            },
            661: {
                n: "BrtListPart",
                f: v
            },
            662: {
                n: "BrtEndListParts",
                f: v
            },
            663: {
                n: "BrtSheetCalcProp",
                f: v
            },
            664: {
                n: "BrtBeginFnGroup",
                f: v
            },
            665: {
                n: "BrtFnGroup",
                f: v
            },
            666: {
                n: "BrtEndFnGroup",
                f: v
            },
            667: {
                n: "BrtSupAddin",
                f: v
            },
            668: {
                n: "BrtSXTDMPOrder",
                f: v
            },
            669: {
                n: "BrtCsProtection",
                f: v
            },
            671: {
                n: "BrtBeginWsSortMap",
                f: v
            },
            672: {
                n: "BrtEndWsSortMap",
                f: v
            },
            673: {
                n: "BrtBeginRRSort",
                f: v
            },
            674: {
                n: "BrtEndRRSort",
                f: v
            },
            675: {
                n: "BrtRRSortItem",
                f: v
            },
            676: {
                n: "BrtFileSharingIso",
                f: v
            },
            677: {
                n: "BrtBookProtectionIso",
                f: v
            },
            678: {
                n: "BrtSheetProtectionIso",
                f: v
            },
            679: {
                n: "BrtCsProtectionIso",
                f: v
            },
            680: {
                n: "BrtRangeProtectionIso",
                f: v
            },
            1024: {
                n: "BrtRwDescent",
                f: v
            },
            1025: {
                n: "BrtKnownFonts",
                f: v
            },
            1026: {
                n: "BrtBeginSXTupleSet",
                f: v
            },
            1027: {
                n: "BrtEndSXTupleSet",
                f: v
            },
            1028: {
                n: "BrtBeginSXTupleSetHeader",
                f: v
            },
            1029: {
                n: "BrtEndSXTupleSetHeader",
                f: v
            },
            1030: {
                n: "BrtSXTupleSetHeaderItem",
                f: v
            },
            1031: {
                n: "BrtBeginSXTupleSetData",
                f: v
            },
            1032: {
                n: "BrtEndSXTupleSetData",
                f: v
            },
            1033: {
                n: "BrtBeginSXTupleSetRow",
                f: v
            },
            1034: {
                n: "BrtEndSXTupleSetRow",
                f: v
            },
            1035: {
                n: "BrtSXTupleSetRowItem",
                f: v
            },
            1036: {
                n: "BrtNameExt",
                f: v
            },
            1037: {
                n: "BrtPCDH14",
                f: v
            },
            1038: {
                n: "BrtBeginPCDCalcMem14",
                f: v
            },
            1039: {
                n: "BrtEndPCDCalcMem14",
                f: v
            },
            1040: {
                n: "BrtSXTH14",
                f: v
            },
            1041: {
                n: "BrtBeginSparklineGroup",
                f: v
            },
            1042: {
                n: "BrtEndSparklineGroup",
                f: v
            },
            1043: {
                n: "BrtSparkline",
                f: v
            },
            1044: {
                n: "BrtSXDI14",
                f: v
            },
            1045: {
                n: "BrtWsFmtInfoEx14",
                f: v
            },
            1046: {
                n: "BrtBeginConditionalFormatting14",
                f: v
            },
            1047: {
                n: "BrtEndConditionalFormatting14",
                f: v
            },
            1048: {
                n: "BrtBeginCFRule14",
                f: v
            },
            1049: {
                n: "BrtEndCFRule14",
                f: v
            },
            1050: {
                n: "BrtCFVO14",
                f: v
            },
            1051: {
                n: "BrtBeginDatabar14",
                f: v
            },
            1052: {
                n: "BrtBeginIconSet14",
                f: v
            },
            1053: {
                n: "BrtDVal14",
                f: v
            },
            1054: {
                n: "BrtBeginDVals14",
                f: v
            },
            1055: {
                n: "BrtColor14",
                f: v
            },
            1056: {
                n: "BrtBeginSparklines",
                f: v
            },
            1057: {
                n: "BrtEndSparklines",
                f: v
            },
            1058: {
                n: "BrtBeginSparklineGroups",
                f: v
            },
            1059: {
                n: "BrtEndSparklineGroups",
                f: v
            },
            1061: {
                n: "BrtSXVD14",
                f: v
            },
            1062: {
                n: "BrtBeginSxview14",
                f: v
            },
            1063: {
                n: "BrtEndSxview14",
                f: v
            },
            1066: {
                n: "BrtBeginPCD14",
                f: v
            },
            1067: {
                n: "BrtEndPCD14",
                f: v
            },
            1068: {
                n: "BrtBeginExtConn14",
                f: v
            },
            1069: {
                n: "BrtEndExtConn14",
                f: v
            },
            1070: {
                n: "BrtBeginSlicerCacheIDs",
                f: v
            },
            1071: {
                n: "BrtEndSlicerCacheIDs",
                f: v
            },
            1072: {
                n: "BrtBeginSlicerCacheID",
                f: v
            },
            1073: {
                n: "BrtEndSlicerCacheID",
                f: v
            },
            1075: {
                n: "BrtBeginSlicerCache",
                f: v
            },
            1076: {
                n: "BrtEndSlicerCache",
                f: v
            },
            1077: {
                n: "BrtBeginSlicerCacheDef",
                f: v
            },
            1078: {
                n: "BrtEndSlicerCacheDef",
                f: v
            },
            1079: {
                n: "BrtBeginSlicersEx",
                f: v
            },
            1080: {
                n: "BrtEndSlicersEx",
                f: v
            },
            1081: {
                n: "BrtBeginSlicerEx",
                f: v
            },
            1082: {
                n: "BrtEndSlicerEx",
                f: v
            },
            1083: {
                n: "BrtBeginSlicer",
                f: v
            },
            1084: {
                n: "BrtEndSlicer",
                f: v
            },
            1085: {
                n: "BrtSlicerCachePivotTables",
                f: v
            },
            1086: {
                n: "BrtBeginSlicerCacheOlapImpl",
                f: v
            },
            1087: {
                n: "BrtEndSlicerCacheOlapImpl",
                f: v
            },
            1088: {
                n: "BrtBeginSlicerCacheLevelsData",
                f: v
            },
            1089: {
                n: "BrtEndSlicerCacheLevelsData",
                f: v
            },
            1090: {
                n: "BrtBeginSlicerCacheLevelData",
                f: v
            },
            1091: {
                n: "BrtEndSlicerCacheLevelData",
                f: v
            },
            1092: {
                n: "BrtBeginSlicerCacheSiRanges",
                f: v
            },
            1093: {
                n: "BrtEndSlicerCacheSiRanges",
                f: v
            },
            1094: {
                n: "BrtBeginSlicerCacheSiRange",
                f: v
            },
            1095: {
                n: "BrtEndSlicerCacheSiRange",
                f: v
            },
            1096: {
                n: "BrtSlicerCacheOlapItem",
                f: v
            },
            1097: {
                n: "BrtBeginSlicerCacheSelections",
                f: v
            },
            1098: {
                n: "BrtSlicerCacheSelection",
                f: v
            },
            1099: {
                n: "BrtEndSlicerCacheSelections",
                f: v
            },
            1100: {
                n: "BrtBeginSlicerCacheNative",
                f: v
            },
            1101: {
                n: "BrtEndSlicerCacheNative",
                f: v
            },
            1102: {
                n: "BrtSlicerCacheNativeItem",
                f: v
            },
            1103: {
                n: "BrtRangeProtection14",
                f: v
            },
            1104: {
                n: "BrtRangeProtectionIso14",
                f: v
            },
            1105: {
                n: "BrtCellIgnoreEC14",
                f: v
            },
            1111: {
                n: "BrtList14",
                f: v
            },
            1112: {
                n: "BrtCFIcon",
                f: v
            },
            1113: {
                n: "BrtBeginSlicerCachesPivotCacheIDs",
                f: v
            },
            1114: {
                n: "BrtEndSlicerCachesPivotCacheIDs",
                f: v
            },
            1115: {
                n: "BrtBeginSlicers",
                f: v
            },
            1116: {
                n: "BrtEndSlicers",
                f: v
            },
            1117: {
                n: "BrtWbProp14",
                f: v
            },
            1118: {
                n: "BrtBeginSXEdit",
                f: v
            },
            1119: {
                n: "BrtEndSXEdit",
                f: v
            },
            1120: {
                n: "BrtBeginSXEdits",
                f: v
            },
            1121: {
                n: "BrtEndSXEdits",
                f: v
            },
            1122: {
                n: "BrtBeginSXChange",
                f: v
            },
            1123: {
                n: "BrtEndSXChange",
                f: v
            },
            1124: {
                n: "BrtBeginSXChanges",
                f: v
            },
            1125: {
                n: "BrtEndSXChanges",
                f: v
            },
            1126: {
                n: "BrtSXTupleItems",
                f: v
            },
            1128: {
                n: "BrtBeginSlicerStyle",
                f: v
            },
            1129: {
                n: "BrtEndSlicerStyle",
                f: v
            },
            1130: {
                n: "BrtSlicerStyleElement",
                f: v
            },
            1131: {
                n: "BrtBeginStyleSheetExt14",
                f: v
            },
            1132: {
                n: "BrtEndStyleSheetExt14",
                f: v
            },
            1133: {
                n: "BrtBeginSlicerCachesPivotCacheID",
                f: v
            },
            1134: {
                n: "BrtEndSlicerCachesPivotCacheID",
                f: v
            },
            1135: {
                n: "BrtBeginConditionalFormattings",
                f: v
            },
            1136: {
                n: "BrtEndConditionalFormattings",
                f: v
            },
            1137: {
                n: "BrtBeginPCDCalcMemExt",
                f: v
            },
            1138: {
                n: "BrtEndPCDCalcMemExt",
                f: v
            },
            1139: {
                n: "BrtBeginPCDCalcMemsExt",
                f: v
            },
            1140: {
                n: "BrtEndPCDCalcMemsExt",
                f: v
            },
            1141: {
                n: "BrtPCDField14",
                f: v
            },
            1142: {
                n: "BrtBeginSlicerStyles",
                f: v
            },
            1143: {
                n: "BrtEndSlicerStyles",
                f: v
            },
            1144: {
                n: "BrtBeginSlicerStyleElements",
                f: v
            },
            1145: {
                n: "BrtEndSlicerStyleElements",
                f: v
            },
            1146: {
                n: "BrtCFRuleExt",
                f: v
            },
            1147: {
                n: "BrtBeginSXCondFmt14",
                f: v
            },
            1148: {
                n: "BrtEndSXCondFmt14",
                f: v
            },
            1149: {
                n: "BrtBeginSXCondFmts14",
                f: v
            },
            1150: {
                n: "BrtEndSXCondFmts14",
                f: v
            },
            1152: {
                n: "BrtBeginSortCond14",
                f: v
            },
            1153: {
                n: "BrtEndSortCond14",
                f: v
            },
            1154: {
                n: "BrtEndDVals14",
                f: v
            },
            1155: {
                n: "BrtEndIconSet14",
                f: v
            },
            1156: {
                n: "BrtEndDatabar14",
                f: v
            },
            1157: {
                n: "BrtBeginColorScale14",
                f: v
            },
            1158: {
                n: "BrtEndColorScale14",
                f: v
            },
            1159: {
                n: "BrtBeginSxrules14",
                f: v
            },
            1160: {
                n: "BrtEndSxrules14",
                f: v
            },
            1161: {
                n: "BrtBeginPRule14",
                f: v
            },
            1162: {
                n: "BrtEndPRule14",
                f: v
            },
            1163: {
                n: "BrtBeginPRFilters14",
                f: v
            },
            1164: {
                n: "BrtEndPRFilters14",
                f: v
            },
            1165: {
                n: "BrtBeginPRFilter14",
                f: v
            },
            1166: {
                n: "BrtEndPRFilter14",
                f: v
            },
            1167: {
                n: "BrtBeginPRFItem14",
                f: v
            },
            1168: {
                n: "BrtEndPRFItem14",
                f: v
            },
            1169: {
                n: "BrtBeginCellIgnoreECs14",
                f: v
            },
            1170: {
                n: "BrtEndCellIgnoreECs14",
                f: v
            },
            1171: {
                n: "BrtDxf14",
                f: v
            },
            1172: {
                n: "BrtBeginDxF14s",
                f: v
            },
            1173: {
                n: "BrtEndDxf14s",
                f: v
            },
            1177: {
                n: "BrtFilter14",
                f: v
            },
            1178: {
                n: "BrtBeginCustomFilters14",
                f: v
            },
            1180: {
                n: "BrtCustomFilter14",
                f: v
            },
            1181: {
                n: "BrtIconFilter14",
                f: v
            },
            1182: {
                n: "BrtPivotCacheConnectionName",
                f: v
            },
            2048: {
                n: "BrtBeginDecoupledPivotCacheIDs",
                f: v
            },
            2049: {
                n: "BrtEndDecoupledPivotCacheIDs",
                f: v
            },
            2050: {
                n: "BrtDecoupledPivotCacheID",
                f: v
            },
            2051: {
                n: "BrtBeginPivotTableRefs",
                f: v
            },
            2052: {
                n: "BrtEndPivotTableRefs",
                f: v
            },
            2053: {
                n: "BrtPivotTableRef",
                f: v
            },
            2054: {
                n: "BrtSlicerCacheBookPivotTables",
                f: v
            },
            2055: {
                n: "BrtBeginSxvcells",
                f: v
            },
            2056: {
                n: "BrtEndSxvcells",
                f: v
            },
            2057: {
                n: "BrtBeginSxRow",
                f: v
            },
            2058: {
                n: "BrtEndSxRow",
                f: v
            },
            2060: {
                n: "BrtPcdCalcMem15",
                f: v
            },
            2067: {
                n: "BrtQsi15",
                f: v
            },
            2068: {
                n: "BrtBeginWebExtensions",
                f: v
            },
            2069: {
                n: "BrtEndWebExtensions",
                f: v
            },
            2070: {
                n: "BrtWebExtension",
                f: v
            },
            2071: {
                n: "BrtAbsPath15",
                f: v
            },
            2072: {
                n: "BrtBeginPivotTableUISettings",
                f: v
            },
            2073: {
                n: "BrtEndPivotTableUISettings",
                f: v
            },
            2075: {
                n: "BrtTableSlicerCacheIDs",
                f: v
            },
            2076: {
                n: "BrtTableSlicerCacheID",
                f: v
            },
            2077: {
                n: "BrtBeginTableSlicerCache",
                f: v
            },
            2078: {
                n: "BrtEndTableSlicerCache",
                f: v
            },
            2079: {
                n: "BrtSxFilter15",
                f: v
            },
            2080: {
                n: "BrtBeginTimelineCachePivotCacheIDs",
                f: v
            },
            2081: {
                n: "BrtEndTimelineCachePivotCacheIDs",
                f: v
            },
            2082: {
                n: "BrtTimelineCachePivotCacheID",
                f: v
            },
            2083: {
                n: "BrtBeginTimelineCacheIDs",
                f: v
            },
            2084: {
                n: "BrtEndTimelineCacheIDs",
                f: v
            },
            2085: {
                n: "BrtBeginTimelineCacheID",
                f: v
            },
            2086: {
                n: "BrtEndTimelineCacheID",
                f: v
            },
            2087: {
                n: "BrtBeginTimelinesEx",
                f: v
            },
            2088: {
                n: "BrtEndTimelinesEx",
                f: v
            },
            2089: {
                n: "BrtBeginTimelineEx",
                f: v
            },
            2090: {
                n: "BrtEndTimelineEx",
                f: v
            },
            2091: {
                n: "BrtWorkBookPr15",
                f: v
            },
            2092: {
                n: "BrtPCDH15",
                f: v
            },
            2093: {
                n: "BrtBeginTimelineStyle",
                f: v
            },
            2094: {
                n: "BrtEndTimelineStyle",
                f: v
            },
            2095: {
                n: "BrtTimelineStyleElement",
                f: v
            },
            2096: {
                n: "BrtBeginTimelineStylesheetExt15",
                f: v
            },
            2097: {
                n: "BrtEndTimelineStylesheetExt15",
                f: v
            },
            2098: {
                n: "BrtBeginTimelineStyles",
                f: v
            },
            2099: {
                n: "BrtEndTimelineStyles",
                f: v
            },
            2100: {
                n: "BrtBeginTimelineStyleElements",
                f: v
            },
            2101: {
                n: "BrtEndTimelineStyleElements",
                f: v
            },
            2102: {
                n: "BrtDxf15",
                f: v
            },
            2103: {
                n: "BrtBeginDxfs15",
                f: v
            },
            2104: {
                n: "brtEndDxfs15",
                f: v
            },
            2105: {
                n: "BrtSlicerCacheHideItemsWithNoData",
                f: v
            },
            2106: {
                n: "BrtBeginItemUniqueNames",
                f: v
            },
            2107: {
                n: "BrtEndItemUniqueNames",
                f: v
            },
            2108: {
                n: "BrtItemUniqueName",
                f: v
            },
            2109: {
                n: "BrtBeginExtConn15",
                f: v
            },
            2110: {
                n: "BrtEndExtConn15",
                f: v
            },
            2111: {
                n: "BrtBeginOledbPr15",
                f: v
            },
            2112: {
                n: "BrtEndOledbPr15",
                f: v
            },
            2113: {
                n: "BrtBeginDataFeedPr15",
                f: v
            },
            2114: {
                n: "BrtEndDataFeedPr15",
                f: v
            },
            2115: {
                n: "BrtTextPr15",
                f: v
            },
            2116: {
                n: "BrtRangePr15",
                f: v
            },
            2117: {
                n: "BrtDbCommand15",
                f: v
            },
            2118: {
                n: "BrtBeginDbTables15",
                f: v
            },
            2119: {
                n: "BrtEndDbTables15",
                f: v
            },
            2120: {
                n: "BrtDbTable15",
                f: v
            },
            2121: {
                n: "BrtBeginDataModel",
                f: v
            },
            2122: {
                n: "BrtEndDataModel",
                f: v
            },
            2123: {
                n: "BrtBeginModelTables",
                f: v
            },
            2124: {
                n: "BrtEndModelTables",
                f: v
            },
            2125: {
                n: "BrtModelTable",
                f: v
            },
            2126: {
                n: "BrtBeginModelRelationships",
                f: v
            },
            2127: {
                n: "BrtEndModelRelationships",
                f: v
            },
            2128: {
                n: "BrtModelRelationship",
                f: v
            },
            2129: {
                n: "BrtBeginECTxtWiz15",
                f: v
            },
            2130: {
                n: "BrtEndECTxtWiz15",
                f: v
            },
            2131: {
                n: "BrtBeginECTWFldInfoLst15",
                f: v
            },
            2132: {
                n: "BrtEndECTWFldInfoLst15",
                f: v
            },
            2133: {
                n: "BrtBeginECTWFldInfo15",
                f: v
            },
            2134: {
                n: "BrtFieldListActiveItem",
                f: v
            },
            2135: {
                n: "BrtPivotCacheIdVersion",
                f: v
            },
            2136: {
                n: "BrtSXDI15",
                f: v
            },
            65535: {
                n: "",
                f: v
            }
        },
        j = function A(m, C) {
            for (var w = [], T = Z(m), N = 0; N !== T.length; ++N) w[m[T[N]][C]] = T[N];
            return w
        }(x, "n");

    function Ct(m) {
        return function(w) {
            for (var T = 0; T != m.length; ++T) {
                var N = m[T];
                typeof w[N[0]] > "u" && (w[N[0]] = N[1]), "n" === N[2] && (w[N[0]] = Number(w[N[0]]))
            }
        }
    }
    var ue = Ct([
            ["cellNF", !1],
            ["cellHTML", !0],
            ["cellFormula", !0],
            ["cellStyles", !1],
            ["sheetStubs", !1],
            ["sheetRows", 0, "n"],
            ["bookDeps", !1],
            ["bookSheets", !1],
            ["bookProps", !1],
            ["bookFiles", !1],
            ["bookVBA", !1],
            ["WTF", !1]
        ]),
        Le = Ct([
            ["bookSST", !1],
            ["bookType", "xlsx"],
            ["WTF", !1]
        ]);

    function In(m, C, w, T, N, at, bt) {
        try {
            N[T] = Sr(dt(m, w, !0), C), at[T] = Ri(dt(m, C), C, bt, N[T])
        } catch (Ht) {
            if (bt.WTF) throw Ht
        }
    }
    var Gn = function(C) {
        return "/" != C.substr(-1)
    };

    function ar(m, C) {
        J(O), ue(C = C || {}),
            function I() {
                H(1252)
            }();
        var at, bt, w = Z(m.files).filter(Gn).sort(),
            T = function zi(m, C) {
                var w = {};
                if (!m || !m.match) return m;
                var T = {
                    workbooks: [],
                    sheets: [],
                    calcchains: [],
                    themes: [],
                    styles: [],
                    coreprops: [],
                    extprops: [],
                    custprops: [],
                    strs: [],
                    comments: [],
                    vba: [],
                    TODO: [],
                    rels: [],
                    xmlns: ""
                };
                if ((m.match(jt) || []).forEach(function(N) {
                        var at = Kt(N);
                        switch (at[0].replace(Wt, "<")) {
                            case "<?xml":
                                break;
                            case "<Types":
                                T.xmlns = at["xmlns" + (at[0].match(/<(\w+):/) || ["", ""])[1]];
                                break;
                            case "<Default":
                                w[at.Extension] = at.ContentType;
                                break;
                            case "<Override":
                                void 0 !== T[ns[at.ContentType]] ? T[ns[at.ContentType]].push(at.PartName) : C.WTF && console.error(at)
                        }
                    }), T.xmlns !== te.CT) throw new Error("Unknown Namespace: " + T.xmlns);
                return T.calcchain = T.calcchains.length > 0 ? T.calcchains[0] : "", T.sst = T.strs.length > 0 ? T.strs[0] : "", T.style = T.styles.length > 0 ? T.styles[0] : "", T.defaults = w, delete T.calcchains, T
            }(dt(m, "[Content_Types].xml"), C),
            N = !1;
        if (0 === T.workbooks.length && dt(m, bt = "xl/workbook.xml", !0) && T.workbooks.push(bt), 0 === T.workbooks.length) {
            if (!et(m, bt = "xl/workbook.bin")) throw new Error("Could not find workbook");
            T.workbooks.push(bt), N = !0
        }
        "bin" == T.workbooks[0].substr(-3) && (N = !0), N && H(1200), !C.bookSheets && !C.bookProps && (on = [], T.sst && (on = ho(dt(m, T.sst.replace(/^\//, "")), T.sst, C)), ei = {}, T.style && (ei = Er(dt(m, T.style.replace(/^\//, "")), T.style, C)), $i = {}, C.cellStyles && T.themes.length && ($i = function co(m, C, w) {
            return function Gs(m, C) {
                return m && 0 !== m.length ? ($i.themeElements = {}, (w = m.match(os)) && function ss(m, C) {
                    $i.themeElements.clrScheme = [];
                    var w = {};
                    m[0].match(jt).forEach(function(T) {
                        var N = Kt(T);
                        switch (N[0]) {
                            case "<a:clrScheme":
                            case "</a:clrScheme>":
                                break;
                            case "<a:srgbClr":
                                w.rgb = N.val;
                                break;
                            case "<a:sysClr":
                                w.rgb = N.lastClr;
                                break;
                            case "<a:dk1>":
                            case "</a:dk1>":
                            case "<a:dk2>":
                            case "</a:dk2>":
                            case "<a:lt1>":
                            case "</a:lt1>":
                            case "<a:lt2>":
                            case "</a:lt2>":
                            case "<a:accent1>":
                            case "</a:accent1>":
                            case "<a:accent2>":
                            case "</a:accent2>":
                            case "<a:accent3>":
                            case "</a:accent3>":
                            case "<a:accent4>":
                            case "</a:accent4>":
                            case "<a:accent5>":
                            case "</a:accent5>":
                            case "<a:accent6>":
                            case "</a:accent6>":
                            case "<a:hlink>":
                            case "</a:hlink>":
                            case "<a:folHlink>":
                            case "</a:folHlink>":
                                "/" === N[0][1] ? ($i.themeElements.clrScheme.push(w), w = {}) : w.name = N[0].substring(3, N[0].length - 1);
                                break;
                            default:
                                if (C.WTF) throw "unrecognized " + N[0] + " in clrScheme"
                        }
                    })
                }(w, C), $i) : $i;
                var w
            }(m, w)
        }(dt(m, T.themes[0].replace(/^\//, ""), !0), 0, C)));
        var Ht = jn(dt(m, T.workbooks[0].replace(/^\//, "")), T.workbooks[0], C),
            ne = {},
            ye = "";
        0 !== T.coreprops.length && ((ye = dt(m, T.coreprops[0].replace(/^\//, ""), !0)) && (ne = function ps(m) {
            for (var C = {}, w = 0; w != cr.length; ++w) {
                var T = cr[w],
                    N = "(?:" + T[0].substr(0, T[0].indexOf(":")) + ":)" + T[0].substr(T[0].indexOf(":") + 1),
                    at = m.match(new RegExp("<" + N + "[^>]*>(.*)</" + N + ">"));
                null != at && at.length > 0 && (C[T[1]] = at[1]), "date" === T[2] && C[T[1]] && (C[T[1]] = new Date(C[T[1]]))
            }
            return C
        }(ye)), 0 !== T.extprops.length && (ye = dt(m, T.extprops[0].replace(/^\//, ""), !0)) && function ir(m, C) {
            var w = {};
            if (C || (C = {}), rs.forEach(function(ne) {
                    switch (ne[2]) {
                        case "string":
                            C[ne[1]] = (m.match(pt(ne[0])) || [])[1];
                            break;
                        case "bool":
                            C[ne[1]] = "true" === (m.match(pt(ne[0])) || [])[1];
                            break;
                        case "raw":
                            var ye = m.match(new RegExp("<" + ne[0] + "[^>]*>(.*)</" + ne[0] + ">"));
                            ye && ye.length > 0 && (w[ne[1]] = ye[1])
                    }
                }), w.HeadingPairs && w.TitlesOfParts) {
                for (var T = le(w.HeadingPairs), at = 0, bt = 0; bt !== T.length; ++bt) switch (T[bt].v) {
                    case "Worksheets":
                        at = 0, C.Worksheets = +T[++bt].v;
                        break;
                    case "Named Ranges":
                        ++bt
                }
                var Ht = le(w.TitlesOfParts).map(function(ne) {
                    return _t(ne.v)
                });
                C.SheetNames = Ht.slice(at, at + C.Worksheets)
            }
        }(ye, ne));
        var Ee = {};
        (!C.bookSheets || C.bookProps) && 0 !== T.custprops.length && (ye = dt(m, T.custprops[0].replace(/^\//, ""), !0)) && (Ee = function Hr(m, C) {
            var T, w = {},
                N = m.match(Nr);
            if (N)
                for (var at = 0; at != N.length; ++at) {
                    var bt = N[at],
                        Ht = Kt(bt);
                    switch (Ht[0]) {
                        case "<?xml":
                            break;
                        case "<Properties":
                            if (Ht.xmlns !== te.CUST_PROPS) throw "unrecognized xmlns " + Ht.xmlns;
                            if (Ht.xmlnsvt && Ht.xmlnsvt !== te.vt) throw "unrecognized vt " + Ht.xmlnsvt;
                            break;
                        case "<property":
                            T = Ht.name;
                            break;
                        case "</property>":
                            T = null;
                            break;
                        default:
                            if (0 === bt.indexOf("<vt:")) {
                                var ne = bt.split(">"),
                                    ye = ne[0].substring(4),
                                    Ee = ne[1];
                                switch (ye) {
                                    case "lpstr":
                                    case "lpwstr":
                                    case "bstr":
                                    case "lpwstr":
                                    case "cy":
                                    case "error":
                                        w[T] = V(Ee);
                                        break;
                                    case "bool":
                                        w[T] = X(Ee);
                                        break;
                                    case "i1":
                                    case "i2":
                                    case "i4":
                                    case "i8":
                                    case "int":
                                    case "uint":
                                        w[T] = parseInt(Ee, 10);
                                        break;
                                    case "r4":
                                    case "r8":
                                    case "decimal":
                                        w[T] = parseFloat(Ee);
                                        break;
                                    case "filetime":
                                    case "date":
                                        w[T] = new Date(Ee);
                                        break;
                                    default:
                                        typeof console < "u" && console.warn("Unexpected", bt, ye, ne)
                                }
                            } else if ("</" !== bt.substr(0, 2) && C.WTF) throw new Error(bt)
                    }
                }
            return w
        }(ye, C));
        var ze = {};
        if ((C.bookSheets || C.bookProps) && (ne.Worksheets && ne.SheetNames.length > 0 ? at = ne.SheetNames : Ht.Sheets && (at = Ht.Sheets.map(function(Rr) {
                return Rr.name
            })), C.bookProps && (ze.Props = ne, ze.Custprops = Ee), typeof at < "u" && (ze.SheetNames = at), C.bookSheets ? ze.SheetNames : C.bookProps)) return ze;
        at = {};
        var Pe = {};
        C.bookDeps && T.calcchain && (Pe = Hs(dt(m, T.calcchain.replace(/^\//, "")), T.calcchain, C));
        var Ln, Sn, _n = 0,
            Vn = {};
        if (!ne.Worksheets) {
            var nn = Ht.Sheets;
            ne.Worksheets = nn.length, ne.SheetNames = [];
            for (var Yn = 0; Yn != nn.length; ++Yn) ne.SheetNames[Yn] = nn[Yn].name
        }
        var yn = N ? "bin" : "xml",
            kn = "xl/_rels/workbook." + yn + ".rels",
            li = Sr(dt(m, kn, !0), kn);
        li && (li = function Je(m, C) {
            if (!m) return 0;
            try {
                m = C.map(function(T) {
                    return [T.name, m["!id"][T.id].Target]
                })
            } catch {
                return null
            }
            return m && 0 !== m.length ? m : null
        }(li, Ht.Sheets));
        var Fr = dt(m, "xl/worksheets/sheet.xml", !0) ? 1 : 0;
        for (_n = 0; _n != ne.Worksheets; ++_n) Sn = (Ln = li ? "xl/" + li[_n][1].replace(/[\/]?xl\//, "") : (Ln = "xl/worksheets/sheet" + (_n + 1 - Fr) + "." + yn).replace(/sheet0\./, "sheet.")).replace(/^(.*)(\/)([^\/]*)$/, "$1/_rels/$3.rels"), In(m, Ln, Sn, ne.SheetNames[_n], Vn, at, C);
        return T.comments && function Q(m, C, w, T, N) {
            for (var at = 0; at != C.length; ++at) {
                var bt = C[at],
                    Ht = Ns(dt(m, bt.replace(/^\//, ""), !0), bt, N);
                if (Ht && Ht.length)
                    for (var ne = Z(w), ye = 0; ye != ne.length; ++ye) {
                        var Ee = ne[ye],
                            ze = T[Ee];
                        ze && ze[bt] && yt(0, w[Ee], Ht)
                    }
            }
        }(m, T.comments, at, Vn, C), ze = {
            Directory: T,
            Workbook: Ht,
            Props: ne,
            Custprops: Ee,
            Deps: Pe,
            Sheets: at,
            SheetNames: ne.SheetNames,
            Strings: on,
            Styles: ei,
            Themes: $i,
            SSF: O.get_table()
        }, C.bookFiles && (ze.keys = w, ze.files = m.files), C.bookVBA && (T.vba.length > 0 ? ze.vbaraw = dt(m, T.vba[0], !0) : "application/vnd.ms-office.vbaProject" === T.defaults.bin && (ze.vbaraw = dt(m, "xl/vbaProject.bin", !0))), ze
    }

    function Gi(m, C, w, T, N) {
        if (N || (N = {}), m["!id"] || (m["!id"] = {}), N.Id = "rId" + C, N.Type = T, N.Target = w, m["!id"][N.Id]) throw new Error("Cannot rewrite rId " + C);
        m["!id"][N.Id] = N, m[("/" + N.Target).replace("//", "/")] = N
    }

    function Yr(m, C) {
        m && !m.SSF && (m.SSF = O.get_table()), m && m.SSF && (J(O), O.load_table(m.SSF), C.revssf = tt(m.SSF), C.revssf[m.SSF[65535]] = 0), C.rels = {}, C.wbrels = {}, C.Strings = [], C.Strings.Count = 0, C.Strings.Unique = 0;
        var w = "xlsb" == C.bookType ? "bin" : "xml",
            T = {
                workbooks: [],
                sheets: [],
                calcchains: [],
                themes: [],
                styles: [],
                coreprops: [],
                extprops: [],
                custprops: [],
                strs: [],
                comments: [],
                vba: [],
                TODO: [],
                rels: [],
                xmlns: ""
            };
        Le(C = C || {});
        var N = new wt,
            at = "",
            bt = 0;
        for (C.cellXfs = [], gr(C.cellXfs, {}, {
                revssf: {
                    General: 0
                }
            }), N.file(at = "docProps/core.xml", function Cs(m, C) {
                var w = [Wn, ro],
                    T = {};
                if (!m) return w.join("");
                null != m.CreatedDate && is("dcterms:created", "string" == typeof m.CreatedDate ? m.CreatedDate : cn(m.CreatedDate, C.WTF), {
                    "xsi:type": "dcterms:W3CDTF"
                }, w, T), null != m.ModifiedDate && is("dcterms:modified", "string" == typeof m.ModifiedDate ? m.ModifiedDate : cn(m.ModifiedDate, C.WTF), {
                    "xsi:type": "dcterms:W3CDTF"
                }, w, T);
                for (var N = 0; N != cr.length; ++N) {
                    var at = cr[N];
                    is(at[0], m[at[1]], null, w, T)
                }
                return w.length > 2 && (w[w.length] = "</cp:coreProperties>", w[1] = w[1].replace("/>", ">")), w.join("")
            }(m.Props, C)), T.coreprops.push(at), Gi(C.rels, 2, at, fi.CORE_PROPS), at = "docProps/app.xml", m.Props || (m.Props = {}), m.Props.SheetNames = m.SheetNames, m.Props.Worksheets = m.SheetNames.length, N.file(at, function kr(m, C) {
                var w = [],
                    N = Me;
                return m || (m = {}), m.Application = "SheetJS", w[w.length] = Wn, w[w.length] = Ii, rs.forEach(function(at) {
                    if (!(typeof m[at[1]] > "u")) {
                        var bt;
                        switch (at[2]) {
                            case "string":
                                bt = m[at[1]];
                                break;
                            case "bool":
                                bt = m[at[1]] ? "true" : "false"
                        }
                        typeof bt < "u" && (w[w.length] = N(at[0], bt))
                    }
                }), w[w.length] = N("HeadingPairs", N("vt:vector", N("vt:variant", "<vt:lpstr>Worksheets</vt:lpstr>") + N("vt:variant", N("vt:i4", String(m.Worksheets))), {
                    size: 2,
                    baseType: "variant"
                })), w[w.length] = N("TitlesOfParts", N("vt:vector", m.SheetNames.map(function(at) {
                    return "<vt:lpstr>" + at + "</vt:lpstr>"
                }).join(""), {
                    size: m.Worksheets,
                    baseType: "lpstr"
                })), w.length > 2 && (w[w.length] = "</Properties>", w[1] = w[1].replace("/>", ">")), w.join("")
            }(m.Props)), T.extprops.push(at), Gi(C.rels, 3, at, fi.EXT_PROPS), m.Custprops !== m.Props && Z(m.Custprops || {}).length > 0 && (N.file(at = "docProps/custom.xml", function Ss(m, C) {
                var w = [Wn, Ls];
                if (!m) return w.join("");
                var T = 1;
                return Z(m).forEach(function(at) {
                    ++T, w[w.length] = Me("property", function sn(m) {
                        switch (typeof m) {
                            case "string":
                                return Me("vt:lpwstr", m);
                            case "number":
                                return Me((0 | m) == m ? "vt:i4" : "vt:r8", String(m));
                            case "boolean":
                                return Me("vt:bool", m ? "true" : "false")
                        }
                        if (m instanceof Date) return Me("vt:filetime", cn(m));
                        throw new Error("Unable to serialize " + m)
                    }(m[at]), {
                        fmtid: "{D5CDD505-2E9C-101B-9397-08002B2CF9AE}",
                        pid: T,
                        name: at
                    })
                }), w.length > 2 && (w[w.length] = "</Properties>", w[1] = w[1].replace("/>", ">")), w.join("")
            }(m.Custprops)), T.custprops.push(at), Gi(C.rels, 4, at, fi.CUST_PROPS)), N.file(at = "xl/workbook." + w, Co(m, at, C)), T.workbooks.push(at), Gi(C.rels, 1, at, fi.WB), bt = 1; bt <= m.SheetNames.length; ++bt) N.file(at = "xl/worksheets/sheet" + bt + "." + w, Fo(bt - 1, at, C, m)), T.sheets.push(at), Gi(C.wbrels, bt, "worksheets/sheet" + bt + "." + w, fi.WS);
        return null != C.Strings && C.Strings.length > 0 && (N.file(at = "xl/sharedStrings." + w, kt(C.Strings, at, C)), T.strs.push(at), Gi(C.wbrels, ++bt, "sharedStrings." + w, fi.SST)), N.file(at = "xl/theme/theme1.xml", '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="1F497D"/></a:dk2><a:lt2><a:srgbClr val="EEECE1"/></a:lt2><a:accent1><a:srgbClr val="4F81BD"/></a:accent1><a:accent2><a:srgbClr val="C0504D"/></a:accent2><a:accent3><a:srgbClr val="9BBB59"/></a:accent3><a:accent4><a:srgbClr val="8064A2"/></a:accent4><a:accent5><a:srgbClr val="4BACC6"/></a:accent5><a:accent6><a:srgbClr val="F79646"/></a:accent6><a:hlink><a:srgbClr val="0000FF"/></a:hlink><a:folHlink><a:srgbClr val="800080"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Cambria"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="\uff2d\uff33 \uff30\u30b4\u30b7\u30c3\u30af"/><a:font script="Hang" typeface="\ub9d1\uc740 \uace0\ub515"/><a:font script="Hans" typeface="\u5b8b\u4f53"/><a:font script="Hant" typeface="\u65b0\u7d30\u660e\u9ad4"/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:majorFont><a:minorFont><a:latin typeface="Calibri"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="\uff2d\uff33 \uff30\u30b4\u30b7\u30c3\u30af"/><a:font script="Hang" typeface="\ub9d1\uc740 \uace0\ub515"/><a:font script="Hans" typeface="\u5b8b\u4f53"/><a:font script="Hant" typeface="\u65b0\u7d30\u660e\u9ad4"/><a:font script="Arab" typeface="Arial"/><a:font script="Hebr" typeface="Arial"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="1"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="100000"/><a:shade val="100000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="50000"/><a:shade val="100000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="-80000" r="50000" b="180000"/></a:path></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults><a:spDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="1"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="3"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="2"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="lt1"/></a:fontRef></a:style></a:spDef><a:lnDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="2"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="0"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="1"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="tx1"/></a:fontRef></a:style></a:lnDef></a:objectDefaults><a:extraClrSchemeLst/></a:theme>'), T.themes.push(at), Gi(C.wbrels, ++bt, "theme/theme1.xml", fi.THEME), N.file(at = "xl/styles." + w, function bo(m, C, w) {
            return (".bin" === C.substr(-4) ? Ji : Xs)(m, w)
        }(m, at, C)), T.styles.push(at), Gi(C.wbrels, ++bt, "styles." + w, fi.STY), N.file("[Content_Types].xml", function nr(m, C) {
            var T, w = [];
            w[w.length] = Wn, w[w.length] = Ti, w = w.concat(ji);
            var N = function(Ht) {
                    m[Ht] && m[Ht].length > 0 && (w[w.length] = Me("Override", null, {
                        PartName: ("/" == (T = m[Ht][0])[0] ? "" : "/") + T,
                        ContentType: er[Ht][C.bookType || "xlsx"]
                    }))
                },
                bt = function(Ht) {
                    (m[Ht] || []).forEach(function(ne) {
                        w[w.length] = Me("Override", null, {
                            PartName: ("/" == ne[0] ? "" : "/") + ne,
                            ContentType: Mi[Ht][0]
                        })
                    })
                };
            return N("workbooks"), m["sheets"].forEach(function(ne) {
                w[w.length] = Me("Override", null, {
                    PartName: ("/" == ne[0] ? "" : "/") + ne,
                    ContentType: er.sheets[C.bookType || "xlsx"]
                })
            }), bt("themes"), ["strs", "styles"].forEach(N), ["coreprops", "extprops", "custprops"].forEach(bt), w.length > 2 && (w[w.length] = "</Types>", w[1] = w[1].replace("/>", ">")), w.join("")
        }(T, C)), N.file("_rels/.rels", ds(C.rels)), N.file("xl/_rels/workbook." + w + ".rels", ds(C.wbrels)), N
    }

    function _s(m, C) {
        var w, T = m,
            N = C || {};
        switch (N.type || (N.type = typeof Buffer < "u" && m instanceof Buffer ? "buffer" : "base64"), N.type) {
            case "base64":
                w = new wt(T, {
                    base64: !0
                });
                break;
            case "binary":
                w = new wt(T, {
                    base64: !1
                });
                break;
            case "buffer":
                w = new wt(T);
                break;
            case "file":
                w = new wt(T = Bt.readFileSync(m));
                break;
            default:
                throw new Error("Unrecognized type " + N.type)
        }
        return ar(w, N)
    }

    function zs(m, C) {
        var w = C || {},
            T = Yr(m, w);
        switch (w.type) {
            case "base64":
                return T.generate({
                    type: "base64"
                });
            case "binary":
                return T.generate({
                    type: "string"
                });
            case "buffer":
                return T.generate({
                    type: "nodebuffer"
                });
            case "file":
                return Bt.writeFileSync(w.file, T.generate({
                    type: "nodebuffer"
                }));
            default:
                throw new Error("Unrecognized type " + w.type)
        }
    }

    function fo(m) {
        return parseInt(function Zr(m) {
            return m.replace(/\$(\d+)$/, "$1")
        }(m), 10) - 1
    }

    function cs(m) {
        return "" + (m + 1)
    }

    function So(m) {
        for (var C = function xo(m) {
                return m.replace(/^\$([A-Z])/, "$1")
            }(m), w = 0, T = 0; T !== C.length; ++T) w = 26 * w + C.charCodeAt(T) - 64;
        return w - 1
    }

    function to(m) {
        var C = "";
        for (++m; m; m = Math.floor((m - 1) / 26)) C = String.fromCharCode((m - 1) % 26 + 65) + C;
        return C
    }

    function yo(m) {
        return m.replace(/(\$?[A-Z]*)(\$?\d*)/, "$1,$2").split(",")
    }

    function Ao(m) {
        var C = yo(m);
        return {
            c: So(C[0]),
            r: fo(C[1])
        }
    }

    function uo(m) {
        return to(m.c) + cs(m.r)
    }

    function po(m, C) {
        return void 0 === C || "number" == typeof C ? po(m.s, m.e) : ("string" != typeof m && (m = uo(m)), "string" != typeof C && (C = uo(C)), m == C ? m : m + ":" + C)
    }

    function Jr(m) {
        var C = {
                s: {
                    c: 0,
                    r: 0
                },
                e: {
                    c: 0,
                    r: 0
                }
            },
            w = 0,
            T = 0,
            N = 0;
        for (w = 0; T != m.length && !((N = m.charCodeAt(T) - 64) < 1 || N > 26); ++T) w = 26 * w + N;
        for (C.s.c = --w, w = 0; T != m.length && !((N = m.charCodeAt(T) - 48) < 0 || N > 9); ++T) w = 10 * w + N;
        if (C.s.r = --w, T === m.length || 58 === m.charCodeAt(++T)) return C.e.c = C.s.c, C.e.r = C.s.r, C;
        for (w = 0; T != m.length && !((N = m.charCodeAt(T) - 64) < 1 || N > 26); ++T) w = 26 * w + N;
        for (C.e.c = --w, w = 0; T != m.length && !((N = m.charCodeAt(T) - 48) < 0 || N > 9); ++T) w = 10 * w + N;
        return C.e.r = --w, C
    }

    function _o(m, C) {
        return null == m || null == m.t ? "" : void 0 !== m.w ? m.w : function Yo(m, C) {
            if (void 0 !== m.z) try {
                return m.w = O.format(m.z, C)
            } catch {}
            if (!m.XF) return C;
            try {
                return m.w = O.format(m.XF.ifmt || 0, C)
            } catch {
                return "" + C
            }
        }(m, void 0 === C ? m.v : C)
    }

    function ko(m, C) {
        var w, T, N, Ht, ye, Ee, ze, Pe, at = 0,
            bt = 1,
            ne = [],
            _n = [],
            Vn = C ? ? {};
        if (!m || !m["!ref"]) return _n;
        switch (N = void 0 !== Vn.range ? Vn.range : m["!ref"], 1 === Vn.header ? at = 1 : "A" === Vn.header ? at = 2 : Array.isArray(Vn.header) && (at = 3), typeof N) {
            case "string":
                Ht = Jr(N);
                break;
            case "number":
                (Ht = Jr(m["!ref"])).s.r = N;
                break;
            default:
                Ht = N
        }
        at > 0 && (bt = 0);
        var Ln = cs(Ht.s.r),
            Sn = [];
        for (ze = Ht.s.c; ze <= Ht.e.c; ++ze) switch (Sn[ze] = to(ze), w = m[Sn[ze] + Ln], at) {
            case 1:
                ne[ze] = ze;
                break;
            case 2:
                ne[ze] = Sn[ze];
                break;
            case 3:
                ne[ze] = Vn.header[ze - Ht.s.c];
                break;
            default:
                if (!w) continue;
                ne[ze] = _o(w)
        }
        for (Ee = Ht.s.r + bt; Ee <= Ht.e.r; ++Ee) {
            for (Ln = cs(Ee), ye = !0, T = 1 === at ? [] : Object.create({
                    __rowNum__: Ee
                }), ze = Ht.s.c; ze <= Ht.e.c; ++ze)
                if ((w = m[Sn[ze] + Ln]) && w.t) {
                    switch (Pe = w.v, w.t) {
                        case "e":
                            continue;
                        case "s":
                        case "str":
                        case "b":
                        case "n":
                            break;
                        default:
                            throw "unrecognized type " + w.t
                    }
                    void 0 !== Pe && (T[ne[ze]] = Vn.raw ? Pe : _o(w, Pe), ye = !1)
                }
            ye || _n.push(T)
        }
        return _n
    }

    function Do(m, C) {
        var w = "",
            T = "",
            N = /"/g,
            at = C ? ? {};
        if (null == m || null == m["!ref"]) return "";
        var Sn, bt = Jr(m["!ref"]),
            Ht = void 0 !== at.FS ? at.FS : ",",
            ne = Ht.charCodeAt(0),
            ye = void 0 !== at.RS ? at.RS : "\n",
            Ee = ye.charCodeAt(0),
            ze = "",
            Pe = "",
            _n = [],
            Vn = 0,
            Ln = 0,
            nn = 0,
            Yn = 0;
        for (nn = bt.s.r; nn <= bt.e.r; ++nn) {
            for (ze = "", Pe = cs(nn), Yn = bt.s.c; Yn <= bt.e.c; ++Yn) {
                for (nn === bt.s.r && (_n[Yn] = to(Yn)), T = void 0 !== (Sn = m[_n[Yn] + Pe]) ? "" + _o(Sn) : "", Vn = 0, Ln = 0; Vn !== T.length; ++Vn)
                    if ((Ln = T.charCodeAt(Vn)) === ne || Ln === Ee || 34 === Ln) {
                        T = '"' + T.replace(N, '""') + '"';
                        break
                    }
                ze += (Yn === bt.s.c ? "" : Ht) + T
            }
            w += ze + ye
        }
        return w
    }

    function eo(m) {
        var C, T, w = "",
            N = "";
        if (null == m || null == m["!ref"]) return "";
        var at = Jr(m["!ref"]),
            bt = "",
            Ht = [];
        C = new Array((at.e.r - at.s.r + 1) * (at.e.c - at.s.c + 1));
        for (var ne = 0, ye = at.s.r; ye <= at.e.r; ++ye) {
            bt = cs(ye);
            for (var Ee = at.s.c; Ee <= at.e.c; ++Ee)
                if (ye === at.s.r && (Ht[Ee] = to(Ee)), N = "", void 0 !== (T = m[w = Ht[Ee] + bt])) {
                    if (null != T.f) N = T.f;
                    else if (void 0 !== T.w) N = "'" + T.w;
                    else {
                        if (void 0 === T.v) continue;
                        N = "" + T.v
                    }
                    C[ne++] = w + "=" + N
                }
        }
        return C.length = ne, C
    }
    var No = {
        encode_col: to,
        encode_row: cs,
        encode_cell: uo,
        encode_range: po,
        decode_col: So,
        decode_row: fo,
        split_cell: yo,
        decode_cell: Ao,
        decode_range: function Go(m) {
            var C = m.split(":").map(Ao);
            return {
                s: C[0],
                e: C[C.length - 1]
            }
        },
        format_cell: _o,
        get_formulae: eo,
        make_csv: Do,
        make_json: ko,
        make_formulae: eo,
        sheet_to_csv: Do,
        sheet_to_json: ko,
        sheet_to_formulae: eo,
        sheet_to_row_object_array: function Ro(m, C) {
            return ko(m, null == C ? C : {})
        }
    };
    p.parseZip = ar, p.read = _s, p.readFile = function Ds(m, C) {
        var w = C || {};
        return w.type = "file", _s(m, w)
    }, p.write = zs, p.writeFile = function Tr(m, C, w) {
        var T = w || {};
        switch (T.type = "file", T.file = C, T.file.substr(-5).toLowerCase()) {
            case ".xlsm":
                T.bookType = "xlsm";
                break;
            case ".xlsb":
                T.bookType = "xlsb"
        }
        return zs(m, T)
    }, p.utils = No, p.SSF = O
}(typeof exports < "u" ? exports : XLSX),
function(p, R) {
    "object" == typeof exports && typeof module < "u" ? module.exports = R(require("@popperjs/core")) : "function" == typeof define && define.amd ? define(["@popperjs/core"], R) : (p = typeof globalThis < "u" ? globalThis : p || self).bootstrap = R(p.Popper)
}(this, function(p) {
    "use strict";
    const y = function R(kt) {
            const x = Object.create(null, {
                [Symbol.toStringTag]: {
                    value: "Module"
                }
            });
            if (kt)
                for (const j in kt)
                    if ("default" !== j) {
                        const Ct = Object.getOwnPropertyDescriptor(kt, j);
                        Object.defineProperty(x, j, Ct.get ? Ct : {
                            enumerable: !0,
                            get: () => kt[j]
                        })
                    }
            return x.default = kt, Object.freeze(x)
        }(p),
        I = new Map,
        H = {
            set(kt, x, j) {
                I.has(kt) || I.set(kt, new Map);
                const Ct = I.get(kt);
                Ct.has(x) || 0 === Ct.size ? Ct.set(x, j) : console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(Ct.keys())[0]}.`)
            },
            get: (kt, x) => I.has(kt) && I.get(kt).get(x) || null,
            remove(kt, x) {
                if (!I.has(kt)) return;
                const j = I.get(kt);
                j.delete(x), 0 === j.size && I.delete(kt)
            }
        },
        P = "transitionend",
        K = kt => (kt && window.CSS && window.CSS.escape && (kt = kt.replace(/#([^\s"#']+)/g, (x, j) => `#${CSS.escape(j)}`)), kt),
        O = kt => {
            kt.dispatchEvent(new Event(P))
        },
        J = kt => !(!kt || "object" != typeof kt) && (void 0 !== kt.jquery && (kt = kt[0]), void 0 !== kt.nodeType),
        mt = kt => J(kt) ? kt.jquery ? kt[0] : kt : "string" == typeof kt && kt.length > 0 ? document.querySelector(K(kt)) : null,
        Z = kt => {
            if (!J(kt) || 0 === kt.getClientRects().length) return !1;
            const x = "visible" === getComputedStyle(kt).getPropertyValue("visibility"),
                j = kt.closest("details:not([open])");
            if (!j) return x;
            if (j !== kt) {
                const Ct = kt.closest("summary");
                if (Ct && Ct.parentNode !== j || null === Ct) return !1
            }
            return x
        },
        A = kt => !kt || kt.nodeType !== Node.ELEMENT_NODE || !!kt.classList.contains("disabled") || (void 0 !== kt.disabled ? kt.disabled : kt.hasAttribute("disabled") && "false" !== kt.getAttribute("disabled")),
        q = kt => {
            if (!document.documentElement.attachShadow) return null;
            if ("function" == typeof kt.getRootNode) {
                const x = kt.getRootNode();
                return x instanceof ShadowRoot ? x : null
            }
            return kt instanceof ShadowRoot ? kt : kt.parentNode ? q(kt.parentNode) : null
        },
        tt = () => {},
        lt = () => window.jQuery && !document.body.hasAttribute("data-bs-no-jquery") ? window.jQuery : null,
        M = [],
        G = () => "rtl" === document.documentElement.dir,
        et = kt => {
            var x;
            x = () => {
                const j = lt();
                if (j) {
                    const Ct = kt.NAME,
                        ue = j.fn[Ct];
                    j.fn[Ct] = kt.jQueryInterface, j.fn[Ct].Constructor = kt, j.fn[Ct].noConflict = () => (j.fn[Ct] = ue, kt.jQueryInterface)
                }
            }, "loading" === document.readyState ? (M.length || document.addEventListener("DOMContentLoaded", () => {
                for (const j of M) j()
            }), M.push(x)) : x()
        },
        dt = (kt, x = [], j = kt) => "function" == typeof kt ? kt.call(...x) : j,
        Bt = (kt, x, j = !0) => {
            if (!j) return void dt(kt);
            const Ct = (Je => {
                if (!Je) return 0;
                let {
                    transitionDuration: In,
                    transitionDelay: Gn
                } = window.getComputedStyle(Je);
                const ar = Number.parseFloat(In),
                    Gi = Number.parseFloat(Gn);
                return ar || Gi ? (In = In.split(",")[0], Gn = Gn.split(",")[0], 1e3 * (Number.parseFloat(In) + Number.parseFloat(Gn))) : 0
            })(x) + 5;
            let ue = !1;
            const Le = ({
                target: Je
            }) => {
                Je === x && (ue = !0, x.removeEventListener(P, Le), dt(kt))
            };
            x.addEventListener(P, Le), setTimeout(() => {
                ue || O(x)
            }, Ct)
        },
        wt = (kt, x, j, Ct) => {
            const ue = kt.length;
            let Le = kt.indexOf(x);
            return -1 === Le ? !j && Ct ? kt[ue - 1] : kt[0] : (Le += j ? 1 : -1, Ct && (Le = (Le + ue) % ue), kt[Math.max(0, Math.min(Le, ue - 1))])
        },
        _ = /[^.]*(?=\..*)\.|.*/,
        Jt = /\..*/,
        jt = /::\d+$/,
        Wt = {};
    let be = 1;
    const Kt = {
            mouseenter: "mouseover",
            mouseleave: "mouseout"
        },
        Qt = new Set(["click", "dblclick", "mouseup", "mousedown", "contextmenu", "mousewheel", "DOMMouseScroll", "mouseover", "mouseout", "mousemove", "selectstart", "selectend", "keydown", "keypress", "keyup", "orientationchange", "touchstart", "touchmove", "touchend", "touchcancel", "pointerdown", "pointermove", "pointerup", "pointerleave", "pointercancel", "gesturestart", "gesturechange", "gestureend", "focus", "blur", "change", "reset", "select", "submit", "focusin", "focusout", "load", "unload", "beforeunload", "resize", "move", "DOMContentLoaded", "readystatechange", "error", "abort", "scroll"]);

    function Ft(kt, x) {
        return x && `${x}::${be++}` || kt.uidEvent || be++
    }

    function Yt(kt) {
        const x = Ft(kt);
        return kt.uidEvent = x, Wt[x] = Wt[x] || {}, Wt[x]
    }

    function it(kt, x, j = null) {
        return Object.values(kt).find(Ct => Ct.callable === x && Ct.delegationSelector === j)
    }

    function ot(kt, x, j) {
        const Ct = "string" == typeof x,
            ue = Ct ? j : x || j;
        let Le = ut(kt);
        return Qt.has(Le) || (Le = kt), [Ct, ue, Le]
    }

    function St(kt, x, j, Ct, ue) {
        if ("string" != typeof x || !kt) return;
        let [Le, Je, In] = ot(x, j, Ct);
        var zs;
        x in Kt && (zs = Je, Je = function(Tr) {
            if (!Tr.relatedTarget || Tr.relatedTarget !== Tr.delegateTarget && !Tr.delegateTarget.contains(Tr.relatedTarget)) return zs.call(this, Tr)
        });
        const Gn = Yt(kt),
            ar = Gn[In] || (Gn[In] = {}),
            Gi = it(ar, Je, Le ? j : null);
        if (Gi) return void(Gi.oneOff = Gi.oneOff && ue);
        const Yr = Ft(Je, x.replace(_, "")),
            _s = Le ? function(Ds, zs, Tr) {
                return function fo(cs) {
                    const Qs = Ds.querySelectorAll(zs);
                    for (let {
                            target: Zr
                        } = cs; Zr && Zr !== this; Zr = Zr.parentNode)
                        for (const So of Qs)
                            if (So === Zr) return X(cs, {
                                delegateTarget: Zr
                            }), fo.oneOff && z.off(Ds, cs.type, zs, Tr), Tr.apply(Zr, [cs])
                }
            }(kt, j, Je) : function(Ds, zs) {
                return function Tr(fo) {
                    return X(fo, {
                        delegateTarget: Ds
                    }), Tr.oneOff && z.off(Ds, fo.type, zs), zs.apply(Ds, [fo])
                }
            }(kt, Je);
        _s.delegationSelector = Le ? j : null, _s.callable = Je, _s.oneOff = ue, _s.uidEvent = Yr, ar[Yr] = _s, kt.addEventListener(In, _s, Le)
    }

    function V(kt, x, j, Ct, ue) {
        const Le = it(x[j], Ct, ue);
        Le && (kt.removeEventListener(j, Le, Boolean(ue)), delete x[j][Le.uidEvent])
    }

    function rt(kt, x, j, Ct) {
        const ue = x[j] || {};
        for (const [Le, Je] of Object.entries(ue)) Le.includes(Ct) && V(kt, x, j, Je.callable, Je.delegationSelector)
    }

    function ut(kt) {
        return kt = kt.replace(Jt, ""), Kt[kt] || kt
    }
    const z = {
        on(kt, x, j, Ct) {
            St(kt, x, j, Ct, !1)
        },
        one(kt, x, j, Ct) {
            St(kt, x, j, Ct, !0)
        },
        off(kt, x, j, Ct) {
            if ("string" != typeof x || !kt) return;
            const [ue, Le, Je] = ot(x, j, Ct), In = Je !== x, Gn = Yt(kt), ar = Gn[Je] || {}, Gi = x.startsWith(".");
            if (void 0 === Le) {
                if (Gi)
                    for (const Yr of Object.keys(Gn)) rt(kt, Gn, Yr, x.slice(1));
                for (const [Yr, _s] of Object.entries(ar)) {
                    const Ds = Yr.replace(jt, "");
                    In && !x.includes(Ds) || V(kt, Gn, Je, _s.callable, _s.delegationSelector)
                }
            } else {
                if (!Object.keys(ar).length) return;
                V(kt, Gn, Je, Le, ue ? j : null)
            }
        },
        trigger(kt, x, j) {
            if ("string" != typeof x || !kt) return null;
            const Ct = lt();
            let ue = null,
                Le = !0,
                Je = !0,
                In = !1;
            x !== ut(x) && Ct && (ue = Ct.Event(x, j), Ct(kt).trigger(ue), Le = !ue.isPropagationStopped(), Je = !ue.isImmediatePropagationStopped(), In = ue.isDefaultPrevented());
            const Gn = X(new Event(x, {
                bubbles: Le,
                cancelable: !0
            }), j);
            return In && Gn.preventDefault(), Je && kt.dispatchEvent(Gn), Gn.defaultPrevented && ue && ue.preventDefault(), Gn
        }
    };

    function X(kt, x = {}) {
        for (const [j, Ct] of Object.entries(x)) try {
            kt[j] = Ct
        } catch {
            Object.defineProperty(kt, j, {
                configurable: !0,
                get: () => Ct
            })
        }
        return kt
    }

    function _t(kt) {
        if ("true" === kt) return !0;
        if ("false" === kt) return !1;
        if (kt === Number(kt).toString()) return Number(kt);
        if ("" === kt || "null" === kt) return null;
        if ("string" != typeof kt) return kt;
        try {
            return JSON.parse(decodeURIComponent(kt))
        } catch {
            return kt
        }
    }

    function Mt(kt) {
        return kt.replace(/[A-Z]/g, x => `-${x.toLowerCase()}`)
    }
    const Gt = {
        setDataAttribute(kt, x, j) {
            kt.setAttribute(`data-bs-${Mt(x)}`, j)
        },
        removeDataAttribute(kt, x) {
            kt.removeAttribute(`data-bs-${Mt(x)}`)
        },
        getDataAttributes(kt) {
            if (!kt) return {};
            const x = {},
                j = Object.keys(kt.dataset).filter(Ct => Ct.startsWith("bs") && !Ct.startsWith("bsConfig"));
            for (const Ct of j) {
                let ue = Ct.replace(/^bs/, "");
                ue = ue.charAt(0).toLowerCase() + ue.slice(1), x[ue] = _t(kt.dataset[Ct])
            }
            return x
        },
        getDataAttribute: (kt, x) => _t(kt.getAttribute(`data-bs-${Mt(x)}`))
    };
    class xt {
        static get Default() {
            return {}
        }
        static get DefaultType() {
            return {}
        }
        static get NAME() {
            throw new Error('You have to implement the static method "NAME", for each component!')
        }
        _getConfig(x) {
            return x = this._mergeConfigObj(x), x = this._configAfterMerge(x), this._typeCheckConfig(x), x
        }
        _configAfterMerge(x) {
            return x
        }
        _mergeConfigObj(x, j) {
            const Ct = J(j) ? Gt.getDataAttribute(j, "config") : {};
            return { ...this.constructor.Default,
                ..."object" == typeof Ct ? Ct : {},
                ...J(j) ? Gt.getDataAttributes(j) : {},
                ..."object" == typeof x ? x : {}
            }
        }
        _typeCheckConfig(x, j = this.constructor.DefaultType) {
            for (const [ue, Le] of Object.entries(j)) {
                const Je = x[ue],
                    In = J(Je) ? "element" : null == (Ct = Je) ? `${Ct}` : Object.prototype.toString.call(Ct).match(/\s([a-z]+)/i)[1].toLowerCase();
                if (!new RegExp(Le).test(In)) throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${ue}" provided type "${In}" but expected type "${Le}".`)
            }
            var Ct
        }
    }
    class pt extends xt {
        constructor(x, j) {
            super(), (x = mt(x)) && (this._element = x, this._config = this._getConfig(j), H.set(this._element, this.constructor.DATA_KEY, this))
        }
        dispose() {
            H.remove(this._element, this.constructor.DATA_KEY), z.off(this._element, this.constructor.EVENT_KEY);
            for (const x of Object.getOwnPropertyNames(this)) this[x] = null
        }
        _queueCallback(x, j, Ct = !0) {
            Bt(x, j, Ct)
        }
        _getConfig(x) {
            return x = this._mergeConfigObj(x, this._element), x = this._configAfterMerge(x), this._typeCheckConfig(x), x
        }
        static getInstance(x) {
            return H.get(mt(x), this.DATA_KEY)
        }
        static getOrCreateInstance(x, j = {}) {
            return this.getInstance(x) || new this(x, "object" == typeof j ? j : null)
        }
        static get VERSION() {
            return "5.3.5"
        }
        static get DATA_KEY() {
            return `bs.${this.NAME}`
        }
        static get EVENT_KEY() {
            return `.${this.DATA_KEY}`
        }
        static eventName(x) {
            return `${x}${this.EVENT_KEY}`
        }
    }
    const Tt = kt => {
            let x = kt.getAttribute("data-bs-target");
            if (!x || "#" === x) {
                let j = kt.getAttribute("href");
                if (!j || !j.includes("#") && !j.startsWith(".")) return null;
                j.includes("#") && !j.startsWith("#") && (j = `#${j.split("#")[1]}`), x = j && "#" !== j ? j.trim() : null
            }
            return x ? x.split(",").map(j => K(j)).join(",") : null
        },
        Dt = {
            find: (kt, x = document.documentElement) => [].concat(...Element.prototype.querySelectorAll.call(x, kt)),
            findOne: (kt, x = document.documentElement) => Element.prototype.querySelector.call(x, kt),
            children: (kt, x) => [].concat(...kt.children).filter(j => j.matches(x)),
            parents(kt, x) {
                const j = [];
                let Ct = kt.parentNode.closest(x);
                for (; Ct;) j.push(Ct), Ct = Ct.parentNode.closest(x);
                return j
            },
            prev(kt, x) {
                let j = kt.previousElementSibling;
                for (; j;) {
                    if (j.matches(x)) return [j];
                    j = j.previousElementSibling
                }
                return []
            },
            next(kt, x) {
                let j = kt.nextElementSibling;
                for (; j;) {
                    if (j.matches(x)) return [j];
                    j = j.nextElementSibling
                }
                return []
            },
            focusableChildren(kt) {
                const x = ["a", "button", "input", "textarea", "select", "details", "[tabindex]", '[contenteditable="true"]'].map(j => `${j}:not([tabindex^="-"])`).join(",");
                return this.find(x, kt).filter(j => !A(j) && Z(j))
            },
            getSelectorFromElement(kt) {
                const x = Tt(kt);
                return x && Dt.findOne(x) ? x : null
            },
            getElementFromSelector(kt) {
                const x = Tt(kt);
                return x ? Dt.findOne(x) : null
            },
            getMultipleElementsFromSelector(kt) {
                const x = Tt(kt);
                return x ? Dt.find(x) : []
            }
        },
        ce = (kt, x = "hide") => {
            const Ct = kt.NAME;
            z.on(document, `click.dismiss${kt.EVENT_KEY}`, `[data-bs-dismiss="${Ct}"]`, function(ue) {
                if (["A", "AREA"].includes(this.tagName) && ue.preventDefault(), A(this)) return;
                const Le = Dt.getElementFromSelector(this) || this.closest(`.${Ct}`);
                kt.getOrCreateInstance(Le)[x]()
            })
        },
        le = ".bs.alert",
        Ce = `close${le}`,
        Ne = `closed${le}`;
    class dn extends pt {
        static get NAME() {
            return "alert"
        }
        close() {
            if (z.trigger(this._element, Ce).defaultPrevented) return;
            this._element.classList.remove("show");
            const x = this._element.classList.contains("fade");
            this._queueCallback(() => this._destroyElement(), this._element, x)
        }
        _destroyElement() {
            this._element.remove(), z.trigger(this._element, Ne), this.dispose()
        }
        static jQueryInterface(x) {
            return this.each(function() {
                const j = dn.getOrCreateInstance(this);
                if ("string" == typeof x) {
                    if (void 0 === j[x] || x.startsWith("_") || "constructor" === x) throw new TypeError(`No method named "${x}"`);
                    j[x](this)
                }
            })
        }
    }
    ce(dn, "close"), et(dn);
    const Me = '[data-bs-toggle="button"]';
    class cn extends pt {
        static get NAME() {
            return "button"
        }
        toggle() {
            this._element.setAttribute("aria-pressed", this._element.classList.toggle("active"))
        }
        static jQueryInterface(x) {
            return this.each(function() {
                const j = cn.getOrCreateInstance(this);
                "toggle" === x && j[x]()
            })
        }
    }
    z.on(document, "click.bs.button.data-api", Me, kt => {
        kt.preventDefault();
        const x = kt.target.closest(Me);
        cn.getOrCreateInstance(x).toggle()
    }), et(cn);
    const sn = ".bs.swipe",
        Wn = `touchstart${sn}`,
        te = `touchmove${sn}`,
        Pn = `touchend${sn}`,
        En = `pointerdown${sn}`,
        Be = `pointerup${sn}`,
        qe = {
            endCallback: null,
            leftCallback: null,
            rightCallback: null
        },
        gi = {
            endCallback: "(function|null)",
            leftCallback: "(function|null)",
            rightCallback: "(function|null)"
        };
    class mi extends xt {
        constructor(x, j) {
            super(), this._element = x, x && mi.isSupported() && (this._config = this._getConfig(j), this._deltaX = 0, this._supportPointerEvents = Boolean(window.PointerEvent), this._initEvents())
        }
        static get Default() {
            return qe
        }
        static get DefaultType() {
            return gi
        }
        static get NAME() {
            return "swipe"
        }
        dispose() {
            z.off(this._element, sn)
        }
        _start(x) {
            this._supportPointerEvents ? this._eventIsPointerPenTouch(x) && (this._deltaX = x.clientX) : this._deltaX = x.touches[0].clientX
        }
        _end(x) {
            this._eventIsPointerPenTouch(x) && (this._deltaX = x.clientX - this._deltaX), this._handleSwipe(), dt(this._config.endCallback)
        }
        _move(x) {
            this._deltaX = x.touches && x.touches.length > 1 ? 0 : x.touches[0].clientX - this._deltaX
        }
        _handleSwipe() {
            const x = Math.abs(this._deltaX);
            if (x <= 40) return;
            const j = x / this._deltaX;
            this._deltaX = 0, j && dt(j > 0 ? this._config.rightCallback : this._config.leftCallback)
        }
        _initEvents() {
            this._supportPointerEvents ? (z.on(this._element, En, x => this._start(x)), z.on(this._element, Be, x => this._end(x)), this._element.classList.add("pointer-event")) : (z.on(this._element, Wn, x => this._start(x)), z.on(this._element, te, x => this._move(x)), z.on(this._element, Pn, x => this._end(x)))
        }
        _eventIsPointerPenTouch(x) {
            return this._supportPointerEvents && ("pen" === x.pointerType || "touch" === x.pointerType)
        }
        static isSupported() {
            return "ontouchstart" in document.documentElement || navigator.maxTouchPoints > 0
        }
    }
    const ki = ".bs.carousel",
        Ni = ".data-api",
        Xn = "next",
        bi = "prev",
        Bi = "left",
        mn = "right",
        v = `slide${ki}`,
        wr = `slid${ki}`,
        ci = `keydown${ki}`,
        Ei = `mouseenter${ki}`,
        gn = `mouseleave${ki}`,
        si = `dragstart${ki}`,
        Ke = `load${ki}${Ni}`,
        Ai = `click${ki}${Ni}`,
        An = "carousel",
        Qe = "active",
        hi = ".active",
        Jn = ".carousel-item",
        Pr = hi + Jn,
        oi = {
            ArrowLeft: mn,
            ArrowRight: Bi
        },
        $n = {
            interval: 5e3,
            keyboard: !0,
            pause: "hover",
            ride: !1,
            touch: !0,
            wrap: !0
        },
        Hi = {
            interval: "(number|boolean)",
            keyboard: "boolean",
            pause: "(string|boolean)",
            ride: "(boolean|string)",
            touch: "boolean",
            wrap: "boolean"
        };
    class Fn extends pt {
        constructor(x, j) {
            super(x, j), this._interval = null, this._activeElement = null, this._isSliding = !1, this.touchTimeout = null, this._swipeHelper = null, this._indicatorsElement = Dt.findOne(".carousel-indicators", this._element), this._addEventListeners(), this._config.ride === An && this.cycle()
        }
        static get Default() {
            return $n
        }
        static get DefaultType() {
            return Hi
        }
        static get NAME() {
            return "carousel"
        }
        next() {
            this._slide(Xn)
        }
        nextWhenVisible() {
            !document.hidden && Z(this._element) && this.next()
        }
        prev() {
            this._slide(bi)
        }
        pause() {
            this._isSliding && O(this._element), this._clearInterval()
        }
        cycle() {
            this._clearInterval(), this._updateInterval(), this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)
        }
        _maybeEnableCycle() {
            this._config.ride && (this._isSliding ? z.one(this._element, wr, () => this.cycle()) : this.cycle())
        }
        to(x) {
            const j = this._getItems();
            if (x > j.length - 1 || x < 0) return;
            if (this._isSliding) return void z.one(this._element, wr, () => this.to(x));
            const Ct = this._getItemIndex(this._getActive());
            Ct !== x && this._slide(x > Ct ? Xn : bi, j[x])
        }
        dispose() {
            this._swipeHelper && this._swipeHelper.dispose(), super.dispose()
        }
        _configAfterMerge(x) {
            return x.defaultInterval = x.interval, x
        }
        _addEventListeners() {
            this._config.keyboard && z.on(this._element, ci, x => this._keydown(x)), "hover" === this._config.pause && (z.on(this._element, Ei, () => this.pause()), z.on(this._element, gn, () => this._maybeEnableCycle())), this._config.touch && mi.isSupported() && this._addTouchEventListeners()
        }
        _addTouchEventListeners() {
            for (const j of Dt.find(".carousel-item img", this._element)) z.on(j, si, Ct => Ct.preventDefault());
            this._swipeHelper = new mi(this._element, {
                leftCallback: () => this._slide(this._directionToOrder(Bi)),
                rightCallback: () => this._slide(this._directionToOrder(mn)),
                endCallback: () => {
                    "hover" === this._config.pause && (this.pause(), this.touchTimeout && clearTimeout(this.touchTimeout), this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), 500 + this._config.interval))
                }
            })
        }
        _keydown(x) {
            if (/input|textarea/i.test(x.target.tagName)) return;
            const j = oi[x.key];
            j && (x.preventDefault(), this._slide(this._directionToOrder(j)))
        }
        _getItemIndex(x) {
            return this._getItems().indexOf(x)
        }
        _setActiveIndicatorElement(x) {
            if (!this._indicatorsElement) return;
            const j = Dt.findOne(hi, this._indicatorsElement);
            j.classList.remove(Qe), j.removeAttribute("aria-current");
            const Ct = Dt.findOne(`[data-bs-slide-to="${x}"]`, this._indicatorsElement);
            Ct && (Ct.classList.add(Qe), Ct.setAttribute("aria-current", "true"))
        }
        _updateInterval() {
            const x = this._activeElement || this._getActive();
            if (!x) return;
            const j = Number.parseInt(x.getAttribute("data-bs-interval"), 10);
            this._config.interval = j || this._config.defaultInterval
        }
        _slide(x, j = null) {
            if (this._isSliding) return;
            const Ct = this._getActive(),
                ue = x === Xn,
                Le = j || wt(this._getItems(), Ct, ue, this._config.wrap);
            if (Le === Ct) return;
            const Je = this._getItemIndex(Le),
                In = Yr => z.trigger(this._element, Yr, {
                    relatedTarget: Le,
                    direction: this._orderToDirection(x),
                    from: this._getItemIndex(Ct),
                    to: Je
                });
            if (In(v).defaultPrevented || !Ct || !Le) return;
            const Gn = Boolean(this._interval);
            this.pause(), this._isSliding = !0, this._setActiveIndicatorElement(Je), this._activeElement = Le;
            const ar = ue ? "carousel-item-start" : "carousel-item-end",
                Gi = ue ? "carousel-item-next" : "carousel-item-prev";
            Le.classList.add(Gi), Ct.classList.add(ar), Le.classList.add(ar), this._queueCallback(() => {
                Le.classList.remove(ar, Gi), Le.classList.add(Qe), Ct.classList.remove(Qe, Gi, ar), this._isSliding = !1, In(wr)
            }, Ct, this._isAnimated()), Gn && this.cycle()
        }
        _isAnimated() {
            return this._element.classList.contains("slide")
        }
        _getActive() {
            return Dt.findOne(Pr, this._element)
        }
        _getItems() {
            return Dt.find(Jn, this._element)
        }
        _clearInterval() {
            this._interval && (clearInterval(this._interval), this._interval = null)
        }
        _directionToOrder(x) {
            return G() ? x === Bi ? bi : Xn : x === Bi ? Xn : bi
        }
        _orderToDirection(x) {
            return G() ? x === bi ? Bi : mn : x === bi ? mn : Bi
        }
        static jQueryInterface(x) {
            return this.each(function() {
                const j = Fn.getOrCreateInstance(this, x);
                if ("number" != typeof x) {
                    if ("string" == typeof x) {
                        if (void 0 === j[x] || x.startsWith("_") || "constructor" === x) throw new TypeError(`No method named "${x}"`);
                        j[x]()
                    }
                } else j.to(x)
            })
        }
    }
    z.on(document, Ai, "[data-bs-slide], [data-bs-slide-to]", function(kt) {
        const x = Dt.getElementFromSelector(this);
        if (!x || !x.classList.contains(An)) return;
        kt.preventDefault();
        const j = Fn.getOrCreateInstance(x),
            Ct = this.getAttribute("data-bs-slide-to");
        return Ct ? (j.to(Ct), void j._maybeEnableCycle()) : "next" === Gt.getDataAttribute(this, "slide") ? (j.next(), void j._maybeEnableCycle()) : (j.prev(), void j._maybeEnableCycle())
    }), z.on(window, Ke, () => {
        const kt = Dt.find('[data-bs-ride="carousel"]');
        for (const x of kt) Fn.getOrCreateInstance(x)
    }), et(Fn);
    const wi = ".bs.collapse",
        Cr = `show${wi}`,
        us = `shown${wi}`,
        es = `hide${wi}`,
        pr = `hidden${wi}`,
        ws = `click${wi}.data-api`,
        Is = "show",
        tr = "collapse",
        lr = "collapsing",
        ns = `:scope .${tr} .${tr}`,
        er = '[data-bs-toggle="collapse"]',
        Mi = {
            parent: null,
            toggle: !0
        },
        zi = {
            parent: "(null|element)",
            toggle: "boolean"
        };
    class Ti extends pt {
        constructor(x, j) {
            super(x, j), this._isTransitioning = !1, this._triggerArray = [];
            const Ct = Dt.find(er);
            for (const ue of Ct) {
                const Le = Dt.getSelectorFromElement(ue),
                    Je = Dt.find(Le).filter(In => In === this._element);
                null !== Le && Je.length && this._triggerArray.push(ue)
            }
            this._initializeChildren(), this._config.parent || this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()), this._config.toggle && this.toggle()
        }
        static get Default() {
            return Mi
        }
        static get DefaultType() {
            return zi
        }
        static get NAME() {
            return "collapse"
        }
        toggle() {
            this._isShown() ? this.hide() : this.show()
        }
        show() {
            if (this._isTransitioning || this._isShown()) return;
            let x = [];
            if (this._config.parent && (x = this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(ue => ue !== this._element).map(ue => Ti.getOrCreateInstance(ue, {
                    toggle: !1
                }))), x.length && x[0]._isTransitioning || z.trigger(this._element, Cr).defaultPrevented) return;
            for (const ue of x) ue.hide();
            const j = this._getDimension();
            this._element.classList.remove(tr), this._element.classList.add(lr), this._element.style[j] = 0, this._addAriaAndCollapsedClass(this._triggerArray, !0), this._isTransitioning = !0;
            const Ct = `scroll${j[0].toUpperCase()+j.slice(1)}`;
            this._queueCallback(() => {
                this._isTransitioning = !1, this._element.classList.remove(lr), this._element.classList.add(tr, Is), this._element.style[j] = "", z.trigger(this._element, us)
            }, this._element, !0), this._element.style[j] = `${this._element[Ct]}px`
        }
        hide() {
            if (this._isTransitioning || !this._isShown() || z.trigger(this._element, es).defaultPrevented) return;
            const x = this._getDimension();
            this._element.style[x] = `${this._element.getBoundingClientRect()[x]}px`, this._element.classList.add(lr), this._element.classList.remove(tr, Is);
            for (const j of this._triggerArray) {
                const Ct = Dt.getElementFromSelector(j);
                Ct && !this._isShown(Ct) && this._addAriaAndCollapsedClass([j], !1)
            }
            this._isTransitioning = !0, this._element.style[x] = "", this._queueCallback(() => {
                this._isTransitioning = !1, this._element.classList.remove(lr), this._element.classList.add(tr), z.trigger(this._element, pr)
            }, this._element, !0)
        }
        _isShown(x = this._element) {
            return x.classList.contains(Is)
        }
        _configAfterMerge(x) {
            return x.toggle = Boolean(x.toggle), x.parent = mt(x.parent), x
        }
        _getDimension() {
            return this._element.classList.contains("collapse-horizontal") ? "width" : "height"
        }
        _initializeChildren() {
            if (!this._config.parent) return;
            const x = this._getFirstLevelChildren(er);
            for (const j of x) {
                const Ct = Dt.getElementFromSelector(j);
                Ct && this._addAriaAndCollapsedClass([j], this._isShown(Ct))
            }
        }
        _getFirstLevelChildren(x) {
            const j = Dt.find(ns, this._config.parent);
            return Dt.find(x, this._config.parent).filter(Ct => !j.includes(Ct))
        }
        _addAriaAndCollapsedClass(x, j) {
            if (x.length)
                for (const Ct of x) Ct.classList.toggle("collapsed", !j), Ct.setAttribute("aria-expanded", j)
        }
        static jQueryInterface(x) {
            const j = {};
            return "string" == typeof x && /show|hide/.test(x) && (j.toggle = !1), this.each(function() {
                const Ct = Ti.getOrCreateInstance(this, j);
                if ("string" == typeof x) {
                    if (void 0 === Ct[x]) throw new TypeError(`No method named "${x}"`);
                    Ct[x]()
                }
            })
        }
    }
    z.on(document, ws, er, function(kt) {
        ("A" === kt.target.tagName || kt.delegateTarget && "A" === kt.delegateTarget.tagName) && kt.preventDefault();
        for (const x of Dt.getMultipleElementsFromSelector(this)) Ti.getOrCreateInstance(x, {
            toggle: !1
        }).toggle()
    }), et(Ti);
    const ji = "dropdown",
        nr = ".bs.dropdown",
        fi = ".data-api",
        Sr = "ArrowUp",
        Mr = "ArrowDown",
        ds = `hide${nr}`,
        cr = `hidden${nr}`,
        ps = `show${nr}`,
        ro = `shown${nr}`,
        is = `click${nr}${fi}`,
        Cs = `keydown${nr}${fi}`,
        rs = `keyup${nr}${fi}`,
        ir = "show",
        Ii = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',
        kr = `${Ii}.${ir}`,
        Nr = ".dropdown-menu",
        Hr = G() ? "top-end" : "top-start",
        Ls = G() ? "top-start" : "top-end",
        Ss = G() ? "bottom-end" : "bottom-start",
        ks = G() ? "bottom-start" : "bottom-end",
        zr = G() ? "left-start" : "right-start",
        Yi = G() ? "right-start" : "left-start",
        ht = {
            autoClose: !0,
            boundary: "clippingParents",
            display: "dynamic",
            offset: [0, 2],
            popperConfig: null,
            reference: "toggle"
        },
        Et = {
            autoClose: "(boolean|string)",
            boundary: "(string|element)",
            display: "string",
            offset: "(array|string|function)",
            popperConfig: "(null|object|function)",
            reference: "(string|element|object)"
        };
    class Rt extends pt {
        constructor(x, j) {
            super(x, j), this._popper = null, this._parent = this._element.parentNode, this._menu = Dt.next(this._element, Nr)[0] || Dt.prev(this._element, Nr)[0] || Dt.findOne(Nr, this._parent), this._inNavbar = this._detectNavbar()
        }
        static get Default() {
            return ht
        }
        static get DefaultType() {
            return Et
        }
        static get NAME() {
            return ji
        }
        toggle() {
            return this._isShown() ? this.hide() : this.show()
        }
        show() {
            if (A(this._element) || this._isShown()) return;
            const x = {
                relatedTarget: this._element
            };
            if (!z.trigger(this._element, ps, x).defaultPrevented) {
                if (this._createPopper(), "ontouchstart" in document.documentElement && !this._parent.closest(".navbar-nav"))
                    for (const j of [].concat(...document.body.children)) z.on(j, "mouseover", tt);
                this._element.focus(), this._element.setAttribute("aria-expanded", !0), this._menu.classList.add(ir), this._element.classList.add(ir), z.trigger(this._element, ro, x)
            }
        }
        hide() {
            !A(this._element) && this._isShown() && this._completeHide({
                relatedTarget: this._element
            })
        }
        dispose() {
            this._popper && this._popper.destroy(), super.dispose()
        }
        update() {
            this._inNavbar = this._detectNavbar(), this._popper && this._popper.update()
        }
        _completeHide(x) {
            if (!z.trigger(this._element, ds, x).defaultPrevented) {
                if ("ontouchstart" in document.documentElement)
                    for (const j of [].concat(...document.body.children)) z.off(j, "mouseover", tt);
                this._popper && this._popper.destroy(), this._menu.classList.remove(ir), this._element.classList.remove(ir), this._element.setAttribute("aria-expanded", "false"), Gt.removeDataAttribute(this._menu, "popper"), z.trigger(this._element, cr, x)
            }
        }
        _getConfig(x) {
            if ("object" == typeof(x = super._getConfig(x)).reference && !J(x.reference) && "function" != typeof x.reference.getBoundingClientRect) throw new TypeError(`${ji.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
            return x
        }
        _createPopper() {
            if (void 0 === y) throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)");
            let x = this._element;
            "parent" === this._config.reference ? x = this._parent : J(this._config.reference) ? x = mt(this._config.reference) : "object" == typeof this._config.reference && (x = this._config.reference);
            const j = this._getPopperConfig();
            this._popper = y.createPopper(x, this._menu, j)
        }
        _isShown() {
            return this._menu.classList.contains(ir)
        }
        _getPlacement() {
            const x = this._parent;
            if (x.classList.contains("dropend")) return zr;
            if (x.classList.contains("dropstart")) return Yi;
            if (x.classList.contains("dropup-center")) return "top";
            if (x.classList.contains("dropdown-center")) return "bottom";
            const j = "end" === getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();
            return x.classList.contains("dropup") ? j ? Ls : Hr : j ? ks : Ss
        }
        _detectNavbar() {
            return null !== this._element.closest(".navbar")
        }
        _getOffset() {
            const {
                offset: x
            } = this._config;
            return "string" == typeof x ? x.split(",").map(j => Number.parseInt(j, 10)) : "function" == typeof x ? j => x(j, this._element) : x
        }
        _getPopperConfig() {
            const x = {
                placement: this._getPlacement(),
                modifiers: [{
                    name: "preventOverflow",
                    options: {
                        boundary: this._config.boundary
                    }
                }, {
                    name: "offset",
                    options: {
                        offset: this._getOffset()
                    }
                }]
            };
            return (this._inNavbar || "static" === this._config.display) && (Gt.setDataAttribute(this._menu, "popper", "static"), x.modifiers = [{
                name: "applyStyles",
                enabled: !1
            }]), { ...x,
                ...dt(this._config.popperConfig, [void 0, x])
            }
        }
        _selectMenuItem({
            key: x,
            target: j
        }) {
            const Ct = Dt.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)", this._menu).filter(ue => Z(ue));
            Ct.length && wt(Ct, j, x === Mr, !Ct.includes(j)).focus()
        }
        static jQueryInterface(x) {
            return this.each(function() {
                const j = Rt.getOrCreateInstance(this, x);
                if ("string" == typeof x) {
                    if (void 0 === j[x]) throw new TypeError(`No method named "${x}"`);
                    j[x]()
                }
            })
        }
        static clearMenus(x) {
            if (2 === x.button || "keyup" === x.type && "Tab" !== x.key) return;
            const j = Dt.find(kr);
            for (const Ct of j) {
                const ue = Rt.getInstance(Ct);
                if (!ue || !1 === ue._config.autoClose) continue;
                const Le = x.composedPath(),
                    Je = Le.includes(ue._menu);
                if (Le.includes(ue._element) || "inside" === ue._config.autoClose && !Je || "outside" === ue._config.autoClose && Je || ue._menu.contains(x.target) && ("keyup" === x.type && "Tab" === x.key || /input|select|option|textarea|form/i.test(x.target.tagName))) continue;
                const In = {
                    relatedTarget: ue._element
                };
                "click" === x.type && (In.clickEvent = x), ue._completeHide(In)
            }
        }
        static dataApiKeydownHandler(x) {
            const j = /input|textarea/i.test(x.target.tagName),
                Ct = "Escape" === x.key,
                ue = [Sr, Mr].includes(x.key);
            if (!ue && !Ct || j && !Ct) return;
            x.preventDefault();
            const Le = this.matches(Ii) ? this : Dt.prev(this, Ii)[0] || Dt.next(this, Ii)[0] || Dt.findOne(Ii, x.delegateTarget.parentNode),
                Je = Rt.getOrCreateInstance(Le);
            if (ue) return x.stopPropagation(), Je.show(), void Je._selectMenuItem(x);
            Je._isShown() && (x.stopPropagation(), Je.hide(), Le.focus())
        }
    }
    z.on(document, Cs, Ii, Rt.dataApiKeydownHandler), z.on(document, Cs, Nr, Rt.dataApiKeydownHandler), z.on(document, is, Rt.clearMenus), z.on(document, rs, Rt.clearMenus), z.on(document, is, Ii, function(kt) {
        kt.preventDefault(), Rt.getOrCreateInstance(this).toggle()
    }), et(Rt);
    const ge = "backdrop",
        Ge = `mousedown.bs.${ge}`,
        De = {
            className: "modal-backdrop",
            clickCallback: null,
            isAnimated: !1,
            isVisible: !0,
            rootElement: "body"
        },
        Cn = {
            className: "string",
            clickCallback: "(function|null)",
            isAnimated: "boolean",
            isVisible: "boolean",
            rootElement: "(element|string)"
        };
    class zn extends xt {
        constructor(x) {
            super(), this._config = this._getConfig(x), this._isAppended = !1, this._element = null
        }
        static get Default() {
            return De
        }
        static get DefaultType() {
            return Cn
        }
        static get NAME() {
            return ge
        }
        show(x) {
            if (!this._config.isVisible) return void dt(x);
            this._append();
            this._getElement().classList.add("show"), this._emulateAnimation(() => {
                dt(x)
            })
        }
        hide(x) {
            this._config.isVisible ? (this._getElement().classList.remove("show"), this._emulateAnimation(() => {
                this.dispose(), dt(x)
            })) : dt(x)
        }
        dispose() {
            this._isAppended && (z.off(this._element, Ge), this._element.remove(), this._isAppended = !1)
        }
        _getElement() {
            if (!this._element) {
                const x = document.createElement("div");
                x.className = this._config.className, this._config.isAnimated && x.classList.add("fade"), this._element = x
            }
            return this._element
        }
        _configAfterMerge(x) {
            return x.rootElement = mt(x.rootElement), x
        }
        _append() {
            if (this._isAppended) return;
            const x = this._getElement();
            this._config.rootElement.append(x), z.on(x, Ge, () => {
                dt(this._config.clickCallback)
            }), this._isAppended = !0
        }
        _emulateAnimation(x) {
            Bt(x, this._getElement(), this._config.isAnimated)
        }
    }
    const Wi = ".bs.focustrap",
        Vi = `focusin${Wi}`,
        hr = `keydown.tab${Wi}`,
        gs = "backward",
        jr = {
            autofocus: !0,
            trapElement: null
        },
        Ir = {
            autofocus: "boolean",
            trapElement: "element"
        };
    class $s extends xt {
        constructor(x) {
            super(), this._config = this._getConfig(x), this._isActive = !1, this._lastTabNavDirection = null
        }
        static get Default() {
            return jr
        }
        static get DefaultType() {
            return Ir
        }
        static get NAME() {
            return "focustrap"
        }
        activate() {
            this._isActive || (this._config.autofocus && this._config.trapElement.focus(), z.off(document, Wi), z.on(document, Vi, x => this._handleFocusin(x)), z.on(document, hr, x => this._handleKeydown(x)), this._isActive = !0)
        }
        deactivate() {
            this._isActive && (this._isActive = !1, z.off(document, Wi))
        }
        _handleFocusin(x) {
            const {
                trapElement: j
            } = this._config;
            if (x.target === document || x.target === j || j.contains(x.target)) return;
            const Ct = Dt.focusableChildren(j);
            0 === Ct.length ? j.focus() : this._lastTabNavDirection === gs ? Ct[Ct.length - 1].focus() : Ct[0].focus()
        }
        _handleKeydown(x) {
            "Tab" === x.key && (this._lastTabNavDirection = x.shiftKey ? gs : "forward")
        }
    }
    const Zi = ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",
        Bs = ".sticky-top",
        Di = "padding-right",
        ms = "margin-right";
    class Lr {
        constructor() {
            this._element = document.body
        }
        getWidth() {
            const x = document.documentElement.clientWidth;
            return Math.abs(window.innerWidth - x)
        }
        hide() {
            const x = this.getWidth();
            this._disableOverFlow(), this._setElementAttributes(this._element, Di, j => j + x), this._setElementAttributes(Zi, Di, j => j + x), this._setElementAttributes(Bs, ms, j => j - x)
        }
        reset() {
            this._resetElementAttributes(this._element, "overflow"), this._resetElementAttributes(this._element, Di), this._resetElementAttributes(Zi, Di), this._resetElementAttributes(Bs, ms)
        }
        isOverflowing() {
            return this.getWidth() > 0
        }
        _disableOverFlow() {
            this._saveInitialAttribute(this._element, "overflow"), this._element.style.overflow = "hidden"
        }
        _setElementAttributes(x, j, Ct) {
            const ue = this.getWidth();
            this._applyManipulationCallback(x, Le => {
                if (Le !== this._element && window.innerWidth > Le.clientWidth + ue) return;
                this._saveInitialAttribute(Le, j);
                const Je = window.getComputedStyle(Le).getPropertyValue(j);
                Le.style.setProperty(j, `${Ct(Number.parseFloat(Je))}px`)
            })
        }
        _saveInitialAttribute(x, j) {
            const Ct = x.style.getPropertyValue(j);
            Ct && Gt.setDataAttribute(x, j, Ct)
        }
        _resetElementAttributes(x, j) {
            this._applyManipulationCallback(x, Ct => {
                const ue = Gt.getDataAttribute(Ct, j);
                null !== ue ? (Gt.removeDataAttribute(Ct, j), Ct.style.setProperty(j, ue)) : Ct.style.removeProperty(j)
            })
        }
        _applyManipulationCallback(x, j) {
            if (J(x)) j(x);
            else
                for (const Ct of Dt.find(x, this._element)) j(Ct)
        }
    }
    const Ui = ".bs.modal",
        Fs = `hide${Ui}`,
        mo = `hidePrevented${Ui}`,
        ei = `hidden${Ui}`,
        $i = `show${Ui}`,
        bs = `shown${Ui}`,
        Us = `resize${Ui}`,
        vs = `click.dismiss${Ui}`,
        Es = `mousedown.dismiss${Ui}`,
        Wr = `keydown.dismiss${Ui}`,
        Rs = `click${Ui}.data-api`,
        Vr = "modal-open",
        qs = "modal-static",
        fr = {
            backdrop: !0,
            focus: !0,
            keyboard: !0
        },
        so = {
            backdrop: "(boolean|string)",
            focus: "boolean",
            keyboard: "boolean"
        };
    class Ur extends pt {
        constructor(x, j) {
            super(x, j), this._dialog = Dt.findOne(".modal-dialog", this._element), this._backdrop = this._initializeBackDrop(), this._focustrap = this._initializeFocusTrap(), this._isShown = !1, this._isTransitioning = !1, this._scrollBar = new Lr, this._addEventListeners()
        }
        static get Default() {
            return fr
        }
        static get DefaultType() {
            return so
        }
        static get NAME() {
            return "modal"
        }
        toggle(x) {
            return this._isShown ? this.hide() : this.show(x)
        }
        show(x) {
            this._isShown || this._isTransitioning || z.trigger(this._element, $i, {
                relatedTarget: x
            }).defaultPrevented || (this._isShown = !0, this._isTransitioning = !0, this._scrollBar.hide(), document.body.classList.add(Vr), this._adjustDialog(), this._backdrop.show(() => this._showElement(x)))
        }
        hide() {
            this._isShown && !this._isTransitioning && (z.trigger(this._element, Fs).defaultPrevented || (this._isShown = !1, this._isTransitioning = !0, this._focustrap.deactivate(), this._element.classList.remove("show"), this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())))
        }
        dispose() {
            z.off(window, Ui), z.off(this._dialog, Ui), this._backdrop.dispose(), this._focustrap.deactivate(), super.dispose()
        }
        handleUpdate() {
            this._adjustDialog()
        }
        _initializeBackDrop() {
            return new zn({
                isVisible: Boolean(this._config.backdrop),
                isAnimated: this._isAnimated()
            })
        }
        _initializeFocusTrap() {
            return new $s({
                trapElement: this._element
            })
        }
        _showElement(x) {
            document.body.contains(this._element) || document.body.append(this._element), this._element.style.display = "block", this._element.removeAttribute("aria-hidden"), this._element.setAttribute("aria-modal", !0), this._element.setAttribute("role", "dialog"), this._element.scrollTop = 0;
            const j = Dt.findOne(".modal-body", this._dialog);
            j && (j.scrollTop = 0), this._element.classList.add("show"), this._queueCallback(() => {
                this._config.focus && this._focustrap.activate(), this._isTransitioning = !1, z.trigger(this._element, bs, {
                    relatedTarget: x
                })
            }, this._dialog, this._isAnimated())
        }
        _addEventListeners() {
            z.on(this._element, Wr, x => {
                "Escape" === x.key && (this._config.keyboard ? this.hide() : this._triggerBackdropTransition())
            }), z.on(window, Us, () => {
                this._isShown && !this._isTransitioning && this._adjustDialog()
            }), z.on(this._element, Es, x => {
                z.one(this._element, vs, j => {
                    this._element === x.target && this._element === j.target && ("static" !== this._config.backdrop ? this._config.backdrop && this.hide() : this._triggerBackdropTransition())
                })
            })
        }
        _hideModal() {
            this._element.style.display = "none", this._element.setAttribute("aria-hidden", !0), this._element.removeAttribute("aria-modal"), this._element.removeAttribute("role"), this._isTransitioning = !1, this._backdrop.hide(() => {
                document.body.classList.remove(Vr), this._resetAdjustments(), this._scrollBar.reset(), z.trigger(this._element, ei)
            })
        }
        _isAnimated() {
            return this._element.classList.contains("fade")
        }
        _triggerBackdropTransition() {
            if (z.trigger(this._element, mo).defaultPrevented) return;
            const x = this._element.scrollHeight > document.documentElement.clientHeight,
                j = this._element.style.overflowY;
            "hidden" === j || this._element.classList.contains(qs) || (x || (this._element.style.overflowY = "hidden"), this._element.classList.add(qs), this._queueCallback(() => {
                this._element.classList.remove(qs), this._queueCallback(() => {
                    this._element.style.overflowY = j
                }, this._dialog)
            }, this._dialog), this._element.focus())
        }
        _adjustDialog() {
            const x = this._element.scrollHeight > document.documentElement.clientHeight,
                j = this._scrollBar.getWidth(),
                Ct = j > 0;
            if (Ct && !x) {
                const ue = G() ? "paddingLeft" : "paddingRight";
                this._element.style[ue] = `${j}px`
            }
            if (!Ct && x) {
                const ue = G() ? "paddingRight" : "paddingLeft";
                this._element.style[ue] = `${j}px`
            }
        }
        _resetAdjustments() {
            this._element.style.paddingLeft = "", this._element.style.paddingRight = ""
        }
        static jQueryInterface(x, j) {
            return this.each(function() {
                const Ct = Ur.getOrCreateInstance(this, x);
                if ("string" == typeof x) {
                    if (void 0 === Ct[x]) throw new TypeError(`No method named "${x}"`);
                    Ct[x](j)
                }
            })
        }
    }
    z.on(document, Rs, '[data-bs-toggle="modal"]', function(kt) {
        const x = Dt.getElementFromSelector(this);
        ["A", "AREA"].includes(this.tagName) && kt.preventDefault(), z.one(x, $i, Ct => {
            Ct.defaultPrevented || z.one(x, ei, () => {
                Z(this) && this.focus()
            })
        });
        const j = Dt.findOne(".modal.show");
        j && Ur.getInstance(j).hide(), Ur.getOrCreateInstance(x).toggle(this)
    }), ce(Ur), et(Ur);
    const Ji = ".bs.offcanvas",
        ss = ".data-api",
        os = `load${Ji}${ss}`,
        f = "showing",
        g = "hiding",
        k = ".offcanvas.show",
        E = `show${Ji}`,
        L = `shown${Ji}`,
        W = `hide${Ji}`,
        Q = `hidePrevented${Ji}`,
        yt = `hidden${Ji}`,
        vt = `resize${Ji}`,
        Lt = `click${Ji}${ss}`,
        ee = `keydown.dismiss${Ji}`,
        de = {
            backdrop: !0,
            keyboard: !0,
            scroll: !1
        },
        Xt = {
            backdrop: "(boolean|string)",
            keyboard: "boolean",
            scroll: "boolean"
        };
    class pe extends pt {
        constructor(x, j) {
            super(x, j), this._isShown = !1, this._backdrop = this._initializeBackDrop(), this._focustrap = this._initializeFocusTrap(), this._addEventListeners()
        }
        static get Default() {
            return de
        }
        static get DefaultType() {
            return Xt
        }
        static get NAME() {
            return "offcanvas"
        }
        toggle(x) {
            return this._isShown ? this.hide() : this.show(x)
        }
        show(x) {
            this._isShown || z.trigger(this._element, E, {
                relatedTarget: x
            }).defaultPrevented || (this._isShown = !0, this._backdrop.show(), this._config.scroll || (new Lr).hide(), this._element.setAttribute("aria-modal", !0), this._element.setAttribute("role", "dialog"), this._element.classList.add(f), this._queueCallback(() => {
                this._config.scroll && !this._config.backdrop || this._focustrap.activate(), this._element.classList.add("show"), this._element.classList.remove(f), z.trigger(this._element, L, {
                    relatedTarget: x
                })
            }, this._element, !0))
        }
        hide() {
            this._isShown && (z.trigger(this._element, W).defaultPrevented || (this._focustrap.deactivate(), this._element.blur(), this._isShown = !1, this._element.classList.add(g), this._backdrop.hide(), this._queueCallback(() => {
                this._element.classList.remove("show", g), this._element.removeAttribute("aria-modal"), this._element.removeAttribute("role"), this._config.scroll || (new Lr).reset(), z.trigger(this._element, yt)
            }, this._element, !0)))
        }
        dispose() {
            this._backdrop.dispose(), this._focustrap.deactivate(), super.dispose()
        }
        _initializeBackDrop() {
            const x = Boolean(this._config.backdrop);
            return new zn({
                className: "offcanvas-backdrop",
                isVisible: x,
                isAnimated: !0,
                rootElement: this._element.parentNode,
                clickCallback: x ? () => {
                    "static" !== this._config.backdrop ? this.hide() : z.trigger(this._element, Q)
                } : null
            })
        }
        _initializeFocusTrap() {
            return new $s({
                trapElement: this._element
            })
        }
        _addEventListeners() {
            z.on(this._element, ee, x => {
                "Escape" === x.key && (this._config.keyboard ? this.hide() : z.trigger(this._element, Q))
            })
        }
        static jQueryInterface(x) {
            return this.each(function() {
                const j = pe.getOrCreateInstance(this, x);
                if ("string" == typeof x) {
                    if (void 0 === j[x] || x.startsWith("_") || "constructor" === x) throw new TypeError(`No method named "${x}"`);
                    j[x](this)
                }
            })
        }
    }
    z.on(document, Lt, '[data-bs-toggle="offcanvas"]', function(kt) {
        const x = Dt.getElementFromSelector(this);
        if (["A", "AREA"].includes(this.tagName) && kt.preventDefault(), A(this)) return;
        z.one(x, yt, () => {
            Z(this) && this.focus()
        });
        const j = Dt.findOne(k);
        j && j !== x && pe.getInstance(j).hide(), pe.getOrCreateInstance(x).toggle(this)
    }), z.on(window, os, () => {
        for (const kt of Dt.find(k)) pe.getOrCreateInstance(kt).show()
    }), z.on(window, vt, () => {
        for (const kt of Dt.find("[aria-modal][class*=show][class*=offcanvas-]")) "fixed" !== getComputedStyle(kt).position && pe.getOrCreateInstance(kt).hide()
    }), ce(pe), et(pe);
    const Ye = {
            "*": ["class", "dir", "id", "lang", "role", /^aria-[\w-]*$/i],
            a: ["target", "href", "title", "rel"],
            area: [],
            b: [],
            br: [],
            col: [],
            code: [],
            dd: [],
            div: [],
            dl: [],
            dt: [],
            em: [],
            hr: [],
            h1: [],
            h2: [],
            h3: [],
            h4: [],
            h5: [],
            h6: [],
            i: [],
            img: ["src", "srcset", "alt", "title", "width", "height"],
            li: [],
            ol: [],
            p: [],
            pre: [],
            s: [],
            small: [],
            span: [],
            sub: [],
            sup: [],
            strong: [],
            u: [],
            ul: []
        },
        hn = new Set(["background", "cite", "href", "itemtype", "longdesc", "poster", "src", "xlink:href"]),
        on = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,
        ni = (kt, x) => {
            const j = kt.nodeName.toLowerCase();
            return x.includes(j) ? !hn.has(j) || Boolean(on.test(kt.nodeValue)) : x.filter(Ct => Ct instanceof RegExp).some(Ct => Ct.test(j))
        },
        vi = {
            allowList: Ye,
            content: {},
            extraClass: "",
            html: !1,
            sanitize: !0,
            sanitizeFn: null,
            template: "<div></div>"
        },
        gr = {
            allowList: "object",
            content: "object",
            extraClass: "(string|function)",
            html: "boolean",
            sanitize: "boolean",
            sanitizeFn: "(null|function)",
            template: "string"
        },
        Xi = {
            entry: "(string|element|function|null)",
            selector: "(string|element)"
        };
    class Dn extends xt {
        constructor(x) {
            super(), this._config = this._getConfig(x)
        }
        static get Default() {
            return vi
        }
        static get DefaultType() {
            return gr
        }
        static get NAME() {
            return "TemplateFactory"
        }
        getContent() {
            return Object.values(this._config.content).map(x => this._resolvePossibleFunction(x)).filter(Boolean)
        }
        hasContent() {
            return this.getContent().length > 0
        }
        changeContent(x) {
            return this._checkContent(x), this._config.content = { ...this._config.content,
                ...x
            }, this
        }
        toHtml() {
            const x = document.createElement("div");
            x.innerHTML = this._maybeSanitize(this._config.template);
            for (const [ue, Le] of Object.entries(this._config.content)) this._setContent(x, Le, ue);
            const j = x.children[0],
                Ct = this._resolvePossibleFunction(this._config.extraClass);
            return Ct && j.classList.add(...Ct.split(" ")), j
        }
        _typeCheckConfig(x) {
            super._typeCheckConfig(x), this._checkContent(x.content)
        }
        _checkContent(x) {
            for (const [j, Ct] of Object.entries(x)) super._typeCheckConfig({
                selector: j,
                entry: Ct
            }, Xi)
        }
        _setContent(x, j, Ct) {
            const ue = Dt.findOne(Ct, x);
            ue && ((j = this._resolvePossibleFunction(j)) ? J(j) ? this._putElementInTemplate(mt(j), ue) : this._config.html ? ue.innerHTML = this._maybeSanitize(j) : ue.textContent = j : ue.remove())
        }
        _maybeSanitize(x) {
            return this._config.sanitize ? function(j, Ct, ue) {
                if (!j.length) return j;
                if (ue && "function" == typeof ue) return ue(j);
                const Le = (new window.DOMParser).parseFromString(j, "text/html"),
                    Je = [].concat(...Le.body.querySelectorAll("*"));
                for (const In of Je) {
                    const Gn = In.nodeName.toLowerCase();
                    if (!Object.keys(Ct).includes(Gn)) {
                        In.remove();
                        continue
                    }
                    const ar = [].concat(...In.attributes),
                        Gi = [].concat(Ct["*"] || [], Ct[Gn] || []);
                    for (const Yr of ar) ni(Yr, Gi) || In.removeAttribute(Yr.nodeName)
                }
                return Le.body.innerHTML
            }(x, this._config.allowList, this._config.sanitizeFn) : x
        }
        _resolvePossibleFunction(x) {
            return dt(x, [void 0, this])
        }
        _putElementInTemplate(x, j) {
            if (this._config.html) return j.innerHTML = "", void j.append(x);
            j.textContent = x.textContent
        }
    }
    const Ts = new Set(["sanitize", "allowList", "sanitizeFn"]),
        Mn = "fade",
        Kn = "show",
        ur = "hide.bs.modal",
        $r = "hover",
        mr = "focus",
        br = {
            AUTO: "auto",
            TOP: "top",
            RIGHT: G() ? "left" : "right",
            BOTTOM: "bottom",
            LEFT: G() ? "right" : "left"
        },
        qi = {
            allowList: Ye,
            animation: !0,
            boundary: "clippingParents",
            container: !1,
            customClass: "",
            delay: 0,
            fallbackPlacements: ["top", "right", "bottom", "left"],
            html: !1,
            offset: [0, 6],
            placement: "top",
            popperConfig: null,
            sanitize: !0,
            sanitizeFn: null,
            selector: !1,
            template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
            title: "",
            trigger: "hover focus"
        },
        Fi = {
            allowList: "object",
            animation: "boolean",
            boundary: "(string|element)",
            container: "(string|element|boolean)",
            customClass: "(string|function)",
            delay: "(number|object)",
            fallbackPlacements: "array",
            html: "boolean",
            offset: "(array|string|function)",
            placement: "(string|function)",
            popperConfig: "(null|object|function)",
            sanitize: "boolean",
            sanitizeFn: "(null|function)",
            selector: "(string|boolean)",
            template: "string",
            title: "(string|element|function)",
            trigger: "string"
        };
    class ui extends pt {
        constructor(x, j) {
            if (void 0 === y) throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");
            super(x, j), this._isEnabled = !0, this._timeout = 0, this._isHovered = null, this._activeTrigger = {}, this._popper = null, this._templateFactory = null, this._newContent = null, this.tip = null, this._setListeners(), this._config.selector || this._fixTitle()
        }
        static get Default() {
            return qi
        }
        static get DefaultType() {
            return Fi
        }
        static get NAME() {
            return "tooltip"
        }
        enable() {
            this._isEnabled = !0
        }
        disable() {
            this._isEnabled = !1
        }
        toggleEnabled() {
            this._isEnabled = !this._isEnabled
        }
        toggle() {
            this._isEnabled && (this._isShown() ? this._leave() : this._enter())
        }
        dispose() {
            clearTimeout(this._timeout), z.off(this._element.closest(".modal"), ur, this._hideModalHandler), this._element.getAttribute("data-bs-original-title") && this._element.setAttribute("title", this._element.getAttribute("data-bs-original-title")), this._disposePopper(), super.dispose()
        }
        show() {
            if ("none" === this._element.style.display) throw new Error("Please use show on visible elements");
            if (!this._isWithContent() || !this._isEnabled) return;
            const x = z.trigger(this._element, this.constructor.eventName("show")),
                j = (q(this._element) || this._element.ownerDocument.documentElement).contains(this._element);
            if (x.defaultPrevented || !j) return;
            this._disposePopper();
            const Ct = this._getTipElement();
            this._element.setAttribute("aria-describedby", Ct.getAttribute("id"));
            const {
                container: ue
            } = this._config;
            if (this._element.ownerDocument.documentElement.contains(this.tip) || (ue.append(Ct), z.trigger(this._element, this.constructor.eventName("inserted"))), this._popper = this._createPopper(Ct), Ct.classList.add(Kn), "ontouchstart" in document.documentElement)
                for (const Le of [].concat(...document.body.children)) z.on(Le, "mouseover", tt);
            this._queueCallback(() => {
                z.trigger(this._element, this.constructor.eventName("shown")), !1 === this._isHovered && this._leave(), this._isHovered = !1
            }, this.tip, this._isAnimated())
        }
        hide() {
            if (this._isShown() && !z.trigger(this._element, this.constructor.eventName("hide")).defaultPrevented) {
                if (this._getTipElement().classList.remove(Kn), "ontouchstart" in document.documentElement)
                    for (const x of [].concat(...document.body.children)) z.off(x, "mouseover", tt);
                this._activeTrigger.click = !1, this._activeTrigger[mr] = !1, this._activeTrigger[$r] = !1, this._isHovered = null, this._queueCallback(() => {
                    this._isWithActiveTrigger() || (this._isHovered || this._disposePopper(), this._element.removeAttribute("aria-describedby"), z.trigger(this._element, this.constructor.eventName("hidden")))
                }, this.tip, this._isAnimated())
            }
        }
        update() {
            this._popper && this._popper.update()
        }
        _isWithContent() {
            return Boolean(this._getTitle())
        }
        _getTipElement() {
            return this.tip || (this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())), this.tip
        }
        _createTipElement(x) {
            const j = this._getTemplateFactory(x).toHtml();
            if (!j) return null;
            j.classList.remove(Mn, Kn), j.classList.add(`bs-${this.constructor.NAME}-auto`);
            const Ct = (ue => {
                do {
                    ue += Math.floor(1e6 * Math.random())
                } while (document.getElementById(ue));
                return ue
            })(this.constructor.NAME).toString();
            return j.setAttribute("id", Ct), this._isAnimated() && j.classList.add(Mn), j
        }
        setContent(x) {
            this._newContent = x, this._isShown() && (this._disposePopper(), this.show())
        }
        _getTemplateFactory(x) {
            return this._templateFactory ? this._templateFactory.changeContent(x) : this._templateFactory = new Dn({ ...this._config,
                content: x,
                extraClass: this._resolvePossibleFunction(this._config.customClass)
            }), this._templateFactory
        }
        _getContentForTemplate() {
            return {
                ".tooltip-inner": this._getTitle()
            }
        }
        _getTitle() {
            return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute("data-bs-original-title")
        }
        _initializeOnDelegatedTarget(x) {
            return this.constructor.getOrCreateInstance(x.delegateTarget, this._getDelegateConfig())
        }
        _isAnimated() {
            return this._config.animation || this.tip && this.tip.classList.contains(Mn)
        }
        _isShown() {
            return this.tip && this.tip.classList.contains(Kn)
        }
        _createPopper(x) {
            const j = dt(this._config.placement, [this, x, this._element]),
                Ct = br[j.toUpperCase()];
            return y.createPopper(this._element, x, this._getPopperConfig(Ct))
        }
        _getOffset() {
            const {
                offset: x
            } = this._config;
            return "string" == typeof x ? x.split(",").map(j => Number.parseInt(j, 10)) : "function" == typeof x ? j => x(j, this._element) : x
        }
        _resolvePossibleFunction(x) {
            return dt(x, [this._element, this._element])
        }
        _getPopperConfig(x) {
            const j = {
                placement: x,
                modifiers: [{
                    name: "flip",
                    options: {
                        fallbackPlacements: this._config.fallbackPlacements
                    }
                }, {
                    name: "offset",
                    options: {
                        offset: this._getOffset()
                    }
                }, {
                    name: "preventOverflow",
                    options: {
                        boundary: this._config.boundary
                    }
                }, {
                    name: "arrow",
                    options: {
                        element: `.${this.constructor.NAME}-arrow`
                    }
                }, {
                    name: "preSetPlacement",
                    enabled: !0,
                    phase: "beforeMain",
                    fn: Ct => {
                        this._getTipElement().setAttribute("data-popper-placement", Ct.state.placement)
                    }
                }]
            };
            return { ...j,
                ...dt(this._config.popperConfig, [void 0, j])
            }
        }
        _setListeners() {
            const x = this._config.trigger.split(" ");
            for (const j of x)
                if ("click" === j) z.on(this._element, this.constructor.eventName("click"), this._config.selector, Ct => {
                    this._initializeOnDelegatedTarget(Ct).toggle()
                });
                else if ("manual" !== j) {
                const Ct = this.constructor.eventName(j === $r ? "mouseenter" : "focusin"),
                    ue = this.constructor.eventName(j === $r ? "mouseleave" : "focusout");
                z.on(this._element, Ct, this._config.selector, Le => {
                    const Je = this._initializeOnDelegatedTarget(Le);
                    Je._activeTrigger["focusin" === Le.type ? mr : $r] = !0, Je._enter()
                }), z.on(this._element, ue, this._config.selector, Le => {
                    const Je = this._initializeOnDelegatedTarget(Le);
                    Je._activeTrigger["focusout" === Le.type ? mr : $r] = Je._element.contains(Le.relatedTarget), Je._leave()
                })
            }
            this._hideModalHandler = () => {
                this._element && this.hide()
            }, z.on(this._element.closest(".modal"), ur, this._hideModalHandler)
        }
        _fixTitle() {
            const x = this._element.getAttribute("title");
            x && (this._element.getAttribute("aria-label") || this._element.textContent.trim() || this._element.setAttribute("aria-label", x), this._element.setAttribute("data-bs-original-title", x), this._element.removeAttribute("title"))
        }
        _enter() {
            this._isShown() || this._isHovered ? this._isHovered = !0 : (this._isHovered = !0, this._setTimeout(() => {
                this._isHovered && this.show()
            }, this._config.delay.show))
        }
        _leave() {
            this._isWithActiveTrigger() || (this._isHovered = !1, this._setTimeout(() => {
                this._isHovered || this.hide()
            }, this._config.delay.hide))
        }
        _setTimeout(x, j) {
            clearTimeout(this._timeout), this._timeout = setTimeout(x, j)
        }
        _isWithActiveTrigger() {
            return Object.values(this._activeTrigger).includes(!0)
        }
        _getConfig(x) {
            const j = Gt.getDataAttributes(this._element);
            for (const Ct of Object.keys(j)) Ts.has(Ct) && delete j[Ct];
            return x = { ...j,
                ..."object" == typeof x && x ? x : {}
            }, x = this._mergeConfigObj(x), x = this._configAfterMerge(x), this._typeCheckConfig(x), x
        }
        _configAfterMerge(x) {
            return x.container = !1 === x.container ? document.body : mt(x.container), "number" == typeof x.delay && (x.delay = {
                show: x.delay,
                hide: x.delay
            }), "number" == typeof x.title && (x.title = x.title.toString()), "number" == typeof x.content && (x.content = x.content.toString()), x
        }
        _getDelegateConfig() {
            const x = {};
            for (const [j, Ct] of Object.entries(this._config)) this.constructor.Default[j] !== Ct && (x[j] = Ct);
            return x.selector = !1, x.trigger = "manual", x
        }
        _disposePopper() {
            this._popper && (this._popper.destroy(), this._popper = null), this.tip && (this.tip.remove(), this.tip = null)
        }
        static jQueryInterface(x) {
            return this.each(function() {
                const j = ui.getOrCreateInstance(this, x);
                if ("string" == typeof x) {
                    if (void 0 === j[x]) throw new TypeError(`No method named "${x}"`);
                    j[x]()
                }
            })
        }
    }
    et(ui);
    const vr = { ...ui.Default,
            content: "",
            offset: [0, 8],
            placement: "right",
            template: '<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>',
            trigger: "click"
        },
        sr = { ...ui.DefaultType,
            content: "(null|string|element|function)"
        };
    class en extends ui {
        static get Default() {
            return vr
        }
        static get DefaultType() {
            return sr
        }
        static get NAME() {
            return "popover"
        }
        _isWithContent() {
            return this._getTitle() || this._getContent()
        }
        _getContentForTemplate() {
            return {
                ".popover-header": this._getTitle(),
                ".popover-body": this._getContent()
            }
        }
        _getContent() {
            return this._resolvePossibleFunction(this._config.content)
        }
        static jQueryInterface(x) {
            return this.each(function() {
                const j = en.getOrCreateInstance(this, x);
                if ("string" == typeof x) {
                    if (void 0 === j[x]) throw new TypeError(`No method named "${x}"`);
                    j[x]()
                }
            })
        }
    }
    et(en);
    const xi = ".bs.scrollspy",
        Oi = `activate${xi}`,
        qn = `click${xi}`,
        Br = `load${xi}.data-api`,
        Qn = "active",
        Ci = "[href]",
        ti = ".nav-link",
        as = `${ti}, .nav-item > ${ti}, .list-group-item`,
        ls = {
            offset: null,
            rootMargin: "0px 0px -25%",
            smoothScroll: !1,
            target: null,
            threshold: [.1, .5, 1]
        },
        Xr = {
            offset: "(number|null)",
            rootMargin: "string",
            smoothScroll: "boolean",
            target: "element",
            threshold: "array"
        };
    class qr extends pt {
        constructor(x, j) {
            super(x, j), this._targetLinks = new Map, this._observableSections = new Map, this._rootElement = "visible" === getComputedStyle(this._element).overflowY ? null : this._element, this._activeTarget = null, this._observer = null, this._previousScrollData = {
                visibleEntryTop: 0,
                parentScrollTop: 0
            }, this.refresh()
        }
        static get Default() {
            return ls
        }
        static get DefaultType() {
            return Xr
        }
        static get NAME() {
            return "scrollspy"
        }
        refresh() {
            this._initializeTargetsAndObservables(), this._maybeEnableSmoothScroll(), this._observer ? this._observer.disconnect() : this._observer = this._getNewObserver();
            for (const x of this._observableSections.values()) this._observer.observe(x)
        }
        dispose() {
            this._observer.disconnect(), super.dispose()
        }
        _configAfterMerge(x) {
            return x.target = mt(x.target) || document.body, x.rootMargin = x.offset ? `${x.offset}px 0px -30%` : x.rootMargin, "string" == typeof x.threshold && (x.threshold = x.threshold.split(",").map(j => Number.parseFloat(j))), x
        }
        _maybeEnableSmoothScroll() {
            this._config.smoothScroll && (z.off(this._config.target, qn), z.on(this._config.target, qn, Ci, x => {
                const j = this._observableSections.get(x.target.hash);
                if (j) {
                    x.preventDefault();
                    const Ct = this._rootElement || window,
                        ue = j.offsetTop - this._element.offsetTop;
                    if (Ct.scrollTo) return void Ct.scrollTo({
                        top: ue,
                        behavior: "smooth"
                    });
                    Ct.scrollTop = ue
                }
            }))
        }
        _getNewObserver() {
            return new IntersectionObserver(j => this._observerCallback(j), {
                root: this._rootElement,
                threshold: this._config.threshold,
                rootMargin: this._config.rootMargin
            })
        }
        _observerCallback(x) {
            const j = Je => this._targetLinks.get(`#${Je.target.id}`),
                Ct = Je => {
                    this._previousScrollData.visibleEntryTop = Je.target.offsetTop, this._process(j(Je))
                },
                ue = (this._rootElement || document.documentElement).scrollTop,
                Le = ue >= this._previousScrollData.parentScrollTop;
            this._previousScrollData.parentScrollTop = ue;
            for (const Je of x) {
                if (!Je.isIntersecting) {
                    this._activeTarget = null, this._clearActiveClass(j(Je));
                    continue
                }
                const In = Je.target.offsetTop >= this._previousScrollData.visibleEntryTop;
                if (Le && In) {
                    if (Ct(Je), !ue) return
                } else Le || In || Ct(Je)
            }
        }
        _initializeTargetsAndObservables() {
            this._targetLinks = new Map, this._observableSections = new Map;
            const x = Dt.find(Ci, this._config.target);
            for (const j of x) {
                if (!j.hash || A(j)) continue;
                const Ct = Dt.findOne(decodeURI(j.hash), this._element);
                Z(Ct) && (this._targetLinks.set(decodeURI(j.hash), j), this._observableSections.set(j.hash, Ct))
            }
        }
        _process(x) {
            this._activeTarget !== x && (this._clearActiveClass(this._config.target), this._activeTarget = x, x.classList.add(Qn), this._activateParents(x), z.trigger(this._element, Oi, {
                relatedTarget: x
            }))
        }
        _activateParents(x) {
            if (x.classList.contains("dropdown-item")) Dt.findOne(".dropdown-bs-toggle", x.closest(".dropdown")).classList.add(Qn);
            else
                for (const j of Dt.parents(x, ".nav, .list-group"))
                    for (const Ct of Dt.prev(j, as)) Ct.classList.add(Qn)
        }
        _clearActiveClass(x) {
            x.classList.remove(Qn);
            const j = Dt.find(`${Ci}.${Qn}`, x);
            for (const Ct of j) Ct.classList.remove(Qn)
        }
        static jQueryInterface(x) {
            return this.each(function() {
                const j = qr.getOrCreateInstance(this, x);
                if ("string" == typeof x) {
                    if (void 0 === j[x] || x.startsWith("_") || "constructor" === x) throw new TypeError(`No method named "${x}"`);
                    j[x]()
                }
            })
        }
    }
    z.on(window, Br, () => {
        for (const kt of Dt.find('[data-bs-spy="scroll"]')) qr.getOrCreateInstance(kt)
    }), et(qr);
    const _r = ".bs.tab",
        Gr = `hide${_r}`,
        Js = `hidden${_r}`,
        As = `show${_r}`,
        oo = `shown${_r}`,
        ao = `click${_r}`,
        lo = `keydown${_r}`,
        Ks = `load${_r}`,
        ct = "ArrowLeft",
        At = "ArrowRight",
        Zt = "ArrowUp",
        se = "ArrowDown",
        fe = "Home",
        je = "End",
        Fe = "active",
        He = "show",
        Nn = ".dropdown-bs-toggle",
        an = `:not(${Nn})`,
        xn = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',
        On = `.nav-link${an}, .list-group-item${an}, [role="tab"]${an}, ${xn}`,
        pn = `.${Fe}[data-bs-toggle="tab"], .${Fe}[data-bs-toggle="pill"], .${Fe}[data-bs-toggle="list"]`;
    class di extends pt {
        constructor(x) {
            super(x), this._parent = this._element.closest('.list-group, .nav, [role="tablist"]'), this._parent && (this._setInitialAttributes(this._parent, this._getChildren()), z.on(this._element, lo, j => this._keydown(j)))
        }
        static get NAME() {
            return "tab"
        }
        show() {
            const x = this._element;
            if (this._elemIsActive(x)) return;
            const j = this._getActiveElem(),
                Ct = j ? z.trigger(j, Gr, {
                    relatedTarget: x
                }) : null;
            z.trigger(x, As, {
                relatedTarget: j
            }).defaultPrevented || Ct && Ct.defaultPrevented || (this._deactivate(j, x), this._activate(x, j))
        }
        _activate(x, j) {
            x && (x.classList.add(Fe), this._activate(Dt.getElementFromSelector(x)), this._queueCallback(() => {
                "tab" === x.getAttribute("role") ? (x.removeAttribute("tabindex"), x.setAttribute("aria-selected", !0), this._toggleDropDown(x, !0), z.trigger(x, oo, {
                    relatedTarget: j
                })) : x.classList.add(He)
            }, x, x.classList.contains("fade")))
        }
        _deactivate(x, j) {
            x && (x.classList.remove(Fe), x.blur(), this._deactivate(Dt.getElementFromSelector(x)), this._queueCallback(() => {
                "tab" === x.getAttribute("role") ? (x.setAttribute("aria-selected", !1), x.setAttribute("tabindex", "-1"), this._toggleDropDown(x, !1), z.trigger(x, Js, {
                    relatedTarget: j
                })) : x.classList.remove(He)
            }, x, x.classList.contains("fade")))
        }
        _keydown(x) {
            if (![ct, At, Zt, se, fe, je].includes(x.key)) return;
            x.stopPropagation(), x.preventDefault();
            const j = this._getChildren().filter(ue => !A(ue));
            let Ct;
            if ([fe, je].includes(x.key)) Ct = j[x.key === fe ? 0 : j.length - 1];
            else {
                const ue = [At, se].includes(x.key);
                Ct = wt(j, x.target, ue, !0)
            }
            Ct && (Ct.focus({
                preventScroll: !0
            }), di.getOrCreateInstance(Ct).show())
        }
        _getChildren() {
            return Dt.find(On, this._parent)
        }
        _getActiveElem() {
            return this._getChildren().find(x => this._elemIsActive(x)) || null
        }
        _setInitialAttributes(x, j) {
            this._setAttributeIfNotExists(x, "role", "tablist");
            for (const Ct of j) this._setInitialAttributesOnChild(Ct)
        }
        _setInitialAttributesOnChild(x) {
            x = this._getInnerElement(x);
            const j = this._elemIsActive(x),
                Ct = this._getOuterElement(x);
            x.setAttribute("aria-selected", j), Ct !== x && this._setAttributeIfNotExists(Ct, "role", "presentation"), j || x.setAttribute("tabindex", "-1"), this._setAttributeIfNotExists(x, "role", "tab"), this._setInitialAttributesOnTargetPanel(x)
        }
        _setInitialAttributesOnTargetPanel(x) {
            const j = Dt.getElementFromSelector(x);
            j && (this._setAttributeIfNotExists(j, "role", "tabpanel"), x.id && this._setAttributeIfNotExists(j, "aria-labelledby", `${x.id}`))
        }
        _toggleDropDown(x, j) {
            const Ct = this._getOuterElement(x);
            if (!Ct.classList.contains("dropdown")) return;
            const ue = (Le, Je) => {
                const In = Dt.findOne(Le, Ct);
                In && In.classList.toggle(Je, j)
            };
            ue(Nn, Fe), ue(".dropdown-menu", He), Ct.setAttribute("aria-expanded", j)
        }
        _setAttributeIfNotExists(x, j, Ct) {
            x.hasAttribute(j) || x.setAttribute(j, Ct)
        }
        _elemIsActive(x) {
            return x.classList.contains(Fe)
        }
        _getInnerElement(x) {
            return x.matches(On) ? x : Dt.findOne(On, x)
        }
        _getOuterElement(x) {
            return x.closest(".nav-item, .list-group-item") || x
        }
        static jQueryInterface(x) {
            return this.each(function() {
                const j = di.getOrCreateInstance(this);
                if ("string" == typeof x) {
                    if (void 0 === j[x] || x.startsWith("_") || "constructor" === x) throw new TypeError(`No method named "${x}"`);
                    j[x]()
                }
            })
        }
    }
    z.on(document, ao, xn, function(kt) {
        ["A", "AREA"].includes(this.tagName) && kt.preventDefault(), A(this) || di.getOrCreateInstance(this).show()
    }), z.on(window, Ks, () => {
        for (const kt of Dt.find(pn)) di.getOrCreateInstance(kt)
    }), et(di);
    const ai = ".bs.toast",
        Li = `mouseover${ai}`,
        Ki = `mouseout${ai}`,
        dr = `focusin${ai}`,
        or = `focusout${ai}`,
        jn = `hide${ai}`,
        Ri = `hidden${ai}`,
        Er = `show${ai}`,
        co = `shown${ai}`,
        Ns = "show",
        Hs = "showing",
        Co = {
            animation: "boolean",
            autohide: "boolean",
            delay: "number"
        },
        Fo = {
            animation: !0,
            autohide: !0,
            delay: 5e3
        };
    class bo extends pt {
        constructor(x, j) {
            super(x, j), this._timeout = null, this._hasMouseInteraction = !1, this._hasKeyboardInteraction = !1, this._setListeners()
        }
        static get Default() {
            return Fo
        }
        static get DefaultType() {
            return Co
        }
        static get NAME() {
            return "toast"
        }
        show() {
            z.trigger(this._element, Er).defaultPrevented || (this._clearTimeout(), this._config.animation && this._element.classList.add("fade"), this._element.classList.remove("hide"), this._element.classList.add(Ns, Hs), this._queueCallback(() => {
                this._element.classList.remove(Hs), z.trigger(this._element, co), this._maybeScheduleHide()
            }, this._element, this._config.animation))
        }
        hide() {
            this.isShown() && (z.trigger(this._element, jn).defaultPrevented || (this._element.classList.add(Hs), this._queueCallback(() => {
                this._element.classList.add("hide"), this._element.classList.remove(Hs, Ns), z.trigger(this._element, Ri)
            }, this._element, this._config.animation)))
        }
        dispose() {
            this._clearTimeout(), this.isShown() && this._element.classList.remove(Ns), super.dispose()
        }
        isShown() {
            return this._element.classList.contains(Ns)
        }
        _maybeScheduleHide() {
            this._config.autohide && (this._hasMouseInteraction || this._hasKeyboardInteraction || (this._timeout = setTimeout(() => {
                this.hide()
            }, this._config.delay)))
        }
        _onInteraction(x, j) {
            switch (x.type) {
                case "mouseover":
                case "mouseout":
                    this._hasMouseInteraction = j;
                    break;
                case "focusin":
                case "focusout":
                    this._hasKeyboardInteraction = j
            }
            if (j) return void this._clearTimeout();
            const Ct = x.relatedTarget;
            this._element === Ct || this._element.contains(Ct) || this._maybeScheduleHide()
        }
        _setListeners() {
            z.on(this._element, Li, x => this._onInteraction(x, !0)), z.on(this._element, Ki, x => this._onInteraction(x, !1)), z.on(this._element, dr, x => this._onInteraction(x, !0)), z.on(this._element, or, x => this._onInteraction(x, !1))
        }
        _clearTimeout() {
            clearTimeout(this._timeout), this._timeout = null
        }
        static jQueryInterface(x) {
            return this.each(function() {
                const j = bo.getOrCreateInstance(this, x);
                if ("string" == typeof x) {
                    if (void 0 === j[x]) throw new TypeError(`No method named "${x}"`);
                    j[x](this)
                }
            })
        }
    }
    return ce(bo), et(bo), {
        Alert: dn,
        Button: cn,
        Carousel: Fn,
        Collapse: Ti,
        Dropdown: Rt,
        Modal: Ur,
        Offcanvas: pe,
        Popover: en,
        ScrollSpy: qr,
        Tab: di,
        Toast: bo,
        Tooltip: ui
    }
}),
function(p, R) {
    "object" == typeof exports && typeof module < "u" ? module.exports = R() : "function" == typeof define && define.amd ? define(R) : (p = typeof globalThis < "u" ? globalThis : p || self).bootstrap = R()
}(this, function() {
    "use strict";
    const p = new Map,
        R = {
            set(F, d, B) {
                p.has(F) || p.set(F, new Map);
                const Y = p.get(F);
                Y.has(d) || 0 === Y.size ? Y.set(d, B) : console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(Y.keys())[0]}.`)
            },
            get: (F, d) => p.has(F) && p.get(F).get(d) || null,
            remove(F, d) {
                if (!p.has(F)) return;
                const B = p.get(F);
                B.delete(d), 0 === B.size && p.delete(F)
            }
        },
        y = "transitionend",
        I = F => (F && window.CSS && window.CSS.escape && (F = F.replace(/#([^\s"#']+)/g, (d, B) => `#${CSS.escape(B)}`)), F),
        H = F => {
            F.dispatchEvent(new Event(y))
        },
        P = F => !(!F || "object" != typeof F) && (void 0 !== F.jquery && (F = F[0]), void 0 !== F.nodeType),
        K = F => P(F) ? F.jquery ? F[0] : F : "string" == typeof F && F.length > 0 ? document.querySelector(I(F)) : null,
        O = F => {
            if (!P(F) || 0 === F.getClientRects().length) return !1;
            const d = "visible" === getComputedStyle(F).getPropertyValue("visibility"),
                B = F.closest("details:not([open])");
            if (!B) return d;
            if (B !== F) {
                const Y = F.closest("summary");
                if (Y && Y.parentNode !== B || null === Y) return !1
            }
            return d
        },
        J = F => !F || F.nodeType !== Node.ELEMENT_NODE || !!F.classList.contains("disabled") || (void 0 !== F.disabled ? F.disabled : F.hasAttribute("disabled") && "false" !== F.getAttribute("disabled")),
        mt = F => {
            if (!document.documentElement.attachShadow) return null;
            if ("function" == typeof F.getRootNode) {
                const d = F.getRootNode();
                return d instanceof ShadowRoot ? d : null
            }
            return F instanceof ShadowRoot ? F : F.parentNode ? mt(F.parentNode) : null
        },
        Z = () => {},
        q = () => window.jQuery && !document.body.hasAttribute("data-bs-no-jquery") ? window.jQuery : null,
        tt = [],
        nt = () => "rtl" === document.documentElement.dir,
        lt = F => {
            var d;
            d = () => {
                const B = q();
                if (B) {
                    const Y = F.NAME,
                        Ot = B.fn[Y];
                    B.fn[Y] = F.jQueryInterface, B.fn[Y].Constructor = F, B.fn[Y].noConflict = () => (B.fn[Y] = Ot, F.jQueryInterface)
                }
            }, "loading" === document.readyState ? (tt.length || document.addEventListener("DOMContentLoaded", () => {
                for (const B of tt) B()
            }), tt.push(d)) : d()
        },
        M = (F, d = [], B = F) => "function" == typeof F ? F.call(...d) : B,
        G = (F, d, B = !0) => {
            if (!B) return void M(F);
            const Y = (oe => {
                if (!oe) return 0;
                let {
                    transitionDuration: me,
                    transitionDelay: Ie
                } = window.getComputedStyle(oe);
                const We = Number.parseFloat(me),
                    Re = Number.parseFloat(Ie);
                return We || Re ? (me = me.split(",")[0], Ie = Ie.split(",")[0], 1e3 * (Number.parseFloat(me) + Number.parseFloat(Ie))) : 0
            })(d) + 5;
            let Ot = !1;
            const It = ({
                target: oe
            }) => {
                oe === d && (Ot = !0, d.removeEventListener(y, It), M(F))
            };
            d.addEventListener(y, It), setTimeout(() => {
                Ot || H(d)
            }, Y)
        },
        et = (F, d, B, Y) => {
            const Ot = F.length;
            let It = F.indexOf(d);
            return -1 === It ? !B && Y ? F[Ot - 1] : F[0] : (It += B ? 1 : -1, Y && (It = (It + Ot) % Ot), F[Math.max(0, Math.min(It, Ot - 1))])
        },
        dt = /[^.]*(?=\..*)\.|.*/,
        Bt = /\..*/,
        wt = /::\d+$/,
        _ = {};
    let Jt = 1;
    const jt = {
            mouseenter: "mouseover",
            mouseleave: "mouseout"
        },
        Wt = new Set(["click", "dblclick", "mouseup", "mousedown", "contextmenu", "mousewheel", "DOMMouseScroll", "mouseover", "mouseout", "mousemove", "selectstart", "selectend", "keydown", "keypress", "keyup", "orientationchange", "touchstart", "touchmove", "touchend", "touchcancel", "pointerdown", "pointermove", "pointerup", "pointerleave", "pointercancel", "gesturestart", "gesturechange", "gestureend", "focus", "blur", "change", "reset", "select", "submit", "focusin", "focusout", "load", "unload", "beforeunload", "resize", "move", "DOMContentLoaded", "readystatechange", "error", "abort", "scroll"]);

    function be(F, d) {
        return d && `${d}::${Jt++}` || F.uidEvent || Jt++
    }

    function Kt(F) {
        const d = be(F);
        return F.uidEvent = d, _[d] = _[d] || {}, _[d]
    }

    function Qt(F, d, B = null) {
        return Object.values(F).find(Y => Y.callable === d && Y.delegationSelector === B)
    }

    function Ft(F, d, B) {
        const Y = "string" == typeof d,
            Ot = Y ? B : d || B;
        let It = St(F);
        return Wt.has(It) || (It = F), [Y, Ot, It]
    }

    function Yt(F, d, B, Y, Ot) {
        if ("string" != typeof d || !F) return;
        let [It, oe, me] = Ft(d, B, Y);
        var ke;
        d in jt && (ke = oe, oe = function(ae) {
            if (!ae.relatedTarget || ae.relatedTarget !== ae.delegateTarget && !ae.delegateTarget.contains(ae.relatedTarget)) return ke.call(this, ae)
        });
        const Ie = Kt(F),
            We = Ie[me] || (Ie[me] = {}),
            Re = Qt(We, oe, It ? B : null);
        if (Re) return void(Re.oneOff = Re.oneOff && Ot);
        const zt = be(oe, d.replace(dt, "")),
            Pt = It ? function(Nt, ke, ae) {
                return function we(Oe) {
                    const ln = Nt.querySelectorAll(ke);
                    for (let {
                            target: rn
                        } = Oe; rn && rn !== this; rn = rn.parentNode)
                        for (const fn of ln)
                            if (fn === rn) return rt(Oe, {
                                delegateTarget: rn
                            }), we.oneOff && V.off(Nt, Oe.type, ke, ae), ae.apply(rn, [Oe])
                }
            }(F, B, oe) : function(Nt, ke) {
                return function ae(we) {
                    return rt(we, {
                        delegateTarget: Nt
                    }), ae.oneOff && V.off(Nt, we.type, ke), ke.apply(Nt, [we])
                }
            }(F, oe);
        Pt.delegationSelector = It ? B : null, Pt.callable = oe, Pt.oneOff = Ot, Pt.uidEvent = zt, We[zt] = Pt, F.addEventListener(me, Pt, It)
    }

    function it(F, d, B, Y, Ot) {
        const It = Qt(d[B], Y, Ot);
        It && (F.removeEventListener(B, It, Boolean(Ot)), delete d[B][It.uidEvent])
    }

    function ot(F, d, B, Y) {
        const Ot = d[B] || {};
        for (const [It, oe] of Object.entries(Ot)) It.includes(Y) && it(F, d, B, oe.callable, oe.delegationSelector)
    }

    function St(F) {
        return F = F.replace(Bt, ""), jt[F] || F
    }
    const V = {
        on(F, d, B, Y) {
            Yt(F, d, B, Y, !1)
        },
        one(F, d, B, Y) {
            Yt(F, d, B, Y, !0)
        },
        off(F, d, B, Y) {
            if ("string" != typeof d || !F) return;
            const [Ot, It, oe] = Ft(d, B, Y), me = oe !== d, Ie = Kt(F), We = Ie[oe] || {}, Re = d.startsWith(".");
            if (void 0 === It) {
                if (Re)
                    for (const zt of Object.keys(Ie)) ot(F, Ie, zt, d.slice(1));
                for (const [zt, Pt] of Object.entries(We)) {
                    const Nt = zt.replace(wt, "");
                    me && !d.includes(Nt) || it(F, Ie, oe, Pt.callable, Pt.delegationSelector)
                }
            } else {
                if (!Object.keys(We).length) return;
                it(F, Ie, oe, It, Ot ? B : null)
            }
        },
        trigger(F, d, B) {
            if ("string" != typeof d || !F) return null;
            const Y = q();
            let Ot = null,
                It = !0,
                oe = !0,
                me = !1;
            d !== St(d) && Y && (Ot = Y.Event(d, B), Y(F).trigger(Ot), It = !Ot.isPropagationStopped(), oe = !Ot.isImmediatePropagationStopped(), me = Ot.isDefaultPrevented());
            const Ie = rt(new Event(d, {
                bubbles: It,
                cancelable: !0
            }), B);
            return me && Ie.preventDefault(), oe && F.dispatchEvent(Ie), Ie.defaultPrevented && Ot && Ot.preventDefault(), Ie
        }
    };

    function rt(F, d = {}) {
        for (const [B, Y] of Object.entries(d)) try {
            F[B] = Y
        } catch {
            Object.defineProperty(F, B, {
                configurable: !0,
                get: () => Y
            })
        }
        return F
    }

    function ut(F) {
        if ("true" === F) return !0;
        if ("false" === F) return !1;
        if (F === Number(F).toString()) return Number(F);
        if ("" === F || "null" === F) return null;
        if ("string" != typeof F) return F;
        try {
            return JSON.parse(decodeURIComponent(F))
        } catch {
            return F
        }
    }

    function z(F) {
        return F.replace(/[A-Z]/g, d => `-${d.toLowerCase()}`)
    }
    const X = {
        setDataAttribute(F, d, B) {
            F.setAttribute(`data-bs-${z(d)}`, B)
        },
        removeDataAttribute(F, d) {
            F.removeAttribute(`data-bs-${z(d)}`)
        },
        getDataAttributes(F) {
            if (!F) return {};
            const d = {},
                B = Object.keys(F.dataset).filter(Y => Y.startsWith("bs") && !Y.startsWith("bsConfig"));
            for (const Y of B) {
                let Ot = Y.replace(/^bs/, "");
                Ot = Ot.charAt(0).toLowerCase() + Ot.slice(1), d[Ot] = ut(F.dataset[Y])
            }
            return d
        },
        getDataAttribute: (F, d) => ut(F.getAttribute(`data-bs-${z(d)}`))
    };
    class _t {
        static get Default() {
            return {}
        }
        static get DefaultType() {
            return {}
        }
        static get NAME() {
            throw new Error('You have to implement the static method "NAME", for each component!')
        }
        _getConfig(d) {
            return d = this._mergeConfigObj(d), d = this._configAfterMerge(d), this._typeCheckConfig(d), d
        }
        _configAfterMerge(d) {
            return d
        }
        _mergeConfigObj(d, B) {
            const Y = P(B) ? X.getDataAttribute(B, "config") : {};
            return { ...this.constructor.Default,
                ..."object" == typeof Y ? Y : {},
                ...P(B) ? X.getDataAttributes(B) : {},
                ..."object" == typeof d ? d : {}
            }
        }
        _typeCheckConfig(d, B = this.constructor.DefaultType) {
            for (const [Ot, It] of Object.entries(B)) {
                const oe = d[Ot],
                    me = P(oe) ? "element" : null == (Y = oe) ? `${Y}` : Object.prototype.toString.call(Y).match(/\s([a-z]+)/i)[1].toLowerCase();
                if (!new RegExp(It).test(me)) throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${Ot}" provided type "${me}" but expected type "${It}".`)
            }
            var Y
        }
    }
    class Mt extends _t {
        constructor(d, B) {
            super(), (d = K(d)) && (this._element = d, this._config = this._getConfig(B), R.set(this._element, this.constructor.DATA_KEY, this))
        }
        dispose() {
            R.remove(this._element, this.constructor.DATA_KEY), V.off(this._element, this.constructor.EVENT_KEY);
            for (const d of Object.getOwnPropertyNames(this)) this[d] = null
        }
        _queueCallback(d, B, Y = !0) {
            G(d, B, Y)
        }
        _getConfig(d) {
            return d = this._mergeConfigObj(d, this._element), d = this._configAfterMerge(d), this._typeCheckConfig(d), d
        }
        static getInstance(d) {
            return R.get(K(d), this.DATA_KEY)
        }
        static getOrCreateInstance(d, B = {}) {
            return this.getInstance(d) || new this(d, "object" == typeof B ? B : null)
        }
        static get VERSION() {
            return "5.3.5"
        }
        static get DATA_KEY() {
            return `bs.${this.NAME}`
        }
        static get EVENT_KEY() {
            return `.${this.DATA_KEY}`
        }
        static eventName(d) {
            return `${d}${this.EVENT_KEY}`
        }
    }
    const Gt = F => {
            let d = F.getAttribute("data-bs-target");
            if (!d || "#" === d) {
                let B = F.getAttribute("href");
                if (!B || !B.includes("#") && !B.startsWith(".")) return null;
                B.includes("#") && !B.startsWith("#") && (B = `#${B.split("#")[1]}`), d = B && "#" !== B ? B.trim() : null
            }
            return d ? d.split(",").map(B => I(B)).join(",") : null
        },
        xt = {
            find: (F, d = document.documentElement) => [].concat(...Element.prototype.querySelectorAll.call(d, F)),
            findOne: (F, d = document.documentElement) => Element.prototype.querySelector.call(d, F),
            children: (F, d) => [].concat(...F.children).filter(B => B.matches(d)),
            parents(F, d) {
                const B = [];
                let Y = F.parentNode.closest(d);
                for (; Y;) B.push(Y), Y = Y.parentNode.closest(d);
                return B
            },
            prev(F, d) {
                let B = F.previousElementSibling;
                for (; B;) {
                    if (B.matches(d)) return [B];
                    B = B.previousElementSibling
                }
                return []
            },
            next(F, d) {
                let B = F.nextElementSibling;
                for (; B;) {
                    if (B.matches(d)) return [B];
                    B = B.nextElementSibling
                }
                return []
            },
            focusableChildren(F) {
                const d = ["a", "button", "input", "textarea", "select", "details", "[tabindex]", '[contenteditable="true"]'].map(B => `${B}:not([tabindex^="-"])`).join(",");
                return this.find(d, F).filter(B => !J(B) && O(B))
            },
            getSelectorFromElement(F) {
                const d = Gt(F);
                return d && xt.findOne(d) ? d : null
            },
            getElementFromSelector(F) {
                const d = Gt(F);
                return d ? xt.findOne(d) : null
            },
            getMultipleElementsFromSelector(F) {
                const d = Gt(F);
                return d ? xt.find(d) : []
            }
        },
        pt = (F, d = "hide") => {
            const Y = F.NAME;
            V.on(document, `click.dismiss${F.EVENT_KEY}`, `[data-bs-dismiss="${Y}"]`, function(Ot) {
                if (["A", "AREA"].includes(this.tagName) && Ot.preventDefault(), J(this)) return;
                const It = xt.getElementFromSelector(this) || this.closest(`.${Y}`);
                F.getOrCreateInstance(It)[d]()
            })
        },
        Tt = ".bs.alert",
        Dt = `close${Tt}`,
        ce = `closed${Tt}`;
    class le extends Mt {
        static get NAME() {
            return "alert"
        }
        close() {
            if (V.trigger(this._element, Dt).defaultPrevented) return;
            this._element.classList.remove("show");
            const d = this._element.classList.contains("fade");
            this._queueCallback(() => this._destroyElement(), this._element, d)
        }
        _destroyElement() {
            this._element.remove(), V.trigger(this._element, ce), this.dispose()
        }
        static jQueryInterface(d) {
            return this.each(function() {
                const B = le.getOrCreateInstance(this);
                if ("string" == typeof d) {
                    if (void 0 === B[d] || d.startsWith("_") || "constructor" === d) throw new TypeError(`No method named "${d}"`);
                    B[d](this)
                }
            })
        }
    }
    pt(le, "close"), lt(le);
    const Ce = '[data-bs-toggle="button"]';
    class Ne extends Mt {
        static get NAME() {
            return "button"
        }
        toggle() {
            this._element.setAttribute("aria-pressed", this._element.classList.toggle("active"))
        }
        static jQueryInterface(d) {
            return this.each(function() {
                const B = Ne.getOrCreateInstance(this);
                "toggle" === d && B[d]()
            })
        }
    }
    V.on(document, "click.bs.button.data-api", Ce, F => {
        F.preventDefault();
        const d = F.target.closest(Ce);
        Ne.getOrCreateInstance(d).toggle()
    }), lt(Ne);
    const dn = ".bs.swipe",
        Me = `touchstart${dn}`,
        cn = `touchmove${dn}`,
        sn = `touchend${dn}`,
        Wn = `pointerdown${dn}`,
        te = `pointerup${dn}`,
        Pn = {
            endCallback: null,
            leftCallback: null,
            rightCallback: null
        },
        En = {
            endCallback: "(function|null)",
            leftCallback: "(function|null)",
            rightCallback: "(function|null)"
        };
    class Be extends _t {
        constructor(d, B) {
            super(), this._element = d, d && Be.isSupported() && (this._config = this._getConfig(B), this._deltaX = 0, this._supportPointerEvents = Boolean(window.PointerEvent), this._initEvents())
        }
        static get Default() {
            return Pn
        }
        static get DefaultType() {
            return En
        }
        static get NAME() {
            return "swipe"
        }
        dispose() {
            V.off(this._element, dn)
        }
        _start(d) {
            this._supportPointerEvents ? this._eventIsPointerPenTouch(d) && (this._deltaX = d.clientX) : this._deltaX = d.touches[0].clientX
        }
        _end(d) {
            this._eventIsPointerPenTouch(d) && (this._deltaX = d.clientX - this._deltaX), this._handleSwipe(), M(this._config.endCallback)
        }
        _move(d) {
            this._deltaX = d.touches && d.touches.length > 1 ? 0 : d.touches[0].clientX - this._deltaX
        }
        _handleSwipe() {
            const d = Math.abs(this._deltaX);
            if (d <= 40) return;
            const B = d / this._deltaX;
            this._deltaX = 0, B && M(B > 0 ? this._config.rightCallback : this._config.leftCallback)
        }
        _initEvents() {
            this._supportPointerEvents ? (V.on(this._element, Wn, d => this._start(d)), V.on(this._element, te, d => this._end(d)), this._element.classList.add("pointer-event")) : (V.on(this._element, Me, d => this._start(d)), V.on(this._element, cn, d => this._move(d)), V.on(this._element, sn, d => this._end(d)))
        }
        _eventIsPointerPenTouch(d) {
            return this._supportPointerEvents && ("pen" === d.pointerType || "touch" === d.pointerType)
        }
        static isSupported() {
            return "ontouchstart" in document.documentElement || navigator.maxTouchPoints > 0
        }
    }
    const qe = ".bs.carousel",
        gi = ".data-api",
        Ni = "next",
        Pi = "prev",
        Un = "left",
        Xn = "right",
        bi = `slide${qe}`,
        Bi = `slid${qe}`,
        mn = `keydown${qe}`,
        v = `mouseenter${qe}`,
        wr = `mouseleave${qe}`,
        ci = `dragstart${qe}`,
        Ei = `load${qe}${gi}`,
        gn = `click${qe}${gi}`,
        si = "carousel",
        Ke = "active",
        Ai = ".active",
        An = ".carousel-item",
        Qe = Ai + An,
        hi = {
            ArrowLeft: Xn,
            ArrowRight: Un
        },
        Jn = {
            interval: 5e3,
            keyboard: !0,
            pause: "hover",
            ride: !1,
            touch: !0,
            wrap: !0
        },
        Pr = {
            interval: "(number|boolean)",
            keyboard: "boolean",
            pause: "(string|boolean)",
            ride: "(boolean|string)",
            touch: "boolean",
            wrap: "boolean"
        };
    class oi extends Mt {
        constructor(d, B) {
            super(d, B), this._interval = null, this._activeElement = null, this._isSliding = !1, this.touchTimeout = null, this._swipeHelper = null, this._indicatorsElement = xt.findOne(".carousel-indicators", this._element), this._addEventListeners(), this._config.ride === si && this.cycle()
        }
        static get Default() {
            return Jn
        }
        static get DefaultType() {
            return Pr
        }
        static get NAME() {
            return "carousel"
        }
        next() {
            this._slide(Ni)
        }
        nextWhenVisible() {
            !document.hidden && O(this._element) && this.next()
        }
        prev() {
            this._slide(Pi)
        }
        pause() {
            this._isSliding && H(this._element), this._clearInterval()
        }
        cycle() {
            this._clearInterval(), this._updateInterval(), this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)
        }
        _maybeEnableCycle() {
            this._config.ride && (this._isSliding ? V.one(this._element, Bi, () => this.cycle()) : this.cycle())
        }
        to(d) {
            const B = this._getItems();
            if (d > B.length - 1 || d < 0) return;
            if (this._isSliding) return void V.one(this._element, Bi, () => this.to(d));
            const Y = this._getItemIndex(this._getActive());
            Y !== d && this._slide(d > Y ? Ni : Pi, B[d])
        }
        dispose() {
            this._swipeHelper && this._swipeHelper.dispose(), super.dispose()
        }
        _configAfterMerge(d) {
            return d.defaultInterval = d.interval, d
        }
        _addEventListeners() {
            this._config.keyboard && V.on(this._element, mn, d => this._keydown(d)), "hover" === this._config.pause && (V.on(this._element, v, () => this.pause()), V.on(this._element, wr, () => this._maybeEnableCycle())), this._config.touch && Be.isSupported() && this._addTouchEventListeners()
        }
        _addTouchEventListeners() {
            for (const B of xt.find(".carousel-item img", this._element)) V.on(B, ci, Y => Y.preventDefault());
            this._swipeHelper = new Be(this._element, {
                leftCallback: () => this._slide(this._directionToOrder(Un)),
                rightCallback: () => this._slide(this._directionToOrder(Xn)),
                endCallback: () => {
                    "hover" === this._config.pause && (this.pause(), this.touchTimeout && clearTimeout(this.touchTimeout), this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), 500 + this._config.interval))
                }
            })
        }
        _keydown(d) {
            if (/input|textarea/i.test(d.target.tagName)) return;
            const B = hi[d.key];
            B && (d.preventDefault(), this._slide(this._directionToOrder(B)))
        }
        _getItemIndex(d) {
            return this._getItems().indexOf(d)
        }
        _setActiveIndicatorElement(d) {
            if (!this._indicatorsElement) return;
            const B = xt.findOne(Ai, this._indicatorsElement);
            B.classList.remove(Ke), B.removeAttribute("aria-current");
            const Y = xt.findOne(`[data-bs-slide-to="${d}"]`, this._indicatorsElement);
            Y && (Y.classList.add(Ke), Y.setAttribute("aria-current", "true"))
        }
        _updateInterval() {
            const d = this._activeElement || this._getActive();
            if (!d) return;
            const B = Number.parseInt(d.getAttribute("data-bs-interval"), 10);
            this._config.interval = B || this._config.defaultInterval
        }
        _slide(d, B = null) {
            if (this._isSliding) return;
            const Y = this._getActive(),
                Ot = d === Ni,
                It = B || et(this._getItems(), Y, Ot, this._config.wrap);
            if (It === Y) return;
            const oe = this._getItemIndex(It),
                me = zt => V.trigger(this._element, zt, {
                    relatedTarget: It,
                    direction: this._orderToDirection(d),
                    from: this._getItemIndex(Y),
                    to: oe
                });
            if (me(bi).defaultPrevented || !Y || !It) return;
            const Ie = Boolean(this._interval);
            this.pause(), this._isSliding = !0, this._setActiveIndicatorElement(oe), this._activeElement = It;
            const We = Ot ? "carousel-item-start" : "carousel-item-end",
                Re = Ot ? "carousel-item-next" : "carousel-item-prev";
            It.classList.add(Re), Y.classList.add(We), It.classList.add(We), this._queueCallback(() => {
                It.classList.remove(We, Re), It.classList.add(Ke), Y.classList.remove(Ke, Re, We), this._isSliding = !1, me(Bi)
            }, Y, this._isAnimated()), Ie && this.cycle()
        }
        _isAnimated() {
            return this._element.classList.contains("slide")
        }
        _getActive() {
            return xt.findOne(Qe, this._element)
        }
        _getItems() {
            return xt.find(An, this._element)
        }
        _clearInterval() {
            this._interval && (clearInterval(this._interval), this._interval = null)
        }
        _directionToOrder(d) {
            return nt() ? d === Un ? Pi : Ni : d === Un ? Ni : Pi
        }
        _orderToDirection(d) {
            return nt() ? d === Pi ? Un : Xn : d === Pi ? Xn : Un
        }
        static jQueryInterface(d) {
            return this.each(function() {
                const B = oi.getOrCreateInstance(this, d);
                if ("number" != typeof d) {
                    if ("string" == typeof d) {
                        if (void 0 === B[d] || d.startsWith("_") || "constructor" === d) throw new TypeError(`No method named "${d}"`);
                        B[d]()
                    }
                } else B.to(d)
            })
        }
    }
    V.on(document, gn, "[data-bs-slide], [data-bs-slide-to]", function(F) {
        const d = xt.getElementFromSelector(this);
        if (!d || !d.classList.contains(si)) return;
        F.preventDefault();
        const B = oi.getOrCreateInstance(d),
            Y = this.getAttribute("data-bs-slide-to");
        return Y ? (B.to(Y), void B._maybeEnableCycle()) : "next" === X.getDataAttribute(this, "slide") ? (B.next(), void B._maybeEnableCycle()) : (B.prev(), void B._maybeEnableCycle())
    }), V.on(window, Ei, () => {
        const F = xt.find('[data-bs-ride="carousel"]');
        for (const d of F) oi.getOrCreateInstance(d)
    }), lt(oi);
    const $n = ".bs.collapse",
        Hi = `show${$n}`,
        Fn = `shown${$n}`,
        wi = `hide${$n}`,
        Cr = `hidden${$n}`,
        us = `click${$n}.data-api`,
        es = "show",
        pr = "collapse",
        ws = "collapsing",
        Is = `:scope .${pr} .${pr}`,
        tr = '[data-bs-toggle="collapse"]',
        lr = {
            parent: null,
            toggle: !0
        },
        ns = {
            parent: "(null|element)",
            toggle: "boolean"
        };
    class er extends Mt {
        constructor(d, B) {
            super(d, B), this._isTransitioning = !1, this._triggerArray = [];
            const Y = xt.find(tr);
            for (const Ot of Y) {
                const It = xt.getSelectorFromElement(Ot),
                    oe = xt.find(It).filter(me => me === this._element);
                null !== It && oe.length && this._triggerArray.push(Ot)
            }
            this._initializeChildren(), this._config.parent || this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()), this._config.toggle && this.toggle()
        }
        static get Default() {
            return lr
        }
        static get DefaultType() {
            return ns
        }
        static get NAME() {
            return "collapse"
        }
        toggle() {
            this._isShown() ? this.hide() : this.show()
        }
        show() {
            if (this._isTransitioning || this._isShown()) return;
            let d = [];
            if (this._config.parent && (d = this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(Ot => Ot !== this._element).map(Ot => er.getOrCreateInstance(Ot, {
                    toggle: !1
                }))), d.length && d[0]._isTransitioning || V.trigger(this._element, Hi).defaultPrevented) return;
            for (const Ot of d) Ot.hide();
            const B = this._getDimension();
            this._element.classList.remove(pr), this._element.classList.add(ws), this._element.style[B] = 0, this._addAriaAndCollapsedClass(this._triggerArray, !0), this._isTransitioning = !0;
            const Y = `scroll${B[0].toUpperCase()+B.slice(1)}`;
            this._queueCallback(() => {
                this._isTransitioning = !1, this._element.classList.remove(ws), this._element.classList.add(pr, es), this._element.style[B] = "", V.trigger(this._element, Fn)
            }, this._element, !0), this._element.style[B] = `${this._element[Y]}px`
        }
        hide() {
            if (this._isTransitioning || !this._isShown() || V.trigger(this._element, wi).defaultPrevented) return;
            const d = this._getDimension();
            this._element.style[d] = `${this._element.getBoundingClientRect()[d]}px`, this._element.classList.add(ws), this._element.classList.remove(pr, es);
            for (const B of this._triggerArray) {
                const Y = xt.getElementFromSelector(B);
                Y && !this._isShown(Y) && this._addAriaAndCollapsedClass([B], !1)
            }
            this._isTransitioning = !0, this._element.style[d] = "", this._queueCallback(() => {
                this._isTransitioning = !1, this._element.classList.remove(ws), this._element.classList.add(pr), V.trigger(this._element, Cr)
            }, this._element, !0)
        }
        _isShown(d = this._element) {
            return d.classList.contains(es)
        }
        _configAfterMerge(d) {
            return d.toggle = Boolean(d.toggle), d.parent = K(d.parent), d
        }
        _getDimension() {
            return this._element.classList.contains("collapse-horizontal") ? "width" : "height"
        }
        _initializeChildren() {
            if (!this._config.parent) return;
            const d = this._getFirstLevelChildren(tr);
            for (const B of d) {
                const Y = xt.getElementFromSelector(B);
                Y && this._addAriaAndCollapsedClass([B], this._isShown(Y))
            }
        }
        _getFirstLevelChildren(d) {
            const B = xt.find(Is, this._config.parent);
            return xt.find(d, this._config.parent).filter(Y => !B.includes(Y))
        }
        _addAriaAndCollapsedClass(d, B) {
            if (d.length)
                for (const Y of d) Y.classList.toggle("collapsed", !B), Y.setAttribute("aria-expanded", B)
        }
        static jQueryInterface(d) {
            const B = {};
            return "string" == typeof d && /show|hide/.test(d) && (B.toggle = !1), this.each(function() {
                const Y = er.getOrCreateInstance(this, B);
                if ("string" == typeof d) {
                    if (void 0 === Y[d]) throw new TypeError(`No method named "${d}"`);
                    Y[d]()
                }
            })
        }
    }
    V.on(document, us, tr, function(F) {
        ("A" === F.target.tagName || F.delegateTarget && "A" === F.delegateTarget.tagName) && F.preventDefault();
        for (const d of xt.getMultipleElementsFromSelector(this)) er.getOrCreateInstance(d, {
            toggle: !1
        }).toggle()
    }), lt(er);
    var Mi = "top",
        zi = "bottom",
        Ti = "right",
        ji = "left",
        nr = "auto",
        fi = [Mi, zi, Ti, ji],
        Sr = "start",
        Mr = "end",
        ds = "clippingParents",
        cr = "viewport",
        ps = "popper",
        ro = "reference",
        is = fi.reduce(function(F, d) {
            return F.concat([d + "-" + Sr, d + "-" + Mr])
        }, []),
        Cs = [].concat(fi, [nr]).reduce(function(F, d) {
            return F.concat([d, d + "-" + Sr, d + "-" + Mr])
        }, []),
        rs = "beforeRead",
        Ii = "afterRead",
        kr = "beforeMain",
        Hr = "afterMain",
        Ls = "beforeWrite",
        ks = "afterWrite",
        zr = [rs, "read", Ii, kr, "main", Hr, Ls, "write", ks];

    function Yi(F) {
        return F ? (F.nodeName || "").toLowerCase() : null
    }

    function ht(F) {
        if (null == F) return window;
        if ("[object Window]" !== F.toString()) {
            var d = F.ownerDocument;
            return d && d.defaultView || window
        }
        return F
    }

    function Et(F) {
        return F instanceof ht(F).Element || F instanceof Element
    }

    function Rt(F) {
        return F instanceof ht(F).HTMLElement || F instanceof HTMLElement
    }

    function ge(F) {
        return typeof ShadowRoot < "u" && (F instanceof ht(F).ShadowRoot || F instanceof ShadowRoot)
    }
    const xe = {
        name: "applyStyles",
        enabled: !0,
        phase: "write",
        fn: function(F) {
            var d = F.state;
            Object.keys(d.elements).forEach(function(B) {
                var Y = d.styles[B] || {},
                    Ot = d.attributes[B] || {},
                    It = d.elements[B];
                Rt(It) && Yi(It) && (Object.assign(It.style, Y), Object.keys(Ot).forEach(function(oe) {
                    var me = Ot[oe];
                    !1 === me ? It.removeAttribute(oe) : It.setAttribute(oe, !0 === me ? "" : me)
                }))
            })
        },
        effect: function(F) {
            var d = F.state,
                B = {
                    popper: {
                        position: d.options.strategy,
                        left: "0",
                        top: "0",
                        margin: "0"
                    },
                    arrow: {
                        position: "absolute"
                    },
                    reference: {}
                };
            return Object.assign(d.elements.popper.style, B.popper), d.styles = B, d.elements.arrow && Object.assign(d.elements.arrow.style, B.arrow),
                function() {
                    Object.keys(d.elements).forEach(function(Y) {
                        var Ot = d.elements[Y],
                            It = d.attributes[Y] || {},
                            oe = Object.keys(d.styles.hasOwnProperty(Y) ? d.styles[Y] : B[Y]).reduce(function(me, Ie) {
                                return me[Ie] = "", me
                            }, {});
                        Rt(Ot) && Yi(Ot) && (Object.assign(Ot.style, oe), Object.keys(It).forEach(function(me) {
                            Ot.removeAttribute(me)
                        }))
                    })
                }
        },
        requires: ["computeStyles"]
    };

    function Ge(F) {
        return F.split("-")[0]
    }
    var De = Math.max,
        Cn = Math.min,
        zn = Math.round;

    function Wi() {
        var F = navigator.userAgentData;
        return null != F && F.brands && Array.isArray(F.brands) ? F.brands.map(function(d) {
            return d.brand + "/" + d.version
        }).join(" ") : navigator.userAgent
    }

    function Vi() {
        return !/^((?!chrome|android).)*safari/i.test(Wi())
    }

    function hr(F, d, B) {
        void 0 === d && (d = !1), void 0 === B && (B = !1);
        var Y = F.getBoundingClientRect(),
            Ot = 1,
            It = 1;
        d && Rt(F) && (Ot = F.offsetWidth > 0 && zn(Y.width) / F.offsetWidth || 1, It = F.offsetHeight > 0 && zn(Y.height) / F.offsetHeight || 1);
        var oe = (Et(F) ? ht(F) : window).visualViewport,
            me = !Vi() && B,
            Ie = (Y.left + (me && oe ? oe.offsetLeft : 0)) / Ot,
            We = (Y.top + (me && oe ? oe.offsetTop : 0)) / It,
            Re = Y.width / Ot,
            zt = Y.height / It;
        return {
            width: Re,
            height: zt,
            top: We,
            right: Ie + Re,
            bottom: We + zt,
            left: Ie,
            x: Ie,
            y: We
        }
    }

    function gs(F) {
        var d = hr(F),
            B = F.offsetWidth,
            Y = F.offsetHeight;
        return Math.abs(d.width - B) <= 1 && (B = d.width), Math.abs(d.height - Y) <= 1 && (Y = d.height), {
            x: F.offsetLeft,
            y: F.offsetTop,
            width: B,
            height: Y
        }
    }

    function jr(F, d) {
        var B = d.getRootNode && d.getRootNode();
        if (F.contains(d)) return !0;
        if (B && ge(B)) {
            var Y = d;
            do {
                if (Y && F.isSameNode(Y)) return !0;
                Y = Y.parentNode || Y.host
            } while (Y)
        }
        return !1
    }

    function Ir(F) {
        return ht(F).getComputedStyle(F)
    }

    function $s(F) {
        return ["table", "td", "th"].indexOf(Yi(F)) >= 0
    }

    function Zi(F) {
        return ((Et(F) ? F.ownerDocument : F.document) || window.document).documentElement
    }

    function Bs(F) {
        return "html" === Yi(F) ? F : F.assignedSlot || F.parentNode || (ge(F) ? F.host : null) || Zi(F)
    }

    function Di(F) {
        return Rt(F) && "fixed" !== Ir(F).position ? F.offsetParent : null
    }

    function ms(F) {
        for (var d = ht(F), B = Di(F); B && $s(B) && "static" === Ir(B).position;) B = Di(B);
        return B && ("html" === Yi(B) || "body" === Yi(B) && "static" === Ir(B).position) ? d : B || function(Y) {
            var Ot = /firefox/i.test(Wi());
            if (/Trident/i.test(Wi()) && Rt(Y) && "fixed" === Ir(Y).position) return null;
            var It = Bs(Y);
            for (ge(It) && (It = It.host); Rt(It) && ["html", "body"].indexOf(Yi(It)) < 0;) {
                var oe = Ir(It);
                if ("none" !== oe.transform || "none" !== oe.perspective || "paint" === oe.contain || -1 !== ["transform", "perspective"].indexOf(oe.willChange) || Ot && "filter" === oe.willChange || Ot && oe.filter && "none" !== oe.filter) return It;
                It = It.parentNode
            }
            return null
        }(F) || d
    }

    function Lr(F) {
        return ["top", "bottom"].indexOf(F) >= 0 ? "x" : "y"
    }

    function Ui(F, d, B) {
        return De(F, Cn(d, B))
    }

    function Fs(F) {
        return Object.assign({}, {
            top: 0,
            right: 0,
            bottom: 0,
            left: 0
        }, F)
    }

    function mo(F, d) {
        return d.reduce(function(B, Y) {
            return B[Y] = F, B
        }, {})
    }
    const ei = {
        name: "arrow",
        enabled: !0,
        phase: "main",
        fn: function(F) {
            var d, ii, Hn, B = F.state,
                Y = F.name,
                Ot = F.options,
                It = B.elements.arrow,
                oe = B.modifiersData.popperOffsets,
                me = Ge(B.placement),
                Ie = Lr(me),
                We = [ji, Ti].indexOf(me) >= 0 ? "height" : "width";
            if (It && oe) {
                var Re = (Hn = B, Fs("number" != typeof(ii = "function" == typeof(ii = Ot.padding) ? ii(Object.assign({}, Hn.rects, {
                        placement: Hn.placement
                    })) : ii) ? ii : mo(ii, fi))),
                    zt = gs(It),
                    Pt = "y" === Ie ? Mi : ji,
                    Nt = "y" === Ie ? zi : Ti,
                    ke = B.rects.reference[We] + B.rects.reference[Ie] - oe[Ie] - B.rects.popper[We],
                    ae = oe[Ie] - B.rects.reference[Ie],
                    we = ms(It),
                    Oe = we ? "y" === Ie ? we.clientHeight || 0 : we.clientWidth || 0 : 0,
                    Ve = Oe / 2 - zt[We] / 2 + (ke / 2 - ae / 2),
                    bn = Ui(Re[Pt], Ve, Oe - zt[We] - Re[Nt]);
                B.modifiersData[Y] = ((d = {})[Ie] = bn, d.centerOffset = bn - Ve, d)
            }
        },
        effect: function(F) {
            var d = F.state,
                B = F.options.element,
                Y = void 0 === B ? "[data-popper-arrow]" : B;
            null != Y && ("string" != typeof Y || (Y = d.elements.popper.querySelector(Y))) && jr(d.elements.popper, Y) && (d.elements.arrow = Y)
        },
        requires: ["popperOffsets"],
        requiresIfExists: ["preventOverflow"]
    };

    function $i(F) {
        return F.split("-")[1]
    }
    var bs = {
        top: "auto",
        right: "auto",
        bottom: "auto",
        left: "auto"
    };

    function Us(F) {
        var d, B = F.popper,
            Y = F.popperRect,
            Ot = F.placement,
            It = F.variation,
            oe = F.offsets,
            me = F.position,
            Ie = F.gpuAcceleration,
            We = F.adaptive,
            Re = F.roundOffsets,
            zt = F.isFixed,
            Pt = oe.x,
            Nt = void 0 === Pt ? 0 : Pt,
            ke = oe.y,
            ae = void 0 === ke ? 0 : ke,
            we = "function" == typeof Re ? Re({
                x: Nt,
                y: ae
            }) : {
                x: Nt,
                y: ae
            };
        Nt = we.x, ae = we.y;
        var Oe = oe.hasOwnProperty("x"),
            ln = oe.hasOwnProperty("y"),
            rn = ji,
            fn = Mi,
            Ve = window;
        if (We) {
            var bn = ms(B),
                Zn = "clientHeight",
                ii = "clientWidth";
            bn === ht(B) && "static" !== Ir(bn = Zi(B)).position && "absolute" === me && (Zn = "scrollHeight", ii = "scrollWidth"), (Ot === Mi || (Ot === ji || Ot === Ti) && It === Mr) && (fn = zi, ae -= (zt && bn === Ve && Ve.visualViewport ? Ve.visualViewport.height : bn[Zn]) - Y.height, ae *= Ie ? 1 : -1), Ot !== ji && (Ot !== Mi && Ot !== zi || It !== Mr) || (rn = Ti, Nt -= (zt && bn === Ve && Ve.visualViewport ? Ve.visualViewport.width : bn[ii]) - Y.width, Nt *= Ie ? 1 : -1)
        }
        var Hn, js, Qr, Ws, Qi, pi = Object.assign({
                position: me
            }, We && bs),
            Kr = !0 === Re ? (js = {
                x: Nt,
                y: ae
            }, Qr = ht(B), Ws = js.y, {
                x: zn(js.x * (Qi = Qr.devicePixelRatio || 1)) / Qi || 0,
                y: zn(Ws * Qi) / Qi || 0
            }) : {
                x: Nt,
                y: ae
            };
        return Nt = Kr.x, ae = Kr.y, Object.assign({}, pi, Ie ? ((Hn = {})[fn] = ln ? "0" : "", Hn[rn] = Oe ? "0" : "", Hn.transform = (Ve.devicePixelRatio || 1) <= 1 ? "translate(" + Nt + "px, " + ae + "px)" : "translate3d(" + Nt + "px, " + ae + "px, 0)", Hn) : ((d = {})[fn] = ln ? ae + "px" : "", d[rn] = Oe ? Nt + "px" : "", d.transform = "", d))
    }
    const vs = {
        name: "computeStyles",
        enabled: !0,
        phase: "beforeWrite",
        fn: function(F) {
            var d = F.state,
                B = F.options,
                Y = B.gpuAcceleration,
                Ot = void 0 === Y || Y,
                It = B.adaptive,
                oe = void 0 === It || It,
                me = B.roundOffsets,
                Ie = void 0 === me || me,
                We = {
                    placement: Ge(d.placement),
                    variation: $i(d.placement),
                    popper: d.elements.popper,
                    popperRect: d.rects.popper,
                    gpuAcceleration: Ot,
                    isFixed: "fixed" === d.options.strategy
                };
            null != d.modifiersData.popperOffsets && (d.styles.popper = Object.assign({}, d.styles.popper, Us(Object.assign({}, We, {
                offsets: d.modifiersData.popperOffsets,
                position: d.options.strategy,
                adaptive: oe,
                roundOffsets: Ie
            })))), null != d.modifiersData.arrow && (d.styles.arrow = Object.assign({}, d.styles.arrow, Us(Object.assign({}, We, {
                offsets: d.modifiersData.arrow,
                position: "absolute",
                adaptive: !1,
                roundOffsets: Ie
            })))), d.attributes.popper = Object.assign({}, d.attributes.popper, {
                "data-popper-placement": d.placement
            })
        },
        data: {}
    };
    var Es = {
        passive: !0
    };
    const Wr = {
        name: "eventListeners",
        enabled: !0,
        phase: "write",
        fn: function() {},
        effect: function(F) {
            var d = F.state,
                B = F.instance,
                Y = F.options,
                Ot = Y.scroll,
                It = void 0 === Ot || Ot,
                oe = Y.resize,
                me = void 0 === oe || oe,
                Ie = ht(d.elements.popper),
                We = [].concat(d.scrollParents.reference, d.scrollParents.popper);
            return It && We.forEach(function(Re) {
                    Re.addEventListener("scroll", B.update, Es)
                }), me && Ie.addEventListener("resize", B.update, Es),
                function() {
                    It && We.forEach(function(Re) {
                        Re.removeEventListener("scroll", B.update, Es)
                    }), me && Ie.removeEventListener("resize", B.update, Es)
                }
        },
        data: {}
    };
    var Rs = {
        left: "right",
        right: "left",
        bottom: "top",
        top: "bottom"
    };

    function Vr(F) {
        return F.replace(/left|right|bottom|top/g, function(d) {
            return Rs[d]
        })
    }
    var Xs = {
        start: "end",
        end: "start"
    };

    function qs(F) {
        return F.replace(/start|end/g, function(d) {
            return Xs[d]
        })
    }

    function fr(F) {
        var d = ht(F);
        return {
            scrollLeft: d.pageXOffset,
            scrollTop: d.pageYOffset
        }
    }

    function so(F) {
        return hr(Zi(F)).left + fr(F).scrollLeft
    }

    function Ur(F) {
        var d = Ir(F);
        return /auto|scroll|overlay|hidden/.test(d.overflow + d.overflowY + d.overflowX)
    }

    function Ji(F) {
        return ["html", "body", "#document"].indexOf(Yi(F)) >= 0 ? F.ownerDocument.body : Rt(F) && Ur(F) ? F : Ji(Bs(F))
    }

    function ss(F, d) {
        var B;
        void 0 === d && (d = []);
        var Y = Ji(F),
            Ot = Y === (null == (B = F.ownerDocument) ? void 0 : B.body),
            It = ht(Y),
            oe = Ot ? [It].concat(It.visualViewport || [], Ur(Y) ? Y : []) : Y,
            me = d.concat(oe);
        return Ot ? me : me.concat(ss(Bs(oe)))
    }

    function os(F) {
        return Object.assign({}, F, {
            left: F.x,
            top: F.y,
            right: F.x + F.width,
            bottom: F.y + F.height
        })
    }

    function Gs(F, d, B) {
        return d === cr ? os(function(Y, Ot) {
            var It = ht(Y),
                oe = Zi(Y),
                me = It.visualViewport,
                Ie = oe.clientWidth,
                We = oe.clientHeight,
                Re = 0,
                zt = 0;
            if (me) {
                Ie = me.width, We = me.height;
                var Pt = Vi();
                (Pt || !Pt && "fixed" === Ot) && (Re = me.offsetLeft, zt = me.offsetTop)
            }
            return {
                width: Ie,
                height: We,
                x: Re + so(Y),
                y: zt
            }
        }(F, B)) : Et(d) ? ((It = hr(Y = d, !1, "fixed" === B)).top = It.top + Y.clientTop, It.left = It.left + Y.clientLeft, It.bottom = It.top + Y.clientHeight, It.right = It.left + Y.clientWidth, It.width = Y.clientWidth, It.height = Y.clientHeight, It.x = It.left, It.y = It.top, It) : os(function(Y) {
            var Ot, It = Zi(Y),
                oe = fr(Y),
                me = null == (Ot = Y.ownerDocument) ? void 0 : Ot.body,
                Ie = De(It.scrollWidth, It.clientWidth, me ? me.scrollWidth : 0, me ? me.clientWidth : 0),
                We = De(It.scrollHeight, It.clientHeight, me ? me.scrollHeight : 0, me ? me.clientHeight : 0),
                Re = -oe.scrollLeft + so(Y),
                zt = -oe.scrollTop;
            return "rtl" === Ir(me || It).direction && (Re += De(It.clientWidth, me ? me.clientWidth : 0) - Ie), {
                width: Ie,
                height: We,
                x: Re,
                y: zt
            }
        }(Zi(F)));
        var Y, It
    }

    function f(F) {
        var d, B = F.reference,
            Y = F.element,
            Ot = F.placement,
            It = Ot ? Ge(Ot) : null,
            oe = Ot ? $i(Ot) : null,
            me = B.x + B.width / 2 - Y.width / 2,
            Ie = B.y + B.height / 2 - Y.height / 2;
        switch (It) {
            case Mi:
                d = {
                    x: me,
                    y: B.y - Y.height
                };
                break;
            case zi:
                d = {
                    x: me,
                    y: B.y + B.height
                };
                break;
            case Ti:
                d = {
                    x: B.x + B.width,
                    y: Ie
                };
                break;
            case ji:
                d = {
                    x: B.x - Y.width,
                    y: Ie
                };
                break;
            default:
                d = {
                    x: B.x,
                    y: B.y
                }
        }
        var We = It ? Lr(It) : null;
        if (null != We) {
            var Re = "y" === We ? "height" : "width";
            switch (oe) {
                case Sr:
                    d[We] = d[We] - (B[Re] / 2 - Y[Re] / 2);
                    break;
                case Mr:
                    d[We] = d[We] + (B[Re] / 2 - Y[Re] / 2)
            }
        }
        return d
    }

    function g(F, d) {
        void 0 === d && (d = {});
        var Qr, Os, Ws, Qi, wn, ts, xr, Ps, io, Ar, Y = d.placement,
            Ot = void 0 === Y ? F.placement : Y,
            It = d.strategy,
            oe = void 0 === It ? F.strategy : It,
            me = d.boundary,
            Ie = void 0 === me ? ds : me,
            We = d.rootBoundary,
            Re = void 0 === We ? cr : We,
            zt = d.elementContext,
            Pt = void 0 === zt ? ps : zt,
            Nt = d.altBoundary,
            ke = void 0 !== Nt && Nt,
            ae = d.padding,
            we = void 0 === ae ? 0 : ae,
            Oe = Fs("number" != typeof we ? we : mo(we, fi)),
            rn = F.rects.popper,
            fn = F.elements[ke ? Pt === ps ? ro : ps : Pt],
            Ve = (Qr = Et(fn) ? fn : fn.contextElement || Zi(F.elements.popper), Ws = Re, Qi = oe, Ps = "clippingParents" === (Os = Ie) ? (ts = ss(Bs(wn = Qr)), Et(xr = ["absolute", "fixed"].indexOf(Ir(wn).position) >= 0 && Rt(wn) ? ms(wn) : wn) ? ts.filter(function(ys) {
                return Et(ys) && jr(ys, xr) && "body" !== Yi(ys)
            }) : []) : [].concat(Os), Ar = (io = [].concat(Ps, [Ws])).reduce(function(wn, ts) {
                var xr = Gs(Qr, ts, Qi);
                return wn.top = De(xr.top, wn.top), wn.right = Cn(xr.right, wn.right), wn.bottom = Cn(xr.bottom, wn.bottom), wn.left = De(xr.left, wn.left), wn
            }, Gs(Qr, io[0], Qi)), Ar.width = Ar.right - Ar.left, Ar.height = Ar.bottom - Ar.top, Ar.x = Ar.left, Ar.y = Ar.top, Ar),
            bn = hr(F.elements.reference),
            Zn = f({
                reference: bn,
                element: rn,
                placement: Ot
            }),
            ii = os(Object.assign({}, rn, Zn)),
            Hn = Pt === ps ? ii : bn,
            pi = {
                top: Ve.top - Hn.top + Oe.top,
                bottom: Hn.bottom - Ve.bottom + Oe.bottom,
                left: Ve.left - Hn.left + Oe.left,
                right: Hn.right - Ve.right + Oe.right
            },
            Kr = F.modifiersData.offset;
        if (Pt === ps && Kr) {
            var js = Kr[Ot];
            Object.keys(pi).forEach(function(Qr) {
                var Os = [Ti, zi].indexOf(Qr) >= 0 ? 1 : -1,
                    Ws = [Mi, zi].indexOf(Qr) >= 0 ? "y" : "x";
                pi[Qr] += js[Ws] * Os
            })
        }
        return pi
    }
    const E = {
        name: "flip",
        enabled: !0,
        phase: "main",
        fn: function(F) {
            var d = F.state,
                B = F.options,
                Y = F.name;
            if (!d.modifiersData[Y]._skip) {
                for (var Ot = B.mainAxis, It = void 0 === Ot || Ot, oe = B.altAxis, me = void 0 === oe || oe, Ie = B.fallbackPlacements, We = B.padding, Re = B.boundary, zt = B.rootBoundary, Pt = B.altBoundary, Nt = B.flipVariations, ke = void 0 === Nt || Nt, ae = B.allowedAutoPlacements, we = d.options.placement, Oe = Ge(we), ln = Ie || (Oe !== we && ke ? function(wn) {
                        if (Ge(wn) === nr) return [];
                        var ts = Vr(wn);
                        return [qs(wn), ts, qs(ts)]
                    }(we) : [Vr(we)]), rn = [we].concat(ln).reduce(function(wn, ts) {
                        return wn.concat(Ge(ts) === nr ? function k(F, d) {
                            void 0 === d && (d = {});
                            var Ot = d.boundary,
                                It = d.rootBoundary,
                                oe = d.padding,
                                me = d.flipVariations,
                                Ie = d.allowedAutoPlacements,
                                We = void 0 === Ie ? Cs : Ie,
                                Re = $i(d.placement),
                                zt = Re ? me ? is : is.filter(function(ke) {
                                    return $i(ke) === Re
                                }) : fi,
                                Pt = zt.filter(function(ke) {
                                    return We.indexOf(ke) >= 0
                                });
                            0 === Pt.length && (Pt = zt);
                            var Nt = Pt.reduce(function(ke, ae) {
                                return ke[ae] = g(F, {
                                    placement: ae,
                                    boundary: Ot,
                                    rootBoundary: It,
                                    padding: oe
                                })[Ge(ae)], ke
                            }, {});
                            return Object.keys(Nt).sort(function(ke, ae) {
                                return Nt[ke] - Nt[ae]
                            })
                        }(d, {
                            placement: ts,
                            boundary: Re,
                            rootBoundary: zt,
                            padding: We,
                            flipVariations: ke,
                            allowedAutoPlacements: ae
                        }) : ts)
                    }, []), fn = d.rects.reference, Ve = d.rects.popper, bn = new Map, Zn = !0, ii = rn[0], Hn = 0; Hn < rn.length; Hn++) {
                    var pi = rn[Hn],
                        Kr = Ge(pi),
                        js = $i(pi) === Sr,
                        Qr = [Mi, zi].indexOf(Kr) >= 0,
                        Os = Qr ? "width" : "height",
                        Ws = g(d, {
                            placement: pi,
                            boundary: Re,
                            rootBoundary: zt,
                            altBoundary: Pt,
                            padding: We
                        }),
                        Qi = Qr ? js ? Ti : ji : js ? zi : Mi;
                    fn[Os] > Ve[Os] && (Qi = Vr(Qi));
                    var Ps = Vr(Qi),
                        io = [];
                    if (It && io.push(Ws[Kr] <= 0), me && io.push(Ws[Qi] <= 0, Ws[Ps] <= 0), io.every(function(wn) {
                            return wn
                        })) {
                        ii = pi, Zn = !1;
                        break
                    }
                    bn.set(pi, io)
                }
                if (Zn)
                    for (var Oo = function(wn) {
                            var ts = rn.find(function(xr) {
                                var ys = bn.get(xr);
                                if (ys) return ys.slice(0, wn).every(function(Po) {
                                    return Po
                                })
                            });
                            if (ts) return ii = ts, "break"
                        }, Ar = ke ? 3 : 1; Ar > 0 && "break" !== Oo(Ar); Ar--);
                d.placement !== ii && (d.modifiersData[Y]._skip = !0, d.placement = ii, d.reset = !0)
            }
        },
        requiresIfExists: ["offset"],
        data: {
            _skip: !1
        }
    };

    function L(F, d, B) {
        return void 0 === B && (B = {
            x: 0,
            y: 0
        }), {
            top: F.top - d.height - B.y,
            right: F.right - d.width + B.x,
            bottom: F.bottom - d.height + B.y,
            left: F.left - d.width - B.x
        }
    }

    function W(F) {
        return [Mi, Ti, zi, ji].some(function(d) {
            return F[d] >= 0
        })
    }
    const Q = {
            name: "hide",
            enabled: !0,
            phase: "main",
            requiresIfExists: ["preventOverflow"],
            fn: function(F) {
                var d = F.state,
                    B = F.name,
                    Y = d.rects.reference,
                    Ot = d.rects.popper,
                    It = d.modifiersData.preventOverflow,
                    oe = g(d, {
                        elementContext: "reference"
                    }),
                    me = g(d, {
                        altBoundary: !0
                    }),
                    Ie = L(oe, Y),
                    We = L(me, Ot, It),
                    Re = W(Ie),
                    zt = W(We);
                d.modifiersData[B] = {
                    referenceClippingOffsets: Ie,
                    popperEscapeOffsets: We,
                    isReferenceHidden: Re,
                    hasPopperEscaped: zt
                }, d.attributes.popper = Object.assign({}, d.attributes.popper, {
                    "data-popper-reference-hidden": Re,
                    "data-popper-escaped": zt
                })
            }
        },
        yt = {
            name: "offset",
            enabled: !0,
            phase: "main",
            requires: ["popperOffsets"],
            fn: function(F) {
                var d = F.state,
                    Y = F.name,
                    Ot = F.options.offset,
                    It = void 0 === Ot ? [0, 0] : Ot,
                    oe = Cs.reduce(function(Re, zt) {
                        return Re[zt] = (Nt = d.rects, ke = It, ae = Ge(Pt = zt), we = [ji, Mi].indexOf(ae) >= 0 ? -1 : 1, ln = (ln = (Oe = "function" == typeof ke ? ke(Object.assign({}, Nt, {
                            placement: Pt
                        })) : ke)[0]) || 0, rn = ((rn = Oe[1]) || 0) * we, [ji, Ti].indexOf(ae) >= 0 ? {
                            x: rn,
                            y: ln
                        } : {
                            x: ln,
                            y: rn
                        }), Re;
                        var Pt, Nt, ke, ae, we, Oe, ln, rn
                    }, {}),
                    me = oe[d.placement],
                    We = me.y;
                null != d.modifiersData.popperOffsets && (d.modifiersData.popperOffsets.x += me.x, d.modifiersData.popperOffsets.y += We), d.modifiersData[Y] = oe
            }
        },
        vt = {
            name: "popperOffsets",
            enabled: !0,
            phase: "read",
            fn: function(F) {
                var d = F.state;
                d.modifiersData[F.name] = f({
                    reference: d.rects.reference,
                    element: d.rects.popper,
                    placement: d.placement
                })
            },
            data: {}
        },
        Lt = {
            name: "preventOverflow",
            enabled: !0,
            phase: "main",
            fn: function(F) {
                var Io, ha, d = F.state,
                    B = F.options,
                    Y = F.name,
                    Ot = B.mainAxis,
                    It = void 0 === Ot || Ot,
                    oe = B.altAxis,
                    me = void 0 !== oe && oe,
                    Pt = B.tether,
                    Nt = void 0 === Pt || Pt,
                    ke = B.tetherOffset,
                    ae = void 0 === ke ? 0 : ke,
                    we = g(d, {
                        boundary: B.boundary,
                        rootBoundary: B.rootBoundary,
                        padding: B.padding,
                        altBoundary: B.altBoundary
                    }),
                    Oe = Ge(d.placement),
                    ln = $i(d.placement),
                    rn = !ln,
                    fn = Lr(Oe),
                    Ve = "x" === fn ? "y" : "x",
                    bn = d.modifiersData.popperOffsets,
                    Zn = d.rects.reference,
                    ii = d.rects.popper,
                    Hn = "function" == typeof ae ? ae(Object.assign({}, d.rects, {
                        placement: d.placement
                    })) : ae,
                    pi = "number" == typeof Hn ? {
                        mainAxis: Hn,
                        altAxis: Hn
                    } : Object.assign({
                        mainAxis: 0,
                        altAxis: 0
                    }, Hn),
                    Kr = d.modifiersData.offset ? d.modifiersData.offset[d.placement] : null,
                    js = {
                        x: 0,
                        y: 0
                    };
                if (bn) {
                    if (It) {
                        var Qr, Os = "y" === fn ? Mi : ji,
                            Ws = "y" === fn ? zi : Ti,
                            Qi = "y" === fn ? "height" : "width",
                            Ps = bn[fn],
                            io = Ps + we[Os],
                            Oo = Ps - we[Ws],
                            Ar = Nt ? -ii[Qi] / 2 : 0,
                            wn = ln === Sr ? Zn[Qi] : ii[Qi],
                            ts = ln === Sr ? -ii[Qi] : -Zn[Qi],
                            xr = d.elements.arrow,
                            ys = Nt && xr ? gs(xr) : {
                                width: 0,
                                height: 0
                            },
                            Po = d.modifiersData["arrow#persistent"] ? d.modifiersData["arrow#persistent"].padding : {
                                top: 0,
                                right: 0,
                                bottom: 0,
                                left: 0
                            },
                            sa = Po[Os],
                            ma = Po[Ws],
                            Jo = Ui(0, Zn[Qi], ys[Qi]),
                            Ma = rn ? Zn[Qi] / 2 - Ar - Jo - sa - pi.mainAxis : wn - Jo - sa - pi.mainAxis,
                            Ia = rn ? -Zn[Qi] / 2 + Ar + Jo + ma + pi.mainAxis : ts + Jo + ma + pi.mainAxis,
                            oa = d.elements.arrow && ms(d.elements.arrow),
                            aa = null != (Qr = Kr ? .[fn]) ? Qr : 0,
                            la = Ps + Ia - aa,
                            va = Ui(Nt ? Cn(io, Ps + Ma - aa - (oa ? "y" === fn ? oa.clientTop || 0 : oa.clientLeft || 0 : 0)) : io, Ps, Nt ? De(Oo, la) : Oo);
                        bn[fn] = va, js[fn] = va - Ps
                    }
                    if (me) {
                        var _a, Bo = bn[Ve],
                            jo = "y" === Ve ? "height" : "width",
                            ya = Bo + we["x" === fn ? Mi : ji],
                            Wo = Bo - we["x" === fn ? zi : Ti],
                            Mo = -1 !== [Mi, ji].indexOf(Oe),
                            wa = null != (_a = Kr ? .[Ve]) ? _a : 0,
                            Eo = Mo ? ya : Bo - Zn[jo] - ii[jo] - wa + pi.altAxis,
                            Vo = Mo ? Bo + Zn[jo] + ii[jo] - wa - pi.altAxis : Wo,
                            Uo = Nt && Mo ? (ha = Ui(Eo, Bo, Io = Vo)) > Io ? Io : ha : Ui(Nt ? Eo : ya, Bo, Nt ? Vo : Wo);
                        bn[Ve] = Uo, js[Ve] = Uo - Bo
                    }
                    d.modifiersData[Y] = js
                }
            },
            requiresIfExists: ["offset"]
        };

    function ee(F, d, B) {
        void 0 === B && (B = !1);
        var Y, Ot, zt, Pt, Nt, ke, It = Rt(d),
            oe = Rt(d) && (Pt = (zt = d).getBoundingClientRect(), Nt = zn(Pt.width) / zt.offsetWidth || 1, ke = zn(Pt.height) / zt.offsetHeight || 1, 1 !== Nt || 1 !== ke),
            me = Zi(d),
            Ie = hr(F, oe, B),
            We = {
                scrollLeft: 0,
                scrollTop: 0
            },
            Re = {
                x: 0,
                y: 0
            };
        return (It || !It && !B) && (("body" !== Yi(d) || Ur(me)) && (We = (Y = d) !== ht(Y) && Rt(Y) ? {
            scrollLeft: (Ot = Y).scrollLeft,
            scrollTop: Ot.scrollTop
        } : fr(Y)), Rt(d) ? ((Re = hr(d, !0)).x += d.clientLeft, Re.y += d.clientTop) : me && (Re.x = so(me))), {
            x: Ie.left + We.scrollLeft - Re.x,
            y: Ie.top + We.scrollTop - Re.y,
            width: Ie.width,
            height: Ie.height
        }
    }

    function de(F) {
        var d = new Map,
            B = new Set,
            Y = [];

        function Ot(It) {
            B.add(It.name), [].concat(It.requires || [], It.requiresIfExists || []).forEach(function(oe) {
                if (!B.has(oe)) {
                    var me = d.get(oe);
                    me && Ot(me)
                }
            }), Y.push(It)
        }
        return F.forEach(function(It) {
            d.set(It.name, It)
        }), F.forEach(function(It) {
            B.has(It.name) || Ot(It)
        }), Y
    }
    var Xt = {
        placement: "bottom",
        modifiers: [],
        strategy: "absolute"
    };

    function pe() {
        for (var F = arguments.length, d = new Array(F), B = 0; B < F; B++) d[B] = arguments[B];
        return !d.some(function(Y) {
            return !(Y && "function" == typeof Y.getBoundingClientRect)
        })
    }

    function Ye(F) {
        void 0 === F && (F = {});
        var B = F.defaultModifiers,
            Y = void 0 === B ? [] : B,
            Ot = F.defaultOptions,
            It = void 0 === Ot ? Xt : Ot;
        return function(oe, me, Ie) {
            void 0 === Ie && (Ie = It);
            var We, Re, zt = {
                    placement: "bottom",
                    orderedModifiers: [],
                    options: Object.assign({}, Xt, It),
                    modifiersData: {},
                    elements: {
                        reference: oe,
                        popper: me
                    },
                    attributes: {},
                    styles: {}
                },
                Pt = [],
                Nt = !1,
                ke = {
                    state: zt,
                    setOptions: function(we) {
                        var Oe = "function" == typeof we ? we(zt.options) : we;
                        ae(), zt.options = Object.assign({}, It, zt.options, Oe), zt.scrollParents = {
                            reference: Et(oe) ? ss(oe) : oe.contextElement ? ss(oe.contextElement) : [],
                            popper: ss(me)
                        };
                        var ln, rn, Ve, bn, fn = (ln = [].concat(Y, zt.options.modifiers), rn = ln.reduce(function(Ve, bn) {
                            var Zn = Ve[bn.name];
                            return Ve[bn.name] = Zn ? Object.assign({}, Zn, bn, {
                                options: Object.assign({}, Zn.options, bn.options),
                                data: Object.assign({}, Zn.data, bn.data)
                            }) : bn, Ve
                        }, {}), Ve = Object.keys(rn).map(function(Ve) {
                            return rn[Ve]
                        }), bn = de(Ve), zr.reduce(function(Zn, ii) {
                            return Zn.concat(bn.filter(function(Hn) {
                                return Hn.phase === ii
                            }))
                        }, []));
                        return zt.orderedModifiers = fn.filter(function(Ve) {
                            return Ve.enabled
                        }), zt.orderedModifiers.forEach(function(Ve) {
                            var Zn = Ve.options,
                                Hn = Ve.effect;
                            if ("function" == typeof Hn) {
                                var pi = Hn({
                                    state: zt,
                                    name: Ve.name,
                                    instance: ke,
                                    options: void 0 === Zn ? {} : Zn
                                });
                                Pt.push(pi || function() {})
                            }
                        }), ke.update()
                    },
                    forceUpdate: function() {
                        if (!Nt) {
                            var we = zt.elements,
                                Oe = we.reference,
                                ln = we.popper;
                            if (pe(Oe, ln)) {
                                zt.rects = {
                                    reference: ee(Oe, ms(ln), "fixed" === zt.options.strategy),
                                    popper: gs(ln)
                                }, zt.reset = !1, zt.placement = zt.options.placement, zt.orderedModifiers.forEach(function(Hn) {
                                    return zt.modifiersData[Hn.name] = Object.assign({}, Hn.data)
                                });
                                for (var rn = 0; rn < zt.orderedModifiers.length; rn++)
                                    if (!0 !== zt.reset) {
                                        var fn = zt.orderedModifiers[rn],
                                            Ve = fn.fn,
                                            bn = fn.options;
                                        "function" == typeof Ve && (zt = Ve({
                                            state: zt,
                                            options: void 0 === bn ? {} : bn,
                                            name: fn.name,
                                            instance: ke
                                        }) || zt)
                                    } else zt.reset = !1, rn = -1
                            }
                        }
                    },
                    update: (We = function() {
                        return new Promise(function(we) {
                            ke.forceUpdate(), we(zt)
                        })
                    }, function() {
                        return Re || (Re = new Promise(function(we) {
                            Promise.resolve().then(function() {
                                Re = void 0, we(We())
                            })
                        })), Re
                    }),
                    destroy: function() {
                        ae(), Nt = !0
                    }
                };
            if (!pe(oe, me)) return ke;

            function ae() {
                Pt.forEach(function(we) {
                    return we()
                }), Pt = []
            }
            return ke.setOptions(Ie).then(function(we) {
                !Nt && Ie.onFirstUpdate && Ie.onFirstUpdate(we)
            }), ke
        }
    }
    var hn = Ye(),
        on = Ye({
            defaultModifiers: [Wr, vt, vs, xe]
        }),
        ni = Ye({
            defaultModifiers: [Wr, vt, vs, xe, yt, E, Lt, ei, Q]
        });
    const vi = Object.freeze(Object.defineProperty({
            __proto__: null,
            afterMain: Hr,
            afterRead: Ii,
            afterWrite: ks,
            applyStyles: xe,
            arrow: ei,
            auto: nr,
            basePlacements: fi,
            beforeMain: kr,
            beforeRead: rs,
            beforeWrite: Ls,
            bottom: zi,
            clippingParents: ds,
            computeStyles: vs,
            createPopper: ni,
            createPopperBase: hn,
            createPopperLite: on,
            detectOverflow: g,
            end: Mr,
            eventListeners: Wr,
            flip: E,
            hide: Q,
            left: ji,
            main: "main",
            modifierPhases: zr,
            offset: yt,
            placements: Cs,
            popper: ps,
            popperGenerator: Ye,
            popperOffsets: vt,
            preventOverflow: Lt,
            read: "read",
            reference: ro,
            right: Ti,
            start: Sr,
            top: Mi,
            variationPlacements: is,
            viewport: cr,
            write: "write"
        }, Symbol.toStringTag, {
            value: "Module"
        })),
        gr = "dropdown",
        Xi = ".bs.dropdown",
        Dn = ".data-api",
        Ts = "ArrowUp",
        Mn = "ArrowDown",
        Kn = `hide${Xi}`,
        Ys = `hidden${Xi}`,
        Zs = `show${Xi}`,
        ur = `shown${Xi}`,
        $r = `click${Xi}${Dn}`,
        mr = `keydown${Xi}${Dn}`,
        br = `keyup${Xi}${Dn}`,
        qi = "show",
        Fi = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',
        ui = `${Fi}.${qi}`,
        _i = ".dropdown-menu",
        rr = nt() ? "top-end" : "top-start",
        vr = nt() ? "top-start" : "top-end",
        sr = nt() ? "bottom-end" : "bottom-start",
        en = nt() ? "bottom-start" : "bottom-end",
        xi = nt() ? "left-start" : "right-start",
        Oi = nt() ? "right-start" : "left-start",
        qn = {
            autoClose: !0,
            boundary: "clippingParents",
            display: "dynamic",
            offset: [0, 2],
            popperConfig: null,
            reference: "toggle"
        },
        Br = {
            autoClose: "(boolean|string)",
            boundary: "(string|element)",
            display: "string",
            offset: "(array|string|function)",
            popperConfig: "(null|object|function)",
            reference: "(string|element|object)"
        };
    class Qn extends Mt {
        constructor(d, B) {
            super(d, B), this._popper = null, this._parent = this._element.parentNode, this._menu = xt.next(this._element, _i)[0] || xt.prev(this._element, _i)[0] || xt.findOne(_i, this._parent), this._inNavbar = this._detectNavbar()
        }
        static get Default() {
            return qn
        }
        static get DefaultType() {
            return Br
        }
        static get NAME() {
            return gr
        }
        toggle() {
            return this._isShown() ? this.hide() : this.show()
        }
        show() {
            if (J(this._element) || this._isShown()) return;
            const d = {
                relatedTarget: this._element
            };
            if (!V.trigger(this._element, Zs, d).defaultPrevented) {
                if (this._createPopper(), "ontouchstart" in document.documentElement && !this._parent.closest(".navbar-nav"))
                    for (const B of [].concat(...document.body.children)) V.on(B, "mouseover", Z);
                this._element.focus(), this._element.setAttribute("aria-expanded", !0), this._menu.classList.add(qi), this._element.classList.add(qi), V.trigger(this._element, ur, d)
            }
        }
        hide() {
            !J(this._element) && this._isShown() && this._completeHide({
                relatedTarget: this._element
            })
        }
        dispose() {
            this._popper && this._popper.destroy(), super.dispose()
        }
        update() {
            this._inNavbar = this._detectNavbar(), this._popper && this._popper.update()
        }
        _completeHide(d) {
            if (!V.trigger(this._element, Kn, d).defaultPrevented) {
                if ("ontouchstart" in document.documentElement)
                    for (const B of [].concat(...document.body.children)) V.off(B, "mouseover", Z);
                this._popper && this._popper.destroy(), this._menu.classList.remove(qi), this._element.classList.remove(qi), this._element.setAttribute("aria-expanded", "false"), X.removeDataAttribute(this._menu, "popper"), V.trigger(this._element, Ys, d)
            }
        }
        _getConfig(d) {
            if ("object" == typeof(d = super._getConfig(d)).reference && !P(d.reference) && "function" != typeof d.reference.getBoundingClientRect) throw new TypeError(`${gr.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
            return d
        }
        _createPopper() {
            if (void 0 === vi) throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)");
            let d = this._element;
            "parent" === this._config.reference ? d = this._parent : P(this._config.reference) ? d = K(this._config.reference) : "object" == typeof this._config.reference && (d = this._config.reference);
            const B = this._getPopperConfig();
            this._popper = ni(d, this._menu, B)
        }
        _isShown() {
            return this._menu.classList.contains(qi)
        }
        _getPlacement() {
            const d = this._parent;
            if (d.classList.contains("dropend")) return xi;
            if (d.classList.contains("dropstart")) return Oi;
            if (d.classList.contains("dropup-center")) return "top";
            if (d.classList.contains("dropdown-center")) return "bottom";
            const B = "end" === getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();
            return d.classList.contains("dropup") ? B ? vr : rr : B ? en : sr
        }
        _detectNavbar() {
            return null !== this._element.closest(".navbar")
        }
        _getOffset() {
            const {
                offset: d
            } = this._config;
            return "string" == typeof d ? d.split(",").map(B => Number.parseInt(B, 10)) : "function" == typeof d ? B => d(B, this._element) : d
        }
        _getPopperConfig() {
            const d = {
                placement: this._getPlacement(),
                modifiers: [{
                    name: "preventOverflow",
                    options: {
                        boundary: this._config.boundary
                    }
                }, {
                    name: "offset",
                    options: {
                        offset: this._getOffset()
                    }
                }]
            };
            return (this._inNavbar || "static" === this._config.display) && (X.setDataAttribute(this._menu, "popper", "static"), d.modifiers = [{
                name: "applyStyles",
                enabled: !1
            }]), { ...d,
                ...M(this._config.popperConfig, [void 0, d])
            }
        }
        _selectMenuItem({
            key: d,
            target: B
        }) {
            const Y = xt.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)", this._menu).filter(Ot => O(Ot));
            Y.length && et(Y, B, d === Mn, !Y.includes(B)).focus()
        }
        static jQueryInterface(d) {
            return this.each(function() {
                const B = Qn.getOrCreateInstance(this, d);
                if ("string" == typeof d) {
                    if (void 0 === B[d]) throw new TypeError(`No method named "${d}"`);
                    B[d]()
                }
            })
        }
        static clearMenus(d) {
            if (2 === d.button || "keyup" === d.type && "Tab" !== d.key) return;
            const B = xt.find(ui);
            for (const Y of B) {
                const Ot = Qn.getInstance(Y);
                if (!Ot || !1 === Ot._config.autoClose) continue;
                const It = d.composedPath(),
                    oe = It.includes(Ot._menu);
                if (It.includes(Ot._element) || "inside" === Ot._config.autoClose && !oe || "outside" === Ot._config.autoClose && oe || Ot._menu.contains(d.target) && ("keyup" === d.type && "Tab" === d.key || /input|select|option|textarea|form/i.test(d.target.tagName))) continue;
                const me = {
                    relatedTarget: Ot._element
                };
                "click" === d.type && (me.clickEvent = d), Ot._completeHide(me)
            }
        }
        static dataApiKeydownHandler(d) {
            const B = /input|textarea/i.test(d.target.tagName),
                Y = "Escape" === d.key,
                Ot = [Ts, Mn].includes(d.key);
            if (!Ot && !Y || B && !Y) return;
            d.preventDefault();
            const It = this.matches(Fi) ? this : xt.prev(this, Fi)[0] || xt.next(this, Fi)[0] || xt.findOne(Fi, d.delegateTarget.parentNode),
                oe = Qn.getOrCreateInstance(It);
            if (Ot) return d.stopPropagation(), oe.show(), void oe._selectMenuItem(d);
            oe._isShown() && (d.stopPropagation(), oe.hide(), It.focus())
        }
    }
    V.on(document, mr, Fi, Qn.dataApiKeydownHandler), V.on(document, mr, _i, Qn.dataApiKeydownHandler), V.on(document, $r, Qn.clearMenus), V.on(document, br, Qn.clearMenus), V.on(document, $r, Fi, function(F) {
        F.preventDefault(), Qn.getOrCreateInstance(this).toggle()
    }), lt(Qn);
    const Ci = "backdrop",
        as = `mousedown.bs.${Ci}`,
        ls = {
            className: "modal-backdrop",
            clickCallback: null,
            isAnimated: !1,
            isVisible: !0,
            rootElement: "body"
        },
        Xr = {
            className: "string",
            clickCallback: "(function|null)",
            isAnimated: "boolean",
            isVisible: "boolean",
            rootElement: "(element|string)"
        };
    class qr extends _t {
        constructor(d) {
            super(), this._config = this._getConfig(d), this._isAppended = !1, this._element = null
        }
        static get Default() {
            return ls
        }
        static get DefaultType() {
            return Xr
        }
        static get NAME() {
            return Ci
        }
        show(d) {
            if (!this._config.isVisible) return void M(d);
            this._append();
            this._getElement().classList.add("show"), this._emulateAnimation(() => {
                M(d)
            })
        }
        hide(d) {
            this._config.isVisible ? (this._getElement().classList.remove("show"), this._emulateAnimation(() => {
                this.dispose(), M(d)
            })) : M(d)
        }
        dispose() {
            this._isAppended && (V.off(this._element, as), this._element.remove(), this._isAppended = !1)
        }
        _getElement() {
            if (!this._element) {
                const d = document.createElement("div");
                d.className = this._config.className, this._config.isAnimated && d.classList.add("fade"), this._element = d
            }
            return this._element
        }
        _configAfterMerge(d) {
            return d.rootElement = K(d.rootElement), d
        }
        _append() {
            if (this._isAppended) return;
            const d = this._getElement();
            this._config.rootElement.append(d), V.on(d, as, () => {
                M(this._config.clickCallback)
            }), this._isAppended = !0
        }
        _emulateAnimation(d) {
            G(d, this._getElement(), this._config.isAnimated)
        }
    }
    const _r = ".bs.focustrap",
        Gr = `focusin${_r}`,
        Js = `keydown.tab${_r}`,
        As = "backward",
        oo = {
            autofocus: !0,
            trapElement: null
        },
        ao = {
            autofocus: "boolean",
            trapElement: "element"
        };
    class lo extends _t {
        constructor(d) {
            super(), this._config = this._getConfig(d), this._isActive = !1, this._lastTabNavDirection = null
        }
        static get Default() {
            return oo
        }
        static get DefaultType() {
            return ao
        }
        static get NAME() {
            return "focustrap"
        }
        activate() {
            this._isActive || (this._config.autofocus && this._config.trapElement.focus(), V.off(document, _r), V.on(document, Gr, d => this._handleFocusin(d)), V.on(document, Js, d => this._handleKeydown(d)), this._isActive = !0)
        }
        deactivate() {
            this._isActive && (this._isActive = !1, V.off(document, _r))
        }
        _handleFocusin(d) {
            const {
                trapElement: B
            } = this._config;
            if (d.target === document || d.target === B || B.contains(d.target)) return;
            const Y = xt.focusableChildren(B);
            0 === Y.length ? B.focus() : this._lastTabNavDirection === As ? Y[Y.length - 1].focus() : Y[0].focus()
        }
        _handleKeydown(d) {
            "Tab" === d.key && (this._lastTabNavDirection = d.shiftKey ? As : "forward")
        }
    }
    const Ks = ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",
        ct = ".sticky-top",
        At = "padding-right",
        Zt = "margin-right";
    class se {
        constructor() {
            this._element = document.body
        }
        getWidth() {
            const d = document.documentElement.clientWidth;
            return Math.abs(window.innerWidth - d)
        }
        hide() {
            const d = this.getWidth();
            this._disableOverFlow(), this._setElementAttributes(this._element, At, B => B + d), this._setElementAttributes(Ks, At, B => B + d), this._setElementAttributes(ct, Zt, B => B - d)
        }
        reset() {
            this._resetElementAttributes(this._element, "overflow"), this._resetElementAttributes(this._element, At), this._resetElementAttributes(Ks, At), this._resetElementAttributes(ct, Zt)
        }
        isOverflowing() {
            return this.getWidth() > 0
        }
        _disableOverFlow() {
            this._saveInitialAttribute(this._element, "overflow"), this._element.style.overflow = "hidden"
        }
        _setElementAttributes(d, B, Y) {
            const Ot = this.getWidth();
            this._applyManipulationCallback(d, It => {
                if (It !== this._element && window.innerWidth > It.clientWidth + Ot) return;
                this._saveInitialAttribute(It, B);
                const oe = window.getComputedStyle(It).getPropertyValue(B);
                It.style.setProperty(B, `${Y(Number.parseFloat(oe))}px`)
            })
        }
        _saveInitialAttribute(d, B) {
            const Y = d.style.getPropertyValue(B);
            Y && X.setDataAttribute(d, B, Y)
        }
        _resetElementAttributes(d, B) {
            this._applyManipulationCallback(d, Y => {
                const Ot = X.getDataAttribute(Y, B);
                null !== Ot ? (X.removeDataAttribute(Y, B), Y.style.setProperty(B, Ot)) : Y.style.removeProperty(B)
            })
        }
        _applyManipulationCallback(d, B) {
            if (P(d)) B(d);
            else
                for (const Y of xt.find(d, this._element)) B(Y)
        }
    }
    const fe = ".bs.modal",
        je = `hide${fe}`,
        Fe = `hidePrevented${fe}`,
        Ze = `hidden${fe}`,
        He = `show${fe}`,
        Nn = `shown${fe}`,
        an = `resize${fe}`,
        xn = `click.dismiss${fe}`,
        On = `mousedown.dismiss${fe}`,
        pn = `keydown.dismiss${fe}`,
        di = `click${fe}.data-api`,
        ai = "modal-open",
        Ki = "modal-static",
        dr = {
            backdrop: !0,
            focus: !0,
            keyboard: !0
        },
        or = {
            backdrop: "(boolean|string)",
            focus: "boolean",
            keyboard: "boolean"
        };
    class jn extends Mt {
        constructor(d, B) {
            super(d, B), this._dialog = xt.findOne(".modal-dialog", this._element), this._backdrop = this._initializeBackDrop(), this._focustrap = this._initializeFocusTrap(), this._isShown = !1, this._isTransitioning = !1, this._scrollBar = new se, this._addEventListeners()
        }
        static get Default() {
            return dr
        }
        static get DefaultType() {
            return or
        }
        static get NAME() {
            return "modal"
        }
        toggle(d) {
            return this._isShown ? this.hide() : this.show(d)
        }
        show(d) {
            this._isShown || this._isTransitioning || V.trigger(this._element, He, {
                relatedTarget: d
            }).defaultPrevented || (this._isShown = !0, this._isTransitioning = !0, this._scrollBar.hide(), document.body.classList.add(ai), this._adjustDialog(), this._backdrop.show(() => this._showElement(d)))
        }
        hide() {
            this._isShown && !this._isTransitioning && (V.trigger(this._element, je).defaultPrevented || (this._isShown = !1, this._isTransitioning = !0, this._focustrap.deactivate(), this._element.classList.remove("show"), this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())))
        }
        dispose() {
            V.off(window, fe), V.off(this._dialog, fe), this._backdrop.dispose(), this._focustrap.deactivate(), super.dispose()
        }
        handleUpdate() {
            this._adjustDialog()
        }
        _initializeBackDrop() {
            return new qr({
                isVisible: Boolean(this._config.backdrop),
                isAnimated: this._isAnimated()
            })
        }
        _initializeFocusTrap() {
            return new lo({
                trapElement: this._element
            })
        }
        _showElement(d) {
            document.body.contains(this._element) || document.body.append(this._element), this._element.style.display = "block", this._element.removeAttribute("aria-hidden"), this._element.setAttribute("aria-modal", !0), this._element.setAttribute("role", "dialog"), this._element.scrollTop = 0;
            const B = xt.findOne(".modal-body", this._dialog);
            B && (B.scrollTop = 0), this._element.classList.add("show"), this._queueCallback(() => {
                this._config.focus && this._focustrap.activate(), this._isTransitioning = !1, V.trigger(this._element, Nn, {
                    relatedTarget: d
                })
            }, this._dialog, this._isAnimated())
        }
        _addEventListeners() {
            V.on(this._element, pn, d => {
                "Escape" === d.key && (this._config.keyboard ? this.hide() : this._triggerBackdropTransition())
            }), V.on(window, an, () => {
                this._isShown && !this._isTransitioning && this._adjustDialog()
            }), V.on(this._element, On, d => {
                V.one(this._element, xn, B => {
                    this._element === d.target && this._element === B.target && ("static" !== this._config.backdrop ? this._config.backdrop && this.hide() : this._triggerBackdropTransition())
                })
            })
        }
        _hideModal() {
            this._element.style.display = "none", this._element.setAttribute("aria-hidden", !0), this._element.removeAttribute("aria-modal"), this._element.removeAttribute("role"), this._isTransitioning = !1, this._backdrop.hide(() => {
                document.body.classList.remove(ai), this._resetAdjustments(), this._scrollBar.reset(), V.trigger(this._element, Ze)
            })
        }
        _isAnimated() {
            return this._element.classList.contains("fade")
        }
        _triggerBackdropTransition() {
            if (V.trigger(this._element, Fe).defaultPrevented) return;
            const d = this._element.scrollHeight > document.documentElement.clientHeight,
                B = this._element.style.overflowY;
            "hidden" === B || this._element.classList.contains(Ki) || (d || (this._element.style.overflowY = "hidden"), this._element.classList.add(Ki), this._queueCallback(() => {
                this._element.classList.remove(Ki), this._queueCallback(() => {
                    this._element.style.overflowY = B
                }, this._dialog)
            }, this._dialog), this._element.focus())
        }
        _adjustDialog() {
            const d = this._element.scrollHeight > document.documentElement.clientHeight,
                B = this._scrollBar.getWidth(),
                Y = B > 0;
            if (Y && !d) {
                const Ot = nt() ? "paddingLeft" : "paddingRight";
                this._element.style[Ot] = `${B}px`
            }
            if (!Y && d) {
                const Ot = nt() ? "paddingRight" : "paddingLeft";
                this._element.style[Ot] = `${B}px`
            }
        }
        _resetAdjustments() {
            this._element.style.paddingLeft = "", this._element.style.paddingRight = ""
        }
        static jQueryInterface(d, B) {
            return this.each(function() {
                const Y = jn.getOrCreateInstance(this, d);
                if ("string" == typeof d) {
                    if (void 0 === Y[d]) throw new TypeError(`No method named "${d}"`);
                    Y[d](B)
                }
            })
        }
    }
    V.on(document, di, '[data-bs-toggle="modal"]', function(F) {
        const d = xt.getElementFromSelector(this);
        ["A", "AREA"].includes(this.tagName) && F.preventDefault(), V.one(d, He, Y => {
            Y.defaultPrevented || V.one(d, Ze, () => {
                O(this) && this.focus()
            })
        });
        const B = xt.findOne(".modal.show");
        B && jn.getInstance(B).hide(), jn.getOrCreateInstance(d).toggle(this)
    }), pt(jn), lt(jn);
    const Ri = ".bs.offcanvas",
        Er = ".data-api",
        co = `load${Ri}${Er}`,
        Ns = "showing",
        Co = ".offcanvas.show",
        Fo = `show${Ri}`,
        bo = `shown${Ri}`,
        kt = `hide${Ri}`,
        x = `hidePrevented${Ri}`,
        j = `hidden${Ri}`,
        Ct = `resize${Ri}`,
        ue = `click${Ri}${Er}`,
        Le = `keydown.dismiss${Ri}`,
        Je = {
            backdrop: !0,
            keyboard: !0,
            scroll: !1
        },
        In = {
            backdrop: "(boolean|string)",
            keyboard: "boolean",
            scroll: "boolean"
        };
    class Gn extends Mt {
        constructor(d, B) {
            super(d, B), this._isShown = !1, this._backdrop = this._initializeBackDrop(), this._focustrap = this._initializeFocusTrap(), this._addEventListeners()
        }
        static get Default() {
            return Je
        }
        static get DefaultType() {
            return In
        }
        static get NAME() {
            return "offcanvas"
        }
        toggle(d) {
            return this._isShown ? this.hide() : this.show(d)
        }
        show(d) {
            this._isShown || V.trigger(this._element, Fo, {
                relatedTarget: d
            }).defaultPrevented || (this._isShown = !0, this._backdrop.show(), this._config.scroll || (new se).hide(), this._element.setAttribute("aria-modal", !0), this._element.setAttribute("role", "dialog"), this._element.classList.add(Ns), this._queueCallback(() => {
                this._config.scroll && !this._config.backdrop || this._focustrap.activate(), this._element.classList.add("show"), this._element.classList.remove(Ns), V.trigger(this._element, bo, {
                    relatedTarget: d
                })
            }, this._element, !0))
        }
        hide() {
            this._isShown && (V.trigger(this._element, kt).defaultPrevented || (this._focustrap.deactivate(), this._element.blur(), this._isShown = !1, this._element.classList.add("hiding"), this._backdrop.hide(), this._queueCallback(() => {
                this._element.classList.remove("show", "hiding"), this._element.removeAttribute("aria-modal"), this._element.removeAttribute("role"), this._config.scroll || (new se).reset(), V.trigger(this._element, j)
            }, this._element, !0)))
        }
        dispose() {
            this._backdrop.dispose(), this._focustrap.deactivate(), super.dispose()
        }
        _initializeBackDrop() {
            const d = Boolean(this._config.backdrop);
            return new qr({
                className: "offcanvas-backdrop",
                isVisible: d,
                isAnimated: !0,
                rootElement: this._element.parentNode,
                clickCallback: d ? () => {
                    "static" !== this._config.backdrop ? this.hide() : V.trigger(this._element, x)
                } : null
            })
        }
        _initializeFocusTrap() {
            return new lo({
                trapElement: this._element
            })
        }
        _addEventListeners() {
            V.on(this._element, Le, d => {
                "Escape" === d.key && (this._config.keyboard ? this.hide() : V.trigger(this._element, x))
            })
        }
        static jQueryInterface(d) {
            return this.each(function() {
                const B = Gn.getOrCreateInstance(this, d);
                if ("string" == typeof d) {
                    if (void 0 === B[d] || d.startsWith("_") || "constructor" === d) throw new TypeError(`No method named "${d}"`);
                    B[d](this)
                }
            })
        }
    }
    V.on(document, ue, '[data-bs-toggle="offcanvas"]', function(F) {
        const d = xt.getElementFromSelector(this);
        if (["A", "AREA"].includes(this.tagName) && F.preventDefault(), J(this)) return;
        V.one(d, j, () => {
            O(this) && this.focus()
        });
        const B = xt.findOne(Co);
        B && B !== d && Gn.getInstance(B).hide(), Gn.getOrCreateInstance(d).toggle(this)
    }), V.on(window, co, () => {
        for (const F of xt.find(Co)) Gn.getOrCreateInstance(F).show()
    }), V.on(window, Ct, () => {
        for (const F of xt.find("[aria-modal][class*=show][class*=offcanvas-]")) "fixed" !== getComputedStyle(F).position && Gn.getOrCreateInstance(F).hide()
    }), pt(Gn), lt(Gn);
    const ar = {
            "*": ["class", "dir", "id", "lang", "role", /^aria-[\w-]*$/i],
            a: ["target", "href", "title", "rel"],
            area: [],
            b: [],
            br: [],
            col: [],
            code: [],
            dd: [],
            div: [],
            dl: [],
            dt: [],
            em: [],
            hr: [],
            h1: [],
            h2: [],
            h3: [],
            h4: [],
            h5: [],
            h6: [],
            i: [],
            img: ["src", "srcset", "alt", "title", "width", "height"],
            li: [],
            ol: [],
            p: [],
            pre: [],
            s: [],
            small: [],
            span: [],
            sub: [],
            sup: [],
            strong: [],
            u: [],
            ul: []
        },
        Gi = new Set(["background", "cite", "href", "itemtype", "longdesc", "poster", "src", "xlink:href"]),
        Yr = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,
        _s = (F, d) => {
            const B = F.nodeName.toLowerCase();
            return d.includes(B) ? !Gi.has(B) || Boolean(Yr.test(F.nodeValue)) : d.filter(Y => Y instanceof RegExp).some(Y => Y.test(B))
        },
        Ds = {
            allowList: ar,
            content: {},
            extraClass: "",
            html: !1,
            sanitize: !0,
            sanitizeFn: null,
            template: "<div></div>"
        },
        zs = {
            allowList: "object",
            content: "object",
            extraClass: "(string|function)",
            html: "boolean",
            sanitize: "boolean",
            sanitizeFn: "(null|function)",
            template: "string"
        },
        Tr = {
            entry: "(string|element|function|null)",
            selector: "(string|element)"
        };
    class fo extends _t {
        constructor(d) {
            super(), this._config = this._getConfig(d)
        }
        static get Default() {
            return Ds
        }
        static get DefaultType() {
            return zs
        }
        static get NAME() {
            return "TemplateFactory"
        }
        getContent() {
            return Object.values(this._config.content).map(d => this._resolvePossibleFunction(d)).filter(Boolean)
        }
        hasContent() {
            return this.getContent().length > 0
        }
        changeContent(d) {
            return this._checkContent(d), this._config.content = { ...this._config.content,
                ...d
            }, this
        }
        toHtml() {
            const d = document.createElement("div");
            d.innerHTML = this._maybeSanitize(this._config.template);
            for (const [Ot, It] of Object.entries(this._config.content)) this._setContent(d, It, Ot);
            const B = d.children[0],
                Y = this._resolvePossibleFunction(this._config.extraClass);
            return Y && B.classList.add(...Y.split(" ")), B
        }
        _typeCheckConfig(d) {
            super._typeCheckConfig(d), this._checkContent(d.content)
        }
        _checkContent(d) {
            for (const [B, Y] of Object.entries(d)) super._typeCheckConfig({
                selector: B,
                entry: Y
            }, Tr)
        }
        _setContent(d, B, Y) {
            const Ot = xt.findOne(Y, d);
            Ot && ((B = this._resolvePossibleFunction(B)) ? P(B) ? this._putElementInTemplate(K(B), Ot) : this._config.html ? Ot.innerHTML = this._maybeSanitize(B) : Ot.textContent = B : Ot.remove())
        }
        _maybeSanitize(d) {
            return this._config.sanitize ? function(B, Y, Ot) {
                if (!B.length) return B;
                if (Ot && "function" == typeof Ot) return Ot(B);
                const It = (new window.DOMParser).parseFromString(B, "text/html"),
                    oe = [].concat(...It.body.querySelectorAll("*"));
                for (const me of oe) {
                    const Ie = me.nodeName.toLowerCase();
                    if (!Object.keys(Y).includes(Ie)) {
                        me.remove();
                        continue
                    }
                    const We = [].concat(...me.attributes),
                        Re = [].concat(Y["*"] || [], Y[Ie] || []);
                    for (const zt of We) _s(zt, Re) || me.removeAttribute(zt.nodeName)
                }
                return It.body.innerHTML
            }(d, this._config.allowList, this._config.sanitizeFn) : d
        }
        _resolvePossibleFunction(d) {
            return M(d, [void 0, this])
        }
        _putElementInTemplate(d, B) {
            if (this._config.html) return B.innerHTML = "", void B.append(d);
            B.textContent = d.textContent
        }
    }
    const cs = new Set(["sanitize", "allowList", "sanitizeFn"]),
        Qs = "fade",
        Zr = "show",
        qo = "hide.bs.modal",
        xo = "hover",
        yo = "focus",
        Ao = {
            AUTO: "auto",
            TOP: "top",
            RIGHT: nt() ? "left" : "right",
            BOTTOM: "bottom",
            LEFT: nt() ? "right" : "left"
        },
        uo = {
            allowList: ar,
            animation: !0,
            boundary: "clippingParents",
            container: !1,
            customClass: "",
            delay: 0,
            fallbackPlacements: ["top", "right", "bottom", "left"],
            html: !1,
            offset: [0, 6],
            placement: "top",
            popperConfig: null,
            sanitize: !0,
            sanitizeFn: null,
            selector: !1,
            template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
            title: "",
            trigger: "hover focus"
        },
        na = {
            allowList: "object",
            animation: "boolean",
            boundary: "(string|element)",
            container: "(string|element|boolean)",
            customClass: "(string|function)",
            delay: "(number|object)",
            fallbackPlacements: "array",
            html: "boolean",
            offset: "(array|string|function)",
            placement: "(string|function)",
            popperConfig: "(null|object|function)",
            sanitize: "boolean",
            sanitizeFn: "(null|function)",
            selector: "(string|boolean)",
            template: "string",
            title: "(string|element|function)",
            trigger: "string"
        };
    class vo extends Mt {
        constructor(d, B) {
            if (void 0 === vi) throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");
            super(d, B), this._isEnabled = !0, this._timeout = 0, this._isHovered = null, this._activeTrigger = {}, this._popper = null, this._templateFactory = null, this._newContent = null, this.tip = null, this._setListeners(), this._config.selector || this._fixTitle()
        }
        static get Default() {
            return uo
        }
        static get DefaultType() {
            return na
        }
        static get NAME() {
            return "tooltip"
        }
        enable() {
            this._isEnabled = !0
        }
        disable() {
            this._isEnabled = !1
        }
        toggleEnabled() {
            this._isEnabled = !this._isEnabled
        }
        toggle() {
            this._isEnabled && (this._isShown() ? this._leave() : this._enter())
        }
        dispose() {
            clearTimeout(this._timeout), V.off(this._element.closest(".modal"), qo, this._hideModalHandler), this._element.getAttribute("data-bs-original-title") && this._element.setAttribute("title", this._element.getAttribute("data-bs-original-title")), this._disposePopper(), super.dispose()
        }
        show() {
            if ("none" === this._element.style.display) throw new Error("Please use show on visible elements");
            if (!this._isWithContent() || !this._isEnabled) return;
            const d = V.trigger(this._element, this.constructor.eventName("show")),
                B = (mt(this._element) || this._element.ownerDocument.documentElement).contains(this._element);
            if (d.defaultPrevented || !B) return;
            this._disposePopper();
            const Y = this._getTipElement();
            this._element.setAttribute("aria-describedby", Y.getAttribute("id"));
            const {
                container: Ot
            } = this._config;
            if (this._element.ownerDocument.documentElement.contains(this.tip) || (Ot.append(Y), V.trigger(this._element, this.constructor.eventName("inserted"))), this._popper = this._createPopper(Y), Y.classList.add(Zr), "ontouchstart" in document.documentElement)
                for (const It of [].concat(...document.body.children)) V.on(It, "mouseover", Z);
            this._queueCallback(() => {
                V.trigger(this._element, this.constructor.eventName("shown")), !1 === this._isHovered && this._leave(), this._isHovered = !1
            }, this.tip, this._isAnimated())
        }
        hide() {
            if (this._isShown() && !V.trigger(this._element, this.constructor.eventName("hide")).defaultPrevented) {
                if (this._getTipElement().classList.remove(Zr), "ontouchstart" in document.documentElement)
                    for (const d of [].concat(...document.body.children)) V.off(d, "mouseover", Z);
                this._activeTrigger.click = !1, this._activeTrigger[yo] = !1, this._activeTrigger[xo] = !1, this._isHovered = null, this._queueCallback(() => {
                    this._isWithActiveTrigger() || (this._isHovered || this._disposePopper(), this._element.removeAttribute("aria-describedby"), V.trigger(this._element, this.constructor.eventName("hidden")))
                }, this.tip, this._isAnimated())
            }
        }
        update() {
            this._popper && this._popper.update()
        }
        _isWithContent() {
            return Boolean(this._getTitle())
        }
        _getTipElement() {
            return this.tip || (this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())), this.tip
        }
        _createTipElement(d) {
            const B = this._getTemplateFactory(d).toHtml();
            if (!B) return null;
            B.classList.remove(Qs, Zr), B.classList.add(`bs-${this.constructor.NAME}-auto`);
            const Y = (Ot => {
                do {
                    Ot += Math.floor(1e6 * Math.random())
                } while (document.getElementById(Ot));
                return Ot
            })(this.constructor.NAME).toString();
            return B.setAttribute("id", Y), this._isAnimated() && B.classList.add(Qs), B
        }
        setContent(d) {
            this._newContent = d, this._isShown() && (this._disposePopper(), this.show())
        }
        _getTemplateFactory(d) {
            return this._templateFactory ? this._templateFactory.changeContent(d) : this._templateFactory = new fo({ ...this._config,
                content: d,
                extraClass: this._resolvePossibleFunction(this._config.customClass)
            }), this._templateFactory
        }
        _getContentForTemplate() {
            return {
                ".tooltip-inner": this._getTitle()
            }
        }
        _getTitle() {
            return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute("data-bs-original-title")
        }
        _initializeOnDelegatedTarget(d) {
            return this.constructor.getOrCreateInstance(d.delegateTarget, this._getDelegateConfig())
        }
        _isAnimated() {
            return this._config.animation || this.tip && this.tip.classList.contains(Qs)
        }
        _isShown() {
            return this.tip && this.tip.classList.contains(Zr)
        }
        _createPopper(d) {
            const B = M(this._config.placement, [this, d, this._element]),
                Y = Ao[B.toUpperCase()];
            return ni(this._element, d, this._getPopperConfig(Y))
        }
        _getOffset() {
            const {
                offset: d
            } = this._config;
            return "string" == typeof d ? d.split(",").map(B => Number.parseInt(B, 10)) : "function" == typeof d ? B => d(B, this._element) : d
        }
        _resolvePossibleFunction(d) {
            return M(d, [this._element, this._element])
        }
        _getPopperConfig(d) {
            const B = {
                placement: d,
                modifiers: [{
                    name: "flip",
                    options: {
                        fallbackPlacements: this._config.fallbackPlacements
                    }
                }, {
                    name: "offset",
                    options: {
                        offset: this._getOffset()
                    }
                }, {
                    name: "preventOverflow",
                    options: {
                        boundary: this._config.boundary
                    }
                }, {
                    name: "arrow",
                    options: {
                        element: `.${this.constructor.NAME}-arrow`
                    }
                }, {
                    name: "preSetPlacement",
                    enabled: !0,
                    phase: "beforeMain",
                    fn: Y => {
                        this._getTipElement().setAttribute("data-popper-placement", Y.state.placement)
                    }
                }]
            };
            return { ...B,
                ...M(this._config.popperConfig, [void 0, B])
            }
        }
        _setListeners() {
            const d = this._config.trigger.split(" ");
            for (const B of d)
                if ("click" === B) V.on(this._element, this.constructor.eventName("click"), this._config.selector, Y => {
                    this._initializeOnDelegatedTarget(Y).toggle()
                });
                else if ("manual" !== B) {
                const Y = this.constructor.eventName(B === xo ? "mouseenter" : "focusin"),
                    Ot = this.constructor.eventName(B === xo ? "mouseleave" : "focusout");
                V.on(this._element, Y, this._config.selector, It => {
                    const oe = this._initializeOnDelegatedTarget(It);
                    oe._activeTrigger["focusin" === It.type ? yo : xo] = !0, oe._enter()
                }), V.on(this._element, Ot, this._config.selector, It => {
                    const oe = this._initializeOnDelegatedTarget(It);
                    oe._activeTrigger["focusout" === It.type ? yo : xo] = oe._element.contains(It.relatedTarget), oe._leave()
                })
            }
            this._hideModalHandler = () => {
                this._element && this.hide()
            }, V.on(this._element.closest(".modal"), qo, this._hideModalHandler)
        }
        _fixTitle() {
            const d = this._element.getAttribute("title");
            d && (this._element.getAttribute("aria-label") || this._element.textContent.trim() || this._element.setAttribute("aria-label", d), this._element.setAttribute("data-bs-original-title", d), this._element.removeAttribute("title"))
        }
        _enter() {
            this._isShown() || this._isHovered ? this._isHovered = !0 : (this._isHovered = !0, this._setTimeout(() => {
                this._isHovered && this.show()
            }, this._config.delay.show))
        }
        _leave() {
            this._isWithActiveTrigger() || (this._isHovered = !1, this._setTimeout(() => {
                this._isHovered || this.hide()
            }, this._config.delay.hide))
        }
        _setTimeout(d, B) {
            clearTimeout(this._timeout), this._timeout = setTimeout(d, B)
        }
        _isWithActiveTrigger() {
            return Object.values(this._activeTrigger).includes(!0)
        }
        _getConfig(d) {
            const B = X.getDataAttributes(this._element);
            for (const Y of Object.keys(B)) cs.has(Y) && delete B[Y];
            return d = { ...B,
                ..."object" == typeof d && d ? d : {}
            }, d = this._mergeConfigObj(d), d = this._configAfterMerge(d), this._typeCheckConfig(d), d
        }
        _configAfterMerge(d) {
            return d.container = !1 === d.container ? document.body : K(d.container), "number" == typeof d.delay && (d.delay = {
                show: d.delay,
                hide: d.delay
            }), "number" == typeof d.title && (d.title = d.title.toString()), "number" == typeof d.content && (d.content = d.content.toString()), d
        }
        _getDelegateConfig() {
            const d = {};
            for (const [B, Y] of Object.entries(this._config)) this.constructor.Default[B] !== Y && (d[B] = Y);
            return d.selector = !1, d.trigger = "manual", d
        }
        _disposePopper() {
            this._popper && (this._popper.destroy(), this._popper = null), this.tip && (this.tip.remove(), this.tip = null)
        }
        static jQueryInterface(d) {
            return this.each(function() {
                const B = vo.getOrCreateInstance(this, d);
                if ("string" == typeof d) {
                    if (void 0 === B[d]) throw new TypeError(`No method named "${d}"`);
                    B[d]()
                }
            })
        }
    }
    lt(vo);
    const Jr = { ...vo.Default,
            content: "",
            offset: [0, 8],
            placement: "right",
            template: '<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>',
            trigger: "click"
        },
        Yo = { ...vo.DefaultType,
            content: "(null|string|element|function)"
        };
    class _o extends vo {
        static get Default() {
            return Jr
        }
        static get DefaultType() {
            return Yo
        }
        static get NAME() {
            return "popover"
        }
        _isWithContent() {
            return this._getTitle() || this._getContent()
        }
        _getContentForTemplate() {
            return {
                ".popover-header": this._getTitle(),
                ".popover-body": this._getContent()
            }
        }
        _getContent() {
            return this._resolvePossibleFunction(this._config.content)
        }
        static jQueryInterface(d) {
            return this.each(function() {
                const B = _o.getOrCreateInstance(this, d);
                if ("string" == typeof d) {
                    if (void 0 === B[d]) throw new TypeError(`No method named "${d}"`);
                    B[d]()
                }
            })
        }
    }
    lt(_o);
    const ko = ".bs.scrollspy",
        Ro = `activate${ko}`,
        Do = `click${ko}`,
        ga = `load${ko}.data-api`,
        eo = "active",
        No = "[href]",
        m = ".nav-link",
        C = `${m}, .nav-item > ${m}, .list-group-item`,
        w = {
            offset: null,
            rootMargin: "0px 0px -25%",
            smoothScroll: !1,
            target: null,
            threshold: [.1, .5, 1]
        },
        T = {
            offset: "(number|null)",
            rootMargin: "string",
            smoothScroll: "boolean",
            target: "element",
            threshold: "array"
        };
    class N extends Mt {
        constructor(d, B) {
            super(d, B), this._targetLinks = new Map, this._observableSections = new Map, this._rootElement = "visible" === getComputedStyle(this._element).overflowY ? null : this._element, this._activeTarget = null, this._observer = null, this._previousScrollData = {
                visibleEntryTop: 0,
                parentScrollTop: 0
            }, this.refresh()
        }
        static get Default() {
            return w
        }
        static get DefaultType() {
            return T
        }
        static get NAME() {
            return "scrollspy"
        }
        refresh() {
            this._initializeTargetsAndObservables(), this._maybeEnableSmoothScroll(), this._observer ? this._observer.disconnect() : this._observer = this._getNewObserver();
            for (const d of this._observableSections.values()) this._observer.observe(d)
        }
        dispose() {
            this._observer.disconnect(), super.dispose()
        }
        _configAfterMerge(d) {
            return d.target = K(d.target) || document.body, d.rootMargin = d.offset ? `${d.offset}px 0px -30%` : d.rootMargin, "string" == typeof d.threshold && (d.threshold = d.threshold.split(",").map(B => Number.parseFloat(B))), d
        }
        _maybeEnableSmoothScroll() {
            this._config.smoothScroll && (V.off(this._config.target, Do), V.on(this._config.target, Do, No, d => {
                const B = this._observableSections.get(d.target.hash);
                if (B) {
                    d.preventDefault();
                    const Y = this._rootElement || window,
                        Ot = B.offsetTop - this._element.offsetTop;
                    if (Y.scrollTo) return void Y.scrollTo({
                        top: Ot,
                        behavior: "smooth"
                    });
                    Y.scrollTop = Ot
                }
            }))
        }
        _getNewObserver() {
            return new IntersectionObserver(B => this._observerCallback(B), {
                root: this._rootElement,
                threshold: this._config.threshold,
                rootMargin: this._config.rootMargin
            })
        }
        _observerCallback(d) {
            const B = oe => this._targetLinks.get(`#${oe.target.id}`),
                Y = oe => {
                    this._previousScrollData.visibleEntryTop = oe.target.offsetTop, this._process(B(oe))
                },
                Ot = (this._rootElement || document.documentElement).scrollTop,
                It = Ot >= this._previousScrollData.parentScrollTop;
            this._previousScrollData.parentScrollTop = Ot;
            for (const oe of d) {
                if (!oe.isIntersecting) {
                    this._activeTarget = null, this._clearActiveClass(B(oe));
                    continue
                }
                const me = oe.target.offsetTop >= this._previousScrollData.visibleEntryTop;
                if (It && me) {
                    if (Y(oe), !Ot) return
                } else It || me || Y(oe)
            }
        }
        _initializeTargetsAndObservables() {
            this._targetLinks = new Map, this._observableSections = new Map;
            const d = xt.find(No, this._config.target);
            for (const B of d) {
                if (!B.hash || J(B)) continue;
                const Y = xt.findOne(decodeURI(B.hash), this._element);
                O(Y) && (this._targetLinks.set(decodeURI(B.hash), B), this._observableSections.set(B.hash, Y))
            }
        }
        _process(d) {
            this._activeTarget !== d && (this._clearActiveClass(this._config.target), this._activeTarget = d, d.classList.add(eo), this._activateParents(d), V.trigger(this._element, Ro, {
                relatedTarget: d
            }))
        }
        _activateParents(d) {
            if (d.classList.contains("dropdown-item")) xt.findOne(".dropdown-bs-toggle", d.closest(".dropdown")).classList.add(eo);
            else
                for (const B of xt.parents(d, ".nav, .list-group"))
                    for (const Y of xt.prev(B, C)) Y.classList.add(eo)
        }
        _clearActiveClass(d) {
            d.classList.remove(eo);
            const B = xt.find(`${No}.${eo}`, d);
            for (const Y of B) Y.classList.remove(eo)
        }
        static jQueryInterface(d) {
            return this.each(function() {
                const B = N.getOrCreateInstance(this, d);
                if ("string" == typeof d) {
                    if (void 0 === B[d] || d.startsWith("_") || "constructor" === d) throw new TypeError(`No method named "${d}"`);
                    B[d]()
                }
            })
        }
    }
    V.on(window, ga, () => {
        for (const F of xt.find('[data-bs-spy="scroll"]')) N.getOrCreateInstance(F)
    }), lt(N);
    const at = ".bs.tab",
        bt = `hide${at}`,
        Ht = `hidden${at}`,
        ne = `show${at}`,
        ye = `shown${at}`,
        Ee = `click${at}`,
        ze = `keydown${at}`,
        Pe = `load${at}`,
        _n = "ArrowLeft",
        Vn = "ArrowRight",
        Ln = "ArrowUp",
        Sn = "ArrowDown",
        nn = "Home",
        Yn = "End",
        yn = "active",
        li = "show",
        Fr = ".dropdown-bs-toggle",
        go = `:not(${Fr})`,
        Rr = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',
        xs = `.nav-link${go}, .list-group-item${go}, [role="tab"]${go}, ${Rr}`,
        no = `.${yn}[data-bs-toggle="tab"], .${yn}[data-bs-toggle="pill"], .${yn}[data-bs-toggle="list"]`;
    class hs extends Mt {
        constructor(d) {
            super(d), this._parent = this._element.closest('.list-group, .nav, [role="tablist"]'), this._parent && (this._setInitialAttributes(this._parent, this._getChildren()), V.on(this._element, ze, B => this._keydown(B)))
        }
        static get NAME() {
            return "tab"
        }
        show() {
            const d = this._element;
            if (this._elemIsActive(d)) return;
            const B = this._getActiveElem(),
                Y = B ? V.trigger(B, bt, {
                    relatedTarget: d
                }) : null;
            V.trigger(d, ne, {
                relatedTarget: B
            }).defaultPrevented || Y && Y.defaultPrevented || (this._deactivate(B, d), this._activate(d, B))
        }
        _activate(d, B) {
            d && (d.classList.add(yn), this._activate(xt.getElementFromSelector(d)), this._queueCallback(() => {
                "tab" === d.getAttribute("role") ? (d.removeAttribute("tabindex"), d.setAttribute("aria-selected", !0), this._toggleDropDown(d, !0), V.trigger(d, ye, {
                    relatedTarget: B
                })) : d.classList.add(li)
            }, d, d.classList.contains("fade")))
        }
        _deactivate(d, B) {
            d && (d.classList.remove(yn), d.blur(), this._deactivate(xt.getElementFromSelector(d)), this._queueCallback(() => {
                "tab" === d.getAttribute("role") ? (d.setAttribute("aria-selected", !1), d.setAttribute("tabindex", "-1"), this._toggleDropDown(d, !1), V.trigger(d, Ht, {
                    relatedTarget: B
                })) : d.classList.remove(li)
            }, d, d.classList.contains("fade")))
        }
        _keydown(d) {
            if (![_n, Vn, Ln, Sn, nn, Yn].includes(d.key)) return;
            d.stopPropagation(), d.preventDefault();
            const B = this._getChildren().filter(Ot => !J(Ot));
            let Y;
            if ([nn, Yn].includes(d.key)) Y = B[d.key === nn ? 0 : B.length - 1];
            else {
                const Ot = [Vn, Sn].includes(d.key);
                Y = et(B, d.target, Ot, !0)
            }
            Y && (Y.focus({
                preventScroll: !0
            }), hs.getOrCreateInstance(Y).show())
        }
        _getChildren() {
            return xt.find(xs, this._parent)
        }
        _getActiveElem() {
            return this._getChildren().find(d => this._elemIsActive(d)) || null
        }
        _setInitialAttributes(d, B) {
            this._setAttributeIfNotExists(d, "role", "tablist");
            for (const Y of B) this._setInitialAttributesOnChild(Y)
        }
        _setInitialAttributesOnChild(d) {
            d = this._getInnerElement(d);
            const B = this._elemIsActive(d),
                Y = this._getOuterElement(d);
            d.setAttribute("aria-selected", B), Y !== d && this._setAttributeIfNotExists(Y, "role", "presentation"), B || d.setAttribute("tabindex", "-1"), this._setAttributeIfNotExists(d, "role", "tab"), this._setInitialAttributesOnTargetPanel(d)
        }
        _setInitialAttributesOnTargetPanel(d) {
            const B = xt.getElementFromSelector(d);
            B && (this._setAttributeIfNotExists(B, "role", "tabpanel"), d.id && this._setAttributeIfNotExists(B, "aria-labelledby", `${d.id}`))
        }
        _toggleDropDown(d, B) {
            const Y = this._getOuterElement(d);
            if (!Y.classList.contains("dropdown")) return;
            const Ot = (It, oe) => {
                const me = xt.findOne(It, Y);
                me && me.classList.toggle(oe, B)
            };
            Ot(Fr, yn), Ot(".dropdown-menu", li), Y.setAttribute("aria-expanded", B)
        }
        _setAttributeIfNotExists(d, B, Y) {
            d.hasAttribute(B) || d.setAttribute(B, Y)
        }
        _elemIsActive(d) {
            return d.classList.contains(yn)
        }
        _getInnerElement(d) {
            return d.matches(xs) ? d : xt.findOne(xs, d)
        }
        _getOuterElement(d) {
            return d.closest(".nav-item, .list-group-item") || d
        }
        static jQueryInterface(d) {
            return this.each(function() {
                const B = hs.getOrCreateInstance(this);
                if ("string" == typeof d) {
                    if (void 0 === B[d] || d.startsWith("_") || "constructor" === d) throw new TypeError(`No method named "${d}"`);
                    B[d]()
                }
            })
        }
    }
    V.on(document, Ee, Rr, function(F) {
        ["A", "AREA"].includes(this.tagName) && F.preventDefault(), J(this) || hs.getOrCreateInstance(this).show()
    }), V.on(window, Pe, () => {
        for (const F of xt.find(no)) hs.getOrCreateInstance(F)
    }), lt(hs);
    const fs = ".bs.toast",
        Zo = `mouseover${fs}`,
        Ho = `mouseout${fs}`,
        zo = `focusin${fs}`,
        ia = `focusout${fs}`,
        ra = `hide${fs}`,
        ve = `hidden${fs}`,
        he = `show${fs}`,
        ie = `shown${fs}`,
        Vt = "show",
        tn = "showing",
        Ut = {
            animation: "boolean",
            autohide: "boolean",
            delay: "number"
        },
        $e = {
            animation: !0,
            autohide: !0,
            delay: 5e3
        };
    class Tn extends Mt {
        constructor(d, B) {
            super(d, B), this._timeout = null, this._hasMouseInteraction = !1, this._hasKeyboardInteraction = !1, this._setListeners()
        }
        static get Default() {
            return $e
        }
        static get DefaultType() {
            return Ut
        }
        static get NAME() {
            return "toast"
        }
        show() {
            V.trigger(this._element, he).defaultPrevented || (this._clearTimeout(), this._config.animation && this._element.classList.add("fade"), this._element.classList.remove("hide"), this._element.classList.add(Vt, tn), this._queueCallback(() => {
                this._element.classList.remove(tn), V.trigger(this._element, ie), this._maybeScheduleHide()
            }, this._element, this._config.animation))
        }
        hide() {
            this.isShown() && (V.trigger(this._element, ra).defaultPrevented || (this._element.classList.add(tn), this._queueCallback(() => {
                this._element.classList.add("hide"), this._element.classList.remove(tn, Vt), V.trigger(this._element, ve)
            }, this._element, this._config.animation)))
        }
        dispose() {
            this._clearTimeout(), this.isShown() && this._element.classList.remove(Vt), super.dispose()
        }
        isShown() {
            return this._element.classList.contains(Vt)
        }
        _maybeScheduleHide() {
            this._config.autohide && (this._hasMouseInteraction || this._hasKeyboardInteraction || (this._timeout = setTimeout(() => {
                this.hide()
            }, this._config.delay)))
        }
        _onInteraction(d, B) {
            switch (d.type) {
                case "mouseover":
                case "mouseout":
                    this._hasMouseInteraction = B;
                    break;
                case "focusin":
                case "focusout":
                    this._hasKeyboardInteraction = B
            }
            if (B) return void this._clearTimeout();
            const Y = d.relatedTarget;
            this._element === Y || this._element.contains(Y) || this._maybeScheduleHide()
        }
        _setListeners() {
            V.on(this._element, Zo, d => this._onInteraction(d, !0)), V.on(this._element, Ho, d => this._onInteraction(d, !1)), V.on(this._element, zo, d => this._onInteraction(d, !0)), V.on(this._element, ia, d => this._onInteraction(d, !1))
        }
        _clearTimeout() {
            clearTimeout(this._timeout), this._timeout = null
        }
        static jQueryInterface(d) {
            return this.each(function() {
                const B = Tn.getOrCreateInstance(this, d);
                if ("string" == typeof d) {
                    if (void 0 === B[d]) throw new TypeError(`No method named "${d}"`);
                    B[d](this)
                }
            })
        }
    }
    return pt(Tn), lt(Tn), {
        Alert: le,
        Button: Ne,
        Carousel: oi,
        Collapse: er,
        Dropdown: Qn,
        Modal: jn,
        Offcanvas: Gn,
        Popover: _o,
        ScrollSpy: N,
        Tab: hs,
        Toast: Tn,
        Tooltip: vo
    }
}),
function(p, R, y, I) {
    "use strict";
    p.InitiateSideMenu = function() {
        InitiateSideMenu()
    }
}(jQuery, window, document);
var themeprimary = getThemeColorFromCss("themeprimary"),
    themesecondary = getThemeColorFromCss("themesecondary"),
    themethirdcolor = getThemeColorFromCss("themethirdcolor"),
    themefourthcolor = getThemeColorFromCss("themefourthcolor"),
    themefifthcolor = getThemeColorFromCss("themefifthcolor");

function getThemeColorFromCss(p) {
    var R = $("<span></span>").hide().appendTo("body");
    R.addClass(p);
    var y = R.css("color");
    return R.remove(), y
}

function InitiateSideMenu() {
    $(".sidebar-toggler").on("click", function() {
        return $("#sidebar").toggleClass("hide"), $(".sidebar-toggler").toggleClass("active"), !1
    }), $("#advance-search").on("click", function() {
        $("#searchpanel").hasClass("open") ? $("#searchpanel").slideUp() : $("#searchpanel").slideDown(), $("#searchpanel").toggleClass("open")
    });
    var p = $("#sidebar").hasClass("menu-compact");

    function R() {
        $(".page-setting").removeClass("open"), $("#btn-setting").removeClass("open")
    }
    $("#sidebar-collapse").on("click", function() {
        if ($("#sidebar").is(":visible") || $("#sidebar").toggleClass("hide"), $("#sidebar , body").toggleClass("menu-compact"), $(".favorite").toggleClass("favorite-compact"), $(".grid-paging").toggleClass("grid-paging-compact"), $(".sidebar-collapse").toggleClass("active"), p = $("#sidebar , body").hasClass("menu-compact"), $(".sidebar-menu").closest("div").hasClass("slimScrollDiv") && ($(".sidebar-menu").slimScroll({
                destroy: !0
            }), $(".sidebar-menu").attr("style", "")), $(".page-content").toggleClass("page-content-compact"), p) $(".open > .submenu").removeClass("open");
        else if ($(".page-sidebar").hasClass("sidebar-fixed")) {
            var y = readCookie("rtl-support") || "/index-rtl-fa.html" == location.pathname || "/index-rtl-ar.html" == location.pathname ? "right" : "left";
            $(".sidebar-menu").slimscroll({
                height: "auto",
                position: y,
                size: "3px",
                color: themeprimary
            })
        }
    }), $("#btn-setting").click(function() {
        $(".page-setting").toggleClass("open"), $("#btn-setting").toggleClass("open")
    }), $(".page-body").click(function() {
        R()
    }), $(".page-sidebar").click(function() {
        R()
    }), $(document).on("scroll", function() {
        $(window).scrollTop() > 100 ? ($(".scroll-top-wrapper").addClass("show"), $(".scroll-top-wrapper").html($($(".widget-buttons")[1]).html())) : $(".scroll-top-wrapper").removeClass("show")
    }), $(".sidebar-menu").on("click", function(y) {
        var I = $(y.target).closest("a");
        if (I && 0 != I.length) {
            if (I.hasClass("menu-dropdown")) {
                var P = I.next().get(0);
                return Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0), $(P).is(":visible") || $(P.parentNode).closest("ul").find("> .open > .submenu").each(function() {
                    $(this).slideUp(200).parent().removeClass("open")
                }), p && $(P.parentNode.parentNode).hasClass("sidebar-menu") || $(P).slideToggle(200).parent().toggleClass("open"), !1
            }
            if (p && I.get(0).parentNode.parentNode == this) {
                var H = I.find(".menu-text").get(0);
                if (y.target != H && !$.contains(H, y.target)) return !1
            }
        }
    })
}

function maximize(p) {
    if (p) {
        var R = $(window).height(),
            y = p.find(".widget-header").height();
        p.find(".widget-body").height(R - y)
    }
}

function scrollTo(p, R) {
    var y = p && p.size() > 0 ? p.offset().top : 0;
    jQuery("html,body").animate({
        scrollTop: y + (R || 0)
    }, "slow")
}

function Notify(p, R, y, I, H, P) {
    toastr.options.positionClass = "toast-" + R, toastr.options.extendedTimeOut = 0, toastr.options.timeOut = y, toastr.options.closeButton = P, toastr.options.iconClass = H + " toast-" + I, toastr.custom(p)
}

function InitiateSettings() {
    if (null != readCookie("navbar-fixed-top") && "true" == readCookie("navbar-fixed-top") && ($("#checkbox_fixednavbar").prop("checked", !0), $(".navbar").addClass("navbar-fixed-top")), null != readCookie("sidebar-fixed") && "true" == readCookie("sidebar-fixed") && ($("#checkbox_fixedsidebar").prop("checked", !0), $(".page-sidebar").addClass("sidebar-fixed"), !$(".page-sidebar").hasClass("menu-compact"))) {
        var p = readCookie("rtl-support") || "/index-rtl-fa.html" == location.pathname || "/index-rtl-ar.html" == location.pathname ? "right" : "left";
        $(".sidebar-menu").slimscroll({
            height: $(window).height() - 90,
            position: p,
            size: "3px",
            color: themeprimary
        })
    }
    null != readCookie("breadcrumbs-fixed") && "true" == readCookie("breadcrumbs-fixed") && ($("#checkbox_fixedbreadcrumbs").prop("checked", !0), $(".page-breadcrumbs").addClass("breadcrumbs-fixed")), null != readCookie("page-header-fixed") && "true" == readCookie("page-header-fixed") && ($("#checkbox_fixedheader").prop("checked", !0), $(".page-header").addClass("page-header-fixed")), $("#checkbox_fixednavbar").change(function() {
        $(".navbar").toggleClass("navbar-fixed-top"), $("#checkbox_fixedsidebar").is(":checked") && ($("#checkbox_fixedsidebar").prop("checked", !1), $(".page-sidebar").toggleClass("sidebar-fixed")), $("#checkbox_fixedbreadcrumbs").is(":checked") && !$(this).is(":checked") && ($("#checkbox_fixedbreadcrumbs").prop("checked", !1), $(".page-breadcrumbs").toggleClass("breadcrumbs-fixed")), $("#checkbox_fixedheader").is(":checked") && !$(this).is(":checked") && ($("#checkbox_fixedheader").prop("checked", !1), $(".page-header").toggleClass("page-header-fixed")), setCookiesForFixedSettings()
    }), $("#checkbox_fixedsidebar").change(function() {
        $(".page-sidebar").toggleClass("sidebar-fixed"), $("#checkbox_fixednavbar").is(":checked") || ($("#checkbox_fixednavbar").prop("checked", !0), $(".navbar").toggleClass("navbar-fixed-top")), $("#checkbox_fixedbreadcrumbs").is(":checked") && !$(this).is(":checked") && ($("#checkbox_fixedbreadcrumbs").prop("checked", !1), $(".page-breadcrumbs").toggleClass("breadcrumbs-fixed")), $("#checkbox_fixedheader").is(":checked") && !$(this).is(":checked") && ($("#checkbox_fixedheader").prop("checked", !1), $(".page-header").toggleClass("page-header-fixed")), setCookiesForFixedSettings()
    }), $("#checkbox_fixedbreadcrumbs").change(function() {
        $(".page-breadcrumbs").toggleClass("breadcrumbs-fixed"), $("#checkbox_fixedsidebar").is(":checked") || ($("#checkbox_fixedsidebar").prop("checked", !0), $(".page-sidebar").toggleClass("sidebar-fixed")), $("#checkbox_fixednavbar").is(":checked") || ($("#checkbox_fixednavbar").prop("checked", !0), $(".navbar").toggleClass("navbar-fixed-top")), $("#checkbox_fixedheader").is(":checked") && !$(this).is(":checked") && ($("#checkbox_fixedheader").prop("checked", !1), $(".page-header").toggleClass("page-header-fixed")), setCookiesForFixedSettings()
    }), $("#checkbox_fixedheader").change(function() {
        $(".page-header").toggleClass("page-header-fixed"), $("#checkbox_fixedbreadcrumbs").is(":checked") || ($("#checkbox_fixedbreadcrumbs").prop("checked", !0), $(".page-breadcrumbs").toggleClass("breadcrumbs-fixed")), $("#checkbox_fixedsidebar").is(":checked") || ($("#checkbox_fixedsidebar").prop("checked", !0), $(".page-sidebar").toggleClass("sidebar-fixed")), $("#checkbox_fixednavbar").is(":checked") || ($("#checkbox_fixednavbar").prop("checked", !0), $(".navbar").toggleClass("navbar-fixed-top")), setCookiesForFixedSettings()
    })
}

function getcolor(p) {
    switch (p) {
        case "themeprimary":
            return themeprimary;
        case "themesecondary":
            return themesecondary;
        case "themethirdcolor":
            return themethirdcolor;
        case "themefourthcolor":
            return themefourthcolor;
        case "themefifthcolor":
            return themefifthcolor;
        default:
            return p
    }
}

function switchClasses(p, R) {
    var y = document.getElementsByClassName(p);
    for (i = y.length - 1; i >= 0; i--) hasClass(y[i], "dropdown-menu") || (addClass(y[i], p + "-temp"), removeClass(y[i], p));
    var I = document.getElementsByClassName(R);
    for (i = I.length - 1; i >= 0; i--) hasClass(I[i], "dropdown-menu") || (addClass(I[i], p), removeClass(I[i], R));
    for (tempClasses = document.getElementsByClassName(p + "-temp"), i = tempClasses.length - 1; i >= 0; i--) hasClass(tempClasses[i], "dropdown-menu") || (addClass(tempClasses[i], R), removeClass(tempClasses[i], p + "-temp"))
}

function addClass(p, R) {
    var y = p.className;
    y && (y += " "), p.className = y + R
}

function removeClass(p, R) {
    p.className = (" " + p.className + " ").replace(" " + R, "").replace(/^\s+/g, "").replace(/\s+$/g, "")
}

function hasClass(p, R) {
    return -1 != (" " + p.className + " ").indexOf(" " + R + " ")
}

function Tip() {
    tt_Tip(arguments, null)
}

function TagToTip() {
    var p = tt_GetElt(arguments[0]);
    p && tt_Tip(arguments, p)
}

function UnTip() {
    tt_OpReHref(), tt_aV[DURATION] < 0 && 2 & tt_iState ? tt_tDurt.Timer("tt_HideInit()", -tt_aV[DURATION], !0) : tt_aV[STICKY] && 2 & tt_iState || tt_HideInit()
}

function tt_Extension() {
    return tt_ExtCmdEnum(), tt_aExt[tt_aExt.length] = this, this
}

function tt_SetTipPos(p, R) {
    var y = tt_aElt[0].style;
    if (tt_x = p, tt_y = R, y.left = p + "px", y.top = R + "px", tt_ie56) {
        var I = tt_aElt[tt_aElt.length - 1];
        I && (I.style.left = y.left, I.style.top = y.top)
    }
}

function tt_HideInit() {
    if (tt_iState) {
        if (tt_ExtCallFncs(0, "HideInit"), tt_iState &= -13, tt_flagOpa && tt_aV[FADEOUT] && (tt_tFade.EndTimer(), tt_opa)) {
            var p = Math.round(tt_aV[FADEOUT] / (tt_aV[FADEINTERVAL] * (tt_aV[OPACITY] / tt_opa)));
            return void tt_Fade(tt_opa, tt_opa, 0, p)
        }
        tt_tHide.Timer("tt_Hide();", 1, !1)
    }
}

function tt_Hide() {
    tt_db && tt_iState && (tt_OpReHref(), 2 & tt_iState && (tt_aElt[0].style.visibility = "hidden", tt_ExtCallFncs(0, "Hide")), tt_tShow.EndTimer(), tt_tHide.EndTimer(), tt_tDurt.EndTimer(), tt_tFade.EndTimer(), !tt_op && !tt_ie && (tt_tWaitMov.EndTimer(), tt_bWait = !1), (tt_aV[CLICKCLOSE] || tt_aV[CLICKSTICKY]) && tt_RemEvtFnc(document, "mouseup", tt_OnLClick), tt_ExtCallFncs(0, "Kill"), tt_t2t && !tt_aV[COPYCONTENT] && tt_UnEl2Tip(), tt_iState = 0, tt_over = null, tt_ResetMainDiv(), tt_aElt[tt_aElt.length - 1] && (tt_aElt[tt_aElt.length - 1].style.display = "none"))
}

function tt_GetElt(p) {
    return document.getElementById ? document.getElementById(p) : document.all ? document.all[p] : null
}

function tt_GetDivW(p) {
    return p && (p.offsetWidth || p.style.pixelWidth) || 0
}

function tt_GetDivH(p) {
    return p && (p.offsetHeight || p.style.pixelHeight) || 0
}

function tt_GetScrollX() {
    return window.pageXOffset || tt_db && tt_db.scrollLeft || 0
}

function tt_GetScrollY() {
    return window.pageYOffset || tt_db && tt_db.scrollTop || 0
}

function tt_GetClientW() {
    return tt_GetWndCliSiz("Width")
}

function tt_GetClientH() {
    return tt_GetWndCliSiz("Height")
}

function tt_GetEvtX(p) {
    return p ? typeof p.pageX != tt_u ? p.pageX : p.clientX + tt_GetScrollX() : 0
}

function tt_GetEvtY(p) {
    return p ? typeof p.pageY != tt_u ? p.pageY : p.clientY + tt_GetScrollY() : 0
}

function tt_AddEvtFnc(p, R, y) {
    p && (p.addEventListener ? p.addEventListener(R, y, !1) : p.attachEvent("on" + R, y))
}

function tt_RemEvtFnc(p, R, y) {
    p && (p.removeEventListener ? p.removeEventListener(R, y, !1) : p.detachEvent("on" + R, y))
}

function tt_GetDad(p) {
    return p.parentNode || p.parentElement || p.offsetParent
}

function tt_MovDomNode(p, R, y) {
    R && R.removeChild(p), y && y.appendChild(p)
}

function tt_Init() {
    tt_MkCmdEnum(), tt_Browser() && tt_MkMainDiv() && (tt_IsW3cBox(), tt_OpaSupport(), tt_AddEvtFnc(document, "mousemove", tt_Move), (TagsToTip || tt_Debug) && tt_SetOnloadFnc(), tt_AddEvtFnc(window, "unload", tt_Hide))
}

function tt_MkCmdEnum() {
    var n = 0;
    for (var i in config) eval("window." + i.toString().toUpperCase() + " = " + n++);
    tt_aV.length = n
}

function tt_Browser() {
    var n, nv, n6, w3c;
    if (n = navigator.userAgent.toLowerCase(), nv = navigator.appVersion, tt_op = document.defaultView && typeof eval("window.opera") != tt_u, tt_ie = -1 != n.indexOf("msie") && document.all && !tt_op, tt_ie) {
        var ieOld = !document.compatMode || "BackCompat" == document.compatMode;
        tt_db = ieOld ? document.body || null : document.documentElement, tt_db && (tt_ie56 = parseFloat(nv.substring(nv.indexOf("MSIE") + 5)) >= 5.5 && typeof document.body.style.maxHeight == tt_u)
    } else tt_db = document.documentElement || document.body || (document.getElementsByTagName ? document.getElementsByTagName("body")[0] : null), tt_op || (n6 = document.defaultView && typeof document.defaultView.getComputedStyle != tt_u, w3c = !n6 && document.getElementById);
    if (tt_body = document.getElementsByTagName ? document.getElementsByTagName("body")[0] : document.body || null, tt_ie || n6 || tt_op || w3c)
        if (tt_body && tt_db) {
            if (document.attachEvent || document.addEventListener) return !0
        } else tt_Err("wz_tooltip.js must be included INSIDE the body section, immediately after the opening <body> tag.", !1);
    return tt_db = null, !1
}

function tt_MkMainDiv() {
    return tt_body.insertAdjacentHTML ? tt_body.insertAdjacentHTML("afterBegin", tt_MkMainDivHtm()) : typeof tt_body.innerHTML != tt_u && document.createElement && tt_body.appendChild && tt_body.appendChild(tt_MkMainDivDom()), !(!window.tt_GetMainDivRefs || !tt_GetMainDivRefs()) || (tt_db = null, !1)
}

function tt_MkMainDivHtm() {
    return '<div id="WzTtDiV"></div>'
}

function tt_MkMainDivDom() {
    var p = document.createElement("div");
    return p && (p.id = "WzTtDiV"), p
}

function tt_GetMainDivRefs() {
    if (tt_aElt[0] = tt_GetElt("WzTtDiV"), tt_ie56 && tt_aElt[0] && (tt_aElt[tt_aElt.length - 1] = tt_GetElt("WzTtIfRm"), tt_aElt[tt_aElt.length - 1] || (tt_aElt[0] = null)), tt_aElt[0]) {
        var p = tt_aElt[0].style;
        return p.visibility = "hidden", p.position = "absolute", p.overflow = "hidden", !0
    }
    return !1
}

function tt_ResetMainDiv() {
    tt_SetTipPos(0, 0), tt_aElt[0].innerHTML = "", tt_aElt[0].style.width = "0px", tt_h = 0
}

function tt_IsW3cBox() {
    var p = tt_aElt[0].style;
    p.padding = "10px", p.width = "40px", tt_bBoxOld = 40 == tt_GetDivW(tt_aElt[0]), p.padding = "0px", tt_ResetMainDiv()
}

function tt_OpaSupport() {
    var p = tt_body.style;
    tt_flagOpa = typeof p.KhtmlOpacity != tt_u ? 2 : typeof p.KHTMLOpacity != tt_u ? 3 : typeof p.MozOpacity != tt_u ? 4 : typeof p.opacity != tt_u ? 5 : typeof p.filter != tt_u ? 1 : 0
}

function tt_SetOnloadFnc() {
    if (tt_AddEvtFnc(document, "DOMContentLoaded", tt_HideSrcTags), tt_AddEvtFnc(window, "load", tt_HideSrcTags), tt_body.attachEvent && tt_body.attachEvent("onreadystatechange", function() {
            "complete" == tt_body.readyState && tt_HideSrcTags()
        }), /WebKit|KHTML/i.test(navigator.userAgent)) var p = setInterval(function() {
        /loaded|complete/.test(document.readyState) && (clearInterval(p), tt_HideSrcTags())
    }, 10)
}

function tt_HideSrcTags() {
    !window.tt_HideSrcTags || window.tt_HideSrcTags.done || (window.tt_HideSrcTags.done = !0, tt_HideSrcTagsRecurs(tt_body) || tt_Err("There are HTML elements to be converted to tooltips.\nIf you want these HTML elements to be automatically hidden, you must edit wz_tooltip.js, and set TagsToTip in the global tooltip configuration to true.", !0))
}

function tt_HideSrcTagsRecurs(p) {
    for (var R, y, I = p.childNodes || p.children || null, H = I ? I.length : 0; H;)
        if (!tt_HideSrcTagsRecurs(I[--H]) || (R = I[H].getAttribute ? I[H].getAttribute("onmouseover") || I[H].getAttribute("onclick") : "function" == typeof I[H].onmouseover ? I[H].onmouseover || I[H].onclick : null) && (y = R.toString().match(/TagToTip\s*\(\s*'[^'.]+'\s*[\),]/)) && y.length && !tt_HideSrcTag(y[0])) return !1;
    return !0
}

function tt_HideSrcTag(p) {
    var R, y;
    if (y = tt_GetElt(R = p.replace(/.+'([^'.]+)'.+/, "$1"))) {
        if (tt_Debug && !TagsToTip) return !1;
        y.style.display = "none"
    } else tt_Err("Invalid ID\n'" + R + "'\npassed to TagToTip(). There exists no HTML element with that ID.", !0);
    return !0
}

function tt_Tip(p, R) {
    !tt_db || 8 & tt_iState || (tt_iState && tt_Hide(), tt_Enabled && (tt_t2t = R, tt_ReadCmds(p) && (tt_iState = 5, tt_AdaptConfig1(), tt_MkTipContent(p), tt_MkTipSubDivs(), tt_FormatTip(), tt_bJmpVert = !1, tt_bJmpHorz = !1, tt_maxPosX = tt_GetClientW() + tt_GetScrollX() - tt_w - 1, tt_maxPosY = tt_GetClientH() + tt_GetScrollY() - tt_h - 1, tt_AdaptConfig2(), tt_OverInit(), tt_ShowInit(), tt_Move())))
}

function tt_ReadCmds(p) {
    var R;
    for (var y in R = 0, config) tt_aV[R++] = config[y];
    if (1 & p.length) {
        for (R = p.length - 1; R > 0; R -= 2) tt_aV[p[R - 1]] = p[R];
        return !0
    }
    return tt_Err("Incorrect call of Tip() or TagToTip().\nEach command must be followed by a value.", !0), !1
}

function tt_AdaptConfig1() {
    if (tt_ExtCallFncs(0, "LoadConfig"), tt_aV[TITLEBGCOLOR].length || (tt_aV[TITLEBGCOLOR] = tt_aV[BORDERCOLOR]), tt_aV[TITLEFONTCOLOR].length || (tt_aV[TITLEFONTCOLOR] = tt_aV[BGCOLOR]), tt_aV[TITLEFONTFACE].length || (tt_aV[TITLEFONTFACE] = tt_aV[FONTFACE]), tt_aV[TITLEFONTSIZE].length || (tt_aV[TITLEFONTSIZE] = tt_aV[FONTSIZE]), tt_aV[CLOSEBTN]) {
        tt_aV[CLOSEBTNCOLORS] || (tt_aV[CLOSEBTNCOLORS] = new Array("", "", "", ""));
        for (var p = 4; p;) --p, tt_aV[CLOSEBTNCOLORS][p].length || (tt_aV[CLOSEBTNCOLORS][p] = 1 & p ? tt_aV[TITLEFONTCOLOR] : tt_aV[TITLEBGCOLOR]);
        tt_aV[TITLE].length || (tt_aV[TITLE] = " ")
    }
    100 == tt_aV[OPACITY] && typeof tt_aElt[0].style.MozOpacity != tt_u && !Array.every && (tt_aV[OPACITY] = 99), tt_aV[FADEIN] && tt_flagOpa && tt_aV[DELAY] > 100 && (tt_aV[DELAY] = Math.max(tt_aV[DELAY] - tt_aV[FADEIN], 100))
}

function tt_AdaptConfig2() {
    tt_aV[CENTERMOUSE] && (tt_aV[OFFSETX] -= tt_w - (tt_aV[SHADOW] ? tt_aV[SHADOWWIDTH] : 0) >> 1, tt_aV[JUMPHORZ] = !1)
}

function tt_MkTipContent(p) {
    tt_sContent = tt_t2t ? tt_aV[COPYCONTENT] ? tt_t2t.innerHTML : "" : p[0], tt_ExtCallFncs(0, "CreateContentString")
}

function tt_MkTipSubDivs() {
    var p = "position:relative;margin:0px;padding:0px;border-width:0px;left:0px;top:0px;line-height:normal;width:auto;",
        R = ' cellspacing="0" cellpadding="0" border="0" style="' + p + '"><tbody style="' + p + '"><tr><td ';
    tt_aElt[0].style.width = tt_GetClientW() + "px", tt_aElt[0].innerHTML = (tt_aV[TITLE].length ? '<div id="WzTiTl" style="position:relative;z-index:1;"><table id="WzTiTlTb"' + R + 'id="WzTiTlI" style="' + p + '">' + tt_aV[TITLE] + "</td>" + (tt_aV[CLOSEBTN] ? '<td align="right" style="' + p + 'text-align:right;"><span id="WzClOsE" style="position:relative;left:2px;padding-left:2px;padding-right:2px;cursor:' + (tt_ie ? "hand" : "pointer") + ';" onmouseover="tt_OnCloseBtnOver(1)" onmouseout="tt_OnCloseBtnOver(0)" onclick="tt_HideInit()">' + tt_aV[CLOSEBTNTEXT] + "</span></td>" : "") + "</tr></tbody></table></div>" : "") + '<div id="WzBoDy" style="position:relative;z-index:0;"><table' + R + 'id="WzBoDyI" style="' + p + '">' + tt_sContent + "</td></tr></tbody></table></div>" + (tt_aV[SHADOW] ? '<div id="WzTtShDwR" style="position:absolute;overflow:hidden;"></div><div id="WzTtShDwB" style="position:relative;overflow:hidden;"></div>' : ""), tt_GetSubDivRefs(), tt_t2t && !tt_aV[COPYCONTENT] && tt_El2Tip(), tt_ExtCallFncs(0, "SubDivsCreated")
}

function tt_GetSubDivRefs() {
    for (var p = new Array("WzTiTl", "WzTiTlTb", "WzTiTlI", "WzClOsE", "WzBoDy", "WzBoDyI", "WzTtShDwB", "WzTtShDwR"), R = p.length; R; --R) tt_aElt[R] = tt_GetElt(p[R - 1])
}

function tt_FormatTip() {
    var p, R, H, K, O, I = tt_aV[PADDING],
        P = tt_aV[BORDERWIDTH],
        J = I + P << 1;
    tt_aV[TITLE].length ? (H = tt_aV[TITLEPADDING], (p = tt_aElt[1].style).background = tt_aV[TITLEBGCOLOR], p.paddingTop = p.paddingBottom = H + "px", p.paddingLeft = p.paddingRight = H + 2 + "px", (p = tt_aElt[3].style).color = tt_aV[TITLEFONTCOLOR], -1 == tt_aV[WIDTH] && (p.whiteSpace = "nowrap"), p.fontFamily = tt_aV[TITLEFONTFACE], p.fontSize = tt_aV[TITLEFONTSIZE], p.fontWeight = "bold", p.textAlign = tt_aV[TITLEALIGN], tt_aElt[4] && ((p = tt_aElt[4].style).background = tt_aV[CLOSEBTNCOLORS][0], p.color = tt_aV[CLOSEBTNCOLORS][1], p.fontFamily = tt_aV[TITLEFONTFACE], p.fontSize = tt_aV[TITLEFONTSIZE], p.fontWeight = "bold"), tt_aV[WIDTH] > 0 ? tt_w = tt_aV[WIDTH] : (tt_w = tt_GetDivW(tt_aElt[3]) + tt_GetDivW(tt_aElt[4]), tt_aElt[4] && (tt_w += I), tt_aV[WIDTH] < -1 && tt_w > -tt_aV[WIDTH] && (tt_w = -tt_aV[WIDTH])), K = -P) : (tt_w = 0, K = 0), (p = tt_aElt[5].style).top = K + "px", P && (p.borderColor = tt_aV[BORDERCOLOR], p.borderStyle = tt_aV[BORDERSTYLE], p.borderWidth = P + "px"), tt_aV[BGCOLOR].length && (p.background = tt_aV[BGCOLOR]), tt_aV[BGIMG].length && (p.backgroundImage = "url(" + tt_aV[BGIMG] + ")"), p.padding = I + "px", p.textAlign = tt_aV[TEXTALIGN], tt_aV[HEIGHT] && (p.overflow = "auto", tt_aV[HEIGHT] > 0 ? p.height = tt_aV[HEIGHT] + J + "px" : tt_h = J - tt_aV[HEIGHT]), (p = tt_aElt[6].style).color = tt_aV[FONTCOLOR], p.fontFamily = tt_aV[FONTFACE], p.fontSize = tt_aV[FONTSIZE], p.fontWeight = tt_aV[FONTWEIGHT], p.textAlign = tt_aV[TEXTALIGN], tt_aV[WIDTH] > 0 ? R = tt_aV[WIDTH] : -1 == tt_aV[WIDTH] && tt_w ? R = tt_w : (R = tt_GetDivW(tt_aElt[6]), tt_aV[WIDTH] < -1 && R > -tt_aV[WIDTH] && (R = -tt_aV[WIDTH])), R > tt_w && (tt_w = R), tt_w += J, tt_aV[SHADOW] ? (tt_w += tt_aV[SHADOWWIDTH], O = Math.floor(4 * tt_aV[SHADOWWIDTH] / 3), (p = tt_aElt[7].style).top = K + "px", p.left = O + "px", p.width = tt_w - O - tt_aV[SHADOWWIDTH] + "px", p.height = tt_aV[SHADOWWIDTH] + "px", p.background = tt_aV[SHADOWCOLOR], (p = tt_aElt[8].style).top = O + "px", p.left = tt_w - tt_aV[SHADOWWIDTH] + "px", p.width = tt_aV[SHADOWWIDTH] + "px", p.background = tt_aV[SHADOWCOLOR]) : O = 0, tt_SetTipOpa(tt_aV[FADEIN] ? 0 : tt_aV[OPACITY]), tt_FixSize(K, O)
}

function tt_FixSize(p, R) {
    var y, I, J, K = tt_aV[PADDING],
        O = tt_aV[BORDERWIDTH];
    tt_aElt[0].style.width = tt_w + "px", tt_aElt[0].style.pixelWidth = tt_w, y = I = tt_w - (tt_aV[SHADOW] ? tt_aV[SHADOWWIDTH] : 0), tt_bBoxOld || (y -= K + O << 1), tt_aElt[5].style.width = y + "px", tt_aElt[1] && (y = I - (tt_aV[TITLEPADDING] + 2 << 1), tt_bBoxOld || (I = y), tt_aElt[1].style.width = I + "px", tt_aElt[2].style.width = y + "px"), tt_h && tt_GetDivH(tt_aElt[5]) > tt_h && (tt_bBoxOld || (tt_h -= K + O << 1), tt_aElt[5].style.height = tt_h + "px"), tt_h = tt_GetDivH(tt_aElt[0]) + p, tt_aElt[8] && (tt_aElt[8].style.height = tt_h - R + "px"), tt_aElt[J = tt_aElt.length - 1] && (tt_aElt[J].style.width = tt_w + "px", tt_aElt[J].style.height = tt_h + "px")
}

function tt_DeAlt(p) {
    var R;
    if (p && (p.alt && (p.alt = ""), p.title && (p.title = ""), R = p.childNodes || p.children || null))
        for (var y = R.length; y;) tt_DeAlt(R[--y])
}

function tt_OpDeHref(p) {
    if (tt_op)
        for (tt_elDeHref && tt_OpReHref(); p;) {
            if (p.hasAttribute && p.hasAttribute("href")) {
                p.t_href = p.getAttribute("href"), p.t_stats = window.status, p.removeAttribute("href"), p.style.cursor = "hand", tt_AddEvtFnc(p, "mousedown", tt_OpReHref), window.status = p.t_href, tt_elDeHref = p;
                break
            }
            p = tt_GetDad(p)
        }
}

function tt_OpReHref() {
    tt_elDeHref && (tt_elDeHref.setAttribute("href", tt_elDeHref.t_href), tt_RemEvtFnc(tt_elDeHref, "mousedown", tt_OpReHref), window.status = tt_elDeHref.t_stats, tt_elDeHref = null)
}

function tt_El2Tip() {
    var p = tt_t2t.style;
    tt_t2t.t_cp = p.position, tt_t2t.t_cl = p.left, tt_t2t.t_ct = p.top, tt_t2t.t_cd = p.display, tt_t2tDad = tt_GetDad(tt_t2t), tt_MovDomNode(tt_t2t, tt_t2tDad, tt_aElt[6]), p.display = "block", p.position = "static", p.left = p.top = p.marginLeft = p.marginTop = "0px"
}

function tt_UnEl2Tip() {
    var p = tt_t2t.style;
    p.display = tt_t2t.t_cd, tt_MovDomNode(tt_t2t, tt_GetDad(tt_t2t), tt_t2tDad), p.position = tt_t2t.t_cp, p.left = tt_t2t.t_cl, p.top = tt_t2t.t_ct, tt_t2tDad = null
}

function tt_OverInit() {
    tt_DeAlt(tt_over = window.event ? window.event.target || window.event.srcElement : tt_ovr_), tt_OpDeHref(tt_over)
}

function tt_ShowInit() {
    tt_tShow.Timer("tt_Show()", tt_aV[DELAY], !0), (tt_aV[CLICKCLOSE] || tt_aV[CLICKSTICKY]) && tt_AddEvtFnc(document, "mouseup", tt_OnLClick)
}

function tt_Show() {
    var p = tt_aElt[0].style;
    p.zIndex = Math.max(window.dd && dd.z ? dd.z + 2 : 0, 1010), (tt_aV[STICKY] || !tt_aV[FOLLOWMOUSE]) && (tt_iState &= -5), tt_aV[EXCLUSIVE] && (tt_iState |= 8), tt_aV[DURATION] > 0 && tt_tDurt.Timer("tt_HideInit()", tt_aV[DURATION], !0), tt_ExtCallFncs(0, "Show"), p.visibility = "visible", tt_iState |= 2, tt_aV[FADEIN] && tt_Fade(0, 0, tt_aV[OPACITY], Math.round(tt_aV[FADEIN] / tt_aV[FADEINTERVAL])), tt_ShowIfrm()
}

function tt_ShowIfrm() {
    if (tt_ie56) {
        var p = tt_aElt[tt_aElt.length - 1];
        if (p) {
            var R = p.style;
            R.zIndex = tt_aElt[0].style.zIndex - 1, R.display = "block"
        }
    }
}

function tt_Move(p) {
    if (p && (tt_ovr_ = p.target || p.srcElement), (p = p || window.event) && (tt_musX = tt_GetEvtX(p), tt_musY = tt_GetEvtY(p)), 4 & tt_iState) {
        if (!tt_op && !tt_ie) {
            if (tt_bWait) return;
            tt_bWait = !0, tt_tWaitMov.Timer("tt_bWait = false;", 1, !0)
        }
        tt_aV[FIX] ? (tt_iState &= -5, tt_PosFix()) : tt_ExtCallFncs(p, "MoveBefore") || tt_SetTipPos(tt_Pos(0), tt_Pos(1)), tt_ExtCallFncs([tt_musX, tt_musY], "MoveAfter")
    }
}

function tt_Pos(p) {
    var R, y, I, H, P, K, O, J, mt;
    return p ? (y = tt_aV[JUMPVERT], I = ABOVE, H = OFFSETY, P = tt_h, K = tt_maxPosY, O = tt_GetScrollY(), J = tt_musY, mt = tt_bJmpVert) : (y = tt_aV[JUMPHORZ], I = LEFT, H = OFFSETX, P = tt_w, K = tt_maxPosX, O = tt_GetScrollX(), J = tt_musX, mt = tt_bJmpHorz), y ? R = tt_aV[I] && (!mt || tt_CalcPosAlt(p) >= O + 16) || !tt_aV[I] && mt && tt_CalcPosDef(p) > K - 16 ? tt_PosAlt(p) : tt_PosDef(p) : (R = J, tt_aV[I] ? R -= P + tt_aV[H] - (tt_aV[SHADOW] ? tt_aV[SHADOWWIDTH] : 0) : R += tt_aV[H]), R > K && (R = y ? tt_PosAlt(p) : K), R < O && (R = y ? tt_PosDef(p) : O), R
}

function tt_PosDef(p) {
    return p ? tt_bJmpVert = tt_aV[ABOVE] : tt_bJmpHorz = tt_aV[LEFT], tt_CalcPosDef(p)
}

function tt_PosAlt(p) {
    return p ? tt_bJmpVert = !tt_aV[ABOVE] : tt_bJmpHorz = !tt_aV[LEFT], tt_CalcPosAlt(p)
}

function tt_CalcPosDef(p) {
    return p ? tt_musY + tt_aV[OFFSETY] : tt_musX + tt_aV[OFFSETX]
}

function tt_CalcPosAlt(p) {
    var R = p ? OFFSETY : OFFSETX,
        y = tt_aV[R] - (tt_aV[SHADOW] ? tt_aV[SHADOWWIDTH] : 0);
    return tt_aV[R] > 0 && y <= 0 && (y = 1), (p ? tt_musY - tt_h : tt_musX - tt_w) - y
}

function tt_PosFix() {
    var p, R;
    if ("number" == typeof tt_aV[FIX][0]) p = tt_aV[FIX][0], R = tt_aV[FIX][1];
    else
        for ("string" == typeof tt_aV[FIX][0] ? el = tt_GetElt(tt_aV[FIX][0]) : el = tt_aV[FIX][0], p = tt_aV[FIX][1], R = tt_aV[FIX][2], !tt_aV[ABOVE] && el && (R += tt_GetDivH(el)); el; el = el.offsetParent) p += el.offsetLeft || 0, R += el.offsetTop || 0;
    tt_aV[ABOVE] && (R -= tt_h), tt_SetTipPos(p, R)
}

function tt_Fade(p, R, y, I) {
    I && (R += Math.round((y - R) / I), (y > p ? R >= y : R <= y) ? R = y : tt_tFade.Timer("tt_Fade(" + p + "," + R + "," + y + "," + (I - 1) + ")", tt_aV[FADEINTERVAL], !0)), R ? tt_SetTipOpa(R) : tt_Hide()
}

function tt_SetTipOpa(p) {
    tt_SetOpa(tt_aElt[5], p), tt_aElt[1] && tt_SetOpa(tt_aElt[1], p), tt_aV[SHADOW] && (p = Math.round(.8 * p), tt_SetOpa(tt_aElt[7], p), tt_SetOpa(tt_aElt[8], p))
}

function tt_OnCloseBtnOver(p) {
    var R = tt_aElt[4].style;
    p <<= 1, R.background = tt_aV[CLOSEBTNCOLORS][p], R.color = tt_aV[CLOSEBTNCOLORS][p + 1]
}

function tt_OnLClick(p) {
    (p = p || window.event).button && 2 & p.button || p.which && 3 == p.which || (tt_aV[CLICKSTICKY] && 4 & tt_iState ? (tt_aV[STICKY] = !0, tt_iState &= -5) : tt_aV[CLICKCLOSE] && tt_HideInit())
}

function tt_Int(p) {
    var R;
    return isNaN(R = parseInt(p)) ? 0 : R
}

function tt_GetWndCliSiz(p) {
    var R, P, y = window["inner" + p],
        I = "client" + p,
        H = "number";
    return typeof y == H ? (R = document.body) && typeof(P = R[I]) == H && P && P <= y || (R = document.documentElement) && typeof(P = R[I]) == H && P && P <= y ? P : y : (R = document.documentElement) && (y = R[I]) ? y : document.body[I]
}

function tt_SetOpa(p, R) {
    var y = p.style;
    if (tt_opa = R, 1 == tt_flagOpa)
        if (R < 100) {
            typeof p.filtNo == tt_u && (p.filtNo = y.filter);
            var I = "hidden" != y.visibility;
            y.zoom = "100%", I || (y.visibility = "visible"), y.filter = "alpha(opacity=" + R + ")", I || (y.visibility = "hidden")
        } else typeof p.filtNo != tt_u && (y.filter = p.filtNo);
    else switch (R /= 100, tt_flagOpa) {
        case 2:
            y.KhtmlOpacity = R;
            break;
        case 3:
            y.KHTMLOpacity = R;
            break;
        case 4:
            y.MozOpacity = R;
            break;
        case 5:
            y.opacity = R
    }
}

function tt_Err(p, R) {
    (tt_Debug || !R) && alert("Tooltip Script Error Message:\n\n" + p)
}

function tt_ExtCmdEnum() {
    var s;
    for (var i in config) s = "window." + i.toString().toUpperCase(), eval("typeof(" + s + ") == tt_u") && (eval(s + " = " + tt_aV.length), tt_aV[tt_aV.length] = null)
}

function tt_ExtCallFncs(p, R) {
    for (var y = !1, I = tt_aExt.length; I;) {
        --I;
        var H = tt_aExt[I]["On" + R];
        H && H(p) && (y = !0)
    }
    return y
}
$("[data-toggle=tooltip]").tooltip({
        html: !0
    }),
    function(p) {
        p.fn.extend({
            slimScroll: function(R) {
                var y = p.extend({
                    width: "auto",
                    height: "250px",
                    size: "7px",
                    color: "#000",
                    position: "right",
                    distance: "1px",
                    start: "top",
                    opacity: .4,
                    alwaysVisible: !1,
                    disableFadeOut: !1,
                    railVisible: !1,
                    railColor: "#333",
                    railOpacity: .2,
                    railDraggable: !0,
                    railClass: "slimScrollRail",
                    barClass: "slimScrollBar",
                    wrapperClass: "slimScrollDiv",
                    allowPageScroll: !1,
                    wheelStep: 20,
                    touchScrollStep: 200,
                    borderRadius: "7px",
                    railBorderRadius: "7px"
                }, R);
                return this.each(function() {
                    function I(_) {
                        if (J) {
                            var Jt = 0;
                            (_ = _ || window.event).wheelDelta && (Jt = -_.wheelDelta / 120), _.detail && (Jt = _.detail / 3), p(_.target || _.srcTarget || _.srcElement).closest("." + y.wrapperClass).is(G.parent()) && H(Jt, !0), _.preventDefault && !M && _.preventDefault(), M || (_.returnValue = !1)
                        }
                    }

                    function H(_, Jt, jt) {
                        M = !1;
                        var Wt = G.outerHeight() - dt.outerHeight();
                        Jt && (Jt = parseInt(dt.css("top")) + _ * parseInt(y.wheelStep) / 100 * dt.outerHeight(), Jt = Math.min(Math.max(Jt, 0), Wt), Jt = 0 < _ ? Math.ceil(Jt) : Math.floor(Jt), dt.css({
                            top: Jt + "px"
                        })), Jt = (nt = parseInt(dt.css("top")) / (G.outerHeight() - dt.outerHeight())) * (G[0].scrollHeight - G.outerHeight()), jt && (_ = (Jt = _) / G[0].scrollHeight * G.outerHeight(), _ = Math.min(Math.max(_, 0), Wt), dt.css({
                            top: _ + "px"
                        })), G.scrollTop(Jt), G.trigger("slimscrolling", ~~Jt), K(), O()
                    }

                    function P() {
                        tt = Math.max(G.outerHeight() / G[0].scrollHeight * G.outerHeight(), 30), dt.css({
                            height: tt + "px"
                        });
                        var _ = tt == G.outerHeight() ? "none" : "block";
                        dt.css({
                            display: _
                        })
                    }

                    function K() {
                        P(), clearTimeout(A), nt == ~~nt ? (M = y.allowPageScroll, lt != nt && G.trigger("slimscroll", ~~nt ? "bottom" : "top")) : M = !1, lt = nt, tt >= G.outerHeight() ? M = !0 : (dt.stop(!0, !0).fadeIn("fast"), y.railVisible && Bt.stop(!0, !0).fadeIn("fast"))
                    }

                    function O() {
                        y.alwaysVisible || (A = setTimeout(function() {
                            y.disableFadeOut && J || mt || Z || (dt.fadeOut("slow"), Bt.fadeOut("slow"))
                        }, 1e3))
                    }
                    var J, mt, Z, A, q, tt, nt, lt, M = !1,
                        G = p(this);
                    if (G.parent().hasClass(y.wrapperClass)) {
                        var et = G.scrollTop(),
                            dt = G.siblings("." + y.barClass),
                            Bt = G.siblings("." + y.railClass);
                        if (P(), p.isPlainObject(R)) {
                            if ("height" in R && "auto" == R.height) {
                                G.parent().css("height", "auto"), G.css("height", "auto");
                                var wt = G.parent().parent().height();
                                G.parent().css("height", wt), G.css("height", wt)
                            } else "height" in R && (wt = R.height, G.parent().css("height", wt), G.css("height", wt));
                            if ("scrollTo" in R) et = parseInt(y.scrollTo);
                            else if ("scrollBy" in R) et += parseInt(y.scrollBy);
                            else if ("destroy" in R) return dt.remove(), Bt.remove(), void G.unwrap();
                            H(et, !1, !0)
                        }
                    } else p.isPlainObject(R) && "destroy" in R || (y.height = "auto" == y.height ? G.parent().height() : y.height, et = p("<div></div>").addClass(y.wrapperClass).css({
                        position: "relative",
                        overflow: "hidden",
                        width: y.width,
                        height: y.height
                    }), G.css({
                        overflow: "hidden",
                        width: y.width,
                        height: y.height
                    }), Bt = p("<div></div>").addClass(y.railClass).css({
                        width: y.size,
                        height: "100%",
                        position: "absolute",
                        top: 0,
                        display: y.alwaysVisible && y.railVisible ? "block" : "none",
                        "border-radius": y.railBorderRadius,
                        background: y.railColor,
                        opacity: y.railOpacity,
                        zIndex: 90
                    }), dt = p("<div></div>").addClass(y.barClass).css({
                        background: y.color,
                        width: y.size,
                        position: "absolute",
                        top: 0,
                        opacity: y.opacity,
                        display: y.alwaysVisible ? "block" : "none",
                        "border-radius": y.borderRadius,
                        BorderRadius: y.borderRadius,
                        MozBorderRadius: y.borderRadius,
                        WebkitBorderRadius: y.borderRadius,
                        zIndex: 99
                    }), Bt.css(wt = "right" == y.position ? {
                        right: y.distance
                    } : {
                        left: y.distance
                    }), dt.css(wt), G.wrap(et), G.parent().append(dt), G.parent().append(Bt), y.railDraggable && dt.bind("mousedown", function(Wt) {
                        var be = p(document);
                        return Z = !0, t = parseFloat(dt.css("top")), pageY = Wt.pageY, be.bind("mousemove.slimscroll", function(Kt) {
                            currTop = t + Kt.pageY - pageY, dt.css("top", currTop), H(0, dt.position().top, !1)
                        }), be.bind("mouseup.slimscroll", function(Kt) {
                            Z = !1, O(), be.unbind(".slimscroll")
                        }), !1
                    }).bind("selectstart.slimscroll", function(Wt) {
                        return Wt.stopPropagation(), Wt.preventDefault(), !1
                    }), Bt.hover(function() {
                        K()
                    }, function() {
                        O()
                    }), dt.hover(function() {
                        mt = !0
                    }, function() {
                        mt = !1
                    }), G.hover(function() {
                        J = !0, K(), O()
                    }, function() {
                        J = !1, O()
                    }), G.bind("touchstart", function(Wt, be) {
                        Wt.originalEvent.touches.length && (q = Wt.originalEvent.touches[0].pageY)
                    }), G.bind("touchmove", function(Wt) {
                        M || Wt.originalEvent.preventDefault(), Wt.originalEvent.touches.length && (H((q - Wt.originalEvent.touches[0].pageY) / y.touchScrollStep, !0), q = Wt.originalEvent.touches[0].pageY)
                    }), P(), "bottom" === y.start ? (dt.css({
                        top: G.outerHeight() - dt.outerHeight()
                    }), H(0, !0)) : "top" !== y.start && (H(p(y.start).position().top, null, !0), y.alwaysVisible || dt.hide()), window.addEventListener ? (this.addEventListener("DOMMouseScroll", I, !1), this.addEventListener("mousewheel", I, !1)) : document.attachEvent("onmousewheel", I))
                }), this
            }
        }), p.fn.extend({
            slimscroll: p.fn.slimScroll
        })
    }(jQuery),
    function(p) {
        "object" == typeof module && module.exports ? module.exports = p() : window.intlTelInput = p()
    }(() => (() => {
        var R = Object.defineProperty,
            y = Object.getOwnPropertyDescriptor,
            I = Object.getOwnPropertyNames,
            H = Object.prototype.hasOwnProperty,
            J = {};
        ((it, ot) => {
            for (var St in ot) R(it, St, {
                get: ot[St],
                enumerable: !0
            })
        })(J, {
            Iti: () => Kt,
            default: () => Yt
        });
        var mt = [
                ["af", "93"],
                ["ax", "358", 1],
                ["al", "355"],
                ["dz", "213"],
                ["as", "1", 5, ["684"]],
                ["ad", "376"],
                ["ao", "244"],
                ["ai", "1", 6, ["264"]],
                ["ag", "1", 7, ["268"]],
                ["ar", "54"],
                ["am", "374"],
                ["aw", "297"],
                ["ac", "247"],
                ["au", "61", 0, null, "0"],
                ["at", "43"],
                ["az", "994"],
                ["bs", "1", 8, ["242"]],
                ["bh", "973"],
                ["bd", "880"],
                ["bb", "1", 9, ["246"]],
                ["by", "375"],
                ["be", "32"],
                ["bz", "501"],
                ["bj", "229"],
                ["bm", "1", 10, ["441"]],
                ["bt", "975"],
                ["bo", "591"],
                ["ba", "387"],
                ["bw", "267"],
                ["br", "55"],
                ["io", "246"],
                ["vg", "1", 11, ["284"]],
                ["bn", "673"],
                ["bg", "359"],
                ["bf", "226"],
                ["bi", "257"],
                ["kh", "855"],
                ["cm", "237"],
                ["ca", "1", 1, ["204", "226", "236", "249", "250", "263", "289", "306", "343", "354", "365", "367", "368", "382", "387", "403", "416", "418", "428", "431", "437", "438", "450", "584", "468", "474", "506", "514", "519", "548", "579", "581", "584", "587", "604", "613", "639", "647", "672", "683", "705", "709", "742", "753", "778", "780", "782", "807", "819", "825", "867", "873", "879", "902", "905"]],
                ["cv", "238"],
                ["bq", "599", 1, ["3", "4", "7"]],
                ["ky", "1", 12, ["345"]],
                ["cf", "236"],
                ["td", "235"],
                ["cl", "56"],
                ["cn", "86"],
                ["cx", "61", 2, ["89164"], "0"],
                ["cc", "61", 1, ["89162"], "0"],
                ["co", "57"],
                ["km", "269"],
                ["cg", "242"],
                ["cd", "243"],
                ["ck", "682"],
                ["cr", "506"],
                ["ci", "225"],
                ["hr", "385"],
                ["cu", "53"],
                ["cw", "599", 0],
                ["cy", "357"],
                ["cz", "420"],
                ["dk", "45"],
                ["dj", "253"],
                ["dm", "1", 13, ["767"]],
                ["do", "1", 2, ["809", "829", "849"]],
                ["ec", "593"],
                ["eg", "20"],
                ["sv", "503"],
                ["gq", "240"],
                ["er", "291"],
                ["ee", "372"],
                ["sz", "268"],
                ["et", "251"],
                ["fk", "500"],
                ["fo", "298"],
                ["fj", "679"],
                ["fi", "358", 0],
                ["fr", "33"],
                ["gf", "594"],
                ["pf", "689"],
                ["ga", "241"],
                ["gm", "220"],
                ["ge", "995"],
                ["de", "49"],
                ["gh", "233"],
                ["gi", "350"],
                ["gr", "30"],
                ["gl", "299"],
                ["gd", "1", 14, ["473"]],
                ["gp", "590", 0],
                ["gu", "1", 15, ["671"]],
                ["gt", "502"],
                ["gg", "44", 1, ["1481", "7781", "7839", "7911"], "0"],
                ["gn", "224"],
                ["gw", "245"],
                ["gy", "592"],
                ["ht", "509"],
                ["hn", "504"],
                ["hk", "852"],
                ["hu", "36"],
                ["is", "354"],
                ["in", "91"],
                ["id", "62"],
                ["ir", "98"],
                ["iq", "964"],
                ["ie", "353"],
                ["im", "44", 2, ["1624", "74576", "7524", "7924", "7624"], "0"],
                ["il", "972"],
                ["it", "39", 0],
                ["jm", "1", 4, ["876", "658"]],
                ["jp", "81"],
                ["je", "44", 3, ["1534", "7509", "7700", "7797", "7829", "7937"], "0"],
                ["jo", "962"],
                ["kz", "7", 1, ["33", "7"], "8"],
                ["ke", "254"],
                ["ki", "686"],
                ["xk", "383"],
                ["kw", "965"],
                ["kg", "996"],
                ["la", "856"],
                ["lv", "371"],
                ["lb", "961"],
                ["ls", "266"],
                ["lr", "231"],
                ["ly", "218"],
                ["li", "423"],
                ["lt", "370"],
                ["lu", "352"],
                ["mo", "853"],
                ["mg", "261"],
                ["mw", "265"],
                ["my", "60"],
                ["mv", "960"],
                ["ml", "223"],
                ["mt", "356"],
                ["mh", "692"],
                ["mq", "596"],
                ["mr", "222"],
                ["mu", "230"],
                ["yt", "262", 1, ["269", "639"], "0"],
                ["mx", "52"],
                ["fm", "691"],
                ["md", "373"],
                ["mc", "377"],
                ["mn", "976"],
                ["me", "382"],
                ["ms", "1", 16, ["664"]],
                ["ma", "212", 0, null, "0"],
                ["mz", "258"],
                ["mm", "95"],
                ["na", "264"],
                ["nr", "674"],
                ["np", "977"],
                ["nl", "31"],
                ["nc", "687"],
                ["nz", "64"],
                ["ni", "505"],
                ["ne", "227"],
                ["ng", "234"],
                ["nu", "683"],
                ["nf", "672"],
                ["kp", "850"],
                ["mk", "389"],
                ["mp", "1", 17, ["670"]],
                ["no", "47", 0],
                ["om", "968"],
                ["pk", "92"],
                ["pw", "680"],
                ["ps", "970"],
                ["pa", "507"],
                ["pg", "675"],
                ["py", "595"],
                ["pe", "51"],
                ["ph", "63"],
                ["pl", "48"],
                ["pt", "351"],
                ["pr", "1", 3, ["787", "939"]],
                ["qa", "974"],
                ["re", "262", 0, null, "0"],
                ["ro", "40"],
                ["ru", "7", 0, null, "8"],
                ["rw", "250"],
                ["ws", "685"],
                ["sm", "378"],
                ["st", "239"],
                ["sa", "966"],
                ["sn", "221"],
                ["rs", "381"],
                ["sc", "248"],
                ["sl", "232"],
                ["sg", "65"],
                ["sx", "1", 21, ["721"]],
                ["sk", "421"],
                ["si", "386"],
                ["sb", "677"],
                ["so", "252"],
                ["za", "27"],
                ["kr", "82"],
                ["ss", "211"],
                ["es", "34"],
                ["lk", "94"],
                ["bl", "590", 1],
                ["sh", "290"],
                ["kn", "1", 18, ["869"]],
                ["lc", "1", 19, ["758"]],
                ["mf", "590", 2],
                ["pm", "508"],
                ["vc", "1", 20, ["784"]],
                ["sd", "249"],
                ["sr", "597"],
                ["sj", "47", 1, ["79"]],
                ["se", "46"],
                ["ch", "41"],
                ["sy", "963"],
                ["tw", "886"],
                ["tj", "992"],
                ["tz", "255"],
                ["th", "66"],
                ["tl", "670"],
                ["tg", "228"],
                ["tk", "690"],
                ["to", "676"],
                ["tt", "1", 22, ["868"]],
                ["tn", "216"],
                ["tr", "90"],
                ["tm", "993"],
                ["tc", "1", 23, ["649"]],
                ["tv", "688"],
                ["ug", "256"],
                ["ua", "380"],
                ["ae", "971"],
                ["gb", "44", 0, null, "0"],
                ["us", "1", 0],
                ["uy", "598"],
                ["vi", "1", 24, ["340"]],
                ["uz", "998"],
                ["vu", "678"],
                ["va", "39", 1, ["06698"]],
                ["ve", "58"],
                ["vn", "84"],
                ["wf", "681"],
                ["eh", "212", 1, ["5288", "5289"], "0"],
                ["ye", "967"],
                ["zm", "260"],
                ["zw", "263"]
            ],
            Z = [];
        for (let it = 0; it < mt.length; it++) {
            let ot = mt[it];
            Z[it] = {
                name: "",
                iso2: ot[0],
                dialCode: ot[1],
                priority: ot[2] || 0,
                areaCodes: ot[3] || null,
                nodeById: {},
                nationalPrefix: ot[4] || null
            }
        }
        var A = Z,
            G = {
                ad: "Andorra",
                ae: "United Arab Emirates",
                af: "Afghanistan",
                ag: "Antigua & Barbuda",
                ai: "Anguilla",
                al: "Albania",
                am: "Armenia",
                ao: "Angola",
                ar: "Argentina",
                as: "American Samoa",
                at: "Austria",
                au: "Australia",
                aw: "Aruba",
                ax: "\xc5land Islands",
                az: "Azerbaijan",
                ba: "Bosnia & Herzegovina",
                bb: "Barbados",
                bd: "Bangladesh",
                be: "Belgium",
                bf: "Burkina Faso",
                bg: "Bulgaria",
                bh: "Bahrain",
                bi: "Burundi",
                bj: "Benin",
                bl: "St. Barth\xe9lemy",
                bm: "Bermuda",
                bn: "Brunei",
                bo: "Bolivia",
                bq: "Caribbean Netherlands",
                br: "Brazil",
                bs: "Bahamas",
                bt: "Bhutan",
                bw: "Botswana",
                by: "Belarus",
                bz: "Belize",
                ca: "Canada",
                cc: "Cocos (Keeling) Islands",
                cd: "Congo - Kinshasa",
                cf: "Central African Republic",
                cg: "Congo - Brazzaville",
                ch: "Switzerland",
                ci: "C\xf4te d\u2019Ivoire",
                ck: "Cook Islands",
                cl: "Chile",
                cm: "Cameroon",
                cn: "China",
                co: "Colombia",
                cr: "Costa Rica",
                cu: "Cuba",
                cv: "Cape Verde",
                cw: "Cura\xe7ao",
                cx: "Christmas Island",
                cy: "Cyprus",
                cz: "Czechia",
                de: "Germany",
                dj: "Djibouti",
                dk: "Denmark",
                dm: "Dominica",
                do: "Dominican Republic",
                dz: "Algeria",
                ec: "Ecuador",
                ee: "Estonia",
                eg: "Egypt",
                eh: "Western Sahara",
                er: "Eritrea",
                es: "Spain",
                et: "Ethiopia",
                fi: "Finland",
                fj: "Fiji",
                fk: "Falkland Islands",
                fm: "Micronesia",
                fo: "Faroe Islands",
                fr: "France",
                ga: "Gabon",
                gb: "United Kingdom",
                gd: "Grenada",
                ge: "Georgia",
                gf: "French Guiana",
                gg: "Guernsey",
                gh: "Ghana",
                gi: "Gibraltar",
                gl: "Greenland",
                gm: "Gambia",
                gn: "Guinea",
                gp: "Guadeloupe",
                gq: "Equatorial Guinea",
                gr: "Greece",
                gt: "Guatemala",
                gu: "Guam",
                gw: "Guinea-Bissau",
                gy: "Guyana",
                hk: "Hong Kong SAR China",
                hn: "Honduras",
                hr: "Croatia",
                ht: "Haiti",
                hu: "Hungary",
                id: "Indonesia",
                ie: "Ireland",
                il: "Israel",
                im: "Isle of Man",
                in: "India",
                io: "British Indian Ocean Territory",
                iq: "Iraq",
                ir: "Iran",
                is: "Iceland",
                it: "Italy",
                je: "Jersey",
                jm: "Jamaica",
                jo: "Jordan",
                jp: "Japan",
                ke: "Kenya",
                kg: "Kyrgyzstan",
                kh: "Cambodia",
                ki: "Kiribati",
                km: "Comoros",
                kn: "St. Kitts & Nevis",
                kp: "North Korea",
                kr: "South Korea",
                kw: "Kuwait",
                ky: "Cayman Islands",
                kz: "Kazakhstan",
                la: "Laos",
                lb: "Lebanon",
                lc: "St. Lucia",
                li: "Liechtenstein",
                lk: "Sri Lanka",
                lr: "Liberia",
                ls: "Lesotho",
                lt: "Lithuania",
                lu: "Luxembourg",
                lv: "Latvia",
                ly: "Libya",
                ma: "Morocco",
                mc: "Monaco",
                md: "Moldova",
                me: "Montenegro",
                mf: "St. Martin",
                mg: "Madagascar",
                mh: "Marshall Islands",
                mk: "North Macedonia",
                ml: "Mali",
                mm: "Myanmar (Burma)",
                mn: "Mongolia",
                mo: "Macao SAR China",
                mp: "Northern Mariana Islands",
                mq: "Martinique",
                mr: "Mauritania",
                ms: "Montserrat",
                mt: "Malta",
                mu: "Mauritius",
                mv: "Maldives",
                mw: "Malawi",
                mx: "Mexico",
                my: "Malaysia",
                mz: "Mozambique",
                na: "Namibia",
                nc: "New Caledonia",
                ne: "Niger",
                nf: "Norfolk Island",
                ng: "Nigeria",
                ni: "Nicaragua",
                nl: "Netherlands",
                no: "Norway",
                np: "Nepal",
                nr: "Nauru",
                nu: "Niue",
                nz: "New Zealand",
                om: "Oman",
                pa: "Panama",
                pe: "Peru",
                pf: "French Polynesia",
                pg: "Papua New Guinea",
                ph: "Philippines",
                pk: "Pakistan",
                pl: "Poland",
                pm: "St. Pierre & Miquelon",
                pr: "Puerto Rico",
                ps: "Palestinian Territories",
                pt: "Portugal",
                pw: "Palau",
                py: "Paraguay",
                qa: "Qatar",
                re: "R\xe9union",
                ro: "Romania",
                rs: "Serbia",
                ru: "Russia",
                rw: "Rwanda",
                sa: "Saudi Arabia",
                sb: "Solomon Islands",
                sc: "Seychelles",
                sd: "Sudan",
                se: "Sweden",
                sg: "Singapore",
                sh: "St. Helena",
                si: "Slovenia",
                sj: "Svalbard & Jan Mayen",
                sk: "Slovakia",
                sl: "Sierra Leone",
                sm: "San Marino",
                sn: "Senegal",
                so: "Somalia",
                sr: "Suriname",
                ss: "South Sudan",
                st: "S\xe3o Tom\xe9 & Pr\xedncipe",
                sv: "El Salvador",
                sx: "Sint Maarten",
                sy: "Syria",
                sz: "Eswatini",
                tc: "Turks & Caicos Islands",
                td: "Chad",
                tg: "Togo",
                th: "Thailand",
                tj: "Tajikistan",
                tk: "Tokelau",
                tl: "Timor-Leste",
                tm: "Turkmenistan",
                tn: "Tunisia",
                to: "Tonga",
                tr: "Turkey",
                tt: "Trinidad & Tobago",
                tv: "Tuvalu",
                tw: "Taiwan",
                tz: "Tanzania",
                ua: "Ukraine",
                ug: "Uganda",
                us: "United States",
                uy: "Uruguay",
                uz: "Uzbekistan",
                va: "Vatican City",
                vc: "St. Vincent & Grenadines",
                ve: "Venezuela",
                vg: "British Virgin Islands",
                vi: "U.S. Virgin Islands",
                vn: "Vietnam",
                vu: "Vanuatu",
                wf: "Wallis & Futuna",
                ws: "Samoa",
                ye: "Yemen",
                yt: "Mayotte",
                za: "South Africa",
                zm: "Zambia",
                zw: "Zimbabwe",
                selectedCountryAriaLabel: "Selected country",
                noCountrySelected: "No country selected",
                countryListAriaLabel: "List of countries",
                searchPlaceholder: "Search",
                zeroSearchResults: "No results found",
                oneSearchResult: "1 result found",
                multipleSearchResults: "${count} results found",
                ac: "Ascension Island",
                xk: "Kosovo"
            };
        for (let it = 0; it < A.length; it++) A[it].name = G[A[it].iso2];
        var it, et = 0,
            dt = {
                allowDropdown: !0,
                autoPlaceholder: "polite",
                containerClass: "",
                countryOrder: null,
                countrySearch: !0,
                customPlaceholder: null,
                dropdownContainer: null,
                excludeCountries: [],
                fixDropdownWidth: !0,
                formatAsYouType: !0,
                formatOnDisplay: !0,
                geoIpLookup: null,
                hiddenInput: null,
                i18n: {},
                initialCountry: "",
                loadUtils: null,
                nationalMode: !0,
                onlyCountries: [],
                placeholderNumberType: "MOBILE",
                showFlags: !0,
                separateDialCode: !1,
                strictMode: !1,
                useFullscreenPopup: typeof navigator < "u" && typeof window < "u" && (/Android.+Mobile|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || window.innerWidth <= 500),
                validationNumberTypes: ["MOBILE"]
            },
            Bt = ["800", "822", "833", "844", "855", "866", "877", "880", "881", "882", "883", "884", "885", "886", "887", "888", "889"],
            wt = it => it.replace(/\D/g, ""),
            _ = (it = "") => it.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase(),
            Jt = it => {
                let ot = wt(it);
                if ("1" === ot.charAt(0)) {
                    let St = ot.substr(1, 3);
                    return Bt.includes(St)
                }
                return !1
            },
            Wt = (it, ot, St) => {
                let V = document.createElement(it);
                return ot && Object.entries(ot).forEach(([rt, ut]) => V.setAttribute(rt, ut)), St && St.appendChild(V), V
            },
            be = (it, ...ot) => {
                let {
                    instances: St
                } = Ft;
                Object.values(St).forEach(V => V[it](...ot))
            },
            Kt = class {
                constructor(it, ot = {}) {
                    this.id = et++, this.a = it, this.c = null, this.d = Object.assign({}, dt, ot), this.e = !!it.getAttribute("placeholder")
                }
                _init() {
                    this.d.useFullscreenPopup && (this.d.fixDropdownWidth = !1), 1 === this.d.onlyCountries.length && (this.d.initialCountry = this.d.onlyCountries[0]), this.d.separateDialCode && (this.d.nationalMode = !1), this.d.allowDropdown && !this.d.showFlags && !this.d.separateDialCode && (this.d.nationalMode = !1), this.d.useFullscreenPopup && !this.d.dropdownContainer && (this.d.dropdownContainer = document.body), this.isAndroid = typeof navigator < "u" && /Android/i.test(navigator.userAgent), this.isRTL = !!this.a.closest("[dir=rtl]");
                    let it = this.d.allowDropdown || this.d.separateDialCode;
                    this.showSelectedCountryOnLeft = this.isRTL ? !it : it, this.d.separateDialCode && (this.isRTL ? this.originalPaddingRight = this.a.style.paddingRight : this.originalPaddingLeft = this.a.style.paddingLeft), this.d.i18n = { ...G,
                        ...this.d.i18n
                    };
                    let ot = new Promise((V, rt) => {
                            this.h = V, this.i = rt
                        }),
                        St = new Promise((V, rt) => {
                            this.i0 = V, this.i1 = rt
                        });
                    this.promise = Promise.all([ot, St]), this.s = {}, this._b(), this._f(), this._h(), this._i(), this._i3()
                }
                _b() {
                    this._d(), this._d2(), this._d0(), this._sortCountries()
                }
                _sortCountries() {
                    this.d.countryOrder && (this.d.countryOrder = this.d.countryOrder.map(it => it.toLowerCase())), this.p.sort((it, ot) => {
                        let {
                            countryOrder: St
                        } = this.d;
                        if (St) {
                            let V = St.indexOf(it.iso2),
                                rt = St.indexOf(ot.iso2),
                                ut = V > -1,
                                z = rt > -1;
                            if (ut || z) return ut && z ? V - rt : ut ? -1 : 1
                        }
                        return it.name.localeCompare(ot.name)
                    })
                }
                _c(it, ot, St) {
                    ot.length > this.dialCodeMaxLen && (this.dialCodeMaxLen = ot.length), this.q.hasOwnProperty(ot) || (this.q[ot] = []);
                    for (let rt = 0; rt < this.q[ot].length; rt++)
                        if (this.q[ot][rt] === it) return;
                    this.q[ot][void 0 !== St ? St : this.q[ot].length] = it
                }
                _d() {
                    let {
                        onlyCountries: it,
                        excludeCountries: ot
                    } = this.d;
                    if (it.length) {
                        let St = it.map(V => V.toLowerCase());
                        this.p = A.filter(V => St.includes(V.iso2))
                    } else if (ot.length) {
                        let St = ot.map(V => V.toLowerCase());
                        this.p = A.filter(V => !St.includes(V.iso2))
                    } else this.p = A
                }
                _d0() {
                    for (let it = 0; it < this.p.length; it++) {
                        let ot = this.p[it].iso2.toLowerCase();
                        this.d.i18n.hasOwnProperty(ot) && (this.p[it].name = this.d.i18n[ot])
                    }
                }
                _d2() {
                    this.dialCodes = {}, this.dialCodeMaxLen = 0, this.q = {};
                    for (let it = 0; it < this.p.length; it++) {
                        let ot = this.p[it];
                        this.dialCodes[ot.dialCode] || (this.dialCodes[ot.dialCode] = !0), this._c(ot.iso2, ot.dialCode, ot.priority)
                    }
                    for (let it = 0; it < this.p.length; it++) {
                        let ot = this.p[it];
                        if (ot.areaCodes) {
                            let St = this.q[ot.dialCode][0];
                            for (let V = 0; V < ot.areaCodes.length; V++) {
                                let rt = ot.areaCodes[V];
                                for (let ut = 1; ut < rt.length; ut++) {
                                    let z = rt.substr(0, ut),
                                        X = ot.dialCode + z;
                                    this._c(St, X), this._c(ot.iso2, X)
                                }
                                this._c(ot.iso2, ot.dialCode + rt)
                            }
                        }
                    }
                }
                _f() {
                    this.a.classList.add("iti__tel-input"), !this.a.hasAttribute("autocomplete") && (!this.a.form || !this.a.form.hasAttribute("autocomplete")) && this.a.setAttribute("autocomplete", "off");
                    let {
                        allowDropdown: it,
                        separateDialCode: ot,
                        showFlags: St,
                        containerClass: V,
                        hiddenInput: rt,
                        dropdownContainer: ut,
                        fixDropdownWidth: z,
                        useFullscreenPopup: X,
                        countrySearch: _t,
                        i18n: Mt
                    } = this.d, Gt = "iti";
                    it && (Gt += " iti--allow-dropdown"), St && (Gt += " iti--show-flags"), V && (Gt += ` ${V}`), X || (Gt += " iti--inline-dropdown");
                    let xt = Wt("div", {
                        class: Gt
                    });
                    if (this.a.parentNode ? .insertBefore(xt, this.a), it || St || ot) {
                        this.k = Wt("div", {
                            class: "iti__country-container"
                        }, xt), this.showSelectedCountryOnLeft ? this.k.style.left = "0px" : this.k.style.right = "0px", it ? (this.selectedCountry = Wt("button", {
                            type: "button",
                            class: "iti__selected-country",
                            "aria-expanded": "false",
                            "aria-label": this.d.i18n.selectedCountryAriaLabel,
                            "aria-haspopup": "true",
                            "aria-controls": `iti-${this.id}__dropdown-content`,
                            role: "combobox"
                        }, this.k), this.a.disabled && this.selectedCountry.setAttribute("disabled", "true")) : this.selectedCountry = Wt("div", {
                            class: "iti__selected-country"
                        }, this.k);
                        let pt = Wt("div", {
                            class: "iti__selected-country-primary"
                        }, this.selectedCountry);
                        if (this.l = Wt("div", {
                                class: "iti__flag"
                            }, pt), this.selectedCountryA11yText = Wt("span", {
                                class: "iti__a11y-text"
                            }, this.l), it && (this.u = Wt("div", {
                                class: "iti__arrow",
                                "aria-hidden": "true"
                            }, pt)), ot && (this.t = Wt("div", {
                                class: "iti__selected-dial-code"
                            }, this.selectedCountry)), it)
                            if (this.dropdownContent = Wt("div", {
                                    id: `iti-${this.id}__dropdown-content`,
                                    class: "iti__dropdown-content iti__hide " + (z ? "" : "iti--flexible-dropdown-width")
                                }), _t && (this.searchInput = Wt("input", {
                                    type: "text",
                                    class: "iti__search-input",
                                    placeholder: Mt.searchPlaceholder,
                                    role: "combobox",
                                    "aria-expanded": "true",
                                    "aria-label": Mt.searchPlaceholder,
                                    "aria-controls": `iti-${this.id}__country-listbox`,
                                    "aria-autocomplete": "list",
                                    autocomplete: "off"
                                }, this.dropdownContent), this.searchResultsA11yText = Wt("span", {
                                    class: "iti__a11y-text"
                                }, this.dropdownContent)), this.countryList = Wt("ul", {
                                    class: "iti__country-list",
                                    id: `iti-${this.id}__country-listbox`,
                                    role: "listbox",
                                    "aria-label": Mt.countryListAriaLabel
                                }, this.dropdownContent), this._g(), _t && this._p4(), ut) {
                                let Dt = "iti iti--container";
                                Dt += X ? " iti--fullscreen-popup" : " iti--inline-dropdown", this.dropdown = Wt("div", {
                                    class: Dt
                                }), this.dropdown.appendChild(this.dropdownContent)
                            } else this.k.appendChild(this.dropdownContent)
                    }
                    if (xt.appendChild(this.a), this._updateInputPadding(), rt) {
                        let Tt = rt(this.a.getAttribute("name") || "");
                        if (Tt.phone) {
                            let Dt = this.a.form ? .querySelector(`input[name="${Tt.phone}"]`);
                            Dt ? this.hiddenInput = Dt : (this.hiddenInput = Wt("input", {
                                type: "hidden",
                                name: Tt.phone
                            }), xt.appendChild(this.hiddenInput))
                        }
                        if (Tt.country) {
                            let Dt = this.a.form ? .querySelector(`input[name="${Tt.country}"]`);
                            Dt ? this.hiddenInputCountry = Dt : (this.hiddenInputCountry = Wt("input", {
                                type: "hidden",
                                name: Tt.country
                            }), xt.appendChild(this.hiddenInputCountry))
                        }
                    }
                }
                _g() {
                    for (let it = 0; it < this.p.length; it++) {
                        let ot = this.p[it],
                            V = Wt("li", {
                                id: `iti-${this.id}__item-${ot.iso2}`,
                                class: "iti__country " + (0 === it ? "iti__highlight" : ""),
                                tabindex: "-1",
                                role: "option",
                                "data-dial-code": ot.dialCode,
                                "data-country-code": ot.iso2,
                                "aria-selected": "false"
                            }, this.countryList);
                        ot.nodeById[this.id] = V;
                        let rt = "";
                        this.d.showFlags && (rt += `<div class='iti__flag iti__${ot.iso2}'></div>`), rt += `<span class='iti__country-name'>${ot.name}</span>`, rt += `<span class='iti__dial-code'>+${ot.dialCode}</span>`, V.insertAdjacentHTML("beforeend", rt)
                    }
                }
                _h(it = !1) {
                    let ot = this.a.getAttribute("value"),
                        St = this.a.value,
                        V = !ot || "+" !== ot.charAt(0) || St && "+" === St.charAt(0) ? St : ot,
                        rt = this._5(V),
                        ut = Jt(V),
                        {
                            initialCountry: z,
                            geoIpLookup: X
                        } = this.d,
                        _t = "auto" === z && X;
                    if (rt && !ut) this._v(V);
                    else if (!_t || it) {
                        let Mt = z ? z.toLowerCase() : "";
                        Mt && this._y(Mt, !0) ? this._z(Mt) : rt && ut ? this._z("us") : this._z()
                    }
                    V && this._u(V)
                }
                _i() {
                    this._j(), this.d.allowDropdown && this._i2(), (this.hiddenInput || this.hiddenInputCountry) && this.a.form && this._i0()
                }
                _i0() {
                    this._a14 = () => {
                        this.hiddenInput && (this.hiddenInput.value = this.getNumber()), this.hiddenInputCountry && (this.hiddenInputCountry.value = this.getSelectedCountryData().iso2 || "")
                    }, this.a.form ? .addEventListener("submit", this._a14)
                }
                _i2() {
                    this._a9 = ot => {
                        this.dropdownContent.classList.contains("iti__hide") ? this.a.focus() : ot.preventDefault()
                    };
                    let it = this.a.closest("label");
                    it && it.addEventListener("click", this._a9), this._a10 = () => {
                        this.dropdownContent.classList.contains("iti__hide") && !this.a.disabled && !this.a.readOnly && this._n()
                    }, this.selectedCountry.addEventListener("click", this._a10), this._a11 = ot => {
                        this.dropdownContent.classList.contains("iti__hide") && ["ArrowUp", "ArrowDown", " ", "Enter"].includes(ot.key) && (ot.preventDefault(), ot.stopPropagation(), this._n()), "Tab" === ot.key && this._2()
                    }, this.k.addEventListener("keydown", this._a11)
                }
                _i3() {
                    let {
                        loadUtils: it,
                        initialCountry: ot,
                        geoIpLookup: St
                    } = this.d;
                    it && !Ft.utils ? (this._handlePageLoad = () => {
                        window.removeEventListener("load", this._handlePageLoad), Ft.attachUtils(it) ? .catch(() => {})
                    }, Ft.documentReady() ? this._handlePageLoad() : window.addEventListener("load", this._handlePageLoad)) : this.i0(), "auto" === ot && St && !this.s.iso2 ? this._i4() : this.h()
                }
                _i4() {
                    Ft.autoCountry ? this.handleAutoCountry() : Ft.startedLoadingAutoCountry || (Ft.startedLoadingAutoCountry = !0, "function" == typeof this.d.geoIpLookup && this.d.geoIpLookup((it = "") => {
                        let ot = it.toLowerCase();
                        ot && this._y(ot, !0) ? (Ft.autoCountry = ot, setTimeout(() => be("handleAutoCountry"))) : (this._h(!0), be("rejectAutoCountryPromise"))
                    }, () => {
                        this._h(!0), be("rejectAutoCountryPromise")
                    }))
                }
                _nWithPlus() {
                    this._n(), this.searchInput.value = "+", this._p3("", !0)
                }
                _j() {
                    let {
                        strictMode: it,
                        formatAsYouType: ot,
                        separateDialCode: St,
                        formatOnDisplay: V,
                        allowDropdown: rt,
                        countrySearch: ut
                    } = this.d, z = !1;
                    /\p{L}/u.test(this.a.value) && (z = !0), this._a12 = X => {
                        if (this.isAndroid && "+" === X ? .data && St && rt && ut) {
                            let xt = this.a.selectionStart || 0,
                                pt = this.a.value.substring(0, xt - 1),
                                Tt = this.a.value.substring(xt);
                            return this.a.value = pt + Tt, void this._nWithPlus()
                        }
                        if (this._v(this.a.value) && this._8(), X ? .data && /[^+0-9]/.test(X.data) || "insertFromPaste" === X ? .inputType && this.a.value && !it ? z = !0 : /[^+0-9]/.test(this.a.value) || (z = !1), ot && !z && (!X ? .detail || !X.detail.isSetNumber || V)) {
                            let xt = this.a.selectionStart || 0,
                                pt = this.a.value.substring(0, xt).replace(/[^+0-9]/g, "").length,
                                Tt = "deleteContentForward" === X ? .inputType,
                                Dt = this._9(),
                                ce = ((it, ot, St, V) => {
                                    if (0 === St && !V) return 0;
                                    let rt = 0;
                                    for (let ut = 0; ut < ot.length; ut++) {
                                        if (/[+0-9]/.test(ot[ut]) && rt++, rt === it && !V) return ut + 1;
                                        if (V && rt === it + 1) return ut
                                    }
                                    return ot.length
                                })(pt, Dt, xt, Tt);
                            this.a.value = Dt, this.a.setSelectionRange(ce, ce)
                        }
                    }, this.a.addEventListener("input", this._a12), (it || St) && (this._handleKeydownEvent = X => {
                        if (X.key && 1 === X.key.length && !X.altKey && !X.ctrlKey && !X.metaKey) {
                            if (St && rt && ut && "+" === X.key) return X.preventDefault(), void this._nWithPlus();
                            if (it) {
                                let _t = this.a.value,
                                    Mt = "+" === _t.charAt(0),
                                    Gt = !Mt && 0 === this.a.selectionStart && "+" === X.key,
                                    xt = /^[0-9]$/.test(X.key),
                                    pt = St ? xt : Gt || xt,
                                    Tt = _t.slice(0, this.a.selectionStart) + X.key + _t.slice(this.a.selectionEnd),
                                    Dt = this._6(Tt),
                                    ce = Ft.utils.getCoreNumber(Dt, this.s.iso2),
                                    le = this.maxCoreNumberLength && ce.length > this.maxCoreNumberLength,
                                    Ce = !1;
                                if (Mt) {
                                    let Ne = this.s.iso2;
                                    Ce = this._getCountryFromNumber(Dt) !== Ne
                                }(!pt || le && !Ce && !Gt) && X.preventDefault()
                            }
                        }
                    }, this.a.addEventListener("keydown", this._handleKeydownEvent))
                }
                _j2(it) {
                    let ot = parseInt(this.a.getAttribute("maxlength") || "", 10);
                    return ot && it.length > ot ? it.substr(0, ot) : it
                }
                _trigger(it, ot = {}) {
                    let St = new CustomEvent(it, {
                        bubbles: !0,
                        cancelable: !0,
                        detail: ot
                    });
                    this.a.dispatchEvent(St)
                }
                _n() {
                    let {
                        fixDropdownWidth: it,
                        countrySearch: ot
                    } = this.d;
                    if (it && (this.dropdownContent.style.width = `${this.a.offsetWidth}px`), this.dropdownContent.classList.remove("iti__hide"), this.selectedCountry.setAttribute("aria-expanded", "true"), this._o(), ot) {
                        let St = this.countryList.firstElementChild;
                        St && (this._x(St, !1), this.countryList.scrollTop = 0), this.searchInput.focus()
                    }
                    this._p(), this.u.classList.add("iti__arrow--up"), this._trigger("open:countrydropdown")
                }
                _o() {
                    if (this.d.dropdownContainer && this.d.dropdownContainer.appendChild(this.dropdown), !this.d.useFullscreenPopup) {
                        let it = this.a.getBoundingClientRect();
                        this.d.dropdownContainer && (this.dropdown.style.top = `${it.top+this.a.offsetHeight}px`, this.dropdown.style.left = `${it.left}px`, this._a4 = () => this._2(), window.addEventListener("scroll", this._a4))
                    }
                }
                _p() {
                    this._a0 = V => {
                        let rt = V.target ? .closest(".iti__country");
                        rt && this._x(rt, !1)
                    }, this.countryList.addEventListener("mouseover", this._a0), this._a1 = V => {
                        let rt = V.target ? .closest(".iti__country");
                        rt && this._1(rt)
                    }, this.countryList.addEventListener("click", this._a1);
                    let it = !0;
                    this._a2 = () => {
                        it || this._2(), it = !1
                    }, document.documentElement.addEventListener("click", this._a2);
                    let ot = "",
                        St = null;
                    if (this._a3 = V => {
                            ["ArrowUp", "ArrowDown", "Enter", "Escape"].includes(V.key) && (V.preventDefault(), V.stopPropagation(), "ArrowUp" === V.key || "ArrowDown" === V.key ? this._q(V.key) : "Enter" === V.key ? this._r() : "Escape" === V.key && this._2()), !this.d.countrySearch && /^[a-zA-Z\xc0-\xff\u0430-\u044f\u0410-\u042f ]$/.test(V.key) && (V.stopPropagation(), St && clearTimeout(St), ot += V.key.toLowerCase(), this._searchForCountry(ot), St = setTimeout(() => {
                                ot = ""
                            }, 1e3))
                        }, document.addEventListener("keydown", this._a3), this.d.countrySearch) {
                        let V = () => {
                                let ut = this.searchInput.value.trim();
                                ut ? this._p3(ut) : this._p3("", !0)
                            },
                            rt = null;
                        this._a7 = () => {
                            rt && clearTimeout(rt), rt = setTimeout(() => {
                                V(), rt = null
                            }, 100)
                        }, this.searchInput.addEventListener("input", this._a7), this.searchInput.addEventListener("click", ut => ut.stopPropagation())
                    }
                }
                _searchForCountry(it) {
                    for (let ot = 0; ot < this.p.length; ot++) {
                        let St = this.p[ot];
                        if (St.name.substr(0, it.length).toLowerCase() === it) {
                            let V = St.nodeById[this.id];
                            this._x(V, !1), this._3(V);
                            break
                        }
                    }
                }
                _p3(it, ot = !1) {
                    let St = !0;
                    this.countryList.innerHTML = "";
                    let V = _(it);
                    for (let rt = 0; rt < this.p.length; rt++) {
                        let ut = this.p[rt],
                            z = _(ut.name),
                            X = ut.name.split(/[^a-zA-Z\xc0-\xff\u0430-\u044f\u0410-\u042f]/).map(Mt => Mt[0]).join("").toLowerCase(),
                            _t = `+${ut.dialCode}`;
                        if (ot || z.includes(V) || _t.includes(V) || ut.iso2.includes(V) || X.includes(V)) {
                            let Mt = ut.nodeById[this.id];
                            Mt && this.countryList.appendChild(Mt), St && (this._x(Mt, !1), St = !1)
                        }
                    }
                    St && this._x(null, !1), this.countryList.scrollTop = 0, this._p4()
                }
                _p4() {
                    let St, {
                            i18n: it
                        } = this.d,
                        ot = this.countryList.childElementCount;
                    St = 0 === ot ? it.zeroSearchResults : 1 === ot ? it.oneSearchResult : it.multipleSearchResults.replace("${count}", ot.toString()), this.searchResultsA11yText.textContent = St
                }
                _q(it) {
                    let ot = "ArrowUp" === it ? this.c ? .previousElementSibling : this.c ? .nextElementSibling;
                    !ot && this.countryList.childElementCount > 1 && (ot = "ArrowUp" === it ? this.countryList.lastElementChild : this.countryList.firstElementChild), ot && (this._3(ot), this._x(ot, !1))
                }
                _r() {
                    this.c && this._1(this.c)
                }
                _u(it) {
                    let ot = it;
                    if (this.d.formatOnDisplay && Ft.utils && this.s) {
                        let St = this.d.nationalMode || "+" !== ot.charAt(0) && !this.d.separateDialCode,
                            {
                                NATIONAL: V,
                                INTERNATIONAL: rt
                            } = Ft.utils.numberFormat;
                        ot = Ft.utils.formatNumber(ot, this.s.iso2, St ? V : rt)
                    }
                    ot = this._7(ot), this.a.value = ot
                }
                _v(it) {
                    let ot = this._getCountryFromNumber(it);
                    return null !== ot && this._z(ot)
                }
                _ensureHasDialCode(it) {
                    let {
                        dialCode: ot,
                        nationalPrefix: St
                    } = this.s;
                    return "+" !== it.charAt(0) && ot ? `+${ot}${St&&it.charAt(0)===St&&!this.d.separateDialCode?it.substring(1):it}` : it
                }
                _getCountryFromNumber(it) {
                    let ot = it.indexOf("+"),
                        St = ot ? it.substring(ot) : it,
                        V = this.s.iso2,
                        rt = this.s.dialCode;
                    St = this._ensureHasDialCode(St);
                    let ut = this._5(St, !0),
                        z = wt(St);
                    if (ut) {
                        let X = wt(ut),
                            _t = this.q[X];
                        if (!V && this.j && _t.includes(this.j)) return this.j;
                        let Mt = V && _t.includes(V) && (z.length === X.length || !this.s.areaCodes);
                        if (!("1" === rt && Jt(z) || Mt))
                            for (let Gt = 0; Gt < _t.length; Gt++)
                                if (_t[Gt]) return _t[Gt]
                    } else {
                        if ("+" === St.charAt(0) && z.length) return "";
                        if (!(St && "+" !== St || this.s.iso2)) return this.j
                    }
                    return null
                }
                _x(it, ot) {
                    let St = this.c;
                    if (St && (St.classList.remove("iti__highlight"), St.setAttribute("aria-selected", "false")), this.c = it, this.c) {
                        this.c.classList.add("iti__highlight"), this.c.setAttribute("aria-selected", "true");
                        let V = this.c.getAttribute("id") || "";
                        this.selectedCountry.setAttribute("aria-activedescendant", V), this.d.countrySearch && this.searchInput.setAttribute("aria-activedescendant", V)
                    }
                    ot && this.c.focus()
                }
                _y(it, ot) {
                    for (let St = 0; St < this.p.length; St++)
                        if (this.p[St].iso2 === it) return this.p[St];
                    if (ot) return null;
                    throw new Error(`No country data for '${it}'`)
                }
                _z(it) {
                    let {
                        separateDialCode: ot,
                        showFlags: St,
                        i18n: V
                    } = this.d, rt = this.s.iso2 ? this.s : {};
                    if (this.s = it && this._y(it, !1) || {}, this.s.iso2 && (this.j = this.s.iso2), this.l) {
                        let ut = "",
                            z = "";
                        it && St ? (ut = `iti__flag iti__${it}`, z = `${this.s.name} +${this.s.dialCode}`) : (ut = "iti__flag iti__globe", z = V.noCountrySelected), this.l.className = ut, this.selectedCountryA11yText.textContent = z
                    }
                    return this._z3(it, ot), ot && (this.t.innerHTML = this.s.dialCode ? `+${this.s.dialCode}` : "", this._updateInputPadding()), this._0(), this._updateMaxLength(), rt.iso2 !== it
                }
                _updateInputPadding() {
                    if (this.selectedCountry) {
                        let it = (this.selectedCountry.offsetWidth || this._z2()) + 6;
                        this.showSelectedCountryOnLeft ? this.a.style.paddingLeft = `${it}px` : this.a.style.paddingRight = `${it}px`
                    }
                }
                _updateMaxLength() {
                    let {
                        strictMode: it,
                        placeholderNumberType: ot,
                        validationNumberTypes: St
                    } = this.d, {
                        iso2: V
                    } = this.s;
                    if (it && Ft.utils)
                        if (V) {
                            let ut = Ft.utils.getExampleNumber(V, !1, Ft.utils.numberType[ot], !0),
                                z = ut;
                            for (; Ft.utils.isPossibleNumber(ut, V, St);) z = ut, ut += "0";
                            let X = Ft.utils.getCoreNumber(z, V);
                            this.maxCoreNumberLength = X.length, "by" === V && (this.maxCoreNumberLength = X.length + 1)
                        } else this.maxCoreNumberLength = null
                }
                _z3(it = null, ot) {
                    if (!this.selectedCountry) return;
                    let St;
                    St = it && !ot ? `${this.s.name}: +${this.s.dialCode}` : it ? this.s.name : "Unknown", this.selectedCountry.setAttribute("title", St)
                }
                _z2() {
                    if (this.a.parentNode) {
                        let it = this.a.parentNode.cloneNode(!1);
                        it.style.visibility = "hidden", document.body.appendChild(it);
                        let ot = this.k.cloneNode();
                        it.appendChild(ot);
                        let St = this.selectedCountry.cloneNode(!0);
                        ot.appendChild(St);
                        let V = St.offsetWidth;
                        return document.body.removeChild(it), V
                    }
                    return 0
                }
                _0() {
                    let {
                        autoPlaceholder: it,
                        placeholderNumberType: ot,
                        nationalMode: St,
                        customPlaceholder: V
                    } = this.d;
                    if (Ft.utils && ("aggressive" === it || !this.e && "polite" === it)) {
                        let z = this.s.iso2 ? Ft.utils.getExampleNumber(this.s.iso2, St, Ft.utils.numberType[ot]) : "";
                        z = this._7(z), "function" == typeof V && (z = V(z, this.s)), this.a.setAttribute("placeholder", z)
                    }
                }
                _1(it) {
                    let ot = this._z(it.getAttribute("data-country-code"));
                    this._2(), this._4(it.getAttribute("data-dial-code")), this.a.focus(), ot && this._8()
                }
                _2() {
                    this.dropdownContent.classList.add("iti__hide"), this.selectedCountry.setAttribute("aria-expanded", "false"), this.selectedCountry.removeAttribute("aria-activedescendant"), this.c && this.c.setAttribute("aria-selected", "false"), this.d.countrySearch && this.searchInput.removeAttribute("aria-activedescendant"), this.u.classList.remove("iti__arrow--up"), document.removeEventListener("keydown", this._a3), this.d.countrySearch && this.searchInput.removeEventListener("input", this._a7), document.documentElement.removeEventListener("click", this._a2), this.countryList.removeEventListener("mouseover", this._a0), this.countryList.removeEventListener("click", this._a1), this.d.dropdownContainer && (this.d.useFullscreenPopup || window.removeEventListener("scroll", this._a4), this.dropdown.parentNode && this.dropdown.parentNode.removeChild(this.dropdown)), this._handlePageLoad && window.removeEventListener("load", this._handlePageLoad), this._trigger("close:countrydropdown")
                }
                _3(it) {
                    let ot = this.countryList,
                        St = document.documentElement.scrollTop,
                        V = ot.offsetHeight,
                        rt = ot.getBoundingClientRect().top + St,
                        ut = rt + V,
                        z = it.offsetHeight,
                        X = it.getBoundingClientRect().top + St,
                        _t = X + z,
                        Mt = X - rt + ot.scrollTop;
                    X < rt ? ot.scrollTop = Mt : _t > ut && (ot.scrollTop = Mt - (V - z))
                }
                _4(it) {
                    let V, ot = this.a.value,
                        St = `+${it}`;
                    if ("+" === ot.charAt(0)) {
                        let rt = this._5(ot);
                        V = rt ? ot.replace(rt, St) : St, this.a.value = V
                    }
                }
                _5(it, ot) {
                    let St = "";
                    if ("+" === it.charAt(0)) {
                        let V = "";
                        for (let rt = 0; rt < it.length; rt++) {
                            let ut = it.charAt(rt);
                            if (!isNaN(parseInt(ut, 10))) {
                                if (V += ut, ot) this.q[V] && (St = it.substr(0, rt + 1));
                                else if (this.dialCodes[V]) {
                                    St = it.substr(0, rt + 1);
                                    break
                                }
                                if (V.length === this.dialCodeMaxLen) break
                            }
                        }
                    }
                    return St
                }
                _6(it) {
                    let V, ot = it || this.a.value.trim(),
                        {
                            dialCode: St
                        } = this.s,
                        rt = wt(ot);
                    return V = this.d.separateDialCode && "+" !== ot.charAt(0) && St && rt ? `+${St}` : "", V + ot
                }
                _7(it) {
                    let ot = it;
                    if (this.d.separateDialCode) {
                        let St = this._5(ot);
                        St && (St = `+${this.s.dialCode}`, ot = ot.substr(" " === ot[St.length] || "-" === ot[St.length] ? St.length + 1 : St.length))
                    }
                    return this._j2(ot)
                }
                _8() {
                    this._trigger("countrychange")
                }
                _9() {
                    let it = this._6(),
                        ot = Ft.utils ? Ft.utils.formatNumberAsYouType(it, this.s.iso2) : it,
                        {
                            dialCode: St
                        } = this.s;
                    return this.d.separateDialCode && "+" !== this.a.value.charAt(0) && ot.includes(`+${St}`) ? (ot.split(`+${St}`)[1] || "").trim() : ot
                }
                handleAutoCountry() {
                    "auto" === this.d.initialCountry && Ft.autoCountry && (this.j = Ft.autoCountry, this.s.iso2 || this.l.classList.contains("iti__globe") || this.setCountry(this.j), this.h())
                }
                handleUtils() {
                    Ft.utils && (this.a.value && this._u(this.a.value), this.s.iso2 && (this._0(), this._updateMaxLength())), this.i0()
                }
                destroy() {
                    let {
                        allowDropdown: it,
                        separateDialCode: ot
                    } = this.d;
                    if (it) {
                        this._2(), this.selectedCountry.removeEventListener("click", this._a10), this.k.removeEventListener("keydown", this._a11);
                        let rt = this.a.closest("label");
                        rt && rt.removeEventListener("click", this._a9)
                    }
                    let {
                        form: St
                    } = this.a;
                    this._a14 && St && St.removeEventListener("submit", this._a14), this.a.removeEventListener("input", this._a12), this._handleKeydownEvent && this.a.removeEventListener("keydown", this._handleKeydownEvent), this.a.removeAttribute("data-intl-tel-input-id"), ot && (this.isRTL ? this.a.style.paddingRight = this.originalPaddingRight : this.a.style.paddingLeft = this.originalPaddingLeft);
                    let V = this.a.parentNode;
                    V ? .parentNode ? .insertBefore(this.a, V), V ? .parentNode ? .removeChild(V), delete Ft.instances[this.id]
                }
                getExtension() {
                    return Ft.utils ? Ft.utils.getExtension(this._6(), this.s.iso2) : ""
                }
                getNumber(it) {
                    if (Ft.utils) {
                        let {
                            iso2: ot
                        } = this.s;
                        return Ft.utils.formatNumber(this._6(), ot, it)
                    }
                    return ""
                }
                getNumberType() {
                    return Ft.utils ? Ft.utils.getNumberType(this._6(), this.s.iso2) : -99
                }
                getSelectedCountryData() {
                    return this.s
                }
                getValidationError() {
                    if (Ft.utils) {
                        let {
                            iso2: it
                        } = this.s;
                        return Ft.utils.getValidationError(this._6(), it)
                    }
                    return -99
                }
                isValidNumber() {
                    if (!this.s.iso2) return !1;
                    let it = this._6(),
                        ot = it.search(/\p{L}/u);
                    if (ot > -1) {
                        let St = it.substring(0, ot),
                            V = this._utilsIsPossibleNumber(St),
                            rt = this._utilsIsPossibleNumber(it);
                        return V && rt
                    }
                    return this._utilsIsPossibleNumber(it)
                }
                _utilsIsPossibleNumber(it) {
                    return Ft.utils ? Ft.utils.isPossibleNumber(it, this.s.iso2, this.d.validationNumberTypes) : null
                }
                isValidNumberPrecise() {
                    if (!this.s.iso2) return !1;
                    let it = this._6(),
                        ot = it.search(/\p{L}/u);
                    if (ot > -1) {
                        let St = it.substring(0, ot),
                            V = this._utilsIsValidNumber(St),
                            rt = this._utilsIsValidNumber(it);
                        return V && rt
                    }
                    return this._utilsIsValidNumber(it)
                }
                _utilsIsValidNumber(it) {
                    return Ft.utils ? Ft.utils.isValidNumber(it, this.s.iso2, this.d.validationNumberTypes) : null
                }
                setCountry(it) {
                    let ot = it ? .toLowerCase(),
                        St = this.s.iso2;
                    (it && ot !== St || !it && St) && (this._z(ot), this._4(this.s.dialCode), this._8())
                }
                setNumber(it) {
                    let ot = this._v(it);
                    this._u(it), ot && this._8(), this._trigger("input", {
                        isSetNumber: !0
                    })
                }
                setPlaceholderNumberType(it) {
                    this.d.placeholderNumberType = it, this._0()
                }
                setDisabled(it) {
                    this.a.disabled = it, it ? this.selectedCountry.setAttribute("disabled", "true") : this.selectedCountry.removeAttribute("disabled")
                }
            },
            Ft = Object.assign((it, ot) => {
                let St = new Kt(it, ot);
                return St._init(), it.setAttribute("data-intl-tel-input-id", St.id.toString()), Ft.instances[St.id] = St, St
            }, {
                defaults: dt,
                documentReady: () => "complete" === document.readyState,
                getCountryData: () => A,
                getInstance: it => {
                    let ot = it.getAttribute("data-intl-tel-input-id");
                    return ot ? Ft.instances[ot] : null
                },
                instances: {},
                attachUtils: it => {
                    if (!Ft.utils && !Ft.startedLoadingUtilsScript) {
                        let ot;
                        if ("function" != typeof it) return Promise.reject(new TypeError("The argument passed to attachUtils must be a function that returns a promise for the utilities module, not " + typeof it));
                        try {
                            ot = Promise.resolve(it())
                        } catch (St) {
                            return Promise.reject(St)
                        }
                        return Ft.startedLoadingUtilsScript = !0, ot.then(St => {
                            let V = St ? .default;
                            if (!V || "object" != typeof V) throw new TypeError("The loader function passed to attachUtils did not resolve to a module object with utils as its default export.");
                            return Ft.utils = V, be("handleUtils"), !0
                        }).catch(St => {
                            throw be("rejectUtilsScriptPromise", St), St
                        })
                    }
                    return null
                },
                startedLoadingUtilsScript: !1,
                startedLoadingAutoCountry: !1,
                version: "25.3.1"
            }),
            Yt = Ft;
        return it = J, ((it, ot, St, V) => {
            if (ot && "object" == typeof ot || "function" == typeof ot)
                for (let rt of I(ot)) !H.call(it, rt) && undefined !== rt && R(it, rt, {
                    get: () => ot[rt],
                    enumerable: !(V = y(ot, rt)) || V.enumerable
                });
            return it
        })(R({}, "__esModule", {
            value: !0
        }), it)
    })().default);
var config = new Object,
    tt_Debug = !0,
    tt_Enabled = !0,
    TagsToTip = !0;
config.Above = !1, config.BgColor = "#e8f5d6", config.BgImg = "", config.BorderColor = "#cae3a6", config.BorderStyle = "solid", config.BorderWidth = 1, config.CenterMouse = !1, config.ClickClose = !1, config.ClickSticky = !1, config.CloseBtn = !1, config.CloseBtnColors = ["#990000", "rgb(255, 255, 255)", "#DD3333", "rgb(255, 255, 255)"], config.CloseBtnText = " X ", config.CopyContent = !0, config.Delay = 400, config.Duration = 0, config.Exclusive = !1, config.FadeIn = 100, config.FadeOut = 100, config.FadeInterval = 30, config.Fix = null, config.FollowMouse = !0, config.FontColor = "#333333", config.FontFace = "Verdana,Geneva,sans-serif", config.FontSize = "8pt", config.FontWeight = "normal", config.Height = 0, config.JumpHorz = !1, config.JumpVert = !0, config.Left = !1, config.OffsetX = 14, config.OffsetY = 8, config.Opacity = 100, config.Padding = 3, config.Shadow = !1, config.ShadowColor = "#C0C0C0", config.ShadowWidth = 5, config.Sticky = !1, config.TextAlign = "left", config.Title = "", config.TitleAlign = "left", config.TitleBgColor = "", config.TitleFontColor = "rgb(255, 255, 255)", config.TitleFontFace = "", config.TitleFontSize = "", config.TitlePadding = 2, config.Width = 0;
var tt_aElt = new Array(10),
    tt_aV = new Array,
    tt_sContent, tt_t2t, tt_t2tDad, tt_musX, tt_musY, tt_over, tt_x, tt_y, tt_w, tt_h, tt_aExt = new Array,
    tt_db, tt_op, tt_ie, tt_ie56, tt_bBoxOld, tt_body, tt_ovr_, tt_flagOpa, tt_maxPosX, tt_maxPosY, tt_iState = 0,
    tt_opa, tt_bJmpVert, tt_bJmpHorz, tt_elDeHref, tt_tShow = new Number(0),
    tt_tHide = new Number(0),
    tt_tDurt = new Number(0),
    tt_tFade = new Number(0),
    tt_tWaitMov = new Number(0),
    tt_bWait = !1,
    tt_u = "undefined";
Number.prototype.Timer = function(p, R, y) {
        (!this.value || y) && (this.value = window.setTimeout(p, R))
    }, Number.prototype.EndTimer = function() {
        this.value && (window.clearTimeout(this.value), this.value = 0)
    }, tt_Init(),
    function(p, R) {
        var y = function(I, H) {
            var P;
            this.$element = p(I), this.options = p.extend({}, p.fn.wizard.defaults, H), this.currentStep = 1, this.numSteps = this.$element.find("li").length, this.$prevBtn = $("#" + this.$element[0].id + "-actions").find("button.btn-prev"), this.$nextBtn = $("#" + this.$element[0].id + "-actions").find("button.btn-next"), this.$finishBtn = $("#" + this.$element[0].id + "-actions").find("button.btn-finish"), this.$finishBtn.hide(), P = this.$nextBtn.children().detach(), this.nextText = p.trim(this.$nextBtn.text()), this.$nextBtn.append(P), this.$prevBtn.on("click", p.proxy(this.previous, this)), this.$nextBtn.on("click", p.proxy(this.next, this)), this.$finishBtn.on("click", p.proxy(this.reInit, this)), this.$element.on("click", "li.complete", p.proxy(this.stepclicked, this)), this.$stepContainer = this.$element.data("target") || "body", this.$searchContainer = this.$element.data("search"), this.$stepContainer = p(this.$stepContainer), this.$searchContainer = p(this.$searchContainer)
        };
        y.prototype = {
            constructor: y,
            setState: function() {
                var P = this.currentStep === this.numSteps;
                this.$prevBtn.attr("disabled", !0 == (1 === this.currentStep) || !1 == this.currentStep > 1);
                var K = this.$nextBtn.data();
                if (K && K.last && (this.lastText = K.last, typeof this.lastText < "u")) {
                    var O = !0 !== P ? this.nextText : this.lastText,
                        J = this.$nextBtn.children().detach();
                    this.$nextBtn.text(O).append(J), 1 == P ? (this.$nextBtn.hide(), this.$finishBtn.show()) : (this.$nextBtn.show(), this.$finishBtn.hide())
                }
                this.$element.find("li").removeClass("active").removeClass("complete"), this.$element.find("li:lt(" + (this.currentStep - 1) + ")").addClass("complete");
                var tt = this.$element.find("li:eq(" + (this.currentStep - 1) + ")");
                tt.addClass("active");
                var nt = tt.data().target,
                    lt = tt.data().search;
                this.$stepContainer.find(".step-pane").removeClass("active"), this.$searchContainer.find(".step-search").addClass("no-display"), p(nt).addClass("active"), p(lt).removeClass("no-display"), this.$element.trigger("changed")
            },
            stepclicked: function(I) {
                var H = p(I.currentTarget),
                    P = this.$element.find("li").index(H),
                    K = p.Event("stepclick");
                this.$element.trigger(K, {
                    step: P + 1
                }), !K.isDefaultPrevented() && (this.currentStep = P + 1, this.setState())
            },
            previous: function() {
                if (this.currentStep > 1) {
                    var H = p.Event("change");
                    if (this.$element.trigger(H, {
                            step: this.currentStep,
                            direction: "previous"
                        }), H.isDefaultPrevented()) return;
                    this.currentStep -= 1, this.setState()
                }
            },
            next: function() {
                var H = this.currentStep === this.numSteps;
                if (this.currentStep + 1 <= this.numSteps) {
                    var P = p.Event("change");
                    if (this.$element.trigger(P, {
                            step: this.currentStep,
                            direction: "next"
                        }), P.isDefaultPrevented()) return;
                    this.currentStep += 1, this.setState()
                } else H && this.$element.trigger("finished")
            },
            selectedItem: function(I) {
                return {
                    step: this.currentStep
                }
            },
            reInit: function() {
                this.currentStep = 1, this.setState()
            }
        }, p.fn.wizard = function(I, H) {
            var P, K = this.each(function() {
                var O = p(this),
                    J = O.data("wizard");
                J || O.data("wizard", J = new y(this, "object" == typeof I && I)), "string" == typeof I && (P = J[I](H))
            });
            return void 0 === P ? K : P
        }, p.fn.wizard.defaults = {}, p.fn.wizard.Constructor = y, p(function() {
            p("body").on("mousedown.wizard.data-api", ".wizard", function() {
                var I = p(this);
                I.data("wizard") || I.wizard(I.data())
            })
        })
    }(window.jQuery),
    function(p) {
        p.easyPieChart = function(R, y) {
            var I, H, P, K, O, J, mt, Z, A = this;
            return this.el = R, this.$el = p(R), this.$el.data("easyPieChart", this), this.init = function() {
                var q, tt;
                return A.options = p.extend({}, p.easyPieChart.defaultOptions, y), q = parseInt(A.$el.data("percent"), 10), A.percentage = 0, A.canvas = p("<canvas width='" + A.options.size + "' height='" + A.options.size + "'></canvas>").get(0), A.$el.append(A.canvas), typeof G_vmlCanvasManager < "u" && null !== G_vmlCanvasManager && G_vmlCanvasManager.initElement(A.canvas), A.ctx = A.canvas.getContext("2d"), window.devicePixelRatio > 1 && (tt = window.devicePixelRatio, p(A.canvas).css({
                    width: A.options.size,
                    height: A.options.size
                }), A.canvas.width *= tt, A.canvas.height *= tt, A.ctx.scale(tt, tt)), A.ctx.translate(A.options.size / 2, A.options.size / 2), A.ctx.rotate(A.options.rotate * Math.PI / 180), A.$el.addClass("easyPieChart"), A.$el.css({
                    width: A.options.size,
                    height: A.options.size,
                    lineHeight: A.options.size + "px"
                }), A.update(q), A
            }, this.update = function(q) {
                return q = parseFloat(q) || 0, !1 === A.options.animate ? P(q) : H(A.percentage, q), A
            }, mt = function() {
                var q, tt, nt;
                for (A.ctx.fillStyle = A.options.scaleColor, A.ctx.lineWidth = 1, nt = [], q = tt = 0; tt <= 24; q = ++tt) nt.push(I(q));
                return nt
            }, I = function(q) {
                var tt;
                tt = q % 6 == 0 ? 0 : .017 * A.options.size, A.ctx.save(), A.ctx.rotate(q * Math.PI / 12), A.ctx.fillRect(A.options.size / 2 - tt, 0, .05 * -A.options.size + tt, 1), A.ctx.restore()
            }, Z = function() {
                var q;
                q = A.options.size / 2 - A.options.lineWidth / 2, !1 !== A.options.scaleColor && (q -= .08 * A.options.size), A.ctx.beginPath(), A.ctx.arc(0, 0, q, 0, 2 * Math.PI, !0), A.ctx.closePath(), A.ctx.strokeStyle = A.options.trackColor, A.ctx.lineWidth = A.options.lineWidth, A.ctx.stroke()
            }, J = function() {
                !1 !== A.options.scaleColor && mt(), !1 !== A.options.trackColor && Z()
            }, P = function(q) {
                var tt;
                J(), A.ctx.strokeStyle = p.isFunction(A.options.barColor) ? A.options.barColor(q) : A.options.barColor, A.ctx.lineCap = A.options.lineCap, A.ctx.lineWidth = A.options.lineWidth, tt = A.options.size / 2 - A.options.lineWidth / 2, !1 !== A.options.scaleColor && (tt -= .08 * A.options.size), A.ctx.save(), A.ctx.rotate(-Math.PI / 2), A.ctx.beginPath(), A.ctx.arc(0, 0, tt, 0, 2 * Math.PI * q / 100, !1), A.ctx.stroke(), A.ctx.restore()
            }, O = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(q) {
                return window.setTimeout(q, 1e3 / 60)
            }, H = function(q, tt) {
                var nt, lt;
                A.options.onStart.call(A), A.percentage = tt, lt = Date.now(), nt = function() {
                    var M, G;
                    if ((G = Date.now() - lt) < A.options.animate && O(nt), A.ctx.clearRect(-A.options.size / 2, -A.options.size / 2, A.options.size, A.options.size), J.call(A), M = [K(G, q, tt - q, A.options.animate)], A.options.onStep.call(A, M), P.call(A, M), G >= A.options.animate) return A.options.onStop.call(A)
                }, O(nt)
            }, K = function(q, tt, nt, lt) {
                var M, et;
                return M = function(et) {
                    return Math.pow(et, 2)
                }, nt / 2 * ((et = q /= lt / 2) < 1 ? M(et) : 2 - M(et / 2 * -2 + 2)) + tt
            }, this.init()
        }, p.easyPieChart.defaultOptions = {
            barColor: "#ef1e25",
            trackColor: "rgb(242, 242, 242)",
            scaleColor: "#dfe0e0",
            lineCap: "round",
            rotate: 0,
            size: 110,
            lineWidth: 3,
            animate: !1,
            onStart: p.noop,
            onStop: p.noop,
            onStep: p.noop
        }, p.fn.easyPieChart = function(R) {
            return p.each(this, function(y, I) {
                var H, P;
                if (!(H = p(I)).data("easyPieChart")) return P = p.extend({}, R, H.data()), H.data("easyPieChart", new p.easyPieChart(I, P))
            })
        }
    }(jQuery);
var gridbordercolor = "#eee",
    InitiateEasyPieChart = {
        init: function() {
            var p = $("[data-toggle=easypiechart]");
            $.each(p, function() {
                var R = getcolor($(this).data("barcolor")) || themeprimary,
                    y = getcolor($(this).data("trackcolor")) || !1,
                    I = getcolor($(this).data("scalecolor")) || !1,
                    H = $(this).data("linecap") || "round",
                    P = $(this).data("linewidth") || 3,
                    K = $(this).data("size") || 110,
                    O = $(this).data("animate") || !1;
                $(this).easyPieChart({
                    barColor: R,
                    trackColor: y,
                    scaleColor: I,
                    lineCap: H,
                    lineWidth: P,
                    size: K,
                    animate: O
                })
            })
        }
    };
(function(p, R) {
    "object" == typeof exports && typeof module < "u" ? module.exports = R() : "function" == typeof define && define.amd ? define(R) : (p = typeof globalThis < "u" ? globalThis : p || self).Chart = R()
})(this, function() {
    "use strict";

    function p() {}
    const R = function() {
        let o = 0;
        return function() {
            return o++
        }
    }();

    function y(o) {
        return null === o || typeof o > "u"
    }

    function I(o) {
        if (Array.isArray && Array.isArray(o)) return !0;
        const e = Object.prototype.toString.call(o);
        return "[object" === e.slice(0, 7) && "Array]" === e.slice(-6)
    }

    function H(o) {
        return null !== o && "[object Object]" === Object.prototype.toString.call(o)
    }
    const P = o => ("number" == typeof o || o instanceof Number) && isFinite(+o);

    function K(o, e) {
        return P(o) ? o : e
    }

    function O(o, e) {
        return typeof o > "u" ? e : o
    }
    const J = (o, e) => "string" == typeof o && o.endsWith("%") ? parseFloat(o) / 100 : o / e,
        mt = (o, e) => "string" == typeof o && o.endsWith("%") ? parseFloat(o) / 100 * e : +o;

    function Z(o, e, r) {
        if (o && "function" == typeof o.call) return o.apply(r, e)
    }

    function A(o, e, r, a) {
        let l, c, h;
        if (I(o))
            if (c = o.length, a)
                for (l = c - 1; l >= 0; l--) e.call(r, o[l], l);
            else
                for (l = 0; l < c; l++) e.call(r, o[l], l);
        else if (H(o))
            for (h = Object.keys(o), c = h.length, l = 0; l < c; l++) e.call(r, o[h[l]], h[l])
    }

    function q(o, e) {
        let r, a, l, c;
        if (!o || !e || o.length !== e.length) return !1;
        for (r = 0, a = o.length; r < a; ++r)
            if (l = o[r], c = e[r], l.datasetIndex !== c.datasetIndex || l.index !== c.index) return !1;
        return !0
    }

    function tt(o) {
        if (I(o)) return o.map(tt);
        if (H(o)) {
            const e = Object.create(null),
                r = Object.keys(o),
                a = r.length;
            let l = 0;
            for (; l < a; ++l) e[r[l]] = tt(o[r[l]]);
            return e
        }
        return o
    }

    function nt(o) {
        return -1 === ["__proto__", "prototype", "constructor"].indexOf(o)
    }

    function lt(o, e, r, a) {
        if (!nt(o)) return;
        const l = e[o],
            c = r[o];
        H(l) && H(c) ? M(l, c, a) : e[o] = tt(c)
    }

    function M(o, e, r) {
        const a = I(e) ? e : [e],
            l = a.length;
        if (!H(o)) return o;
        const c = (r = r || {}).merger || lt;
        for (let h = 0; h < l; ++h) {
            if (!H(e = a[h])) continue;
            const u = Object.keys(e);
            for (let b = 0, S = u.length; b < S; ++b) c(u[b], o, e, r)
        }
        return o
    }

    function G(o, e) {
        return M(o, e, {
            merger: et
        })
    }

    function et(o, e, r) {
        if (!nt(o)) return;
        const a = e[o],
            l = r[o];
        H(a) && H(l) ? G(a, l) : Object.prototype.hasOwnProperty.call(e, o) || (e[o] = tt(l))
    }
    const Bt = {
        "": o => o,
        x: o => o.x,
        y: o => o.y
    };

    function wt(o, e) {
        return (Bt[e] || (Bt[e] = function _(o) {
            const e = Jt(o);
            return r => {
                for (const a of e) {
                    if ("" === a) break;
                    r = r && r[a]
                }
                return r
            }
        }(e)))(o)
    }

    function Jt(o) {
        const e = o.split("."),
            r = [];
        let a = "";
        for (const l of e) a += l, a.endsWith("\\") ? a = a.slice(0, -1) + "." : (r.push(a), a = "");
        return r
    }

    function jt(o) {
        return o.charAt(0).toUpperCase() + o.slice(1)
    }
    const Wt = o => typeof o < "u",
        be = o => "function" == typeof o,
        Kt = (o, e) => {
            if (o.size !== e.size) return !1;
            for (const r of o)
                if (!e.has(r)) return !1;
            return !0
        };

    function Qt(o) {
        return "mouseup" === o.type || "click" === o.type || "contextmenu" === o.type
    }
    const Ft = Math.PI,
        Yt = 2 * Ft,
        it = Yt + Ft,
        ot = Number.POSITIVE_INFINITY,
        St = Ft / 180,
        V = Ft / 2,
        rt = Ft / 4,
        ut = 2 * Ft / 3,
        z = Math.log10,
        X = Math.sign;

    function _t(o) {
        const e = Math.round(o);
        o = xt(o, e, o / 1e3) ? e : o;
        const r = Math.pow(10, Math.floor(z(o))),
            a = o / r;
        return (a <= 1 ? 1 : a <= 2 ? 2 : a <= 5 ? 5 : 10) * r
    }

    function Mt(o) {
        const e = [],
            r = Math.sqrt(o);
        let a;
        for (a = 1; a < r; a++) o % a == 0 && (e.push(a), e.push(o / a));
        return r === (0 | r) && e.push(r), e.sort((l, c) => l - c).pop(), e
    }

    function Gt(o) {
        return !isNaN(parseFloat(o)) && isFinite(o)
    }

    function xt(o, e, r) {
        return Math.abs(o - e) < r
    }

    function pt(o, e) {
        const r = Math.round(o);
        return r - e <= o && r + e >= o
    }

    function Tt(o, e, r) {
        let a, l, c;
        for (a = 0, l = o.length; a < l; a++) c = o[a][r], isNaN(c) || (e.min = Math.min(e.min, c), e.max = Math.max(e.max, c))
    }

    function Dt(o) {
        return o * (Ft / 180)
    }

    function ce(o) {
        return o * (180 / Ft)
    }

    function le(o) {
        if (!P(o)) return;
        let e = 1,
            r = 0;
        for (; Math.round(o * e) / e !== o;) e *= 10, r++;
        return r
    }

    function Ce(o, e) {
        const r = e.x - o.x,
            a = e.y - o.y,
            l = Math.sqrt(r * r + a * a);
        let c = Math.atan2(a, r);
        return c < -.5 * Ft && (c += Yt), {
            angle: c,
            distance: l
        }
    }

    function Ne(o, e) {
        return Math.sqrt(Math.pow(e.x - o.x, 2) + Math.pow(e.y - o.y, 2))
    }

    function dn(o, e) {
        return (o - e + it) % Yt - Ft
    }

    function Me(o) {
        return (o % Yt + Yt) % Yt
    }

    function cn(o, e, r, a) {
        const l = Me(o),
            c = Me(e),
            h = Me(r),
            u = Me(c - l),
            b = Me(h - l),
            S = Me(l - c),
            D = Me(l - h);
        return l === c || l === h || a && c === h || u > b && S < D
    }

    function sn(o, e, r) {
        return Math.max(e, Math.min(r, o))
    }

    function Wn(o) {
        return sn(o, -32768, 32767)
    }

    function te(o, e, r, a = 1e-6) {
        return o >= Math.min(e, r) - a && o <= Math.max(e, r) + a
    }

    function Pn(o, e, r) {
        r = r || (h => o[h] < e);
        let c, a = o.length - 1,
            l = 0;
        for (; a - l > 1;) c = l + a >> 1, r(c) ? l = c : a = c;
        return {
            lo: l,
            hi: a
        }
    }
    const En = (o, e, r, a) => Pn(o, r, a ? l => o[l][e] <= r : l => o[l][e] < r),
        Be = (o, e, r) => Pn(o, r, a => o[a][e] >= r);

    function qe(o, e, r) {
        let a = 0,
            l = o.length;
        for (; a < l && o[a] < e;) a++;
        for (; l > a && o[l - 1] > r;) l--;
        return a > 0 || l < o.length ? o.slice(a, l) : o
    }
    const gi = ["push", "pop", "shift", "splice", "unshift"];

    function mi(o, e) {
        o._chartjs ? o._chartjs.listeners.push(e) : (Object.defineProperty(o, "_chartjs", {
            configurable: !0,
            enumerable: !1,
            value: {
                listeners: [e]
            }
        }), gi.forEach(r => {
            const a = "_onData" + jt(r),
                l = o[r];
            Object.defineProperty(o, r, {
                configurable: !0,
                enumerable: !1,
                value(...c) {
                    const h = l.apply(this, c);
                    return o._chartjs.listeners.forEach(u => {
                        "function" == typeof u[a] && u[a](...c)
                    }), h
                }
            })
        }))
    }

    function ki(o, e) {
        const r = o._chartjs;
        if (!r) return;
        const a = r.listeners,
            l = a.indexOf(e); - 1 !== l && a.splice(l, 1), !(a.length > 0) && (gi.forEach(c => {
            delete o[c]
        }), delete o._chartjs)
    }

    function Ni(o) {
        const e = new Set;
        let r, a;
        for (r = 0, a = o.length; r < a; ++r) e.add(o[r]);
        return e.size === a ? o : Array.from(e)
    }
    const Un = typeof window > "u" ? function(o) {
        return o()
    } : window.requestAnimationFrame;

    function Xn(o, e, r) {
        const a = r || (h => Array.prototype.slice.call(h));
        let l = !1,
            c = [];
        return function(...h) {
            c = a(h), l || (l = !0, Un.call(window, () => {
                l = !1, o.apply(e, c)
            }))
        }
    }

    function bi(o, e) {
        let r;
        return function(...a) {
            return e ? (clearTimeout(r), r = setTimeout(o, e, a)) : o.apply(this, a), e
        }
    }
    const Bi = o => "start" === o ? "left" : "end" === o ? "right" : "center",
        mn = (o, e, r) => "start" === o ? e : "end" === o ? r : (e + r) / 2,
        v = (o, e, r, a) => o === (a ? "left" : "right") ? r : "center" === o ? (e + r) / 2 : e;

    function wr(o, e, r) {
        const a = e.length;
        let l = 0,
            c = a;
        if (o._sorted) {
            const {
                iScale: h,
                _parsed: u
            } = o, b = h.axis, {
                min: S,
                max: D,
                minDefined: U,
                maxDefined: st
            } = h.getUserBounds();
            U && (l = sn(Math.min(En(u, h.axis, S).lo, r ? a : En(e, b, h.getPixelForValue(S)).lo), 0, a - 1)), c = st ? sn(Math.max(En(u, h.axis, D, !0).hi + 1, r ? 0 : En(e, b, h.getPixelForValue(D), !0).hi + 1), l, a) - l : a - l
        }
        return {
            start: l,
            count: c
        }
    }

    function ci(o) {
        const {
            xScale: e,
            yScale: r,
            _scaleRanges: a
        } = o, l = {
            xmin: e.min,
            xmax: e.max,
            ymin: r.min,
            ymax: r.max
        };
        if (!a) return o._scaleRanges = l, !0;
        const c = a.xmin !== e.min || a.xmax !== e.max || a.ymin !== r.min || a.ymax !== r.max;
        return Object.assign(a, l), c
    }
    var gn = new class Ei {
        constructor() {
            this._request = null, this._charts = new Map, this._running = !1, this._lastDate = void 0
        }
        _notify(e, r, a, l) {
            const h = r.duration;
            r.listeners[l].forEach(u => u({
                chart: e,
                initial: r.initial,
                numSteps: h,
                currentStep: Math.min(a - r.start, h)
            }))
        }
        _refresh() {
            this._request || (this._running = !0, this._request = Un.call(window, () => {
                this._update(), this._request = null, this._running && this._refresh()
            }))
        }
        _update(e = Date.now()) {
            let r = 0;
            this._charts.forEach((a, l) => {
                if (!a.running || !a.items.length) return;
                const c = a.items;
                let b, h = c.length - 1,
                    u = !1;
                for (; h >= 0; --h) b = c[h], b._active ? (b._total > a.duration && (a.duration = b._total), b.tick(e), u = !0) : (c[h] = c[c.length - 1], c.pop());
                u && (l.draw(), this._notify(l, a, e, "progress")), c.length || (a.running = !1, this._notify(l, a, e, "complete"), a.initial = !1), r += c.length
            }), this._lastDate = e, 0 === r && (this._running = !1)
        }
        _getAnims(e) {
            const r = this._charts;
            let a = r.get(e);
            return a || (a = {
                running: !1,
                initial: !0,
                items: [],
                listeners: {
                    complete: [],
                    progress: []
                }
            }, r.set(e, a)), a
        }
        listen(e, r, a) {
            this._getAnims(e).listeners[r].push(a)
        }
        add(e, r) {
            !r || !r.length || this._getAnims(e).items.push(...r)
        }
        has(e) {
            return this._getAnims(e).items.length > 0
        }
        start(e) {
            const r = this._charts.get(e);
            r && (r.running = !0, r.start = Date.now(), r.duration = r.items.reduce((a, l) => Math.max(a, l._duration), 0), this._refresh())
        }
        running(e) {
            if (!this._running) return !1;
            const r = this._charts.get(e);
            return !(!r || !r.running || !r.items.length)
        }
        stop(e) {
            const r = this._charts.get(e);
            if (!r || !r.items.length) return;
            const a = r.items;
            let l = a.length - 1;
            for (; l >= 0; --l) a[l].cancel();
            r.items = [], this._notify(e, r, Date.now(), "complete")
        }
        remove(e) {
            return this._charts.delete(e)
        }
    };

    function si(o) {
        return o + .5 | 0
    }
    const Ke = (o, e, r) => Math.max(Math.min(o, r), e);

    function Ai(o) {
        return Ke(si(2.55 * o), 0, 255)
    }

    function An(o) {
        return Ke(si(255 * o), 0, 255)
    }

    function Qe(o) {
        return Ke(si(o / 2.55) / 100, 0, 1)
    }

    function hi(o) {
        return Ke(si(100 * o), 0, 100)
    }
    const Jn = {
            0: 0,
            1: 1,
            2: 2,
            3: 3,
            4: 4,
            5: 5,
            6: 6,
            7: 7,
            8: 8,
            9: 9,
            A: 10,
            B: 11,
            C: 12,
            D: 13,
            E: 14,
            F: 15,
            a: 10,
            b: 11,
            c: 12,
            d: 13,
            e: 14,
            f: 15
        },
        Pr = [..."0123456789ABCDEF"],
        oi = o => Pr[15 & o],
        $n = o => Pr[(240 & o) >> 4] + Pr[15 & o],
        Hi = o => (240 & o) >> 4 == (15 & o),
        es = /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;

    function pr(o, e, r) {
        const a = e * Math.min(r, 1 - r),
            l = (c, h = (c + o / 30) % 12) => r - a * Math.max(Math.min(h - 3, 9 - h, 1), -1);
        return [l(0), l(8), l(4)]
    }

    function ws(o, e, r) {
        const a = (l, c = (l + o / 60) % 6) => r - r * e * Math.max(Math.min(c, 4 - c, 1), 0);
        return [a(5), a(3), a(1)]
    }

    function Is(o, e, r) {
        const a = pr(o, 1, .5);
        let l;
        for (e + r > 1 && (l = 1 / (e + r), e *= l, r *= l), l = 0; l < 3; l++) a[l] *= 1 - e - r, a[l] += e;
        return a
    }

    function lr(o) {
        const r = o.r / 255,
            a = o.g / 255,
            l = o.b / 255,
            c = Math.max(r, a, l),
            h = Math.min(r, a, l),
            u = (c + h) / 2;
        let b, S, D;
        return c !== h && (D = c - h, S = u > .5 ? D / (2 - c - h) : D / (c + h), b = function tr(o, e, r, a, l) {
            return o === l ? (e - r) / a + (e < r ? 6 : 0) : e === l ? (r - o) / a + 2 : (o - e) / a + 4
        }(r, a, l, D, c), b = 60 * b + .5), [0 | b, S || 0, u]
    }

    function ns(o, e, r, a) {
        return (Array.isArray(e) ? o(e[0], e[1], e[2]) : o(e, r, a)).map(An)
    }

    function er(o, e, r) {
        return ns(pr, o, e, r)
    }

    function Ti(o) {
        return (o % 360 + 360) % 360
    }
    const Sr = {
            x: "dark",
            Z: "light",
            Y: "re",
            X: "blu",
            W: "gr",
            V: "medium",
            U: "slate",
            A: "ee",
            T: "ol",
            S: "or",
            B: "ra",
            C: "lateg",
            D: "ights",
            R: "in",
            Q: "turquois",
            E: "hi",
            P: "ro",
            O: "al",
            N: "le",
            M: "de",
            L: "yello",
            F: "en",
            K: "ch",
            G: "arks",
            H: "ea",
            I: "ightg",
            J: "wh"
        },
        Mr = {
            OiceXe: "f0f8ff",
            antiquewEte: "faebd7",
            aqua: "ffff",
            aquamarRe: "7fffd4",
            azuY: "f0ffff",
            beige: "f5f5dc",
            bisque: "ffe4c4",
            black: "0",
            blanKedOmond: "ffebcd",
            Xe: "ff",
            XeviTet: "8a2be2",
            bPwn: "a52a2a",
            burlywood: "deb887",
            caMtXe: "5f9ea0",
            KartYuse: "7fff00",
            KocTate: "d2691e",
            cSO: "ff7f50",
            cSnflowerXe: "6495ed",
            cSnsilk: "fff8dc",
            crimson: "dc143c",
            cyan: "ffff",
            xXe: "8b",
            xcyan: "8b8b",
            xgTMnPd: "b8860b",
            xWay: "a9a9a9",
            xgYF: "6400",
            xgYy: "a9a9a9",
            xkhaki: "bdb76b",
            xmagFta: "8b008b",
            xTivegYF: "556b2f",
            xSange: "ff8c00",
            xScEd: "9932cc",
            xYd: "8b0000",
            xsOmon: "e9967a",
            xsHgYF: "8fbc8f",
            xUXe: "483d8b",
            xUWay: "2f4f4f",
            xUgYy: "2f4f4f",
            xQe: "ced1",
            xviTet: "9400d3",
            dAppRk: "ff1493",
            dApskyXe: "bfff",
            dimWay: "696969",
            dimgYy: "696969",
            dodgerXe: "1e90ff",
            fiYbrick: "b22222",
            flSOwEte: "fffaf0",
            foYstWAn: "228b22",
            fuKsia: "ff00ff",
            gaRsbSo: "dcdcdc",
            ghostwEte: "f8f8ff",
            gTd: "ffd700",
            gTMnPd: "daa520",
            Way: "808080",
            gYF: "8000",
            gYFLw: "adff2f",
            gYy: "808080",
            honeyMw: "f0fff0",
            hotpRk: "ff69b4",
            RdianYd: "cd5c5c",
            Rdigo: "4b0082",
            ivSy: "fffff0",
            khaki: "f0e68c",
            lavFMr: "e6e6fa",
            lavFMrXsh: "fff0f5",
            lawngYF: "7cfc00",
            NmoncEffon: "fffacd",
            ZXe: "add8e6",
            ZcSO: "f08080",
            Zcyan: "e0ffff",
            ZgTMnPdLw: "fafad2",
            ZWay: "d3d3d3",
            ZgYF: "90ee90",
            ZgYy: "d3d3d3",
            ZpRk: "ffb6c1",
            ZsOmon: "ffa07a",
            ZsHgYF: "20b2aa",
            ZskyXe: "87cefa",
            ZUWay: "778899",
            ZUgYy: "778899",
            ZstAlXe: "b0c4de",
            ZLw: "ffffe0",
            lime: "ff00",
            limegYF: "32cd32",
            lRF: "faf0e6",
            magFta: "ff00ff",
            maPon: "800000",
            VaquamarRe: "66cdaa",
            VXe: "cd",
            VScEd: "ba55d3",
            VpurpN: "9370db",
            VsHgYF: "3cb371",
            VUXe: "7b68ee",
            VsprRggYF: "fa9a",
            VQe: "48d1cc",
            VviTetYd: "c71585",
            midnightXe: "191970",
            mRtcYam: "f5fffa",
            mistyPse: "ffe4e1",
            moccasR: "ffe4b5",
            navajowEte: "ffdead",
            navy: "80",
            Tdlace: "fdf5e6",
            Tive: "808000",
            TivedBb: "6b8e23",
            Sange: "ffa500",
            SangeYd: "ff4500",
            ScEd: "da70d6",
            pOegTMnPd: "eee8aa",
            pOegYF: "98fb98",
            pOeQe: "afeeee",
            pOeviTetYd: "db7093",
            papayawEp: "ffefd5",
            pHKpuff: "ffdab9",
            peru: "cd853f",
            pRk: "ffc0cb",
            plum: "dda0dd",
            powMrXe: "b0e0e6",
            purpN: "800080",
            YbeccapurpN: "663399",
            Yd: "ff0000",
            Psybrown: "bc8f8f",
            PyOXe: "4169e1",
            saddNbPwn: "8b4513",
            sOmon: "fa8072",
            sandybPwn: "f4a460",
            sHgYF: "2e8b57",
            sHshell: "fff5ee",
            siFna: "a0522d",
            silver: "c0c0c0",
            skyXe: "87ceeb",
            UXe: "6a5acd",
            UWay: "708090",
            UgYy: "708090",
            snow: "fffafa",
            sprRggYF: "ff7f",
            stAlXe: "4682b4",
            tan: "d2b48c",
            teO: "8080",
            tEstN: "d8bfd8",
            tomato: "ff6347",
            Qe: "40e0d0",
            viTet: "ee82ee",
            JHt: "f5deb3",
            wEte: "ffffff",
            wEtesmoke: "f5f5f5",
            Lw: "ffff00",
            LwgYF: "9acd32"
        };
    let cr;
    const ro = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/,
        rs = o => o <= .0031308 ? 12.92 * o : 1.055 * Math.pow(o, 1 / 2.4) - .055,
        ir = o => o <= .04045 ? o / 12.92 : Math.pow((o + .055) / 1.055, 2.4);

    function kr(o, e, r) {
        if (o) {
            let a = lr(o);
            a[e] = Math.max(0, Math.min(a[e] + a[e] * r, 0 === e ? 360 : 1)), a = er(a), o.r = a[0], o.g = a[1], o.b = a[2]
        }
    }

    function Nr(o, e) {
        return o && Object.assign(e || {}, o)
    }

    function Hr(o) {
        var e = {
            r: 0,
            g: 0,
            b: 0,
            a: 255
        };
        return Array.isArray(o) ? o.length >= 3 && (e = {
            r: o[0],
            g: o[1],
            b: o[2],
            a: 255
        }, o.length > 3 && (e.a = An(o[3]))) : (e = Nr(o, {
            r: 0,
            g: 0,
            b: 0,
            a: 1
        })).a = An(e.a), e
    }

    function Ls(o) {
        return "r" === o.charAt(0) ? function is(o) {
            const e = ro.exec(o);
            let a, l, c, r = 255;
            if (e) {
                if (e[7] !== a) {
                    const h = +e[7];
                    r = e[8] ? Ai(h) : Ke(255 * h, 0, 255)
                }
                return a = +e[1], l = +e[3], c = +e[5], a = 255 & (e[2] ? Ai(a) : Ke(a, 0, 255)), l = 255 & (e[4] ? Ai(l) : Ke(l, 0, 255)), c = 255 & (e[6] ? Ai(c) : Ke(c, 0, 255)), {
                    r: a,
                    g: l,
                    b: c,
                    a: r
                }
            }
        }(o) : function ji(o) {
            const e = es.exec(o);
            let a, r = 255;
            if (!e) return;
            e[5] !== a && (r = e[6] ? Ai(+e[5]) : An(+e[5]));
            const l = Ti(+e[2]),
                c = +e[3] / 100,
                h = +e[4] / 100;
            return a = "hwb" === e[1] ? function Mi(o, e, r) {
                return ns(Is, o, e, r)
            }(l, c, h) : "hsv" === e[1] ? function zi(o, e, r) {
                return ns(ws, o, e, r)
            }(l, c, h) : er(l, c, h), {
                r: a[0],
                g: a[1],
                b: a[2],
                a: r
            }
        }(o)
    }
    class Ss {
        constructor(e) {
            if (e instanceof Ss) return e;
            const r = typeof e;
            let a;
            "object" === r ? a = Hr(e) : "string" === r && (a = function wi(o) {
                var r, e = o.length;
                return "#" === o[0] && (4 === e || 5 === e ? r = {
                    r: 255 & 17 * Jn[o[1]],
                    g: 255 & 17 * Jn[o[2]],
                    b: 255 & 17 * Jn[o[3]],
                    a: 5 === e ? 17 * Jn[o[4]] : 255
                } : (7 === e || 9 === e) && (r = {
                    r: Jn[o[1]] << 4 | Jn[o[2]],
                    g: Jn[o[3]] << 4 | Jn[o[4]],
                    b: Jn[o[5]] << 4 | Jn[o[6]],
                    a: 9 === e ? Jn[o[7]] << 4 | Jn[o[8]] : 255
                })), r
            }(e) || function ps(o) {
                cr || (cr = function ds() {
                    const o = {},
                        e = Object.keys(Mr),
                        r = Object.keys(Sr);
                    let a, l, c, h, u;
                    for (a = 0; a < e.length; a++) {
                        for (h = u = e[a], l = 0; l < r.length; l++) c = r[l], u = u.replace(c, Sr[c]);
                        c = parseInt(Mr[h], 16), o[u] = [c >> 16 & 255, c >> 8 & 255, 255 & c]
                    }
                    return o
                }(), cr.transparent = [0, 0, 0, 0]);
                const e = cr[o.toLowerCase()];
                return e && {
                    r: e[0],
                    g: e[1],
                    b: e[2],
                    a: 4 === e.length ? e[3] : 255
                }
            }(e) || Ls(e)), this._rgb = a, this._valid = !!a
        }
        get valid() {
            return this._valid
        }
        get rgb() {
            var e = Nr(this._rgb);
            return e && (e.a = Qe(e.a)), e
        }
        set rgb(e) {
            this._rgb = Hr(e)
        }
        rgbString() {
            return this._valid ? function Cs(o) {
                return o && (o.a < 255 ? `rgba(${o.r}, ${o.g}, ${o.b}, ${Qe(o.a)})` : `rgb(${o.r}, ${o.g}, ${o.b})`)
            }(this._rgb) : void 0
        }
        hexString() {
            return this._valid ? function us(o) {
                var e = (o => Hi(o.r) && Hi(o.g) && Hi(o.b) && Hi(o.a))(o) ? oi : $n;
                return o ? "#" + e(o.r) + e(o.g) + e(o.b) + ((o, e) => o < 255 ? e(o) : "")(o.a, e) : void 0
            }(this._rgb) : void 0
        }
        hslString() {
            return this._valid ? function fi(o) {
                if (!o) return;
                const e = lr(o),
                    r = e[0],
                    a = hi(e[1]),
                    l = hi(e[2]);
                return o.a < 255 ? `hsla(${r}, ${a}%, ${l}%, ${Qe(o.a)})` : `hsl(${r}, ${a}%, ${l}%)`
            }(this._rgb) : void 0
        }
        mix(e, r) {
            if (e) {
                const a = this.rgb,
                    l = e.rgb;
                let c;
                const h = r === c ? .5 : r,
                    u = 2 * h - 1,
                    b = a.a - l.a,
                    S = ((u * b == -1 ? u : (u + b) / (1 + u * b)) + 1) / 2;
                c = 1 - S, a.r = 255 & S * a.r + c * l.r + .5, a.g = 255 & S * a.g + c * l.g + .5, a.b = 255 & S * a.b + c * l.b + .5, a.a = h * a.a + (1 - h) * l.a, this.rgb = a
            }
            return this
        }
        interpolate(e, r) {
            return e && (this._rgb = function Ii(o, e, r) {
                const a = ir(Qe(o.r)),
                    l = ir(Qe(o.g)),
                    c = ir(Qe(o.b));
                return {
                    r: An(rs(a + r * (ir(Qe(e.r)) - a))),
                    g: An(rs(l + r * (ir(Qe(e.g)) - l))),
                    b: An(rs(c + r * (ir(Qe(e.b)) - c))),
                    a: o.a + r * (e.a - o.a)
                }
            }(this._rgb, e._rgb, r)), this
        }
        clone() {
            return new Ss(this.rgb)
        }
        alpha(e) {
            return this._rgb.a = An(e), this
        }
        clearer(e) {
            return this._rgb.a *= 1 - e, this
        }
        greyscale() {
            const e = this._rgb,
                r = si(.3 * e.r + .59 * e.g + .11 * e.b);
            return e.r = e.g = e.b = r, this
        }
        opaquer(e) {
            return this._rgb.a *= 1 + e, this
        }
        negate() {
            const e = this._rgb;
            return e.r = 255 - e.r, e.g = 255 - e.g, e.b = 255 - e.b, this
        }
        lighten(e) {
            return kr(this._rgb, 2, e), this
        }
        darken(e) {
            return kr(this._rgb, 2, -e), this
        }
        saturate(e) {
            return kr(this._rgb, 1, e), this
        }
        desaturate(e) {
            return kr(this._rgb, 1, -e), this
        }
        rotate(e) {
            return function nr(o, e) {
                var r = lr(o);
                r[0] = Ti(r[0] + e), r = er(r), o.r = r[0], o.g = r[1], o.b = r[2]
            }(this._rgb, e), this
        }
    }

    function ks(o) {
        return new Ss(o)
    }

    function zr(o) {
        if (o && "object" == typeof o) {
            const e = o.toString();
            return "[object CanvasPattern]" === e || "[object CanvasGradient]" === e
        }
        return !1
    }

    function Yi(o) {
        return zr(o) ? o : ks(o)
    }

    function ht(o) {
        return zr(o) ? o : ks(o).saturate(.5).darken(.1).hexString()
    }
    const Et = Object.create(null),
        Rt = Object.create(null);

    function ge(o, e) {
        if (!e) return o;
        const r = e.split(".");
        for (let a = 0, l = r.length; a < l; ++a) {
            const c = r[a];
            o = o[c] || (o[c] = Object.create(null))
        }
        return o
    }

    function xe(o, e, r) {
        return "string" == typeof e ? M(ge(o, e), r) : M(ge(o, ""), e)
    }
    var De = new class Ge {
        constructor(e) {
            this.animation = void 0, this.backgroundColor = "rgba(0,0,0,0.1)", this.borderColor = "rgba(0,0,0,0.1)", this.color = "#666", this.datasets = {}, this.devicePixelRatio = r => r.chart.platform.getDevicePixelRatio(), this.elements = {}, this.events = ["mousemove", "mouseout", "click", "touchstart", "touchmove"], this.font = {
                family: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
                size: 12,
                style: "normal",
                lineHeight: 1.2,
                weight: null
            }, this.hover = {}, this.hoverBackgroundColor = (r, a) => ht(a.backgroundColor), this.hoverBorderColor = (r, a) => ht(a.borderColor), this.hoverColor = (r, a) => ht(a.color), this.indexAxis = "x", this.interaction = {
                mode: "nearest",
                intersect: !0,
                includeInvisible: !1
            }, this.maintainAspectRatio = !0, this.onHover = null, this.onClick = null, this.parsing = !0, this.plugins = {}, this.responsive = !0, this.scale = void 0, this.scales = {}, this.showLine = !0, this.drawActiveElementsOnTop = !0, this.describe(e)
        }
        set(e, r) {
            return xe(this, e, r)
        }
        get(e) {
            return ge(this, e)
        }
        describe(e, r) {
            return xe(Rt, e, r)
        }
        override(e, r) {
            return xe(Et, e, r)
        }
        route(e, r, a, l) {
            const c = ge(this, e),
                h = ge(this, a),
                u = "_" + r;
            Object.defineProperties(c, {
                [u]: {
                    value: c[r],
                    writable: !0
                },
                [r]: {
                    enumerable: !0,
                    get() {
                        const b = this[u],
                            S = h[l];
                        return H(b) ? Object.assign({}, S, b) : O(b, S)
                    },
                    set(b) {
                        this[u] = b
                    }
                }
            })
        }
    }({
        _scriptable: o => !o.startsWith("on"),
        _indexable: o => "events" !== o,
        hover: {
            _fallback: "interaction"
        },
        interaction: {
            _scriptable: !1,
            _indexable: !1
        }
    });

    function Cn() {
        return typeof window < "u" && typeof document < "u"
    }

    function zn(o) {
        let e = o.parentNode;
        return e && "[object ShadowRoot]" === e.toString() && (e = e.host), e
    }

    function Wi(o, e, r) {
        let a;
        return "string" == typeof o ? (a = parseInt(o, 10), -1 !== o.indexOf("%") && (a = a / 100 * e.parentNode[r])) : a = o, a
    }
    const Vi = o => window.getComputedStyle(o, null);

    function hr(o, e) {
        return Vi(o).getPropertyValue(e)
    }
    const gs = ["top", "right", "bottom", "left"];

    function jr(o, e, r) {
        const a = {};
        r = r ? "-" + r : "";
        for (let l = 0; l < 4; l++) {
            const c = gs[l];
            a[c] = parseFloat(o[e + "-" + c + r]) || 0
        }
        return a.width = a.left + a.right, a.height = a.top + a.bottom, a
    }
    const Ir = (o, e, r) => (o > 0 || e > 0) && (!r || !r.shadowRoot);

    function Zi(o, e) {
        if ("native" in o) return o;
        const {
            canvas: r,
            currentDevicePixelRatio: a
        } = e, l = Vi(r), c = "border-box" === l.boxSizing, h = jr(l, "padding"), u = jr(l, "border", "width"), {
            x: b,
            y: S,
            box: D
        } = function $s(o, e) {
            const r = o.touches,
                a = r && r.length ? r[0] : o,
                {
                    offsetX: l,
                    offsetY: c
                } = a;
            let u, b, h = !1;
            if (Ir(l, c, o.target)) u = l, b = c;
            else {
                const S = e.getBoundingClientRect();
                u = a.clientX - S.left, b = a.clientY - S.top, h = !0
            }
            return {
                x: u,
                y: b,
                box: h
            }
        }(o, r), U = h.left + (D && u.left), st = h.top + (D && u.top);
        let {
            width: ft,
            height: gt
        } = e;
        return c && (ft -= h.width + u.width, gt -= h.height + u.height), {
            x: Math.round((b - U) / ft * r.width / a),
            y: Math.round((S - st) / gt * r.height / a)
        }
    }
    const Di = o => Math.round(10 * o) / 10;

    function ms(o, e, r, a) {
        const l = Vi(o),
            c = jr(l, "margin"),
            h = Wi(l.maxWidth, o, "clientWidth") || ot,
            u = Wi(l.maxHeight, o, "clientHeight") || ot,
            b = function Bs(o, e, r) {
                let a, l;
                if (void 0 === e || void 0 === r) {
                    const c = zn(o);
                    if (c) {
                        const h = c.getBoundingClientRect(),
                            u = Vi(c),
                            b = jr(u, "border", "width"),
                            S = jr(u, "padding");
                        e = h.width - S.width - b.width, r = h.height - S.height - b.height, a = Wi(u.maxWidth, c, "clientWidth"), l = Wi(u.maxHeight, c, "clientHeight")
                    } else e = o.clientWidth, r = o.clientHeight
                }
                return {
                    width: e,
                    height: r,
                    maxWidth: a || ot,
                    maxHeight: l || ot
                }
            }(o, e, r);
        let {
            width: S,
            height: D
        } = b;
        if ("content-box" === l.boxSizing) {
            const U = jr(l, "border", "width"),
                st = jr(l, "padding");
            S -= st.width + U.width, D -= st.height + U.height
        }
        return S = Math.max(0, S - c.width), D = Math.max(0, a ? Math.floor(S / a) : D - c.height), S = Di(Math.min(S, h, b.maxWidth)), D = Di(Math.min(D, u, b.maxHeight)), S && !D && (D = Di(S / 2)), {
            width: S,
            height: D
        }
    }

    function Lr(o, e, r) {
        const a = e || 1,
            l = Math.floor(o.height * a),
            c = Math.floor(o.width * a);
        o.height = l / a, o.width = c / a;
        const h = o.canvas;
        return h.style && (r || !h.style.height && !h.style.width) && (h.style.height = `${o.height}px`, h.style.width = `${o.width}px`), (o.currentDevicePixelRatio !== a || h.height !== l || h.width !== c) && (o.currentDevicePixelRatio = a, h.height = l, h.width = c, o.ctx.setTransform(a, 0, 0, a, 0, 0), !0)
    }
    const Ui = function() {
        let o = !1;
        try {
            const e = {
                get passive() {
                    return o = !0, !1
                }
            };
            window.addEventListener("test", null, e), window.removeEventListener("test", null, e)
        } catch {}
        return o
    }();

    function Fs(o, e) {
        const r = hr(o, e),
            a = r && r.match(/^(\d+)(\.\d+)?px$/);
        return a ? +a[1] : void 0
    }

    function mo(o) {
        return !o || y(o.size) || y(o.family) ? null : (o.style ? o.style + " " : "") + (o.weight ? o.weight + " " : "") + o.size + "px " + o.family
    }

    function ei(o, e, r, a, l) {
        let c = e[l];
        return c || (c = e[l] = o.measureText(l).width, r.push(l)), c > a && (a = c), a
    }

    function $i(o, e, r, a) {
        let l = (a = a || {}).data = a.data || {},
            c = a.garbageCollect = a.garbageCollect || [];
        a.font !== e && (l = a.data = {}, c = a.garbageCollect = [], a.font = e), o.save(), o.font = e;
        let h = 0;
        const u = r.length;
        let b, S, D, U, st;
        for (b = 0; b < u; b++)
            if (U = r[b], null != U && !0 !== I(U)) h = ei(o, l, c, h, U);
            else if (I(U))
            for (S = 0, D = U.length; S < D; S++) st = U[S], null != st && !I(st) && (h = ei(o, l, c, h, st));
        o.restore();
        const ft = c.length / 2;
        if (ft > r.length) {
            for (b = 0; b < ft; b++) delete l[c[b]];
            c.splice(0, ft)
        }
        return h
    }

    function bs(o, e, r) {
        const a = o.currentDevicePixelRatio,
            l = 0 !== r ? Math.max(r / 2, .5) : 0;
        return Math.round((e - l) * a) / a + l
    }

    function Us(o, e) {
        (e = e || o.getContext("2d")).save(), e.resetTransform(), e.clearRect(0, 0, o.width, o.height), e.restore()
    }

    function vs(o, e, r, a) {
        Es(o, e, r, a, null)
    }

    function Es(o, e, r, a, l) {
        let c, h, u, b, S, D;
        const U = e.pointStyle,
            st = e.rotation,
            ft = e.radius;
        let gt = (st || 0) * St;
        if (U && "object" == typeof U && (c = U.toString(), "[object HTMLImageElement]" === c || "[object HTMLCanvasElement]" === c)) return o.save(), o.translate(r, a), o.rotate(gt), o.drawImage(U, -U.width / 2, -U.height / 2, U.width, U.height), void o.restore();
        if (!(isNaN(ft) || ft <= 0)) {
            switch (o.beginPath(), U) {
                default: l ? o.ellipse(r, a, l / 2, ft, 0, 0, Yt) : o.arc(r, a, ft, 0, Yt),
                o.closePath();
                break;
                case "triangle":
                        o.moveTo(r + Math.sin(gt) * ft, a - Math.cos(gt) * ft),
                    gt += ut,
                    o.lineTo(r + Math.sin(gt) * ft, a - Math.cos(gt) * ft),
                    gt += ut,
                    o.lineTo(r + Math.sin(gt) * ft, a - Math.cos(gt) * ft),
                    o.closePath();
                    break;
                case "rectRounded":
                        S = .516 * ft,
                    b = ft - S,
                    h = Math.cos(gt + rt) * b,
                    u = Math.sin(gt + rt) * b,
                    o.arc(r - h, a - u, S, gt - Ft, gt - V),
                    o.arc(r + u, a - h, S, gt - V, gt),
                    o.arc(r + h, a + u, S, gt, gt + V),
                    o.arc(r - u, a + h, S, gt + V, gt + Ft),
                    o.closePath();
                    break;
                case "rect":
                        if (!st) {
                        b = Math.SQRT1_2 * ft, D = l ? l / 2 : b, o.rect(r - D, a - b, 2 * D, 2 * b);
                        break
                    }gt += rt;
                case "rectRot":
                        h = Math.cos(gt) * ft,
                    u = Math.sin(gt) * ft,
                    o.moveTo(r - h, a - u),
                    o.lineTo(r + u, a - h),
                    o.lineTo(r + h, a + u),
                    o.lineTo(r - u, a + h),
                    o.closePath();
                    break;
                case "crossRot":
                        gt += rt;
                case "cross":
                        h = Math.cos(gt) * ft,
                    u = Math.sin(gt) * ft,
                    o.moveTo(r - h, a - u),
                    o.lineTo(r + h, a + u),
                    o.moveTo(r + u, a - h),
                    o.lineTo(r - u, a + h);
                    break;
                case "star":
                        h = Math.cos(gt) * ft,
                    u = Math.sin(gt) * ft,
                    o.moveTo(r - h, a - u),
                    o.lineTo(r + h, a + u),
                    o.moveTo(r + u, a - h),
                    o.lineTo(r - u, a + h),
                    gt += rt,
                    h = Math.cos(gt) * ft,
                    u = Math.sin(gt) * ft,
                    o.moveTo(r - h, a - u),
                    o.lineTo(r + h, a + u),
                    o.moveTo(r + u, a - h),
                    o.lineTo(r - u, a + h);
                    break;
                case "line":
                        h = l ? l / 2 : Math.cos(gt) * ft,
                    u = Math.sin(gt) * ft,
                    o.moveTo(r - h, a - u),
                    o.lineTo(r + h, a + u);
                    break;
                case "dash":
                        o.moveTo(r, a),
                    o.lineTo(r + Math.cos(gt) * ft, a + Math.sin(gt) * ft)
            }
            o.fill(), e.borderWidth > 0 && o.stroke()
        }
    }

    function Wr(o, e, r) {
        return r = r || .5, !e || o && o.x > e.left - r && o.x < e.right + r && o.y > e.top - r && o.y < e.bottom + r
    }

    function Rs(o, e) {
        o.save(), o.beginPath(), o.rect(e.left, e.top, e.right - e.left, e.bottom - e.top), o.clip()
    }

    function Vr(o) {
        o.restore()
    }

    function Xs(o, e, r, a, l) {
        if (!e) return o.lineTo(r.x, r.y);
        if ("middle" === l) {
            const c = (e.x + r.x) / 2;
            o.lineTo(c, e.y), o.lineTo(c, r.y)
        } else "after" === l != !!a ? o.lineTo(e.x, r.y) : o.lineTo(r.x, e.y);
        o.lineTo(r.x, r.y)
    }

    function qs(o, e, r, a) {
        if (!e) return o.lineTo(r.x, r.y);
        o.bezierCurveTo(a ? e.cp1x : e.cp2x, a ? e.cp1y : e.cp2y, a ? r.cp2x : r.cp1x, a ? r.cp2y : r.cp1y, r.x, r.y)
    }

    function fr(o, e, r, a, l, c = {}) {
        const h = I(e) ? e : [e],
            u = c.strokeWidth > 0 && "" !== c.strokeColor;
        let b, S;
        for (o.save(), o.font = l.string, function so(o, e) {
                e.translation && o.translate(e.translation[0], e.translation[1]), y(e.rotation) || o.rotate(e.rotation), e.color && (o.fillStyle = e.color), e.textAlign && (o.textAlign = e.textAlign), e.textBaseline && (o.textBaseline = e.textBaseline)
            }(o, c), b = 0; b < h.length; ++b) S = h[b], u && (c.strokeColor && (o.strokeStyle = c.strokeColor), y(c.strokeWidth) || (o.lineWidth = c.strokeWidth), o.strokeText(S, r, a, c.maxWidth)), o.fillText(S, r, a, c.maxWidth), Ur(o, r, a, S, c), a += l.lineHeight;
        o.restore()
    }

    function Ur(o, e, r, a, l) {
        if (l.strikethrough || l.underline) {
            const c = o.measureText(a),
                h = e - c.actualBoundingBoxLeft,
                u = e + c.actualBoundingBoxRight,
                S = r + c.actualBoundingBoxDescent,
                D = l.strikethrough ? (r - c.actualBoundingBoxAscent + S) / 2 : S;
            o.strokeStyle = o.fillStyle, o.beginPath(), o.lineWidth = l.decorationWidth || 2, o.moveTo(h, D), o.lineTo(u, D), o.stroke()
        }
    }

    function Ji(o, e) {
        const {
            x: r,
            y: a,
            w: l,
            h: c,
            radius: h
        } = e;
        o.arc(r + h.topLeft, a + h.topLeft, h.topLeft, -V, Ft, !0), o.lineTo(r, a + c - h.bottomLeft), o.arc(r + h.bottomLeft, a + c - h.bottomLeft, h.bottomLeft, Ft, V, !0), o.lineTo(r + l - h.bottomRight, a + c), o.arc(r + l - h.bottomRight, a + c - h.bottomRight, h.bottomRight, V, 0, !0), o.lineTo(r + l, a + h.topRight), o.arc(r + l - h.topRight, a + h.topRight, h.topRight, 0, -V, !0), o.lineTo(r + h.topLeft, a)
    }

    function ss(o, e = [""], r = o, a, l = (() => o[0])) {
        Wt(a) || (a = pe("_fallback", o));
        const c = {
            [Symbol.toStringTag]: "Object",
            _cacheable: !0,
            _scopes: o,
            _rootScopes: r,
            _fallback: a,
            _getTarget: l,
            override: h => ss([h, ...o], e, r, a)
        };
        return new Proxy(c, {
            deleteProperty: (h, u) => (delete h[u], delete h._keys, delete o[0][u], !0),
            get: (h, u) => k(h, u, () => function Xt(o, e, r, a) {
                let l;
                for (const c of e)
                    if (l = pe(f(c, o), r), Wt(l)) return g(o, l) ? Lt(r, a, o, l) : l
            }(u, e, o, h)),
            getOwnPropertyDescriptor: (h, u) => Reflect.getOwnPropertyDescriptor(h._scopes[0], u),
            getPrototypeOf: () => Reflect.getPrototypeOf(o[0]),
            has: (h, u) => Ye(h).includes(u),
            ownKeys: h => Ye(h),
            set(h, u, b) {
                const S = h._storage || (h._storage = l());
                return h[u] = S[u] = b, delete h._keys, !0
            }
        })
    }

    function os(o, e, r, a) {
        const l = {
            _cacheable: !1,
            _proxy: o,
            _context: e,
            _subProxy: r,
            _stack: new Set,
            _descriptors: Gs(o, a),
            setContext: c => os(o, c, r, a),
            override: c => os(o.override(c), e, r, a)
        };
        return new Proxy(l, {
            deleteProperty: (c, h) => (delete c[h], delete o[h], !0),
            get: (c, h, u) => k(c, h, () => function E(o, e, r) {
                const {
                    _proxy: a,
                    _context: l,
                    _subProxy: c,
                    _descriptors: h
                } = o;
                let u = a[e];
                return be(u) && h.isScriptable(e) && (u = function L(o, e, r, a) {
                    const {
                        _proxy: l,
                        _context: c,
                        _subProxy: h,
                        _stack: u
                    } = r;
                    if (u.has(o)) throw new Error("Recursion detected: " + Array.from(u).join("->") + "->" + o);
                    return u.add(o), e = e(c, h || a), u.delete(o), g(o, e) && (e = Lt(l._scopes, l, o, e)), e
                }(e, u, o, r)), I(u) && u.length && (u = function W(o, e, r, a) {
                    const {
                        _proxy: l,
                        _context: c,
                        _subProxy: h,
                        _descriptors: u
                    } = r;
                    if (Wt(c.index) && a(o)) e = e[c.index % e.length];
                    else if (H(e[0])) {
                        const b = e,
                            S = l._scopes.filter(D => D !== b);
                        e = [];
                        for (const D of b) {
                            const U = Lt(S, l, o, D);
                            e.push(os(U, c, h && h[o], u))
                        }
                    }
                    return e
                }(e, u, o, h.isIndexable)), g(e, u) && (u = os(u, l, c && c[e], h)), u
            }(c, h, u)),
            getOwnPropertyDescriptor: (c, h) => c._descriptors.allKeys ? Reflect.has(o, h) ? {
                enumerable: !0,
                configurable: !0
            } : void 0 : Reflect.getOwnPropertyDescriptor(o, h),
            getPrototypeOf: () => Reflect.getPrototypeOf(o),
            has: (c, h) => Reflect.has(o, h),
            ownKeys: () => Reflect.ownKeys(o),
            set: (c, h, u) => (o[h] = u, delete c[h], !0)
        })
    }

    function Gs(o, e = {
        scriptable: !0,
        indexable: !0
    }) {
        const {
            _scriptable: r = e.scriptable,
            _indexable: a = e.indexable,
            _allKeys: l = e.allKeys
        } = o;
        return {
            allKeys: l,
            scriptable: r,
            indexable: a,
            isScriptable: be(r) ? r : () => r,
            isIndexable: be(a) ? a : () => a
        }
    }
    const f = (o, e) => o ? o + jt(e) : e,
        g = (o, e) => H(e) && "adapters" !== o && (null === Object.getPrototypeOf(e) || e.constructor === Object);

    function k(o, e, r) {
        if (Object.prototype.hasOwnProperty.call(o, e)) return o[e];
        const a = r();
        return o[e] = a, a
    }

    function Q(o, e, r) {
        return be(o) ? o(e, r) : o
    }
    const yt = (o, e) => !0 === o ? e : "string" == typeof o ? wt(e, o) : void 0;

    function vt(o, e, r, a, l) {
        for (const c of e) {
            const h = yt(r, c);
            if (h) {
                o.add(h);
                const u = Q(h._fallback, r, l);
                if (Wt(u) && u !== r && u !== a) return u
            } else if (!1 === h && Wt(a) && r !== a) return null
        }
        return !1
    }

    function Lt(o, e, r, a) {
        const l = e._rootScopes,
            c = Q(e._fallback, r, a),
            h = [...o, ...l],
            u = new Set;
        u.add(a);
        let b = ee(u, h, r, c || r, a);
        return !(null === b || Wt(c) && c !== r && (b = ee(u, h, c, b, a), null === b)) && ss(Array.from(u), [""], l, c, () => function de(o, e, r) {
            const a = o._getTarget();
            e in a || (a[e] = {});
            const l = a[e];
            return I(l) && H(r) ? r : l
        }(e, r, a))
    }

    function ee(o, e, r, a, l) {
        for (; r;) r = vt(o, e, r, a, l);
        return r
    }

    function pe(o, e) {
        for (const r of e) {
            if (!r) continue;
            const a = r[o];
            if (Wt(a)) return a
        }
    }

    function Ye(o) {
        let e = o._keys;
        return e || (e = o._keys = function hn(o) {
            const e = new Set;
            for (const r of o)
                for (const a of Object.keys(r).filter(l => !l.startsWith("_"))) e.add(a);
            return Array.from(e)
        }(o._scopes)), e
    }

    function on(o, e, r, a) {
        const {
            iScale: l
        } = o, {
            key: c = "r"
        } = this._parsing, h = new Array(a);
        let u, b, S, D;
        for (u = 0, b = a; u < b; ++u) S = u + r, D = e[S], h[u] = {
            r: l.parse(wt(D, c), S)
        };
        return h
    }
    const ni = Number.EPSILON || 1e-14,
        vi = (o, e) => e < o.length && !o[e].skip && o[e],
        gr = o => "x" === o ? "y" : "x";

    function Xi(o, e, r, a) {
        const l = o.skip ? e : o,
            c = e,
            h = r.skip ? e : r,
            u = Ne(c, l),
            b = Ne(h, c);
        let S = u / (u + b),
            D = b / (u + b);
        S = isNaN(S) ? 0 : S, D = isNaN(D) ? 0 : D;
        const U = a * S,
            st = a * D;
        return {
            previous: {
                x: c.x - U * (h.x - l.x),
                y: c.y - U * (h.y - l.y)
            },
            next: {
                x: c.x + st * (h.x - l.x),
                y: c.y + st * (h.y - l.y)
            }
        }
    }

    function Mn(o, e = "x") {
        const r = gr(e),
            a = o.length,
            l = Array(a).fill(0),
            c = Array(a);
        let h, u, b, S = vi(o, 0);
        for (h = 0; h < a; ++h)
            if (u = b, b = S, S = vi(o, h + 1), b) {
                if (S) {
                    const D = S[e] - b[e];
                    l[h] = 0 !== D ? (S[r] - b[r]) / D : 0
                }
                c[h] = u ? S ? X(l[h - 1]) !== X(l[h]) ? 0 : (l[h - 1] + l[h]) / 2 : l[h - 1] : l[h]
            }(function Dn(o, e, r) {
                const a = o.length;
                let l, c, h, u, b, S = vi(o, 0);
                for (let D = 0; D < a - 1; ++D)
                    if (b = S, S = vi(o, D + 1), b && S) {
                        if (xt(e[D], 0, ni)) {
                            r[D] = r[D + 1] = 0;
                            continue
                        }
                        l = r[D] / e[D], c = r[D + 1] / e[D], u = Math.pow(l, 2) + Math.pow(c, 2), !(u <= 9) && (h = 3 / Math.sqrt(u), r[D] = l * h * e[D], r[D + 1] = c * h * e[D])
                    }
            })(o, l, c),
        function Ts(o, e, r = "x") {
            const a = gr(r),
                l = o.length;
            let c, h, u, b = vi(o, 0);
            for (let S = 0; S < l; ++S) {
                if (h = u, u = b, b = vi(o, S + 1), !u) continue;
                const D = u[r],
                    U = u[a];
                h && (c = (D - h[r]) / 3, u[`cp1${r}`] = D - c, u[`cp1${a}`] = U - c * e[S]), b && (c = (b[r] - D) / 3, u[`cp2${r}`] = D + c, u[`cp2${a}`] = U + c * e[S])
            }
        }(o, c, e)
    }

    function Kn(o, e, r) {
        return Math.max(Math.min(o, r), e)
    }

    function Zs(o, e, r, a, l) {
        let c, h, u, b;
        if (e.spanGaps && (o = o.filter(S => !S.skip)), "monotone" === e.cubicInterpolationMode) Mn(o, l);
        else {
            let S = a ? o[o.length - 1] : o[0];
            for (c = 0, h = o.length; c < h; ++c) u = o[c], b = Xi(S, u, o[Math.min(c + 1, h - (a ? 0 : 1)) % h], e.tension), u.cp1x = b.previous.x, u.cp1y = b.previous.y, u.cp2x = b.next.x, u.cp2y = b.next.y, S = u
        }
        e.capBezierPoints && function Ys(o, e) {
            let r, a, l, c, h, u = Wr(o[0], e);
            for (r = 0, a = o.length; r < a; ++r) h = c, c = u, u = r < a - 1 && Wr(o[r + 1], e), c && (l = o[r], h && (l.cp1x = Kn(l.cp1x, e.left, e.right), l.cp1y = Kn(l.cp1y, e.top, e.bottom)), u && (l.cp2x = Kn(l.cp2x, e.left, e.right), l.cp2y = Kn(l.cp2y, e.top, e.bottom)))
        }(o, r)
    }
    const ur = o => 0 === o || 1 === o,
        $r = (o, e, r) => -Math.pow(2, 10 * (o -= 1)) * Math.sin((o - e) * Yt / r),
        mr = (o, e, r) => Math.pow(2, -10 * o) * Math.sin((o - e) * Yt / r) + 1,
        br = {
            linear: o => o,
            easeInQuad: o => o * o,
            easeOutQuad: o => -o * (o - 2),
            easeInOutQuad: o => (o /= .5) < 1 ? .5 * o * o : -.5 * (--o * (o - 2) - 1),
            easeInCubic: o => o * o * o,
            easeOutCubic: o => (o -= 1) * o * o + 1,
            easeInOutCubic: o => (o /= .5) < 1 ? .5 * o * o * o : .5 * ((o -= 2) * o * o + 2),
            easeInQuart: o => o * o * o * o,
            easeOutQuart: o => -((o -= 1) * o * o * o - 1),
            easeInOutQuart: o => (o /= .5) < 1 ? .5 * o * o * o * o : -.5 * ((o -= 2) * o * o * o - 2),
            easeInQuint: o => o * o * o * o * o,
            easeOutQuint: o => (o -= 1) * o * o * o * o + 1,
            easeInOutQuint: o => (o /= .5) < 1 ? .5 * o * o * o * o * o : .5 * ((o -= 2) * o * o * o * o + 2),
            easeInSine: o => 1 - Math.cos(o * V),
            easeOutSine: o => Math.sin(o * V),
            easeInOutSine: o => -.5 * (Math.cos(Ft * o) - 1),
            easeInExpo: o => 0 === o ? 0 : Math.pow(2, 10 * (o - 1)),
            easeOutExpo: o => 1 === o ? 1 : 1 - Math.pow(2, -10 * o),
            easeInOutExpo: o => ur(o) ? o : o < .5 ? .5 * Math.pow(2, 10 * (2 * o - 1)) : .5 * (2 - Math.pow(2, -10 * (2 * o - 1))),
            easeInCirc: o => o >= 1 ? o : -(Math.sqrt(1 - o * o) - 1),
            easeOutCirc: o => Math.sqrt(1 - (o -= 1) * o),
            easeInOutCirc: o => (o /= .5) < 1 ? -.5 * (Math.sqrt(1 - o * o) - 1) : .5 * (Math.sqrt(1 - (o -= 2) * o) + 1),
            easeInElastic: o => ur(o) ? o : $r(o, .075, .3),
            easeOutElastic: o => ur(o) ? o : mr(o, .075, .3),
            easeInOutElastic: o => ur(o) ? o : o < .5 ? .5 * $r(2 * o, .1125, .45) : .5 + .5 * mr(2 * o - 1, .1125, .45),
            easeInBack: o => o * o * (2.70158 * o - 1.70158),
            easeOutBack: o => (o -= 1) * o * (2.70158 * o + 1.70158) + 1,
            easeInOutBack(o) {
                let e = 1.70158;
                return (o /= .5) < 1 ? o * o * ((1 + (e *= 1.525)) * o - e) * .5 : .5 * ((o -= 2) * o * ((1 + (e *= 1.525)) * o + e) + 2)
            },
            easeInBounce: o => 1 - br.easeOutBounce(1 - o),
            easeOutBounce: o => o < 1 / 2.75 ? 7.5625 * o * o : o < 2 / 2.75 ? 7.5625 * (o -= 1.5 / 2.75) * o + .75 : o < 2.5 / 2.75 ? 7.5625 * (o -= 2.25 / 2.75) * o + .9375 : 7.5625 * (o -= 2.625 / 2.75) * o + .984375,
            easeInOutBounce: o => o < .5 ? .5 * br.easeInBounce(2 * o) : .5 * br.easeOutBounce(2 * o - 1) + .5
        };

    function qi(o, e, r, a) {
        return {
            x: o.x + r * (e.x - o.x),
            y: o.y + r * (e.y - o.y)
        }
    }

    function Fi(o, e, r, a) {
        return {
            x: o.x + r * (e.x - o.x),
            y: "middle" === a ? r < .5 ? o.y : e.y : "after" === a ? r < 1 ? o.y : e.y : r > 0 ? e.y : o.y
        }
    }

    function ui(o, e, r, a) {
        const l = {
                x: o.cp2x,
                y: o.cp2y
            },
            c = {
                x: e.cp1x,
                y: e.cp1y
            },
            h = qi(o, l, r),
            u = qi(l, c, r),
            b = qi(c, e, r),
            S = qi(h, u, r),
            D = qi(u, b, r);
        return qi(S, D, r)
    }
    const _i = new Map;

    function vr(o, e, r) {
        return function rr(o, e) {
            e = e || {};
            const r = o + JSON.stringify(e);
            let a = _i.get(r);
            return a || (a = new Intl.NumberFormat(o, e), _i.set(r, a)), a
        }(e, r).format(o)
    }
    const sr = new RegExp(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/),
        en = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);

    function xi(o, e) {
        const r = ("" + o).match(sr);
        if (!r || "normal" === r[1]) return 1.2 * e;
        switch (o = +r[2], r[3]) {
            case "px":
                return o;
            case "%":
                o /= 100
        }
        return e * o
    }
    const Oi = o => +o || 0;

    function qn(o, e) {
        const r = {},
            a = H(e),
            l = a ? Object.keys(e) : e,
            c = H(o) ? a ? h => O(o[h], o[e[h]]) : h => o[h] : () => o;
        for (const h of l) r[h] = Oi(c(h));
        return r
    }

    function Br(o) {
        return qn(o, {
            top: "y",
            right: "x",
            bottom: "y",
            left: "x"
        })
    }

    function Qn(o) {
        return qn(o, ["topLeft", "topRight", "bottomLeft", "bottomRight"])
    }

    function Ci(o) {
        const e = Br(o);
        return e.width = e.left + e.right, e.height = e.top + e.bottom, e
    }

    function ti(o, e) {
        let r = O((o = o || {}).size, (e = e || De.font).size);
        "string" == typeof r && (r = parseInt(r, 10));
        let a = O(o.style, e.style);
        a && !("" + a).match(en) && (console.warn('Invalid font style specified: "' + a + '"'), a = "");
        const l = {
            family: O(o.family, e.family),
            lineHeight: xi(O(o.lineHeight, e.lineHeight), r),
            size: r,
            style: a,
            weight: O(o.weight, e.weight),
            string: ""
        };
        return l.string = mo(l), l
    }

    function as(o, e, r, a) {
        let c, h, u, l = !0;
        for (c = 0, h = o.length; c < h; ++c)
            if (u = o[c], void 0 !== u && (void 0 !== e && "function" == typeof u && (u = u(e), l = !1), void 0 !== r && I(u) && (u = u[r % u.length], l = !1), void 0 !== u)) return a && !l && (a.cacheable = !1), u
    }

    function ls(o, e, r) {
        const {
            min: a,
            max: l
        } = o, c = mt(e, (l - a) / 2), h = (u, b) => r && 0 === u ? 0 : u + b;
        return {
            min: h(a, -Math.abs(c)),
            max: h(l, c)
        }
    }

    function Xr(o, e) {
        return Object.assign(Object.create(o), e)
    }
    const qr = function(o, e) {
            return {
                x: r => o + o + e - r,
                setWidth(r) {
                    e = r
                },
                textAlign: r => "center" === r ? r : "right" === r ? "left" : "right",
                xPlus: (r, a) => r - a,
                leftForLtr: (r, a) => r - a
            }
        },
        _r = function() {
            return {
                x: o => o,
                setWidth(o) {},
                textAlign: o => o,
                xPlus: (o, e) => o + e,
                leftForLtr: (o, e) => o
            }
        };

    function Gr(o, e, r) {
        return o ? qr(e, r) : _r()
    }

    function Js(o, e) {
        let r, a;
        ("ltr" === e || "rtl" === e) && (r = o.canvas.style, a = [r.getPropertyValue("direction"), r.getPropertyPriority("direction")], r.setProperty("direction", e, "important"), o.prevTextDirection = a)
    }

    function As(o, e) {
        void 0 !== e && (delete o.prevTextDirection, o.canvas.style.setProperty("direction", e[0], e[1]))
    }

    function oo(o) {
        return "angle" === o ? {
            between: cn,
            compare: dn,
            normalize: Me
        } : {
            between: te,
            compare: (e, r) => e - r,
            normalize: e => e
        }
    }

    function ao({
        start: o,
        end: e,
        count: r,
        loop: a,
        style: l
    }) {
        return {
            start: o % r,
            end: e % r,
            loop: a && (e - o + 1) % r == 0,
            style: l
        }
    }

    function Ks(o, e, r) {
        if (!r) return [o];
        const {
            property: a,
            start: l,
            end: c
        } = r, h = e.length, {
            compare: u,
            between: b,
            normalize: S
        } = oo(a), {
            start: D,
            end: U,
            loop: st,
            style: ft
        } = function lo(o, e, r) {
            const {
                property: a,
                start: l,
                end: c
            } = r, {
                between: h,
                normalize: u
            } = oo(a), b = e.length;
            let st, ft, {
                start: S,
                end: D,
                loop: U
            } = o;
            if (U) {
                for (S += b, D += b, st = 0, ft = b; st < ft && h(u(e[S % b][a]), l, c); ++st) S--, D--;
                S %= b, D %= b
            }
            return D < S && (D += b), {
                start: S,
                end: D,
                loop: U,
                style: o.style
            }
        }(o, e, r), gt = [];
        let re, _e, Ae, $t = !1,
            qt = null;
        for (let vn = D, un = D; vn <= U; ++vn) _e = e[vn % h], !_e.skip && (re = S(_e[a]), re !== Ae && ($t = b(re, l, c), null === qt && ($t || b(l, Ae, re) && 0 !== u(l, Ae)) && (qt = 0 === u(re, l) ? vn : un), null !== qt && (!$t || 0 === u(c, re) || b(c, Ae, re)) && (gt.push(ao({
            start: qt,
            end: vn,
            loop: st,
            count: h,
            style: ft
        })), qt = null), un = vn, Ae = re));
        return null !== qt && gt.push(ao({
            start: qt,
            end: U,
            loop: st,
            count: h,
            style: ft
        })), gt
    }

    function ct(o, e) {
        const r = [],
            a = o.segments;
        for (let l = 0; l < a.length; l++) {
            const c = Ks(a[l], o.points, e);
            c.length && r.push(...c)
        }
        return r
    }

    function se(o, e) {
        const r = o.points,
            a = o.options.spanGaps,
            l = r.length;
        if (!l) return [];
        const c = !!o._loop,
            {
                start: h,
                end: u
            } = function At(o, e, r, a) {
                let l = 0,
                    c = e - 1;
                if (r && !a)
                    for (; l < e && !o[l].skip;) l++;
                for (; l < e && o[l].skip;) l++;
                for (l %= e, r && (c += l); c > l && o[c % e].skip;) c--;
                return c %= e, {
                    start: l,
                    end: c
                }
            }(r, l, c, a);
        return fe(o, !0 === a ? [{
            start: h,
            end: u,
            loop: c
        }] : function Zt(o, e, r, a) {
            const l = o.length,
                c = [];
            let b, h = e,
                u = o[e];
            for (b = e + 1; b <= r; ++b) {
                const S = o[b % l];
                S.skip || S.stop ? u.skip || (c.push({
                    start: e % l,
                    end: (b - 1) % l,
                    loop: a = !1
                }), e = h = S.stop ? b : null) : (h = b, u.skip && (e = b)), u = S
            }
            return null !== h && c.push({
                start: e % l,
                end: h % l,
                loop: a
            }), c
        }(r, h, u < h ? u + l : u, !!o._fullLoop && 0 === h && u === l - 1), r, e)
    }

    function fe(o, e, r, a) {
        return a && a.setContext && r ? function je(o, e, r, a) {
            const l = o._chart.getContext(),
                c = Fe(o.options),
                {
                    _datasetIndex: h,
                    options: {
                        spanGaps: u
                    }
                } = o,
                b = r.length,
                S = [];
            let D = c,
                U = e[0].start,
                st = U;

            function ft(gt, $t, qt, re) {
                const _e = u ? -1 : 1;
                if (gt !== $t) {
                    for (gt += b; r[gt % b].skip;) gt -= _e;
                    for (; r[$t % b].skip;) $t += _e;
                    gt % b != $t % b && (S.push({
                        start: gt % b,
                        end: $t % b,
                        loop: qt,
                        style: re
                    }), D = re, U = $t % b)
                }
            }
            for (const gt of e) {
                U = u ? U : gt.start;
                let qt, $t = r[U % b];
                for (st = U + 1; st <= gt.end; st++) {
                    const re = r[st % b];
                    qt = Fe(a.setContext(Xr(l, {
                        type: "segment",
                        p0: $t,
                        p1: re,
                        p0DataIndex: (st - 1) % b,
                        p1DataIndex: st % b,
                        datasetIndex: h
                    }))), Ze(qt, D) && ft(U, st - 1, gt.loop, D), $t = re, D = qt
                }
                U < st - 1 && ft(U, st - 1, gt.loop, D)
            }
            return S
        }(o, e, r, a) : e
    }

    function Fe(o) {
        return {
            backgroundColor: o.backgroundColor,
            borderCapStyle: o.borderCapStyle,
            borderDash: o.borderDash,
            borderDashOffset: o.borderDashOffset,
            borderJoinStyle: o.borderJoinStyle,
            borderWidth: o.borderWidth,
            borderColor: o.borderColor
        }
    }

    function Ze(o, e) {
        return e && JSON.stringify(o) !== JSON.stringify(e)
    }
    var He = Object.freeze({
        __proto__: null,
        easingEffects: br,
        isPatternOrGradient: zr,
        color: Yi,
        getHoverColor: ht,
        noop: p,
        uid: R,
        isNullOrUndef: y,
        isArray: I,
        isObject: H,
        isFinite: P,
        finiteOrDefault: K,
        valueOrDefault: O,
        toPercentage: J,
        toDimension: mt,
        callback: Z,
        each: A,
        _elementsEqual: q,
        clone: tt,
        _merger: lt,
        merge: M,
        mergeIf: G,
        _mergerIf: et,
        _deprecated: function dt(o, e, r, a) {
            void 0 !== e && console.warn(o + ': "' + r + '" is deprecated. Please use "' + a + '" instead')
        },
        resolveObjectKey: wt,
        _splitKey: Jt,
        _capitalize: jt,
        defined: Wt,
        isFunction: be,
        setsEqual: Kt,
        _isClickEvent: Qt,
        toFontString: mo,
        _measureText: ei,
        _longestText: $i,
        _alignPixel: bs,
        clearCanvas: Us,
        drawPoint: vs,
        drawPointLegend: Es,
        _isPointInArea: Wr,
        clipArea: Rs,
        unclipArea: Vr,
        _steppedLineTo: Xs,
        _bezierCurveTo: qs,
        renderText: fr,
        addRoundedRectPath: Ji,
        _lookup: Pn,
        _lookupByKey: En,
        _rlookupByKey: Be,
        _filterBetween: qe,
        listenArrayEvents: mi,
        unlistenArrayEvents: ki,
        _arrayUnique: Ni,
        _createResolver: ss,
        _attachContext: os,
        _descriptors: Gs,
        _parseObjectDataRadialScale: on,
        splineCurve: Xi,
        splineCurveMonotone: Mn,
        _updateBezierControlPoints: Zs,
        _isDomSupported: Cn,
        _getParentNode: zn,
        getStyle: hr,
        getRelativePosition: Zi,
        getMaximumSize: ms,
        retinaScale: Lr,
        supportsEventListenerOptions: Ui,
        readUsedSize: Fs,
        fontString: function Pi(o, e, r) {
            return e + " " + o + "px " + r
        },
        requestAnimFrame: Un,
        throttled: Xn,
        debounce: bi,
        _toLeftRightCenter: Bi,
        _alignStartEnd: mn,
        _textX: v,
        _getStartAndCountOfVisiblePoints: wr,
        _scaleRangesChanged: ci,
        _pointInLine: qi,
        _steppedInterpolation: Fi,
        _bezierInterpolation: ui,
        formatNumber: vr,
        toLineHeight: xi,
        _readValueToProps: qn,
        toTRBL: Br,
        toTRBLCorners: Qn,
        toPadding: Ci,
        toFont: ti,
        resolve: as,
        _addGrace: ls,
        createContext: Xr,
        PI: Ft,
        TAU: Yt,
        PITAU: it,
        INFINITY: ot,
        RAD_PER_DEG: St,
        HALF_PI: V,
        QUARTER_PI: rt,
        TWO_THIRDS_PI: ut,
        log10: z,
        sign: X,
        niceNum: _t,
        _factorize: Mt,
        isNumber: Gt,
        almostEquals: xt,
        almostWhole: pt,
        _setMinAndMaxByKey: Tt,
        toRadians: Dt,
        toDegrees: ce,
        _decimalPlaces: le,
        getAngleFromPoint: Ce,
        distanceBetweenPoints: Ne,
        _angleDiff: dn,
        _normalizeAngle: Me,
        _angleBetween: cn,
        _limitValue: sn,
        _int16Range: Wn,
        _isBetween: te,
        getRtlAdapter: Gr,
        overrideTextDirection: Js,
        restoreTextDirection: As,
        _boundSegment: Ks,
        _boundSegments: ct,
        _computeSegments: se
    });

    function Nn(o, e, r, a) {
        const {
            controller: l,
            data: c,
            _sorted: h
        } = o, u = l._cachedMeta.iScale;
        if (u && e === u.axis && "r" !== e && h && c.length) {
            const b = u._reversePixels ? Be : En;
            if (!a) return b(c, e, r);
            if (l._sharedOptions) {
                const S = c[0],
                    D = "function" == typeof S.getRange && S.getRange(e);
                if (D) {
                    const U = b(c, e, r - D),
                        st = b(c, e, r + D);
                    return {
                        lo: U.lo,
                        hi: st.hi
                    }
                }
            }
        }
        return {
            lo: 0,
            hi: c.length - 1
        }
    }

    function an(o, e, r, a, l) {
        const c = o.getSortedVisibleDatasetMetas(),
            h = r[e];
        for (let u = 0, b = c.length; u < b; ++u) {
            const {
                index: S,
                data: D
            } = c[u], {
                lo: U,
                hi: st
            } = Nn(c[u], e, h, l);
            for (let ft = U; ft <= st; ++ft) {
                const gt = D[ft];
                gt.skip || a(gt, S, ft)
            }
        }
    }

    function On(o, e, r, a, l) {
        const c = [];
        return !l && !o.isPointInArea(e) || an(o, r, e, function(u, b, S) {
            !l && !Wr(u, o.chartArea, 0) || u.inRange(e.x, e.y, a) && c.push({
                element: u,
                datasetIndex: b,
                index: S
            })
        }, !0), c
    }

    function ai(o, e, r, a, l, c) {
        return c || o.isPointInArea(e) ? "r" !== r || a ? function di(o, e, r, a, l, c) {
            let h = [];
            const u = function xn(o) {
                const e = -1 !== o.indexOf("x"),
                    r = -1 !== o.indexOf("y");
                return function(a, l) {
                    const c = e ? Math.abs(a.x - l.x) : 0,
                        h = r ? Math.abs(a.y - l.y) : 0;
                    return Math.sqrt(Math.pow(c, 2) + Math.pow(h, 2))
                }
            }(r);
            let b = Number.POSITIVE_INFINITY;
            return an(o, r, e, function S(D, U, st) {
                const ft = D.inRange(e.x, e.y, l);
                if (a && !ft) return;
                const gt = D.getCenterPoint(l);
                if (!c && !o.isPointInArea(gt) && !ft) return;
                const qt = u(e, gt);
                qt < b ? (h = [{
                    element: D,
                    datasetIndex: U,
                    index: st
                }], b = qt) : qt === b && h.push({
                    element: D,
                    datasetIndex: U,
                    index: st
                })
            }), h
        }(o, e, r, a, l, c) : function pn(o, e, r, a) {
            let l = [];
            return an(o, r, e, function c(h, u, b) {
                const {
                    startAngle: S,
                    endAngle: D
                } = h.getProps(["startAngle", "endAngle"], a), {
                    angle: U
                } = Ce(h, {
                    x: e.x,
                    y: e.y
                });
                cn(U, S, D) && l.push({
                    element: h,
                    datasetIndex: u,
                    index: b
                })
            }), l
        }(o, e, r, l) : []
    }

    function Li(o, e, r, a, l) {
        const c = [],
            h = "x" === r ? "inXRange" : "inYRange";
        let u = !1;
        return an(o, r, e, (b, S, D) => {
            b[h](e[r], l) && (c.push({
                element: b,
                datasetIndex: S,
                index: D
            }), u = u || b.inRange(e.x, e.y, l))
        }), a && !u ? [] : c
    }
    var Ki = {
        evaluateInteractionItems: an,
        modes: {
            index(o, e, r, a) {
                const l = Zi(e, o),
                    c = r.axis || "x",
                    h = r.includeInvisible || !1,
                    u = r.intersect ? On(o, l, c, a, h) : ai(o, l, c, !1, a, h),
                    b = [];
                return u.length ? (o.getSortedVisibleDatasetMetas().forEach(S => {
                    const D = u[0].index,
                        U = S.data[D];
                    U && !U.skip && b.push({
                        element: U,
                        datasetIndex: S.index,
                        index: D
                    })
                }), b) : []
            },
            dataset(o, e, r, a) {
                const l = Zi(e, o),
                    c = r.axis || "xy",
                    h = r.includeInvisible || !1;
                let u = r.intersect ? On(o, l, c, a, h) : ai(o, l, c, !1, a, h);
                if (u.length > 0) {
                    const b = u[0].datasetIndex,
                        S = o.getDatasetMeta(b).data;
                    u = [];
                    for (let D = 0; D < S.length; ++D) u.push({
                        element: S[D],
                        datasetIndex: b,
                        index: D
                    })
                }
                return u
            },
            point: (o, e, r, a) => On(o, Zi(e, o), r.axis || "xy", a, r.includeInvisible || !1),
            nearest: (o, e, r, a) => ai(o, Zi(e, o), r.axis || "xy", r.intersect, a, r.includeInvisible || !1),
            x: (o, e, r, a) => Li(o, Zi(e, o), "x", r.intersect, a),
            y: (o, e, r, a) => Li(o, Zi(e, o), "y", r.intersect, a)
        }
    };
    const dr = ["left", "top", "right", "bottom"];

    function or(o, e) {
        return o.filter(r => r.pos === e)
    }

    function jn(o, e) {
        return o.filter(r => -1 === dr.indexOf(r.pos) && r.box.axis === e)
    }

    function Ri(o, e) {
        return o.sort((r, a) => {
            const l = e ? a : r,
                c = e ? r : a;
            return l.weight === c.weight ? l.index - c.index : l.weight - c.weight
        })
    }

    function Hs(o, e, r, a) {
        return Math.max(o[r], e[r]) + Math.max(o[a], e[a])
    }

    function Co(o, e) {
        o.top = Math.max(o.top, e.top), o.left = Math.max(o.left, e.left), o.bottom = Math.max(o.bottom, e.bottom), o.right = Math.max(o.right, e.right)
    }

    function Fo(o, e, r, a) {
        const {
            pos: l,
            box: c
        } = r, h = o.maxPadding;
        if (!H(l)) {
            r.size && (o[l] -= r.size);
            const U = a[r.stack] || {
                size: 0,
                count: 1
            };
            U.size = Math.max(U.size, r.horizontal ? c.height : c.width), r.size = U.size / U.count, o[l] += r.size
        }
        c.getPadding && Co(h, c.getPadding());
        const u = Math.max(0, e.outerWidth - Hs(h, o, "left", "right")),
            b = Math.max(0, e.outerHeight - Hs(h, o, "top", "bottom")),
            S = u !== o.w,
            D = b !== o.h;
        return o.w = u, o.h = b, r.horizontal ? {
            same: S,
            other: D
        } : {
            same: D,
            other: S
        }
    }

    function kt(o, e) {
        const r = e.maxPadding;
        return function a(l) {
            const c = {
                left: 0,
                top: 0,
                right: 0,
                bottom: 0
            };
            return l.forEach(h => {
                c[h] = Math.max(e[h], r[h])
            }), c
        }(o ? ["left", "right"] : ["top", "bottom"])
    }

    function x(o, e, r, a) {
        const l = [];
        let c, h, u, b, S, D;
        for (c = 0, h = o.length, S = 0; c < h; ++c) {
            u = o[c], b = u.box, b.update(u.width || e.w, u.height || e.h, kt(u.horizontal, e));
            const {
                same: U,
                other: st
            } = Fo(e, r, u, a);
            S |= U && l.length, D = D || st, b.fullSize || l.push(u)
        }
        return S && x(l, e, r, a) || D
    }

    function j(o, e, r, a, l) {
        o.top = r, o.left = e, o.right = e + a, o.bottom = r + l, o.width = a, o.height = l
    }

    function Ct(o, e, r, a) {
        const l = r.padding;
        let {
            x: c,
            y: h
        } = e;
        for (const u of o) {
            const b = u.box,
                S = a[u.stack] || {
                    count: 1,
                    placed: 0,
                    weight: 1
                },
                D = u.stackWeight / S.weight || 1;
            if (u.horizontal) {
                const U = e.w * D,
                    st = S.size || b.height;
                Wt(S.start) && (h = S.start), b.fullSize ? j(b, l.left, h, r.outerWidth - l.right - l.left, st) : j(b, e.left + S.placed, h, U, st), S.start = h, S.placed += U, h = b.bottom
            } else {
                const U = e.h * D,
                    st = S.size || b.width;
                Wt(S.start) && (c = S.start), b.fullSize ? j(b, c, l.top, st, r.outerHeight - l.bottom - l.top) : j(b, c, e.top + S.placed, st, U), S.start = c, S.placed += U, c = b.right
            }
        }
        e.x = c, e.y = h
    }
    De.set("layout", {
        autoPadding: !0,
        padding: {
            top: 0,
            right: 0,
            bottom: 0,
            left: 0
        }
    });
    var ue = {
        addBox(o, e) {
            o.boxes || (o.boxes = []), e.fullSize = e.fullSize || !1, e.position = e.position || "top", e.weight = e.weight || 0, e._layers = e._layers || function() {
                return [{
                    z: 0,
                    draw(r) {
                        e.draw(r)
                    }
                }]
            }, o.boxes.push(e)
        },
        removeBox(o, e) {
            const r = o.boxes ? o.boxes.indexOf(e) : -1; - 1 !== r && o.boxes.splice(r, 1)
        },
        configure(o, e, r) {
            e.fullSize = r.fullSize, e.position = r.position, e.weight = r.weight
        },
        update(o, e, r, a) {
            if (!o) return;
            const l = Ci(o.options.layout.padding),
                c = Math.max(e - l.width, 0),
                h = Math.max(r - l.height, 0),
                u = function Ns(o) {
                    const e = function Er(o) {
                            const e = [];
                            let r, a, l, c, h, u;
                            for (r = 0, a = (o || []).length; r < a; ++r) l = o[r], ({
                                position: c,
                                options: {
                                    stack: h,
                                    stackWeight: u = 1
                                }
                            } = l), e.push({
                                index: r,
                                box: l,
                                pos: c,
                                horizontal: l.isHorizontal(),
                                weight: l.weight,
                                stack: h && c + h,
                                stackWeight: u
                            });
                            return e
                        }(o),
                        r = Ri(e.filter(S => S.box.fullSize), !0),
                        a = Ri(or(e, "left"), !0),
                        l = Ri(or(e, "right")),
                        c = Ri(or(e, "top"), !0),
                        h = Ri(or(e, "bottom")),
                        u = jn(e, "x"),
                        b = jn(e, "y");
                    return {
                        fullSize: r,
                        leftAndTop: a.concat(c),
                        rightAndBottom: l.concat(b).concat(h).concat(u),
                        chartArea: or(e, "chartArea"),
                        vertical: a.concat(l).concat(b),
                        horizontal: c.concat(h).concat(u)
                    }
                }(o.boxes),
                b = u.vertical,
                S = u.horizontal;
            A(o.boxes, $t => {
                "function" == typeof $t.beforeLayout && $t.beforeLayout()
            });
            const D = b.reduce(($t, qt) => qt.box.options && !1 === qt.box.options.display ? $t : $t + 1, 0) || 1,
                U = Object.freeze({
                    outerWidth: e,
                    outerHeight: r,
                    padding: l,
                    availableWidth: c,
                    availableHeight: h,
                    vBoxMaxWidth: c / 2 / D,
                    hBoxMaxHeight: h / 2
                }),
                st = Object.assign({}, l);
            Co(st, Ci(a));
            const ft = Object.assign({
                    maxPadding: st,
                    w: c,
                    h,
                    x: l.left,
                    y: l.top
                }, l),
                gt = function ho(o, e) {
                    const r = function co(o) {
                            const e = {};
                            for (const r of o) {
                                const {
                                    stack: a,
                                    pos: l,
                                    stackWeight: c
                                } = r;
                                if (!a || !dr.includes(l)) continue;
                                const h = e[a] || (e[a] = {
                                    count: 0,
                                    placed: 0,
                                    weight: 0,
                                    size: 0
                                });
                                h.count++, h.weight += c
                            }
                            return e
                        }(o),
                        {
                            vBoxMaxWidth: a,
                            hBoxMaxHeight: l
                        } = e;
                    let c, h, u;
                    for (c = 0, h = o.length; c < h; ++c) {
                        u = o[c];
                        const {
                            fullSize: b
                        } = u.box, S = r[u.stack], D = S && u.stackWeight / S.weight;
                        u.horizontal ? (u.width = D ? D * a : b && e.availableWidth, u.height = l) : (u.width = a, u.height = D ? D * l : b && e.availableHeight)
                    }
                    return r
                }(b.concat(S), U);
            x(u.fullSize, ft, U, gt), x(b, ft, U, gt), x(S, ft, U, gt) && x(b, ft, U, gt),
                function bo(o) {
                    const e = o.maxPadding;

                    function r(a) {
                        const l = Math.max(e[a] - o[a], 0);
                        return o[a] += l, l
                    }
                    o.y += r("top"), o.x += r("left"), r("right"), r("bottom")
                }(ft), Ct(u.leftAndTop, ft, U, gt), ft.x += ft.w, ft.y += ft.h, Ct(u.rightAndBottom, ft, U, gt), o.chartArea = {
                    left: ft.left,
                    top: ft.top,
                    right: ft.left + ft.w,
                    bottom: ft.top + ft.h,
                    height: ft.h,
                    width: ft.w
                }, A(u.chartArea, $t => {
                    const qt = $t.box;
                    Object.assign(qt, o.chartArea), qt.update(ft.w, ft.h, {
                        left: 0,
                        top: 0,
                        right: 0,
                        bottom: 0
                    })
                })
        }
    };
    class Le {
        acquireContext(e, r) {}
        releaseContext(e) {
            return !1
        }
        addEventListener(e, r, a) {}
        removeEventListener(e, r, a) {}
        getDevicePixelRatio() {
            return 1
        }
        getMaximumSize(e, r, a, l) {
            return r = Math.max(0, r || e.width), a = a || e.height, {
                width: r,
                height: Math.max(0, l ? Math.floor(r / l) : a)
            }
        }
        isAttached(e) {
            return !0
        }
        updateConfig(e) {}
    }
    class Je extends Le {
        acquireContext(e) {
            return e && e.getContext && e.getContext("2d") || null
        }
        updateConfig(e) {
            e.options.animation = !1
        }
    }
    const In = "$chartjs",
        Gn = {
            touchstart: "mousedown",
            touchmove: "mousemove",
            touchend: "mouseup",
            pointerenter: "mouseenter",
            pointerdown: "mousedown",
            pointermove: "mousemove",
            pointerup: "mouseup",
            pointerleave: "mouseout",
            pointerout: "mouseout"
        },
        ar = o => null === o || "" === o,
        Yr = !!Ui && {
            passive: !0
        };

    function Ds(o, e, r) {
        o.canvas.removeEventListener(e, r, Yr)
    }

    function Tr(o, e) {
        for (const r of o)
            if (r === e || r.contains(e)) return !0
    }

    function fo(o, e, r) {
        const a = o.canvas,
            l = new MutationObserver(c => {
                let h = !1;
                for (const u of c) h = h || Tr(u.addedNodes, a), h = h && !Tr(u.removedNodes, a);
                h && r()
            });
        return l.observe(document, {
            childList: !0,
            subtree: !0
        }), l
    }

    function cs(o, e, r) {
        const a = o.canvas,
            l = new MutationObserver(c => {
                let h = !1;
                for (const u of c) h = h || Tr(u.removedNodes, a), h = h && !Tr(u.addedNodes, a);
                h && r()
            });
        return l.observe(document, {
            childList: !0,
            subtree: !0
        }), l
    }
    const Qs = new Map;
    let Zr = 0;

    function So() {
        const o = window.devicePixelRatio;
        o !== Zr && (Zr = o, Qs.forEach((e, r) => {
            r.currentDevicePixelRatio !== o && e()
        }))
    }

    function xo(o, e, r) {
        const a = o.canvas,
            l = a && zn(a);
        if (!l) return;
        const c = Xn((u, b) => {
                const S = l.clientWidth;
                r(u, b), S < l.clientWidth && r()
            }, window),
            h = new ResizeObserver(u => {
                const b = u[0],
                    S = b.contentRect.width,
                    D = b.contentRect.height;
                0 === S && 0 === D || c(S, D)
            });
        return h.observe(l),
            function to(o, e) {
                Qs.size || window.addEventListener("resize", So), Qs.set(o, e)
            }(o, c), h
    }

    function yo(o, e, r) {
        r && r.disconnect(), "resize" === e && function qo(o) {
            Qs.delete(o), Qs.size || window.removeEventListener("resize", So)
        }(o)
    }

    function Ao(o, e, r) {
        const a = o.canvas,
            l = Xn(c => {
                null !== o.ctx && r(function zs(o, e) {
                    const r = Gn[o.type] || o.type,
                        {
                            x: a,
                            y: l
                        } = Zi(o, e);
                    return {
                        type: r,
                        chart: e,
                        native: o,
                        x: void 0 !== a ? a : null,
                        y: void 0 !== l ? l : null
                    }
                }(c, o))
            }, o, c => {
                const h = c[0];
                return [h, h.offsetX, h.offsetY]
            });
        return function _s(o, e, r) {
            o.addEventListener(e, r, Yr)
        }(a, e, l), l
    }
    class uo extends Le {
        acquireContext(e, r) {
            const a = e && e.getContext && e.getContext("2d");
            return a && a.canvas === e ? (function Gi(o, e) {
                const r = o.style,
                    a = o.getAttribute("height"),
                    l = o.getAttribute("width");
                if (o[In] = {
                        initial: {
                            height: a,
                            width: l,
                            style: {
                                display: r.display,
                                height: r.height,
                                width: r.width
                            }
                        }
                    }, r.display = r.display || "block", r.boxSizing = r.boxSizing || "border-box", ar(l)) {
                    const c = Fs(o, "width");
                    void 0 !== c && (o.width = c)
                }
                if (ar(a))
                    if ("" === o.style.height) o.height = o.width / (e || 2);
                    else {
                        const c = Fs(o, "height");
                        void 0 !== c && (o.height = c)
                    }
            }(e, r), a) : null
        }
        releaseContext(e) {
            const r = e.canvas;
            if (!r[In]) return !1;
            const a = r[In].initial;
            ["height", "width"].forEach(c => {
                const h = a[c];
                y(h) ? r.removeAttribute(c) : r.setAttribute(c, h)
            });
            const l = a.style || {};
            return Object.keys(l).forEach(c => {
                r.style[c] = l[c]
            }), r.width = r.width, delete r[In], !0
        }
        addEventListener(e, r, a) {
            this.removeEventListener(e, r), (e.$proxies || (e.$proxies = {}))[r] = ({
                attach: fo,
                detach: cs,
                resize: xo
            }[r] || Ao)(e, r, a)
        }
        removeEventListener(e, r) {
            const a = e.$proxies || (e.$proxies = {}),
                l = a[r];
            l && (({
                attach: yo,
                detach: yo,
                resize: yo
            }[r] || Ds)(e, r, l), a[r] = void 0)
        }
        getDevicePixelRatio() {
            return window.devicePixelRatio
        }
        getMaximumSize(e, r, a, l) {
            return ms(e, r, a, l)
        }
        isAttached(e) {
            const r = zn(e);
            return !(!r || !r.isConnected)
        }
    }

    function na(o) {
        return !Cn() || typeof OffscreenCanvas < "u" && o instanceof OffscreenCanvas ? Je : uo
    }
    var vo = Object.freeze({
        __proto__: null,
        _detectPlatform: na,
        BasePlatform: Le,
        BasicPlatform: Je,
        DomPlatform: uo
    });
    const Go = "transparent",
        po = {
            boolean: (o, e, r) => r > .5 ? e : o,
            color(o, e, r) {
                const a = Yi(o || Go),
                    l = a.valid && Yi(e || Go);
                return l && l.valid ? l.mix(a, r).hexString() : e
            },
            number: (o, e, r) => o + (e - o) * r
        };
    class Jr {
        constructor(e, r, a, l) {
            const c = r[a];
            l = as([e.to, l, c, e.from]);
            const h = as([e.from, c, l]);
            this._active = !0, this._fn = e.fn || po[e.type || typeof h], this._easing = br[e.easing] || br.linear, this._start = Math.floor(Date.now() + (e.delay || 0)), this._duration = this._total = Math.floor(e.duration), this._loop = !!e.loop, this._target = r, this._prop = a, this._from = h, this._to = l, this._promises = void 0
        }
        active() {
            return this._active
        }
        update(e, r, a) {
            if (this._active) {
                this._notify(!1);
                const l = this._target[this._prop],
                    c = a - this._start,
                    h = this._duration - c;
                this._start = a, this._duration = Math.floor(Math.max(h, e.duration)), this._total += c, this._loop = !!e.loop, this._to = as([e.to, r, l, e.from]), this._from = as([e.from, l, r])
            }
        }
        cancel() {
            this._active && (this.tick(Date.now()), this._active = !1, this._notify(!1))
        }
        tick(e) {
            const r = e - this._start,
                a = this._duration,
                l = this._prop,
                c = this._from,
                h = this._loop,
                u = this._to;
            let b;
            if (this._active = c !== u && (h || r < a), !this._active) return this._target[l] = u, void this._notify(!0);
            r < 0 ? this._target[l] = c : (b = r / a % 2, b = h && b > 1 ? 2 - b : b, b = this._easing(Math.min(1, Math.max(0, b))), this._target[l] = this._fn(c, u, b))
        }
        wait() {
            const e = this._promises || (this._promises = []);
            return new Promise((r, a) => {
                e.push({
                    res: r,
                    rej: a
                })
            })
        }
        _notify(e) {
            const r = e ? "res" : "rej",
                a = this._promises || [];
            for (let l = 0; l < a.length; l++) a[l][r]()
        }
    }
    De.set("animation", {
        delay: void 0,
        duration: 1e3,
        easing: "easeOutQuart",
        fn: void 0,
        from: void 0,
        loop: void 0,
        to: void 0,
        type: void 0
    });
    const ko = Object.keys(De.animation);
    De.describe("animation", {
        _fallback: !1,
        _indexable: !1,
        _scriptable: o => "onProgress" !== o && "onComplete" !== o && "fn" !== o
    }), De.set("animations", {
        colors: {
            type: "color",
            properties: ["color", "borderColor", "backgroundColor"]
        },
        numbers: {
            type: "number",
            properties: ["x", "y", "borderWidth", "radius", "tension"]
        }
    }), De.describe("animations", {
        _fallback: "animation"
    }), De.set("transitions", {
        active: {
            animation: {
                duration: 400
            }
        },
        resize: {
            animation: {
                duration: 0
            }
        },
        show: {
            animations: {
                colors: {
                    from: "transparent"
                },
                visible: {
                    type: "boolean",
                    duration: 0
                }
            }
        },
        hide: {
            animations: {
                colors: {
                    to: "transparent"
                },
                visible: {
                    type: "boolean",
                    easing: "linear",
                    fn: o => 0 | o
                }
            }
        }
    });
    class Ro {
        constructor(e, r) {
            this._chart = e, this._properties = new Map, this.configure(r)
        }
        configure(e) {
            if (!H(e)) return;
            const r = this._properties;
            Object.getOwnPropertyNames(e).forEach(a => {
                const l = e[a];
                if (!H(l)) return;
                const c = {};
                for (const h of ko) c[h] = l[h];
                (I(l.properties) && l.properties || [a]).forEach(h => {
                    (h === a || !r.has(h)) && r.set(h, c)
                })
            })
        }
        _animateOptions(e, r) {
            const a = r.options,
                l = function ga(o, e) {
                    if (!e) return;
                    let r = o.options;
                    if (r) return r.$shared && (o.options = r = Object.assign({}, r, {
                        $shared: !1,
                        $animations: {}
                    })), r;
                    o.options = e
                }(e, a);
            if (!l) return [];
            const c = this._createAnimations(l, a);
            return a.$shared && function Do(o, e) {
                const r = [],
                    a = Object.keys(e);
                for (let l = 0; l < a.length; l++) {
                    const c = o[a[l]];
                    c && c.active() && r.push(c.wait())
                }
                return Promise.all(r)
            }(e.options.$animations, a).then(() => {
                e.options = a
            }, () => {}), c
        }
        _createAnimations(e, r) {
            const a = this._properties,
                l = [],
                c = e.$animations || (e.$animations = {}),
                h = Object.keys(r),
                u = Date.now();
            let b;
            for (b = h.length - 1; b >= 0; --b) {
                const S = h[b];
                if ("$" === S.charAt(0)) continue;
                if ("options" === S) {
                    l.push(...this._animateOptions(e, r));
                    continue
                }
                const D = r[S];
                let U = c[S];
                const st = a.get(S);
                if (U) {
                    if (st && U.active()) {
                        U.update(st, D, u);
                        continue
                    }
                    U.cancel()
                }
                st && st.duration ? (c[S] = U = new Jr(st, e, S, D), l.push(U)) : e[S] = D
            }
            return l
        }
        update(e, r) {
            if (0 === this._properties.size) return void Object.assign(e, r);
            const a = this._createAnimations(e, r);
            return a.length ? (gn.add(this._chart, a), !0) : void 0
        }
    }

    function eo(o, e) {
        const r = o && o.options || {},
            a = r.reverse,
            l = void 0 === r.min ? e : 0,
            c = void 0 === r.max ? e : 0;
        return {
            start: a ? c : l,
            end: a ? l : c
        }
    }

    function C(o, e) {
        const r = [],
            a = o._getSortedDatasetMetas(e);
        let l, c;
        for (l = 0, c = a.length; l < c; ++l) r.push(a[l].index);
        return r
    }

    function w(o, e, r, a = {}) {
        const l = o.keys,
            c = "single" === a.mode;
        let h, u, b, S;
        if (null !== e) {
            for (h = 0, u = l.length; h < u; ++h) {
                if (b = +l[h], b === r) {
                    if (a.all) continue;
                    break
                }
                S = o.values[b], P(S) && (c || 0 === e || X(e) === X(S)) && (e += S)
            }
            return e
        }
    }

    function N(o, e) {
        const r = o && o.options.stacked;
        return r || void 0 === r && void 0 !== e.stack
    }

    function Ht(o, e, r) {
        const a = o[e] || (o[e] = {});
        return a[r] || (a[r] = {})
    }

    function ne(o, e, r, a) {
        for (const l of e.getMatchingVisibleMetas(a).reverse()) {
            const c = o[l.index];
            if (r && c > 0 || !r && c < 0) return l.index
        }
        return null
    }

    function ye(o, e) {
        const {
            chart: r,
            _cachedMeta: a
        } = o, l = r._stacks || (r._stacks = {}), {
            iScale: c,
            vScale: h,
            index: u
        } = a, b = c.axis, S = h.axis, D = function at(o, e, r) {
            return `${o.id}.${e.id}.${r.stack||r.type}`
        }(c, h, a), U = e.length;
        let st;
        for (let ft = 0; ft < U; ++ft) {
            const gt = e[ft],
                {
                    [b]: $t,
                    [S]: qt
                } = gt;
            st = (gt._stacks || (gt._stacks = {}))[S] = Ht(l, D, $t), st[u] = qt, st._top = ne(st, h, !0, a.type), st._bottom = ne(st, h, !1, a.type)
        }
    }

    function Ee(o, e) {
        const r = o.scales;
        return Object.keys(r).filter(a => r[a].axis === e).shift()
    }

    function _n(o, e) {
        const r = o.controller.index,
            a = o.vScale && o.vScale.axis;
        if (a) {
            e = e || o._parsed;
            for (const l of e) {
                const c = l._stacks;
                if (!c || void 0 === c[a] || void 0 === c[a][r]) return;
                delete c[a][r]
            }
        }
    }
    const Vn = o => "reset" === o || "none" === o,
        Ln = (o, e) => e ? o : Object.assign({}, o);
    class nn {
        constructor(e, r) {
            this.chart = e, this._ctx = e.ctx, this.index = r, this._cachedDataOpts = {}, this._cachedMeta = this.getMeta(), this._type = this._cachedMeta.type, this.options = void 0, this._parsing = !1, this._data = void 0, this._objectData = void 0, this._sharedOptions = void 0, this._drawStart = void 0, this._drawCount = void 0, this.enableOptionSharing = !1, this.supportsDecimation = !1, this.$context = void 0, this._syncList = [], this.initialize()
        }
        initialize() {
            const e = this._cachedMeta;
            this.configure(), this.linkScales(), e._stacked = N(e.vScale, e), this.addElements()
        }
        updateIndex(e) {
            this.index !== e && _n(this._cachedMeta), this.index = e
        }
        linkScales() {
            const e = this.chart,
                r = this._cachedMeta,
                a = this.getDataset(),
                l = (U, st, ft, gt) => "x" === U ? st : "r" === U ? gt : ft,
                c = r.xAxisID = O(a.xAxisID, Ee(e, "x")),
                h = r.yAxisID = O(a.yAxisID, Ee(e, "y")),
                u = r.rAxisID = O(a.rAxisID, Ee(e, "r")),
                b = r.indexAxis,
                S = r.iAxisID = l(b, c, h, u),
                D = r.vAxisID = l(b, h, c, u);
            r.xScale = this.getScaleForId(c), r.yScale = this.getScaleForId(h), r.rScale = this.getScaleForId(u), r.iScale = this.getScaleForId(S), r.vScale = this.getScaleForId(D)
        }
        getDataset() {
            return this.chart.data.datasets[this.index]
        }
        getMeta() {
            return this.chart.getDatasetMeta(this.index)
        }
        getScaleForId(e) {
            return this.chart.scales[e]
        }
        _getOtherScale(e) {
            const r = this._cachedMeta;
            return e === r.iScale ? r.vScale : r.iScale
        }
        reset() {
            this._update("reset")
        }
        _destroy() {
            const e = this._cachedMeta;
            this._data && ki(this._data, this), e._stacked && _n(e)
        }
        _dataCheck() {
            const e = this.getDataset(),
                r = e.data || (e.data = []),
                a = this._data;
            if (H(r)) this._data = function T(o) {
                const e = Object.keys(o),
                    r = new Array(e.length);
                let a, l, c;
                for (a = 0, l = e.length; a < l; ++a) c = e[a], r[a] = {
                    x: c,
                    y: o[c]
                };
                return r
            }(r);
            else if (a !== r) {
                if (a) {
                    ki(a, this);
                    const l = this._cachedMeta;
                    _n(l), l._parsed = []
                }
                r && Object.isExtensible(r) && mi(r, this), this._syncList = [], this._data = r
            }
        }
        addElements() {
            const e = this._cachedMeta;
            this._dataCheck(), this.datasetElementType && (e.dataset = new this.datasetElementType)
        }
        buildOrUpdateElements(e) {
            const r = this._cachedMeta,
                a = this.getDataset();
            let l = !1;
            this._dataCheck();
            const c = r._stacked;
            r._stacked = N(r.vScale, r), r.stack !== a.stack && (l = !0, _n(r), r.stack = a.stack), this._resyncElements(e), (l || c !== r._stacked) && ye(this, r._parsed)
        }
        configure() {
            const e = this.chart.config,
                r = e.datasetScopeKeys(this._type),
                a = e.getOptionScopes(this.getDataset(), r, !0);
            this.options = e.createResolver(a, this.getContext()), this._parsing = this.options.parsing, this._cachedDataOpts = {}
        }
        parse(e, r) {
            const {
                _cachedMeta: a,
                _data: l
            } = this, {
                iScale: c,
                _stacked: h
            } = a, u = c.axis;
            let D, U, st, b = 0 === e && r === l.length || a._sorted,
                S = e > 0 && a._parsed[e - 1];
            if (!1 === this._parsing) a._parsed = l, a._sorted = !0, st = l;
            else {
                st = I(l[e]) ? this.parseArrayData(a, l, e, r) : H(l[e]) ? this.parseObjectData(a, l, e, r) : this.parsePrimitiveData(a, l, e, r);
                const ft = () => null === U[u] || S && U[u] < S[u];
                for (D = 0; D < r; ++D) a._parsed[D + e] = U = st[D], b && (ft() && (b = !1), S = U);
                a._sorted = b
            }
            h && ye(this, st)
        }
        parsePrimitiveData(e, r, a, l) {
            const {
                iScale: c,
                vScale: h
            } = e, u = c.axis, b = h.axis, S = c.getLabels(), D = c === h, U = new Array(l);
            let st, ft, gt;
            for (st = 0, ft = l; st < ft; ++st) gt = st + a, U[st] = {
                [u]: D || c.parse(S[gt], gt),
                [b]: h.parse(r[gt], gt)
            };
            return U
        }
        parseArrayData(e, r, a, l) {
            const {
                xScale: c,
                yScale: h
            } = e, u = new Array(l);
            let b, S, D, U;
            for (b = 0, S = l; b < S; ++b) D = b + a, U = r[D], u[b] = {
                x: c.parse(U[0], D),
                y: h.parse(U[1], D)
            };
            return u
        }
        parseObjectData(e, r, a, l) {
            const {
                xScale: c,
                yScale: h
            } = e, {
                xAxisKey: u = "x",
                yAxisKey: b = "y"
            } = this._parsing, S = new Array(l);
            let D, U, st, ft;
            for (D = 0, U = l; D < U; ++D) st = D + a, ft = r[st], S[D] = {
                x: c.parse(wt(ft, u), st),
                y: h.parse(wt(ft, b), st)
            };
            return S
        }
        getParsed(e) {
            return this._cachedMeta._parsed[e]
        }
        getDataElement(e) {
            return this._cachedMeta.data[e]
        }
        applyStack(e, r, a) {
            const c = this._cachedMeta,
                h = r[e.axis];
            return w({
                keys: C(this.chart, !0),
                values: r._stacks[e.axis]
            }, h, c.index, {
                mode: a
            })
        }
        updateRangeFromParsed(e, r, a, l) {
            const c = a[r.axis];
            let h = null === c ? NaN : c;
            const u = l && a._stacks[r.axis];
            l && u && (l.values = u, h = w(l, c, this._cachedMeta.index)), e.min = Math.min(e.min, h), e.max = Math.max(e.max, h)
        }
        getMinMax(e, r) {
            const a = this._cachedMeta,
                l = a._parsed,
                c = a._sorted && e === a.iScale,
                h = l.length,
                u = this._getOtherScale(e),
                b = ((o, e, r) => o && !e.hidden && e._stacked && {
                    keys: C(this.chart, !0),
                    values: null
                })(r, a),
                S = {
                    min: Number.POSITIVE_INFINITY,
                    max: Number.NEGATIVE_INFINITY
                },
                {
                    min: D,
                    max: U
                } = function bt(o) {
                    const {
                        min: e,
                        max: r,
                        minDefined: a,
                        maxDefined: l
                    } = o.getUserBounds();
                    return {
                        min: a ? e : Number.NEGATIVE_INFINITY,
                        max: l ? r : Number.POSITIVE_INFINITY
                    }
                }(u);
            let st, ft;

            function gt() {
                ft = l[st];
                const $t = ft[u.axis];
                return !P(ft[e.axis]) || D > $t || U < $t
            }
            for (st = 0; st < h && (gt() || (this.updateRangeFromParsed(S, e, ft, b), !c)); ++st);
            if (c)
                for (st = h - 1; st >= 0; --st)
                    if (!gt()) {
                        this.updateRangeFromParsed(S, e, ft, b);
                        break
                    }
            return S
        }
        getAllParsedValues(e) {
            const r = this._cachedMeta._parsed,
                a = [];
            let l, c, h;
            for (l = 0, c = r.length; l < c; ++l) h = r[l][e.axis], P(h) && a.push(h);
            return a
        }
        getMaxOverflow() {
            return !1
        }
        getLabelAndValue(e) {
            const r = this._cachedMeta,
                a = r.iScale,
                l = r.vScale,
                c = this.getParsed(e);
            return {
                label: a ? "" + a.getLabelForValue(c[a.axis]) : "",
                value: l ? "" + l.getLabelForValue(c[l.axis]) : ""
            }
        }
        _update(e) {
            const r = this._cachedMeta;
            this.update(e || "default"), r._clip = function m(o) {
                let e, r, a, l;
                return H(o) ? (e = o.top, r = o.right, a = o.bottom, l = o.left) : e = r = a = l = o, {
                    top: e,
                    right: r,
                    bottom: a,
                    left: l,
                    disabled: !1 === o
                }
            }(O(this.options.clip, function No(o, e, r) {
                if (!1 === r) return !1;
                const a = eo(o, r),
                    l = eo(e, r);
                return {
                    top: l.end,
                    right: a.end,
                    bottom: l.start,
                    left: a.start
                }
            }(r.xScale, r.yScale, this.getMaxOverflow())))
        }
        update(e) {}
        draw() {
            const e = this._ctx,
                a = this._cachedMeta,
                l = a.data || [],
                c = this.chart.chartArea,
                h = [],
                u = this._drawStart || 0,
                b = this._drawCount || l.length - u,
                S = this.options.drawActiveElementsOnTop;
            let D;
            for (a.dataset && a.dataset.draw(e, c, u, b), D = u; D < u + b; ++D) {
                const U = l[D];
                U.hidden || (U.active && S ? h.push(U) : U.draw(e, c))
            }
            for (D = 0; D < h.length; ++D) h[D].draw(e, c)
        }
        getStyle(e, r) {
            const a = r ? "active" : "default";
            return void 0 === e && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(a) : this.resolveDataElementOptions(e || 0, a)
        }
        getContext(e, r, a) {
            const l = this.getDataset();
            let c;
            if (e >= 0 && e < this._cachedMeta.data.length) {
                const h = this._cachedMeta.data[e];
                c = h.$context || (h.$context = function Pe(o, e, r) {
                    return Xr(o, {
                        active: !1,
                        dataIndex: e,
                        parsed: void 0,
                        raw: void 0,
                        element: r,
                        index: e,
                        mode: "default",
                        type: "data"
                    })
                }(this.getContext(), e, h)), c.parsed = this.getParsed(e), c.raw = l.data[e], c.index = c.dataIndex = e
            } else c = this.$context || (this.$context = function ze(o, e) {
                return Xr(o, {
                    active: !1,
                    dataset: void 0,
                    datasetIndex: e,
                    index: e,
                    mode: "default",
                    type: "dataset"
                })
            }(this.chart.getContext(), this.index)), c.dataset = l, c.index = c.datasetIndex = this.index;
            return c.active = !!r, c.mode = a, c
        }
        resolveDatasetElementOptions(e) {
            return this._resolveElementOptions(this.datasetElementType.id, e)
        }
        resolveDataElementOptions(e, r) {
            return this._resolveElementOptions(this.dataElementType.id, r, e)
        }
        _resolveElementOptions(e, r = "default", a) {
            const l = "active" === r,
                c = this._cachedDataOpts,
                h = e + "-" + r,
                u = c[h],
                b = this.enableOptionSharing && Wt(a);
            if (u) return Ln(u, b);
            const S = this.chart.config,
                D = S.datasetElementScopeKeys(this._type, e),
                U = l ? [`${e}Hover`, "hover", e, ""] : [e, ""],
                st = S.getOptionScopes(this.getDataset(), D),
                ft = Object.keys(De.elements[e]),
                $t = S.resolveNamedOptions(st, ft, () => this.getContext(a, l), U);
            return $t.$shared && ($t.$shared = b, c[h] = Object.freeze(Ln($t, b))), $t
        }
        _resolveAnimations(e, r, a) {
            const l = this.chart,
                c = this._cachedDataOpts,
                h = `animation-${r}`,
                u = c[h];
            if (u) return u;
            let b;
            if (!1 !== l.options.animation) {
                const D = this.chart.config,
                    U = D.datasetAnimationScopeKeys(this._type, r),
                    st = D.getOptionScopes(this.getDataset(), U);
                b = D.createResolver(st, this.getContext(e, a, r))
            }
            const S = new Ro(l, b && b.animations);
            return b && b._cacheable && (c[h] = Object.freeze(S)), S
        }
        getSharedOptions(e) {
            if (e.$shared) return this._sharedOptions || (this._sharedOptions = Object.assign({}, e))
        }
        includeOptions(e, r) {
            return !r || Vn(e) || this.chart._animationsDisabled
        }
        _getSharedOptions(e, r) {
            const a = this.resolveDataElementOptions(e, r),
                l = this._sharedOptions,
                c = this.getSharedOptions(a),
                h = this.includeOptions(r, c) || c !== l;
            return this.updateSharedOptions(c, r, a), {
                sharedOptions: c,
                includeOptions: h
            }
        }
        updateElement(e, r, a, l) {
            Vn(l) ? Object.assign(e, a) : this._resolveAnimations(r, l).update(e, a)
        }
        updateSharedOptions(e, r, a) {
            e && !Vn(r) && this._resolveAnimations(void 0, r).update(e, a)
        }
        _setStyle(e, r, a, l) {
            e.active = l;
            const c = this.getStyle(r, l);
            this._resolveAnimations(r, a, l).update(e, {
                options: !l && this.getSharedOptions(c) || c
            })
        }
        removeHoverStyle(e, r, a) {
            this._setStyle(e, a, "active", !1)
        }
        setHoverStyle(e, r, a) {
            this._setStyle(e, a, "active", !0)
        }
        _removeDatasetHoverStyle() {
            const e = this._cachedMeta.dataset;
            e && this._setStyle(e, void 0, "active", !1)
        }
        _setDatasetHoverStyle() {
            const e = this._cachedMeta.dataset;
            e && this._setStyle(e, void 0, "active", !0)
        }
        _resyncElements(e) {
            const r = this._data,
                a = this._cachedMeta.data;
            for (const [u, b, S] of this._syncList) this[u](b, S);
            this._syncList = [];
            const l = a.length,
                c = r.length,
                h = Math.min(c, l);
            h && this.parse(0, h), c > l ? this._insertElements(l, c - l, e) : c < l && this._removeElements(c, l - c)
        }
        _insertElements(e, r, a = !0) {
            const l = this._cachedMeta,
                c = l.data,
                h = e + r;
            let u;
            const b = S => {
                for (S.length += r, u = S.length - 1; u >= h; u--) S[u] = S[u - r]
            };
            for (b(c), u = e; u < h; ++u) c[u] = new this.dataElementType;
            this._parsing && b(l._parsed), this.parse(e, r), a && this.updateElements(c, e, r, "reset")
        }
        updateElements(e, r, a, l) {}
        _removeElements(e, r) {
            const a = this._cachedMeta;
            if (this._parsing) {
                const l = a._parsed.splice(e, r);
                a._stacked && _n(a, l)
            }
            a.data.splice(e, r)
        }
        _sync(e) {
            if (this._parsing) this._syncList.push(e);
            else {
                const [r, a, l] = e;
                this[r](a, l)
            }
            this.chart._dataChanges.push([this.index, ...e])
        }
        _onDataPush() {
            const e = arguments.length;
            this._sync(["_insertElements", this.getDataset().data.length - e, e])
        }
        _onDataPop() {
            this._sync(["_removeElements", this._cachedMeta.data.length - 1, 1])
        }
        _onDataShift() {
            this._sync(["_removeElements", 0, 1])
        }
        _onDataSplice(e, r) {
            r && this._sync(["_removeElements", e, r]);
            const a = arguments.length - 2;
            a && this._sync(["_insertElements", e, a])
        }
        _onDataUnshift() {
            this._sync(["_insertElements", 0, arguments.length])
        }
    }
    nn.defaults = {}, nn.prototype.datasetElementType = null, nn.prototype.dataElementType = null;
    class Yn {
        constructor() {
            this.x = void 0, this.y = void 0, this.active = !1, this.options = void 0, this.$animations = void 0
        }
        tooltipPosition(e) {
            const {
                x: r,
                y: a
            } = this.getProps(["x", "y"], e);
            return {
                x: r,
                y: a
            }
        }
        hasValue() {
            return Gt(this.x) && Gt(this.y)
        }
        getProps(e, r) {
            const a = this.$animations;
            if (!r || !a) return this;
            const l = {};
            return e.forEach(c => {
                l[c] = a[c] && a[c].active() ? a[c]._to : this[c]
            }), l
        }
    }
    Yn.defaults = {}, Yn.defaultRoutes = void 0;
    const yn = {
        values: o => I(o) ? o : "" + o,
        numeric(o, e, r) {
            if (0 === o) return "0";
            const a = this.chart.options.locale;
            let l, c = o;
            if (r.length > 1) {
                const S = Math.max(Math.abs(r[0].value), Math.abs(r[r.length - 1].value));
                (S < 1e-4 || S > 1e15) && (l = "scientific"), c = function kn(o, e) {
                    let r = e.length > 3 ? e[2].value - e[1].value : e[1].value - e[0].value;
                    return Math.abs(r) >= 1 && o !== Math.floor(o) && (r = o - Math.floor(o)), r
                }(o, r)
            }
            const h = z(Math.abs(c)),
                u = Math.max(Math.min(-1 * Math.floor(h), 20), 0),
                b = {
                    notation: l,
                    minimumFractionDigits: u,
                    maximumFractionDigits: u
                };
            return Object.assign(b, this.options.ticks.format), vr(o, a, b)
        },
        logarithmic(o, e, r) {
            if (0 === o) return "0";
            const a = o / Math.pow(10, Math.floor(z(o)));
            return 1 === a || 2 === a || 5 === a ? yn.numeric.call(this, o, e, r) : ""
        }
    };
    var li = {
        formatters: yn
    };

    function hs(o, e, r, a, l) {
        const c = O(a, 0),
            h = Math.min(O(l, o.length), o.length);
        let b, S, D, u = 0;
        for (r = Math.ceil(r), l && (b = l - a, r = b / Math.floor(b / r)), D = c; D < 0;) u++, D = Math.round(c + u * r);
        for (S = Math.max(c, 0); S < h; S++) S === D && (e.push(o[S]), u++, D = Math.round(c + u * r))
    }
    De.set("scale", {
        display: !0,
        offset: !1,
        reverse: !1,
        beginAtZero: !1,
        bounds: "ticks",
        grace: 0,
        grid: {
            display: !0,
            lineWidth: 1,
            drawBorder: !0,
            drawOnChartArea: !0,
            drawTicks: !0,
            tickLength: 8,
            tickWidth: (o, e) => e.lineWidth,
            tickColor: (o, e) => e.color,
            offset: !1,
            borderDash: [],
            borderDashOffset: 0,
            borderWidth: 1
        },
        title: {
            display: !1,
            text: "",
            padding: {
                top: 4,
                bottom: 4
            }
        },
        ticks: {
            minRotation: 0,
            maxRotation: 50,
            mirror: !1,
            textStrokeWidth: 0,
            textStrokeColor: "",
            padding: 3,
            display: !0,
            autoSkip: !0,
            autoSkipPadding: 3,
            labelOffset: 0,
            callback: li.formatters.values,
            minor: {},
            major: {},
            align: "center",
            crossAlign: "near",
            showLabelBackdrop: !1,
            backdropColor: "rgba(255, 255, 255, 0.75)",
            backdropPadding: 2
        }
    }), De.route("scale.ticks", "color", "", "color"), De.route("scale.grid", "color", "", "borderColor"), De.route("scale.grid", "borderColor", "", "borderColor"), De.route("scale.title", "color", "", "color"), De.describe("scale", {
        _fallback: !1,
        _scriptable: o => !o.startsWith("before") && !o.startsWith("after") && "callback" !== o && "parser" !== o,
        _indexable: o => "borderDash" !== o && "tickBorderDash" !== o
    }), De.describe("scales", {
        _fallback: "scale"
    }), De.describe("scale.ticks", {
        _scriptable: o => "backdropPadding" !== o && "callback" !== o,
        _indexable: o => "backdropPadding" !== o
    });
    const Zo = o => "left" === o ? "right" : "right" === o ? "left" : o,
        Ho = (o, e, r) => "top" === e || "left" === e ? o[e] + r : o[e] - r;

    function zo(o, e) {
        const r = [],
            a = o.length / e,
            l = o.length;
        let c = 0;
        for (; c < l; c += a) r.push(o[Math.floor(c)]);
        return r
    }

    function ia(o, e, r) {
        const a = o.ticks.length,
            l = Math.min(e, a - 1),
            c = o._startPixel,
            h = o._endPixel,
            u = 1e-6;
        let S, b = o.getPixelForTick(l);
        if (!(r && (S = 1 === a ? Math.max(b - c, h - b) : 0 === e ? (o.getPixelForTick(1) - b) / 2 : (b - o.getPixelForTick(l - 1)) / 2, b += l < e ? S : -S, b < c - u || b > h + u))) return b
    }

    function ve(o) {
        return o.drawTicks ? o.tickLength : 0
    }

    function he(o, e) {
        if (!o.display) return 0;
        const r = ti(o.font, e),
            a = Ci(o.padding);
        return (I(o.text) ? o.text.length : 1) * r.lineHeight + a.height
    }

    function Vt(o, e, r) {
        let a = Bi(o);
        return (r && "right" !== e || !r && "right" === e) && (a = Zo(a)), a
    }
    class Ut extends Yn {
        constructor(e) {
            super(), this.id = e.id, this.type = e.type, this.options = void 0, this.ctx = e.ctx, this.chart = e.chart, this.top = void 0, this.bottom = void 0, this.left = void 0, this.right = void 0, this.width = void 0, this.height = void 0, this._margins = {
                left: 0,
                right: 0,
                top: 0,
                bottom: 0
            }, this.maxWidth = void 0, this.maxHeight = void 0, this.paddingTop = void 0, this.paddingBottom = void 0, this.paddingLeft = void 0, this.paddingRight = void 0, this.axis = void 0, this.labelRotation = void 0, this.min = void 0, this.max = void 0, this._range = void 0, this.ticks = [], this._gridLineItems = null, this._labelItems = null, this._labelSizes = null, this._length = 0, this._maxLength = 0, this._longestTextCache = {}, this._startPixel = void 0, this._endPixel = void 0, this._reversePixels = !1, this._userMax = void 0, this._userMin = void 0, this._suggestedMax = void 0, this._suggestedMin = void 0, this._ticksLength = 0, this._borderValue = 0, this._cache = {}, this._dataLimitsCached = !1, this.$context = void 0
        }
        init(e) {
            this.options = e.setContext(this.getContext()), this.axis = e.axis, this._userMin = this.parse(e.min), this._userMax = this.parse(e.max), this._suggestedMin = this.parse(e.suggestedMin), this._suggestedMax = this.parse(e.suggestedMax)
        }
        parse(e, r) {
            return e
        }
        getUserBounds() {
            let {
                _userMin: e,
                _userMax: r,
                _suggestedMin: a,
                _suggestedMax: l
            } = this;
            return e = K(e, Number.POSITIVE_INFINITY), r = K(r, Number.NEGATIVE_INFINITY), a = K(a, Number.POSITIVE_INFINITY), l = K(l, Number.NEGATIVE_INFINITY), {
                min: K(e, a),
                max: K(r, l),
                minDefined: P(e),
                maxDefined: P(r)
            }
        }
        getMinMax(e) {
            let h, {
                min: r,
                max: a,
                minDefined: l,
                maxDefined: c
            } = this.getUserBounds();
            if (l && c) return {
                min: r,
                max: a
            };
            const u = this.getMatchingVisibleMetas();
            for (let b = 0, S = u.length; b < S; ++b) h = u[b].controller.getMinMax(this, e), l || (r = Math.min(r, h.min)), c || (a = Math.max(a, h.max));
            return r = c && r > a ? a : r, a = l && r > a ? r : a, {
                min: K(r, K(a, r)),
                max: K(a, K(r, a))
            }
        }
        getPadding() {
            return {
                left: this.paddingLeft || 0,
                top: this.paddingTop || 0,
                right: this.paddingRight || 0,
                bottom: this.paddingBottom || 0
            }
        }
        getTicks() {
            return this.ticks
        }
        getLabels() {
            const e = this.chart.data;
            return this.options.labels || (this.isHorizontal() ? e.xLabels : e.yLabels) || e.labels || []
        }
        beforeLayout() {
            this._cache = {}, this._dataLimitsCached = !1
        }
        beforeUpdate() {
            Z(this.options.beforeUpdate, [this])
        }
        update(e, r, a) {
            const {
                beginAtZero: l,
                grace: c,
                ticks: h
            } = this.options, u = h.sampleSize;
            this.beforeUpdate(), this.maxWidth = e, this.maxHeight = r, this._margins = a = Object.assign({
                left: 0,
                right: 0,
                top: 0,
                bottom: 0
            }, a), this.ticks = null, this._labelSizes = null, this._gridLineItems = null, this._labelItems = null, this.beforeSetDimensions(), this.setDimensions(), this.afterSetDimensions(), this._maxLength = this.isHorizontal() ? this.width + a.left + a.right : this.height + a.top + a.bottom, this._dataLimitsCached || (this.beforeDataLimits(), this.determineDataLimits(), this.afterDataLimits(), this._range = ls(this, c, l), this._dataLimitsCached = !0), this.beforeBuildTicks(), this.ticks = this.buildTicks() || [], this.afterBuildTicks();
            const b = u < this.ticks.length;
            this._convertTicksToLabels(b ? zo(this.ticks, u) : this.ticks), this.configure(), this.beforeCalculateLabelRotation(), this.calculateLabelRotation(), this.afterCalculateLabelRotation(), h.display && (h.autoSkip || "auto" === h.source) && (this.ticks = function Fr(o, e) {
                const r = o.options.ticks,
                    a = r.maxTicksLimit || function go(o) {
                        const e = o.options.offset,
                            r = o._tickSize();
                        return Math.floor(Math.min(o._length / r + (e ? 0 : 1), o._maxLength / r))
                    }(o),
                    l = r.major.enabled ? function xs(o) {
                        const e = [];
                        let r, a;
                        for (r = 0, a = o.length; r < a; r++) o[r].major && e.push(r);
                        return e
                    }(e) : [],
                    c = l.length,
                    h = l[0],
                    u = l[c - 1],
                    b = [];
                if (c > a) return function no(o, e, r, a) {
                    let h, l = 0,
                        c = r[0];
                    for (a = Math.ceil(a), h = 0; h < o.length; h++) h === c && (e.push(o[h]), l++, c = r[l * a])
                }(e, b, l, c / a), b;
                const S = function Rr(o, e, r) {
                    const a = function fs(o) {
                            const e = o.length;
                            let r, a;
                            if (e < 2) return !1;
                            for (a = o[0], r = 1; r < e; ++r)
                                if (o[r] - o[r - 1] !== a) return !1;
                            return a
                        }(o),
                        l = e.length / r;
                    if (!a) return Math.max(l, 1);
                    const c = Mt(a);
                    for (let h = 0, u = c.length - 1; h < u; h++) {
                        const b = c[h];
                        if (b > l) return b
                    }
                    return Math.max(l, 1)
                }(l, e, a);
                if (c > 0) {
                    let D, U;
                    const st = c > 1 ? Math.round((u - h) / (c - 1)) : null;
                    for (hs(e, b, S, y(st) ? 0 : h - st, h), D = 0, U = c - 1; D < U; D++) hs(e, b, S, l[D], l[D + 1]);
                    return hs(e, b, S, u, y(st) ? e.length : u + st), b
                }
                return hs(e, b, S), b
            }(this, this.ticks), this._labelSizes = null, this.afterAutoSkip()), b && this._convertTicksToLabels(this.ticks), this.beforeFit(), this.fit(), this.afterFit(), this.afterUpdate()
        }
        configure() {
            let r, a, e = this.options.reverse;
            this.isHorizontal() ? (r = this.left, a = this.right) : (r = this.top, a = this.bottom, e = !e), this._startPixel = r, this._endPixel = a, this._reversePixels = e, this._length = a - r, this._alignToPixels = this.options.alignToPixels
        }
        afterUpdate() {
            Z(this.options.afterUpdate, [this])
        }
        beforeSetDimensions() {
            Z(this.options.beforeSetDimensions, [this])
        }
        setDimensions() {
            this.isHorizontal() ? (this.width = this.maxWidth, this.left = 0, this.right = this.width) : (this.height = this.maxHeight, this.top = 0, this.bottom = this.height), this.paddingLeft = 0, this.paddingTop = 0, this.paddingRight = 0, this.paddingBottom = 0
        }
        afterSetDimensions() {
            Z(this.options.afterSetDimensions, [this])
        }
        _callHooks(e) {
            this.chart.notifyPlugins(e, this.getContext()), Z(this.options[e], [this])
        }
        beforeDataLimits() {
            this._callHooks("beforeDataLimits")
        }
        determineDataLimits() {}
        afterDataLimits() {
            this._callHooks("afterDataLimits")
        }
        beforeBuildTicks() {
            this._callHooks("beforeBuildTicks")
        }
        buildTicks() {
            return []
        }
        afterBuildTicks() {
            this._callHooks("afterBuildTicks")
        }
        beforeTickToLabelConversion() {
            Z(this.options.beforeTickToLabelConversion, [this])
        }
        generateTickLabels(e) {
            const r = this.options.ticks;
            let a, l, c;
            for (a = 0, l = e.length; a < l; a++) c = e[a], c.label = Z(r.callback, [c.value, a, e], this)
        }
        afterTickToLabelConversion() {
            Z(this.options.afterTickToLabelConversion, [this])
        }
        beforeCalculateLabelRotation() {
            Z(this.options.beforeCalculateLabelRotation, [this])
        }
        calculateLabelRotation() {
            const e = this.options,
                r = e.ticks,
                a = this.ticks.length,
                l = r.minRotation || 0,
                c = r.maxRotation;
            let u, b, S, h = l;
            if (!this._isVisible() || !r.display || l >= c || a <= 1 || !this.isHorizontal()) return void(this.labelRotation = l);
            const D = this._getLabelSizes(),
                U = D.widest.width,
                st = D.highest.height,
                ft = sn(this.chart.width - U, 0, this.maxWidth);
            u = e.offset ? this.maxWidth / a : ft / (a - 1), U + 6 > u && (u = ft / (a - (e.offset ? .5 : 1)), b = this.maxHeight - ve(e.grid) - r.padding - he(e.title, this.chart.options.font), S = Math.sqrt(U * U + st * st), h = ce(Math.min(Math.asin(sn((D.highest.height + 6) / u, -1, 1)), Math.asin(sn(b / S, -1, 1)) - Math.asin(sn(st / S, -1, 1)))), h = Math.max(l, Math.min(c, h))), this.labelRotation = h
        }
        afterCalculateLabelRotation() {
            Z(this.options.afterCalculateLabelRotation, [this])
        }
        afterAutoSkip() {}
        beforeFit() {
            Z(this.options.beforeFit, [this])
        }
        fit() {
            const e = {
                    width: 0,
                    height: 0
                },
                {
                    chart: r,
                    options: {
                        ticks: a,
                        title: l,
                        grid: c
                    }
                } = this,
                h = this._isVisible(),
                u = this.isHorizontal();
            if (h) {
                const b = he(l, r.options.font);
                if (u ? (e.width = this.maxWidth, e.height = ve(c) + b) : (e.height = this.maxHeight, e.width = ve(c) + b), a.display && this.ticks.length) {
                    const {
                        first: S,
                        last: D,
                        widest: U,
                        highest: st
                    } = this._getLabelSizes(), ft = 2 * a.padding, gt = Dt(this.labelRotation), $t = Math.cos(gt), qt = Math.sin(gt);
                    u ? e.height = Math.min(this.maxHeight, e.height + (a.mirror ? 0 : qt * U.width + $t * st.height) + ft) : e.width = Math.min(this.maxWidth, e.width + (a.mirror ? 0 : $t * U.width + qt * st.height) + ft), this._calculatePadding(S, D, qt, $t)
                }
            }
            this._handleMargins(), u ? (this.width = this._length = r.width - this._margins.left - this._margins.right, this.height = e.height) : (this.width = e.width, this.height = this._length = r.height - this._margins.top - this._margins.bottom)
        }
        _calculatePadding(e, r, a, l) {
            const {
                ticks: {
                    align: c,
                    padding: h
                },
                position: u
            } = this.options, b = 0 !== this.labelRotation, S = "top" !== u && "x" === this.axis;
            if (this.isHorizontal()) {
                const D = this.getPixelForTick(0) - this.left,
                    U = this.right - this.getPixelForTick(this.ticks.length - 1);
                let st = 0,
                    ft = 0;
                b ? S ? (st = l * e.width, ft = a * r.height) : (st = a * e.height, ft = l * r.width) : "start" === c ? ft = r.width : "end" === c ? st = e.width : "inner" !== c && (st = e.width / 2, ft = r.width / 2), this.paddingLeft = Math.max((st - D + h) * this.width / (this.width - D), 0), this.paddingRight = Math.max((ft - U + h) * this.width / (this.width - U), 0)
            } else {
                let D = r.height / 2,
                    U = e.height / 2;
                "start" === c ? (D = 0, U = e.height) : "end" === c && (D = r.height, U = 0), this.paddingTop = D + h, this.paddingBottom = U + h
            }
        }
        _handleMargins() {
            this._margins && (this._margins.left = Math.max(this.paddingLeft, this._margins.left), this._margins.top = Math.max(this.paddingTop, this._margins.top), this._margins.right = Math.max(this.paddingRight, this._margins.right), this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom))
        }
        afterFit() {
            Z(this.options.afterFit, [this])
        }
        isHorizontal() {
            const {
                axis: e,
                position: r
            } = this.options;
            return "top" === r || "bottom" === r || "x" === e
        }
        isFullSize() {
            return this.options.fullSize
        }
        _convertTicksToLabels(e) {
            let r, a;
            for (this.beforeTickToLabelConversion(), this.generateTickLabels(e), r = 0, a = e.length; r < a; r++) y(e[r].label) && (e.splice(r, 1), a--, r--);
            this.afterTickToLabelConversion()
        }
        _getLabelSizes() {
            let e = this._labelSizes;
            if (!e) {
                const r = this.options.ticks.sampleSize;
                let a = this.ticks;
                r < a.length && (a = zo(a, r)), this._labelSizes = e = this._computeLabelSizes(a, a.length)
            }
            return e
        }
        _computeLabelSizes(e, r) {
            const {
                ctx: a,
                _longestTextCache: l
            } = this, c = [], h = [];
            let S, D, U, st, ft, gt, $t, qt, re, _e, Ae, u = 0,
                b = 0;
            for (S = 0; S < r; ++S) {
                if (st = e[S].label, ft = this._resolveTickFontOptions(S), a.font = gt = ft.string, $t = l[gt] = l[gt] || {
                        data: {},
                        gc: []
                    }, qt = ft.lineHeight, re = _e = 0, y(st) || I(st)) {
                    if (I(st))
                        for (D = 0, U = st.length; D < U; ++D) Ae = st[D], !y(Ae) && !I(Ae) && (re = ei(a, $t.data, $t.gc, re, Ae), _e += qt)
                } else re = ei(a, $t.data, $t.gc, re, st), _e = qt;
                c.push(re), h.push(_e), u = Math.max(re, u), b = Math.max(_e, b)
            }! function ra(o, e) {
                A(o, r => {
                    const a = r.gc,
                        l = a.length / 2;
                    let c;
                    if (l > e) {
                        for (c = 0; c < l; ++c) delete r.data[a[c]];
                        a.splice(0, l)
                    }
                })
            }(l, r);
            const Te = c.indexOf(u),
                Se = h.indexOf(b),
                Ue = Xe => ({
                    width: c[Xe] || 0,
                    height: h[Xe] || 0
                });
            return {
                first: Ue(0),
                last: Ue(r - 1),
                widest: Ue(Te),
                highest: Ue(Se),
                widths: c,
                heights: h
            }
        }
        getLabelForValue(e) {
            return e
        }
        getPixelForValue(e, r) {
            return NaN
        }
        getValueForPixel(e) {}
        getPixelForTick(e) {
            const r = this.ticks;
            return e < 0 || e > r.length - 1 ? null : this.getPixelForValue(r[e].value)
        }
        getPixelForDecimal(e) {
            this._reversePixels && (e = 1 - e);
            const r = this._startPixel + e * this._length;
            return Wn(this._alignToPixels ? bs(this.chart, r, 0) : r)
        }
        getDecimalForPixel(e) {
            const r = (e - this._startPixel) / this._length;
            return this._reversePixels ? 1 - r : r
        }
        getBasePixel() {
            return this.getPixelForValue(this.getBaseValue())
        }
        getBaseValue() {
            const {
                min: e,
                max: r
            } = this;
            return e < 0 && r < 0 ? r : e > 0 && r > 0 ? e : 0
        }
        getContext(e) {
            const r = this.ticks || [];
            if (e >= 0 && e < r.length) {
                const a = r[e];
                return a.$context || (a.$context = function Bn(o, e, r) {
                    return Xr(o, {
                        tick: r,
                        index: e,
                        type: "tick"
                    })
                }(this.getContext(), e, a))
            }
            return this.$context || (this.$context = function ie(o, e) {
                return Xr(o, {
                    scale: e,
                    type: "scale"
                })
            }(this.chart.getContext(), this))
        }
        _tickSize() {
            const e = this.options.ticks,
                r = Dt(this.labelRotation),
                a = Math.abs(Math.cos(r)),
                l = Math.abs(Math.sin(r)),
                c = this._getLabelSizes(),
                h = e.autoSkipPadding || 0,
                u = c ? c.widest.width + h : 0,
                b = c ? c.highest.height + h : 0;
            return this.isHorizontal() ? b * a > u * l ? u / a : b / l : b * l < u * a ? b / a : u / l
        }
        _isVisible() {
            const e = this.options.display;
            return "auto" !== e ? !!e : this.getMatchingVisibleMetas().length > 0
        }
        _computeGridLineItems(e) {
            const r = this.axis,
                a = this.chart,
                l = this.options,
                {
                    grid: c,
                    position: h
                } = l,
                u = c.offset,
                b = this.isHorizontal(),
                D = this.ticks.length + (u ? 1 : 0),
                U = ve(c),
                st = [],
                ft = c.setContext(this.getContext()),
                gt = ft.drawBorder ? ft.borderWidth : 0,
                $t = gt / 2,
                qt = function(Rn) {
                    return bs(a, Rn, gt)
                };
            let re, _e, Ae, Te, Se, Ue, Xe, vn, un, yi, Si, ri;
            if ("top" === h) re = qt(this.bottom), Ue = this.bottom - U, vn = re - $t, yi = qt(e.top) + $t, ri = e.bottom;
            else if ("bottom" === h) re = qt(this.top), yi = e.top, ri = qt(e.bottom) - $t, Ue = re + $t, vn = this.top + U;
            else if ("left" === h) re = qt(this.right), Se = this.right - U, Xe = re - $t, un = qt(e.left) + $t, Si = e.right;
            else if ("right" === h) re = qt(this.left), un = e.left, Si = qt(e.right) - $t, Se = re + $t, Xe = this.left + U;
            else if ("x" === r) {
                if ("center" === h) re = qt((e.top + e.bottom) / 2 + .5);
                else if (H(h)) {
                    const Rn = Object.keys(h)[0];
                    re = qt(this.chart.scales[Rn].getPixelForValue(h[Rn]))
                }
                yi = e.top, ri = e.bottom, Ue = re + $t, vn = Ue + U
            } else if ("y" === r) {
                if ("center" === h) re = qt((e.left + e.right) / 2);
                else if (H(h)) {
                    const Rn = Object.keys(h)[0];
                    re = qt(this.chart.scales[Rn].getPixelForValue(h[Rn]))
                }
                Se = re - $t, Xe = Se - U, un = e.left, Si = e.right
            }
            const Dr = O(l.ticks.maxTicksLimit, D),
                Ms = Math.max(1, Math.ceil(D / Dr));
            for (_e = 0; _e < D; _e += Ms) {
                const Rn = c.setContext(this.getContext(_e)),
                    Or = Rn.lineWidth,
                    yr = Rn.color,
                    Xo = Rn.borderDash || [],
                    Za = Rn.borderDashOffset,
                    ta = Rn.tickWidth,
                    Pa = Rn.tickColor,
                    ea = Rn.tickBorderDash || [],
                    pa = Rn.tickBorderDashOffset;
                Ae = ia(this, _e, u), void 0 !== Ae && (Te = bs(a, Ae, Or), b ? Se = Xe = un = Si = Te : Ue = vn = yi = ri = Te, st.push({
                    tx1: Se,
                    ty1: Ue,
                    tx2: Xe,
                    ty2: vn,
                    x1: un,
                    y1: yi,
                    x2: Si,
                    y2: ri,
                    width: Or,
                    color: yr,
                    borderDash: Xo,
                    borderDashOffset: Za,
                    tickWidth: ta,
                    tickColor: Pa,
                    tickBorderDash: ea,
                    tickBorderDashOffset: pa
                }))
            }
            return this._ticksLength = D, this._borderValue = re, st
        }
        _computeLabelItems(e) {
            const r = this.axis,
                a = this.options,
                {
                    position: l,
                    ticks: c
                } = a,
                h = this.isHorizontal(),
                u = this.ticks,
                {
                    align: b,
                    crossAlign: S,
                    padding: D,
                    mirror: U
                } = c,
                st = ve(a.grid),
                ft = st + D,
                gt = U ? -D : ft,
                $t = -Dt(this.labelRotation),
                qt = [];
            let re, _e, Ae, Te, Se, Ue, Xe, vn, un, yi, Si, ri, Dr = "middle";
            if ("top" === l) Ue = this.bottom - gt, Xe = this._getXAxisLabelAlignment();
            else if ("bottom" === l) Ue = this.top + gt, Xe = this._getXAxisLabelAlignment();
            else if ("left" === l) {
                const Rn = this._getYAxisLabelAlignment(st);
                Xe = Rn.textAlign, Se = Rn.x
            } else if ("right" === l) {
                const Rn = this._getYAxisLabelAlignment(st);
                Xe = Rn.textAlign, Se = Rn.x
            } else if ("x" === r) {
                if ("center" === l) Ue = (e.top + e.bottom) / 2 + ft;
                else if (H(l)) {
                    const Rn = Object.keys(l)[0];
                    Ue = this.chart.scales[Rn].getPixelForValue(l[Rn]) + ft
                }
                Xe = this._getXAxisLabelAlignment()
            } else if ("y" === r) {
                if ("center" === l) Se = (e.left + e.right) / 2 - ft;
                else if (H(l)) {
                    const Rn = Object.keys(l)[0];
                    Se = this.chart.scales[Rn].getPixelForValue(l[Rn])
                }
                Xe = this._getYAxisLabelAlignment(st).textAlign
            }
            "y" === r && ("start" === b ? Dr = "top" : "end" === b && (Dr = "bottom"));
            const Ms = this._getLabelSizes();
            for (re = 0, _e = u.length; re < _e; ++re) {
                Ae = u[re], Te = Ae.label;
                const Rn = c.setContext(this.getContext(re));
                vn = this.getPixelForTick(re) + c.labelOffset, un = this._resolveTickFontOptions(re), yi = un.lineHeight, Si = I(Te) ? Te.length : 1;
                const Or = Si / 2,
                    yr = Rn.color,
                    Xo = Rn.textStrokeColor,
                    Za = Rn.textStrokeWidth;
                let Pa, ta = Xe;
                if (h ? (Se = vn, "inner" === Xe && (ta = re === _e - 1 ? this.options.reverse ? "left" : "right" : 0 === re ? this.options.reverse ? "right" : "left" : "center"), ri = "top" === l ? "near" === S || 0 !== $t ? -Si * yi + yi / 2 : "center" === S ? -Ms.highest.height / 2 - Or * yi + yi : yi / 2 - Ms.highest.height : "near" === S || 0 !== $t ? yi / 2 : "center" === S ? Ms.highest.height / 2 - Or * yi : Ms.highest.height - Si * yi, U && (ri *= -1)) : (Ue = vn, ri = (1 - Si) * yi / 2), Rn.showLabelBackdrop) {
                    const ea = Ci(Rn.backdropPadding),
                        pa = Ms.heights[re],
                        Ja = Ms.widths[re];
                    let Ka = Ue + ri - ea.top,
                        Qa = Se - ea.left;
                    switch (Dr) {
                        case "middle":
                            Ka -= pa / 2;
                            break;
                        case "bottom":
                            Ka -= pa
                    }
                    switch (Xe) {
                        case "center":
                            Qa -= Ja / 2;
                            break;
                        case "right":
                            Qa -= Ja
                    }
                    Pa = {
                        left: Qa,
                        top: Ka,
                        width: Ja + ea.width,
                        height: pa + ea.height,
                        color: Rn.backdropColor
                    }
                }
                qt.push({
                    rotation: $t,
                    label: Te,
                    font: un,
                    color: yr,
                    strokeColor: Xo,
                    strokeWidth: Za,
                    textOffset: ri,
                    textAlign: ta,
                    textBaseline: Dr,
                    translation: [Se, Ue],
                    backdrop: Pa
                })
            }
            return qt
        }
        _getXAxisLabelAlignment() {
            const {
                position: e,
                ticks: r
            } = this.options;
            if (-Dt(this.labelRotation)) return "top" === e ? "left" : "right";
            let l = "center";
            return "start" === r.align ? l = "left" : "end" === r.align ? l = "right" : "inner" === r.align && (l = "inner"), l
        }
        _getYAxisLabelAlignment(e) {
            const {
                position: r,
                ticks: {
                    crossAlign: a,
                    mirror: l,
                    padding: c
                }
            } = this.options, u = e + c, b = this._getLabelSizes().widest.width;
            let S, D;
            return "left" === r ? l ? (D = this.right + c, "near" === a ? S = "left" : "center" === a ? (S = "center", D += b / 2) : (S = "right", D += b)) : (D = this.right - u, "near" === a ? S = "right" : "center" === a ? (S = "center", D -= b / 2) : (S = "left", D = this.left)) : "right" === r ? l ? (D = this.left + c, "near" === a ? S = "right" : "center" === a ? (S = "center", D -= b / 2) : (S = "left", D -= b)) : (D = this.left + u, "near" === a ? S = "left" : "center" === a ? (S = "center", D += b / 2) : (S = "right", D = this.right)) : S = "right", {
                textAlign: S,
                x: D
            }
        }
        _computeLabelArea() {
            if (this.options.ticks.mirror) return;
            const e = this.chart,
                r = this.options.position;
            return "left" === r || "right" === r ? {
                top: 0,
                left: this.left,
                bottom: e.height,
                right: this.right
            } : "top" === r || "bottom" === r ? {
                top: this.top,
                left: 0,
                bottom: this.bottom,
                right: e.width
            } : void 0
        }
        drawBackground() {
            const {
                ctx: e,
                options: {
                    backgroundColor: r
                },
                left: a,
                top: l,
                width: c,
                height: h
            } = this;
            r && (e.save(), e.fillStyle = r, e.fillRect(a, l, c, h), e.restore())
        }
        getLineWidthForValue(e) {
            const r = this.options.grid;
            if (!this._isVisible() || !r.display) return 0;
            const l = this.ticks.findIndex(c => c.value === e);
            return l >= 0 ? r.setContext(this.getContext(l)).lineWidth : 0
        }
        drawGrid(e) {
            const r = this.options.grid,
                a = this.ctx,
                l = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(e));
            let c, h;
            const u = (b, S, D) => {
                !D.width || !D.color || (a.save(), a.lineWidth = D.width, a.strokeStyle = D.color, a.setLineDash(D.borderDash || []), a.lineDashOffset = D.borderDashOffset, a.beginPath(), a.moveTo(b.x, b.y), a.lineTo(S.x, S.y), a.stroke(), a.restore())
            };
            if (r.display)
                for (c = 0, h = l.length; c < h; ++c) {
                    const b = l[c];
                    r.drawOnChartArea && u({
                        x: b.x1,
                        y: b.y1
                    }, {
                        x: b.x2,
                        y: b.y2
                    }, b), r.drawTicks && u({
                        x: b.tx1,
                        y: b.ty1
                    }, {
                        x: b.tx2,
                        y: b.ty2
                    }, {
                        color: b.tickColor,
                        width: b.tickWidth,
                        borderDash: b.tickBorderDash,
                        borderDashOffset: b.tickBorderDashOffset
                    })
                }
        }
        drawBorder() {
            const {
                chart: e,
                ctx: r,
                options: {
                    grid: a
                }
            } = this, l = a.setContext(this.getContext()), c = a.drawBorder ? l.borderWidth : 0;
            if (!c) return;
            const h = a.setContext(this.getContext(0)).lineWidth,
                u = this._borderValue;
            let b, S, D, U;
            this.isHorizontal() ? (b = bs(e, this.left, c) - c / 2, S = bs(e, this.right, h) + h / 2, D = U = u) : (D = bs(e, this.top, c) - c / 2, U = bs(e, this.bottom, h) + h / 2, b = S = u), r.save(), r.lineWidth = l.borderWidth, r.strokeStyle = l.borderColor, r.beginPath(), r.moveTo(b, D), r.lineTo(S, U), r.stroke(), r.restore()
        }
        drawLabels(e) {
            if (!this.options.ticks.display) return;
            const a = this.ctx,
                l = this._computeLabelArea();
            l && Rs(a, l);
            const c = this._labelItems || (this._labelItems = this._computeLabelItems(e));
            let h, u;
            for (h = 0, u = c.length; h < u; ++h) {
                const b = c[h],
                    S = b.font,
                    D = b.label;
                b.backdrop && (a.fillStyle = b.backdrop.color, a.fillRect(b.backdrop.left, b.backdrop.top, b.backdrop.width, b.backdrop.height)), fr(a, D, 0, b.textOffset, S, b)
            }
            l && Vr(a)
        }
        drawTitle() {
            const {
                ctx: e,
                options: {
                    position: r,
                    title: a,
                    reverse: l
                }
            } = this;
            if (!a.display) return;
            const c = ti(a.font),
                h = Ci(a.padding),
                u = a.align;
            let b = c.lineHeight / 2;
            "bottom" === r || "center" === r || H(r) ? (b += h.bottom, I(a.text) && (b += c.lineHeight * (a.text.length - 1))) : b += h.top;
            const {
                titleX: S,
                titleY: D,
                maxWidth: U,
                rotation: st
            } = function tn(o, e, r, a) {
                const {
                    top: l,
                    left: c,
                    bottom: h,
                    right: u,
                    chart: b
                } = o, {
                    chartArea: S,
                    scales: D
                } = b;
                let st, ft, gt, U = 0;
                const $t = h - l,
                    qt = u - c;
                if (o.isHorizontal()) {
                    if (ft = mn(a, c, u), H(r)) {
                        const re = Object.keys(r)[0];
                        gt = D[re].getPixelForValue(r[re]) + $t - e
                    } else gt = "center" === r ? (S.bottom + S.top) / 2 + $t - e : Ho(o, r, e);
                    st = u - c
                } else {
                    if (H(r)) {
                        const re = Object.keys(r)[0];
                        ft = D[re].getPixelForValue(r[re]) - qt + e
                    } else ft = "center" === r ? (S.left + S.right) / 2 - qt + e : Ho(o, r, e);
                    gt = mn(a, h, l), U = "left" === r ? -V : V
                }
                return {
                    titleX: ft,
                    titleY: gt,
                    maxWidth: st,
                    rotation: U
                }
            }(this, b, r, u);
            fr(e, a.text, 0, 0, c, {
                color: a.color,
                maxWidth: U,
                rotation: st,
                textAlign: Vt(u, r, l),
                textBaseline: "middle",
                translation: [S, D]
            })
        }
        draw(e) {
            this._isVisible() && (this.drawBackground(), this.drawGrid(e), this.drawBorder(), this.drawTitle(), this.drawLabels(e))
        }
        _layers() {
            const e = this.options,
                r = e.ticks && e.ticks.z || 0,
                a = O(e.grid && e.grid.z, -1);
            return this._isVisible() && this.draw === Ut.prototype.draw ? [{
                z: a,
                draw: l => {
                    this.drawBackground(), this.drawGrid(l), this.drawTitle()
                }
            }, {
                z: a + 1,
                draw: () => {
                    this.drawBorder()
                }
            }, {
                z: r,
                draw: l => {
                    this.drawLabels(l)
                }
            }] : [{
                z: r,
                draw: l => {
                    this.draw(l)
                }
            }]
        }
        getMatchingVisibleMetas(e) {
            const r = this.chart.getSortedVisibleDatasetMetas(),
                a = this.axis + "AxisID",
                l = [];
            let c, h;
            for (c = 0, h = r.length; c < h; ++c) {
                const u = r[c];
                u[a] === this.id && (!e || u.type === e) && l.push(u)
            }
            return l
        }
        _resolveTickFontOptions(e) {
            return ti(this.options.ticks.setContext(this.getContext(e)).font)
        }
        _maxDigits() {
            const e = this._resolveTickFontOptions(0).lineHeight;
            return (this.isHorizontal() ? this.width : this.height) / e
        }
    }
    class $e {
        constructor(e, r, a) {
            this.type = e, this.scope = r, this.override = a, this.items = Object.create(null)
        }
        isForType(e) {
            return Object.prototype.isPrototypeOf.call(this.type.prototype, e.prototype)
        }
        register(e) {
            const r = Object.getPrototypeOf(e);
            let a;
            (function d(o) {
                return "id" in o && "defaults" in o
            })(r) && (a = this.register(r));
            const l = this.items,
                c = e.id,
                h = this.scope + "." + c;
            if (!c) throw new Error("class does not have id: " + e);
            return c in l || (l[c] = e, function Tn(o, e, r) {
                const a = M(Object.create(null), [r ? De.get(r) : {}, De.get(e), o.defaults]);
                De.set(e, a), o.defaultRoutes && function F(o, e) {
                    Object.keys(e).forEach(r => {
                        const a = r.split("."),
                            l = a.pop(),
                            c = [o].concat(a).join("."),
                            h = e[r].split("."),
                            u = h.pop(),
                            b = h.join(".");
                        De.route(c, l, b, u)
                    })
                }(e, o.defaultRoutes), o.descriptors && De.describe(e, o.descriptors)
            }(e, h, a), this.override && De.override(e.id, e.overrides)), h
        }
        get(e) {
            return this.items[e]
        }
        unregister(e) {
            const r = this.items,
                a = e.id,
                l = this.scope;
            a in r && delete r[a], l && a in De[l] && (delete De[l][a], this.override && delete Et[a])
        }
    }
    var Y = new class B {
        constructor() {
            this.controllers = new $e(nn, "datasets", !0), this.elements = new $e(Yn, "elements"), this.plugins = new $e(Object, "plugins"), this.scales = new $e(Ut, "scales"), this._typedRegistries = [this.controllers, this.scales, this.elements]
        }
        add(...e) {
            this._each("register", e)
        }
        remove(...e) {
            this._each("unregister", e)
        }
        addControllers(...e) {
            this._each("register", e, this.controllers)
        }
        addElements(...e) {
            this._each("register", e, this.elements)
        }
        addPlugins(...e) {
            this._each("register", e, this.plugins)
        }
        addScales(...e) {
            this._each("register", e, this.scales)
        }
        getController(e) {
            return this._get(e, this.controllers, "controller")
        }
        getElement(e) {
            return this._get(e, this.elements, "element")
        }
        getPlugin(e) {
            return this._get(e, this.plugins, "plugin")
        }
        getScale(e) {
            return this._get(e, this.scales, "scale")
        }
        removeControllers(...e) {
            this._each("unregister", e, this.controllers)
        }
        removeElements(...e) {
            this._each("unregister", e, this.elements)
        }
        removePlugins(...e) {
            this._each("unregister", e, this.plugins)
        }
        removeScales(...e) {
            this._each("unregister", e, this.scales)
        }
        _each(e, r, a) {
            [...r].forEach(l => {
                const c = a || this._getRegistryForType(l);
                a || c.isForType(l) || c === this.plugins && l.id ? this._exec(e, c, l) : A(l, h => {
                    const u = a || this._getRegistryForType(h);
                    this._exec(e, u, h)
                })
            })
        }
        _exec(e, r, a) {
            const l = jt(e);
            Z(a["before" + l], [], a), r[e](a), Z(a["after" + l], [], a)
        }
        _getRegistryForType(e) {
            for (let r = 0; r < this._typedRegistries.length; r++) {
                const a = this._typedRegistries[r];
                if (a.isForType(e)) return a
            }
            return this.plugins
        }
        _get(e, r, a) {
            const l = r.get(e);
            if (void 0 === l) throw new Error('"' + e + '" is not a registered ' + a + ".");
            return l
        }
    };
    class Ot {
        constructor() {
            this._init = []
        }
        notify(e, r, a, l) {
            "beforeInit" === r && (this._init = this._createDescriptors(e, !0), this._notify(this._init, e, "install"));
            const c = l ? this._descriptors(e).filter(l) : this._descriptors(e),
                h = this._notify(c, e, r, a);
            return "afterDestroy" === r && (this._notify(c, e, "stop"), this._notify(this._init, e, "uninstall")), h
        }
        _notify(e, r, a, l) {
            l = l || {};
            for (const c of e) {
                const h = c.plugin;
                if (!1 === Z(h[a], [r, l, c.options], h) && l.cancelable) return !1
            }
            return !0
        }
        invalidate() {
            y(this._cache) || (this._oldCache = this._cache, this._cache = void 0)
        }
        _descriptors(e) {
            if (this._cache) return this._cache;
            const r = this._cache = this._createDescriptors(e);
            return this._notifyStateChanges(e), r
        }
        _createDescriptors(e, r) {
            const a = e && e.config,
                l = O(a.options && a.options.plugins, {}),
                c = function It(o) {
                    const e = {},
                        r = [],
                        a = Object.keys(Y.plugins.items);
                    for (let c = 0; c < a.length; c++) r.push(Y.getPlugin(a[c]));
                    const l = o.plugins || [];
                    for (let c = 0; c < l.length; c++) {
                        const h = l[c]; - 1 === r.indexOf(h) && (r.push(h), e[h.id] = !0)
                    }
                    return {
                        plugins: r,
                        localIds: e
                    }
                }(a);
            return !1 !== l || r ? function me(o, {
                plugins: e,
                localIds: r
            }, a, l) {
                const c = [],
                    h = o.getContext();
                for (const u of e) {
                    const b = u.id,
                        S = oe(a[b], l);
                    null !== S && c.push({
                        plugin: u,
                        options: Ie(o.config, {
                            plugin: u,
                            local: r[b]
                        }, S, h)
                    })
                }
                return c
            }(e, c, l, r) : []
        }
        _notifyStateChanges(e) {
            const r = this._oldCache || [],
                a = this._cache,
                l = (c, h) => c.filter(u => !h.some(b => u.plugin.id === b.plugin.id));
            this._notify(l(r, a), e, "stop"), this._notify(l(a, r), e, "start")
        }
    }

    function oe(o, e) {
        return e || !1 !== o ? !0 === o ? {} : o : null
    }

    function Ie(o, {
        plugin: e,
        local: r
    }, a, l) {
        const c = o.pluginScopeKeys(e),
            h = o.getOptionScopes(a, c);
        return r && e.defaults && h.push(e.defaults), o.createResolver(h, l, [""], {
            scriptable: !1,
            indexable: !1,
            allKeys: !0
        })
    }

    function We(o, e) {
        return ((e.datasets || {})[o] || {}).indexAxis || e.indexAxis || (De.datasets[o] || {}).indexAxis || "x"
    }

    function Nt(o, e) {
        return "x" === o || "y" === o ? o : e.axis || function Pt(o) {
            return "top" === o || "bottom" === o ? "x" : "left" === o || "right" === o ? "y" : void 0
        }(e.position) || o.charAt(0).toLowerCase()
    }

    function ae(o) {
        const e = o.options || (o.options = {});
        e.plugins = O(e.plugins, {}), e.scales = function ke(o, e) {
            const r = Et[o.type] || {
                    scales: {}
                },
                a = e.scales || {},
                l = We(o.type, e),
                c = Object.create(null),
                h = Object.create(null);
            return Object.keys(a).forEach(u => {
                const b = a[u];
                if (!H(b)) return console.error(`Invalid scale configuration for scale: ${u}`);
                if (b._proxy) return console.warn(`Ignoring resolver passed as options for scale: ${u}`);
                const S = Nt(u, b),
                    D = function zt(o, e) {
                        return o === e ? "_index_" : "_value_"
                    }(S, l),
                    U = r.scales || {};
                c[S] = c[S] || u, h[u] = G(Object.create(null), [{
                    axis: S
                }, b, U[S], U[D]])
            }), o.data.datasets.forEach(u => {
                const b = u.type || o.type,
                    S = u.indexAxis || We(b, e),
                    U = (Et[b] || {}).scales || {};
                Object.keys(U).forEach(st => {
                    const ft = function Re(o, e) {
                            let r = o;
                            return "_index_" === o ? r = e : "_value_" === o && (r = "x" === e ? "y" : "x"), r
                        }(st, S),
                        gt = u[ft + "AxisID"] || c[ft] || ft;
                    h[gt] = h[gt] || Object.create(null), G(h[gt], [{
                        axis: ft
                    }, a[gt], U[st]])
                })
            }), Object.keys(h).forEach(u => {
                const b = h[u];
                G(b, [De.scales[b.type], De.scale])
            }), h
        }(o, e)
    }

    function we(o) {
        return (o = o || {}).datasets = o.datasets || [], o.labels = o.labels || [], o
    }
    const ln = new Map,
        rn = new Set;

    function fn(o, e) {
        let r = ln.get(o);
        return r || (r = e(), ln.set(o, r), rn.add(r)), r
    }
    const Ve = (o, e, r) => {
        const a = wt(e, r);
        void 0 !== a && o.add(a)
    };
    class bn {
        constructor(e) {
            this._config = function Oe(o) {
                return (o = o || {}).data = we(o.data), ae(o), o
            }(e), this._scopeCache = new Map, this._resolverCache = new Map
        }
        get platform() {
            return this._config.platform
        }
        get type() {
            return this._config.type
        }
        set type(e) {
            this._config.type = e
        }
        get data() {
            return this._config.data
        }
        set data(e) {
            this._config.data = we(e)
        }
        get options() {
            return this._config.options
        }
        set options(e) {
            this._config.options = e
        }
        get plugins() {
            return this._config.plugins
        }
        update() {
            const e = this._config;
            this.clearCache(), ae(e)
        }
        clearCache() {
            this._scopeCache.clear(), this._resolverCache.clear()
        }
        datasetScopeKeys(e) {
            return fn(e, () => [
                [`datasets.${e}`, ""]
            ])
        }
        datasetAnimationScopeKeys(e, r) {
            return fn(`${e}.transition.${r}`, () => [
                [`datasets.${e}.transitions.${r}`, `transitions.${r}`],
                [`datasets.${e}`, ""]
            ])
        }
        datasetElementScopeKeys(e, r) {
            return fn(`${e}-${r}`, () => [
                [`datasets.${e}.elements.${r}`, `datasets.${e}`, `elements.${r}`, ""]
            ])
        }
        pluginScopeKeys(e) {
            const r = e.id;
            return fn(`${this.type}-plugin-${r}`, () => [
                [`plugins.${r}`, ...e.additionalOptionScopes || []]
            ])
        }
        _cachedScopes(e, r) {
            const a = this._scopeCache;
            let l = a.get(e);
            return (!l || r) && (l = new Map, a.set(e, l)), l
        }
        getOptionScopes(e, r, a) {
            const {
                options: l,
                type: c
            } = this, h = this._cachedScopes(e, a), u = h.get(r);
            if (u) return u;
            const b = new Set;
            r.forEach(D => {
                e && (b.add(e), D.forEach(U => Ve(b, e, U))), D.forEach(U => Ve(b, l, U)), D.forEach(U => Ve(b, Et[c] || {}, U)), D.forEach(U => Ve(b, De, U)), D.forEach(U => Ve(b, Rt, U))
            });
            const S = Array.from(b);
            return 0 === S.length && S.push(Object.create(null)), rn.has(r) && h.set(r, S), S
        }
        chartOptionScopes() {
            const {
                options: e,
                type: r
            } = this;
            return [e, Et[r] || {}, De.datasets[r] || {}, {
                type: r
            }, De, Rt]
        }
        resolveNamedOptions(e, r, a, l = [""]) {
            const c = {
                    $shared: !0
                },
                {
                    resolver: h,
                    subPrefixes: u
                } = Zn(this._resolverCache, e, l);
            let b = h;
            (function Hn(o, e) {
                const {
                    isScriptable: r,
                    isIndexable: a
                } = Gs(o);
                for (const l of e) {
                    const c = r(l),
                        h = a(l),
                        u = (h || c) && o[l];
                    if (c && (be(u) || ii(u)) || h && I(u)) return !0
                }
                return !1
            })(h, r) && (c.$shared = !1, b = os(h, a = be(a) ? a() : a, this.createResolver(e, a, u)));
            for (const S of r) c[S] = b[S];
            return c
        }
        createResolver(e, r, a = [""], l) {
            const {
                resolver: c
            } = Zn(this._resolverCache, e, a);
            return H(r) ? os(c, r, void 0, l) : c
        }
    }

    function Zn(o, e, r) {
        let a = o.get(e);
        a || (a = new Map, o.set(e, a));
        const l = r.join();
        let c = a.get(l);
        return c || (c = {
            resolver: ss(e, r),
            subPrefixes: r.filter(u => !u.toLowerCase().includes("hover"))
        }, a.set(l, c)), c
    }
    const ii = o => H(o) && Object.getOwnPropertyNames(o).reduce((e, r) => e || be(o[r]), !1),
        Kr = ["top", "bottom", "left", "right", "chartArea"];

    function js(o, e) {
        return "top" === o || "bottom" === o || -1 === Kr.indexOf(o) && "x" === e
    }

    function Qr(o, e) {
        return function(r, a) {
            return r[o] === a[o] ? r[e] - a[e] : r[o] - a[o]
        }
    }

    function Os(o) {
        const e = o.chart,
            r = e.options.animation;
        e.notifyPlugins("afterRender"), Z(r && r.onComplete, [o], e)
    }

    function Ws(o) {
        const e = o.chart,
            r = e.options.animation;
        Z(r && r.onProgress, [o], e)
    }

    function Qi(o) {
        return Cn() && "string" == typeof o ? o = document.getElementById(o) : o && o.length && (o = o[0]), o && o.canvas && (o = o.canvas), o
    }
    const Ps = {},
        io = o => {
            const e = Qi(o);
            return Object.values(Ps).filter(r => r.canvas === e).pop()
        };

    function Oo(o, e, r) {
        const a = Object.keys(o);
        for (const l of a) {
            const c = +l;
            if (c >= e) {
                const h = o[l];
                delete o[l], (r > 0 || c > e) && (o[c + r] = h)
            }
        }
    }
    class wn {
        constructor(e, r) {
            const a = this.config = new bn(r),
                l = Qi(e),
                c = io(l);
            if (c) throw new Error("Canvas is already in use. Chart with ID '" + c.id + "' must be destroyed before the canvas with ID '" + c.canvas.id + "' can be reused.");
            const h = a.createResolver(a.chartOptionScopes(), this.getContext());
            this.platform = new(a.platform || na(l)), this.platform.updateConfig(a);
            const u = this.platform.acquireContext(l, h.aspectRatio),
                b = u && u.canvas,
                S = b && b.height,
                D = b && b.width;
            this.id = R(), this.ctx = u, this.canvas = b, this.width = D, this.height = S, this._options = h, this._aspectRatio = this.aspectRatio, this._layers = [], this._metasets = [], this._stacks = void 0, this.boxes = [], this.currentDevicePixelRatio = void 0, this.chartArea = void 0, this._active = [], this._lastEvent = void 0, this._listeners = {}, this._responsiveListeners = void 0, this._sortedMetasets = [], this.scales = {}, this._plugins = new Ot, this.$proxies = {}, this._hiddenIndices = {}, this.attached = !1, this._animationsDisabled = void 0, this.$context = void 0, this._doResize = bi(U => this.update(U), h.resizeDelay || 0), this._dataChanges = [], Ps[this.id] = this, u && b ? (gn.listen(this, "complete", Os), gn.listen(this, "progress", Ws), this._initialize(), this.attached && this.update()) : console.error("Failed to create chart: can't acquire context from the given item")
        }
        get aspectRatio() {
            const {
                options: {
                    aspectRatio: e,
                    maintainAspectRatio: r
                },
                width: a,
                height: l,
                _aspectRatio: c
            } = this;
            return y(e) ? r && c ? c : l ? a / l : null : e
        }
        get data() {
            return this.config.data
        }
        set data(e) {
            this.config.data = e
        }
        get options() {
            return this._options
        }
        set options(e) {
            this.config.options = e
        }
        _initialize() {
            return this.notifyPlugins("beforeInit"), this.options.responsive ? this.resize() : Lr(this, this.options.devicePixelRatio), this.bindEvents(), this.notifyPlugins("afterInit"), this
        }
        clear() {
            return Us(this.canvas, this.ctx), this
        }
        stop() {
            return gn.stop(this), this
        }
        resize(e, r) {
            gn.running(this) ? this._resizeBeforeDraw = {
                width: e,
                height: r
            } : this._resize(e, r)
        }
        _resize(e, r) {
            const a = this.options,
                h = this.platform.getMaximumSize(this.canvas, e, r, a.maintainAspectRatio && this.aspectRatio),
                u = a.devicePixelRatio || this.platform.getDevicePixelRatio(),
                b = this.width ? "resize" : "attach";
            this.width = h.width, this.height = h.height, this._aspectRatio = this.aspectRatio, Lr(this, u, !0) && (this.notifyPlugins("resize", {
                size: h
            }), Z(a.onResize, [this, h], this), this.attached && this._doResize(b) && this.render())
        }
        ensureScalesHaveIDs() {
            A(this.options.scales || {}, (a, l) => {
                a.id = l
            })
        }
        buildOrUpdateScales() {
            const e = this.options,
                r = e.scales,
                a = this.scales,
                l = Object.keys(a).reduce((h, u) => (h[u] = !1, h), {});
            let c = [];
            r && (c = c.concat(Object.keys(r).map(h => {
                const u = r[h],
                    b = Nt(h, u),
                    S = "r" === b,
                    D = "x" === b;
                return {
                    options: u,
                    dposition: S ? "chartArea" : D ? "bottom" : "left",
                    dtype: S ? "radialLinear" : D ? "category" : "linear"
                }
            }))), A(c, h => {
                const u = h.options,
                    b = u.id,
                    S = Nt(b, u),
                    D = O(u.type, h.dtype);
                (void 0 === u.position || js(u.position, S) !== js(h.dposition)) && (u.position = h.dposition), l[b] = !0;
                let U = null;
                b in a && a[b].type === D ? U = a[b] : (U = new(Y.getScale(D))({
                    id: b,
                    type: D,
                    ctx: this.ctx,
                    chart: this
                }), a[U.id] = U), U.init(u, e)
            }), A(l, (h, u) => {
                h || delete a[u]
            }), A(a, h => {
                ue.configure(this, h, h.options), ue.addBox(this, h)
            })
        }
        _updateMetasets() {
            const e = this._metasets,
                r = this.data.datasets.length,
                a = e.length;
            if (e.sort((l, c) => l.index - c.index), a > r) {
                for (let l = r; l < a; ++l) this._destroyDatasetMeta(l);
                e.splice(r, a - r)
            }
            this._sortedMetasets = e.slice(0).sort(Qr("order", "index"))
        }
        _removeUnreferencedMetasets() {
            const {
                _metasets: e,
                data: {
                    datasets: r
                }
            } = this;
            e.length > r.length && delete this._stacks, e.forEach((a, l) => {
                0 === r.filter(c => c === a._dataset).length && this._destroyDatasetMeta(l)
            })
        }
        buildOrUpdateControllers() {
            const e = [],
                r = this.data.datasets;
            let a, l;
            for (this._removeUnreferencedMetasets(), a = 0, l = r.length; a < l; a++) {
                const c = r[a];
                let h = this.getDatasetMeta(a);
                const u = c.type || this.config.type;
                if (h.type && h.type !== u && (this._destroyDatasetMeta(a), h = this.getDatasetMeta(a)), h.type = u, h.indexAxis = c.indexAxis || We(u, this.options), h.order = c.order || 0, h.index = a, h.label = "" + c.label, h.visible = this.isDatasetVisible(a), h.controller) h.controller.updateIndex(a), h.controller.linkScales();
                else {
                    const b = Y.getController(u),
                        {
                            datasetElementType: S,
                            dataElementType: D
                        } = De.datasets[u];
                    Object.assign(b.prototype, {
                        dataElementType: Y.getElement(D),
                        datasetElementType: S && Y.getElement(S)
                    }), h.controller = new b(this, a), e.push(h.controller)
                }
            }
            return this._updateMetasets(), e
        }
        _resetElements() {
            A(this.data.datasets, (e, r) => {
                this.getDatasetMeta(r).controller.reset()
            }, this)
        }
        reset() {
            this._resetElements(), this.notifyPlugins("reset")
        }
        update(e) {
            const r = this.config;
            r.update();
            const a = this._options = r.createResolver(r.chartOptionScopes(), this.getContext()),
                l = this._animationsDisabled = !a.animation;
            if (this._updateScales(), this._checkEventBindings(), this._updateHiddenIndices(), this._plugins.invalidate(), !1 === this.notifyPlugins("beforeUpdate", {
                    mode: e,
                    cancelable: !0
                })) return;
            const c = this.buildOrUpdateControllers();
            this.notifyPlugins("beforeElementsUpdate");
            let h = 0;
            for (let S = 0, D = this.data.datasets.length; S < D; S++) {
                const {
                    controller: U
                } = this.getDatasetMeta(S), st = !l && -1 === c.indexOf(U);
                U.buildOrUpdateElements(st), h = Math.max(+U.getMaxOverflow(), h)
            }
            h = this._minPadding = a.layout.autoPadding ? h : 0, this._updateLayout(h), l || A(c, S => {
                S.reset()
            }), this._updateDatasets(e), this.notifyPlugins("afterUpdate", {
                mode: e
            }), this._layers.sort(Qr("z", "_idx"));
            const {
                _active: u,
                _lastEvent: b
            } = this;
            b ? this._eventHandler(b, !0) : u.length && this._updateHoverStyles(u, u, !0), this.render()
        }
        _updateScales() {
            A(this.scales, e => {
                ue.removeBox(this, e)
            }), this.ensureScalesHaveIDs(), this.buildOrUpdateScales()
        }
        _checkEventBindings() {
            const e = this.options,
                r = new Set(Object.keys(this._listeners)),
                a = new Set(e.events);
            (!Kt(r, a) || !!this._responsiveListeners !== e.responsive) && (this.unbindEvents(), this.bindEvents())
        }
        _updateHiddenIndices() {
            const {
                _hiddenIndices: e
            } = this, r = this._getUniformDataChanges() || [];
            for (const {
                    method: a,
                    start: l,
                    count: c
                } of r) Oo(e, l, "_removeElements" === a ? -c : c)
        }
        _getUniformDataChanges() {
            const e = this._dataChanges;
            if (!e || !e.length) return;
            this._dataChanges = [];
            const r = this.data.datasets.length,
                a = c => new Set(e.filter(h => h[0] === c).map((h, u) => u + "," + h.splice(1).join(","))),
                l = a(0);
            for (let c = 1; c < r; c++)
                if (!Kt(l, a(c))) return;
            return Array.from(l).map(c => c.split(",")).map(c => ({
                method: c[1],
                start: +c[2],
                count: +c[3]
            }))
        }
        _updateLayout(e) {
            if (!1 === this.notifyPlugins("beforeLayout", {
                    cancelable: !0
                })) return;
            ue.update(this, this.width, this.height, e);
            const r = this.chartArea,
                a = r.width <= 0 || r.height <= 0;
            this._layers = [], A(this.boxes, l => {
                a && "chartArea" === l.position || (l.configure && l.configure(), this._layers.push(...l._layers()))
            }, this), this._layers.forEach((l, c) => {
                l._idx = c
            }), this.notifyPlugins("afterLayout")
        }
        _updateDatasets(e) {
            if (!1 !== this.notifyPlugins("beforeDatasetsUpdate", {
                    mode: e,
                    cancelable: !0
                })) {
                for (let r = 0, a = this.data.datasets.length; r < a; ++r) this.getDatasetMeta(r).controller.configure();
                for (let r = 0, a = this.data.datasets.length; r < a; ++r) this._updateDataset(r, be(e) ? e({
                    datasetIndex: r
                }) : e);
                this.notifyPlugins("afterDatasetsUpdate", {
                    mode: e
                })
            }
        }
        _updateDataset(e, r) {
            const a = this.getDatasetMeta(e),
                l = {
                    meta: a,
                    index: e,
                    mode: r,
                    cancelable: !0
                };
            !1 !== this.notifyPlugins("beforeDatasetUpdate", l) && (a.controller._update(r), l.cancelable = !1, this.notifyPlugins("afterDatasetUpdate", l))
        }
        render() {
            !1 !== this.notifyPlugins("beforeRender", {
                cancelable: !0
            }) && (gn.has(this) ? this.attached && !gn.running(this) && gn.start(this) : (this.draw(), Os({
                chart: this
            })))
        }
        draw() {
            let e;
            if (this._resizeBeforeDraw) {
                const {
                    width: a,
                    height: l
                } = this._resizeBeforeDraw;
                this._resize(a, l), this._resizeBeforeDraw = null
            }
            if (this.clear(), this.width <= 0 || this.height <= 0 || !1 === this.notifyPlugins("beforeDraw", {
                    cancelable: !0
                })) return;
            const r = this._layers;
            for (e = 0; e < r.length && r[e].z <= 0; ++e) r[e].draw(this.chartArea);
            for (this._drawDatasets(); e < r.length; ++e) r[e].draw(this.chartArea);
            this.notifyPlugins("afterDraw")
        }
        _getSortedDatasetMetas(e) {
            const r = this._sortedMetasets,
                a = [];
            let l, c;
            for (l = 0, c = r.length; l < c; ++l) {
                const h = r[l];
                (!e || h.visible) && a.push(h)
            }
            return a
        }
        getSortedVisibleDatasetMetas() {
            return this._getSortedDatasetMetas(!0)
        }
        _drawDatasets() {
            if (!1 === this.notifyPlugins("beforeDatasetsDraw", {
                    cancelable: !0
                })) return;
            const e = this.getSortedVisibleDatasetMetas();
            for (let r = e.length - 1; r >= 0; --r) this._drawDataset(e[r]);
            this.notifyPlugins("afterDatasetsDraw")
        }
        _drawDataset(e) {
            const r = this.ctx,
                a = e._clip,
                l = !a.disabled,
                c = this.chartArea,
                h = {
                    meta: e,
                    index: e.index,
                    cancelable: !0
                };
            !1 !== this.notifyPlugins("beforeDatasetDraw", h) && (l && Rs(r, {
                left: !1 === a.left ? 0 : c.left - a.left,
                right: !1 === a.right ? this.width : c.right + a.right,
                top: !1 === a.top ? 0 : c.top - a.top,
                bottom: !1 === a.bottom ? this.height : c.bottom + a.bottom
            }), e.controller.draw(), l && Vr(r), h.cancelable = !1, this.notifyPlugins("afterDatasetDraw", h))
        }
        isPointInArea(e) {
            return Wr(e, this.chartArea, this._minPadding)
        }
        getElementsAtEventForMode(e, r, a, l) {
            const c = Ki.modes[r];
            return "function" == typeof c ? c(this, e, a, l) : []
        }
        getDatasetMeta(e) {
            const r = this.data.datasets[e],
                a = this._metasets;
            let l = a.filter(c => c && c._dataset === r).pop();
            return l || (l = {
                type: null,
                data: [],
                dataset: null,
                controller: null,
                hidden: null,
                xAxisID: null,
                yAxisID: null,
                order: r && r.order || 0,
                index: e,
                _dataset: r,
                _parsed: [],
                _sorted: !1
            }, a.push(l)), l
        }
        getContext() {
            return this.$context || (this.$context = Xr(null, {
                chart: this,
                type: "chart"
            }))
        }
        getVisibleDatasetCount() {
            return this.getSortedVisibleDatasetMetas().length
        }
        isDatasetVisible(e) {
            const r = this.data.datasets[e];
            if (!r) return !1;
            const a = this.getDatasetMeta(e);
            return "boolean" == typeof a.hidden ? !a.hidden : !r.hidden
        }
        setDatasetVisibility(e, r) {
            this.getDatasetMeta(e).hidden = !r
        }
        toggleDataVisibility(e) {
            this._hiddenIndices[e] = !this._hiddenIndices[e]
        }
        getDataVisibility(e) {
            return !this._hiddenIndices[e]
        }
        _updateVisibility(e, r, a) {
            const l = a ? "show" : "hide",
                c = this.getDatasetMeta(e),
                h = c.controller._resolveAnimations(void 0, l);
            Wt(r) ? (c.data[r].hidden = !a, this.update()) : (this.setDatasetVisibility(e, a), h.update(c, {
                visible: a
            }), this.update(u => u.datasetIndex === e ? l : void 0))
        }
        hide(e, r) {
            this._updateVisibility(e, r, !1)
        }
        show(e, r) {
            this._updateVisibility(e, r, !0)
        }
        _destroyDatasetMeta(e) {
            const r = this._metasets[e];
            r && r.controller && r.controller._destroy(), delete this._metasets[e]
        }
        _stop() {
            let e, r;
            for (this.stop(), gn.remove(this), e = 0, r = this.data.datasets.length; e < r; ++e) this._destroyDatasetMeta(e)
        }
        destroy() {
            this.notifyPlugins("beforeDestroy");
            const {
                canvas: e,
                ctx: r
            } = this;
            this._stop(), this.config.clearCache(), e && (this.unbindEvents(), Us(e, r), this.platform.releaseContext(r), this.canvas = null, this.ctx = null), this.notifyPlugins("destroy"), delete Ps[this.id], this.notifyPlugins("afterDestroy")
        }
        toBase64Image(...e) {
            return this.canvas.toDataURL(...e)
        }
        bindEvents() {
            this.bindUserEvents(), this.options.responsive ? this.bindResponsiveEvents() : this.attached = !0
        }
        bindUserEvents() {
            const e = this._listeners,
                r = this.platform,
                a = (c, h) => {
                    r.addEventListener(this, c, h), e[c] = h
                },
                l = (c, h, u) => {
                    c.offsetX = h, c.offsetY = u, this._eventHandler(c)
                };
            A(this.options.events, c => a(c, l))
        }
        bindResponsiveEvents() {
            this._responsiveListeners || (this._responsiveListeners = {});
            const e = this._responsiveListeners,
                r = this.platform,
                a = (b, S) => {
                    r.addEventListener(this, b, S), e[b] = S
                },
                l = (b, S) => {
                    e[b] && (r.removeEventListener(this, b, S), delete e[b])
                },
                c = (b, S) => {
                    this.canvas && this.resize(b, S)
                };
            let h;
            const u = () => {
                l("attach", u), this.attached = !0, this.resize(), a("resize", c), a("detach", h)
            };
            h = () => {
                this.attached = !1, l("resize", c), this._stop(), this._resize(0, 0), a("attach", u)
            }, r.isAttached(this.canvas) ? u() : h()
        }
        unbindEvents() {
            A(this._listeners, (e, r) => {
                this.platform.removeEventListener(this, r, e)
            }), this._listeners = {}, A(this._responsiveListeners, (e, r) => {
                this.platform.removeEventListener(this, r, e)
            }), this._responsiveListeners = void 0
        }
        updateHoverStyle(e, r, a) {
            const l = a ? "set" : "remove";
            let c, h, u, b;
            for ("dataset" === r && (c = this.getDatasetMeta(e[0].datasetIndex), c.controller["_" + l + "DatasetHoverStyle"]()), u = 0, b = e.length; u < b; ++u) {
                h = e[u];
                const S = h && this.getDatasetMeta(h.datasetIndex).controller;
                S && S[l + "HoverStyle"](h.element, h.datasetIndex, h.index)
            }
        }
        getActiveElements() {
            return this._active || []
        }
        setActiveElements(e) {
            const r = this._active || [],
                a = e.map(({
                    datasetIndex: c,
                    index: h
                }) => {
                    const u = this.getDatasetMeta(c);
                    if (!u) throw new Error("No dataset found at index " + c);
                    return {
                        datasetIndex: c,
                        element: u.data[h],
                        index: h
                    }
                });
            !q(a, r) && (this._active = a, this._lastEvent = null, this._updateHoverStyles(a, r))
        }
        notifyPlugins(e, r, a) {
            return this._plugins.notify(this, e, r, a)
        }
        _updateHoverStyles(e, r, a) {
            const l = this.options.hover,
                c = (b, S) => b.filter(D => !S.some(U => D.datasetIndex === U.datasetIndex && D.index === U.index)),
                h = c(r, e),
                u = a ? e : c(e, r);
            h.length && this.updateHoverStyle(h, l.mode, !1), u.length && l.mode && this.updateHoverStyle(u, l.mode, !0)
        }
        _eventHandler(e, r) {
            const a = {
                    event: e,
                    replay: r,
                    cancelable: !0,
                    inChartArea: this.isPointInArea(e)
                },
                l = h => (h.options.events || this.options.events).includes(e.native.type);
            if (!1 === this.notifyPlugins("beforeEvent", a, l)) return;
            const c = this._handleEvent(e, r, a.inChartArea);
            return a.cancelable = !1, this.notifyPlugins("afterEvent", a, l), (c || a.changed) && this.render(), this
        }
        _handleEvent(e, r, a) {
            const {
                _active: l = [],
                options: c
            } = this, u = this._getActiveElements(e, l, a, r), b = Qt(e), S = function Ar(o, e, r, a) {
                return r && "mouseout" !== o.type ? a ? e : o : null
            }(e, this._lastEvent, a, b);
            a && (this._lastEvent = null, Z(c.onHover, [e, u, this], this), b && Z(c.onClick, [e, u, this], this));
            const D = !q(u, l);
            return (D || r) && (this._active = u, this._updateHoverStyles(u, l, r)), this._lastEvent = S, D
        }
        _getActiveElements(e, r, a, l) {
            if ("mouseout" === e.type) return [];
            if (!a) return r;
            const c = this.options.hover;
            return this.getElementsAtEventForMode(e, c.mode, c, l)
        }
    }
    const ts = () => A(wn.instances, o => o._plugins.invalidate()),
        xr = !0;

    function ys() {
        throw new Error("This method is not implemented: Check that a complete date adapter is provided.")
    }
    Object.defineProperties(wn, {
        defaults: {
            enumerable: xr,
            value: De
        },
        instances: {
            enumerable: xr,
            value: Ps
        },
        overrides: {
            enumerable: xr,
            value: Et
        },
        registry: {
            enumerable: xr,
            value: Y
        },
        version: {
            enumerable: xr,
            value: "3.9.1"
        },
        getChart: {
            enumerable: xr,
            value: io
        },
        register: {
            enumerable: xr,
            value: (...o) => {
                Y.add(...o), ts()
            }
        },
        unregister: {
            enumerable: xr,
            value: (...o) => {
                Y.remove(...o), ts()
            }
        }
    });
    class Po {
        constructor(e) {
            this.options = e || {}
        }
        init(e) {}
        formats() {
            return ys()
        }
        parse(e, r) {
            return ys()
        }
        format(e, r) {
            return ys()
        }
        add(e, r, a) {
            return ys()
        }
        diff(e, r, a) {
            return ys()
        }
        startOf(e, r, a) {
            return ys()
        }
        endOf(e, r) {
            return ys()
        }
    }
    Po.override = function(o) {
        Object.assign(Po.prototype, o)
    };
    var sa = {
        _date: Po
    };

    function Jo(o) {
        const e = o.iScale,
            r = function ma(o, e) {
                if (!o._cache.$bar) {
                    const r = o.getMatchingVisibleMetas(e);
                    let a = [];
                    for (let l = 0, c = r.length; l < c; l++) a = a.concat(r[l].controller.getAllParsedValues(o));
                    o._cache.$bar = Ni(a.sort((l, c) => l - c))
                }
                return o._cache.$bar
            }(e, o.type);
        let l, c, h, u, a = e._length;
        const b = () => {
            32767 === h || -32768 === h || (Wt(u) && (a = Math.min(a, Math.abs(h - u) || a)), u = h)
        };
        for (l = 0, c = r.length; l < c; ++l) h = e.getPixelForValue(r[l]), b();
        for (u = void 0, l = 0, c = e.ticks.length; l < c; ++l) h = e.getPixelForTick(l), b();
        return a
    }

    function ba(o, e, r, a) {
        return I(o) ? function oa(o, e, r, a) {
            const l = r.parse(o[0], a),
                c = r.parse(o[1], a),
                h = Math.min(l, c),
                u = Math.max(l, c);
            let b = h,
                S = u;
            Math.abs(h) > Math.abs(u) && (b = u, S = h), e[r.axis] = S, e._custom = {
                barStart: b,
                barEnd: S,
                start: l,
                end: c,
                min: h,
                max: u
            }
        }(o, e, r, a) : e[r.axis] = r.parse(o, a), e
    }

    function aa(o, e, r, a) {
        const l = o.iScale,
            c = o.vScale,
            h = l.getLabels(),
            u = l === c,
            b = [];
        let S, D, U, st;
        for (S = r, D = r + a; S < D; ++S) st = e[S], U = {}, U[l.axis] = u || l.parse(h[S], S), b.push(ba(st, U, c, S));
        return b
    }

    function la(o) {
        return o && void 0 !== o.barStart && void 0 !== o.barEnd
    }

    function La(o, e, r, a) {
        let l = e.borderSkipped;
        const c = {};
        if (!l) return void(o.borderSkipped = c);
        if (!0 === l) return void(o.borderSkipped = {
            top: !0,
            right: !0,
            bottom: !0,
            left: !0
        });
        const {
            start: h,
            end: u,
            reverse: b,
            top: S,
            bottom: D
        } = function _a(o) {
            let e, r, a, l, c;
            return o.horizontal ? (e = o.base > o.x, r = "left", a = "right") : (e = o.base < o.y, r = "bottom", a = "top"), e ? (l = "end", c = "start") : (l = "start", c = "end"), {
                start: r,
                end: a,
                reverse: e,
                top: l,
                bottom: c
            }
        }(o);
        "middle" === l && r && (o.enableBorderRadius = !0, (r._top || 0) === a ? l = S : (r._bottom || 0) === a ? l = D : (c[xa(D, h, u, b)] = !0, l = S)), c[xa(l, h, u, b)] = !0, o.borderSkipped = c
    }

    function xa(o, e, r, a) {
        return a ? (o = function Bo(o, e, r) {
            return o === e ? r : o === r ? e : o
        }(o, e, r), o = jo(o, r, e)) : o = jo(o, e, r), o
    }

    function jo(o, e, r) {
        return "start" === o ? e : "end" === o ? r : o
    }

    function ya(o, {
        inflateAmount: e
    }, r) {
        o.inflateAmount = "auto" === e ? 1 === r ? .33 : 0 : e
    }
    class Wo extends nn {
        parsePrimitiveData(e, r, a, l) {
            return aa(e, r, a, l)
        }
        parseArrayData(e, r, a, l) {
            return aa(e, r, a, l)
        }
        parseObjectData(e, r, a, l) {
            const {
                iScale: c,
                vScale: h
            } = e, {
                xAxisKey: u = "x",
                yAxisKey: b = "y"
            } = this._parsing, S = "x" === c.axis ? u : b, D = "x" === h.axis ? u : b, U = [];
            let st, ft, gt, $t;
            for (st = a, ft = a + l; st < ft; ++st) $t = r[st], gt = {}, gt[c.axis] = c.parse(wt($t, S), st), U.push(ba(wt($t, D), gt, h, st));
            return U
        }
        updateRangeFromParsed(e, r, a, l) {
            super.updateRangeFromParsed(e, r, a, l);
            const c = a._custom;
            c && r === this._cachedMeta.vScale && (e.min = Math.min(e.min, c.min), e.max = Math.max(e.max, c.max))
        }
        getMaxOverflow() {
            return 0
        }
        getLabelAndValue(e) {
            const r = this._cachedMeta,
                {
                    iScale: a,
                    vScale: l
                } = r,
                c = this.getParsed(e),
                h = c._custom,
                u = la(h) ? "[" + h.start + ", " + h.end + "]" : "" + l.getLabelForValue(c[l.axis]);
            return {
                label: "" + a.getLabelForValue(c[a.axis]),
                value: u
            }
        }
        initialize() {
            this.enableOptionSharing = !0, super.initialize(), this._cachedMeta.stack = this.getDataset().stack
        }
        update(e) {
            const r = this._cachedMeta;
            this.updateElements(r.data, 0, r.data.length, e)
        }
        updateElements(e, r, a, l) {
            const c = "reset" === l,
                {
                    index: h,
                    _cachedMeta: {
                        vScale: u
                    }
                } = this,
                b = u.getBasePixel(),
                S = u.isHorizontal(),
                D = this._getRuler(),
                {
                    sharedOptions: U,
                    includeOptions: st
                } = this._getSharedOptions(r, l);
            for (let ft = r; ft < r + a; ft++) {
                const gt = this.getParsed(ft),
                    $t = c || y(gt[u.axis]) ? {
                        base: b,
                        head: b
                    } : this._calculateBarValuePixels(ft),
                    qt = this._calculateBarIndexPixels(ft, D),
                    re = (gt._stacks || {})[u.axis],
                    _e = {
                        horizontal: S,
                        base: $t.base,
                        enableBorderRadius: !re || la(gt._custom) || h === re._top || h === re._bottom,
                        x: S ? $t.head : qt.center,
                        y: S ? qt.center : $t.head,
                        height: S ? qt.size : Math.abs($t.size),
                        width: S ? Math.abs($t.size) : qt.size
                    };
                st && (_e.options = U || this.resolveDataElementOptions(ft, e[ft].active ? "active" : l));
                const Ae = _e.options || e[ft].options;
                La(_e, Ae, re, h), ya(_e, Ae, D.ratio), this.updateElement(e[ft], ft, _e, l)
            }
        }
        _getStacks(e, r) {
            const {
                iScale: a
            } = this._cachedMeta, l = a.getMatchingVisibleMetas(this._type).filter(b => b.controller.options.grouped), c = a.options.stacked, h = [], u = b => {
                const S = b.controller.getParsed(r),
                    D = S && S[b.vScale.axis];
                if (y(D) || isNaN(D)) return !0
            };
            for (const b of l)
                if ((void 0 === r || !u(b)) && ((!1 === c || -1 === h.indexOf(b.stack) || void 0 === c && void 0 === b.stack) && h.push(b.stack), b.index === e)) break;
            return h.length || h.push(void 0), h
        }
        _getStackCount(e) {
            return this._getStacks(void 0, e).length
        }
        _getStackIndex(e, r, a) {
            const l = this._getStacks(e, a),
                c = void 0 !== r ? l.indexOf(r) : -1;
            return -1 === c ? l.length - 1 : c
        }
        _getRuler() {
            const e = this.options,
                r = this._cachedMeta,
                a = r.iScale,
                l = [];
            let c, h;
            for (c = 0, h = r.data.length; c < h; ++c) l.push(a.getPixelForValue(this.getParsed(c)[a.axis], c));
            const u = e.barThickness;
            return {
                min: u || Jo(r),
                pixels: l,
                start: a._startPixel,
                end: a._endPixel,
                stackCount: this._getStackCount(),
                scale: a,
                grouped: e.grouped,
                ratio: u ? 1 : e.categoryPercentage * e.barPercentage
            }
        }
        _calculateBarValuePixels(e) {
            const {
                _cachedMeta: {
                    vScale: r,
                    _stacked: a
                },
                options: {
                    base: l,
                    minBarLength: c
                }
            } = this, h = l || 0, u = this.getParsed(e), b = u._custom, S = la(b);
            let ft, gt, D = u[r.axis],
                U = 0,
                st = a ? this.applyStack(r, u, a) : D;
            st !== D && (U = st - D, st = D), S && (D = b.barStart, st = b.barEnd - b.barStart, 0 !== D && X(D) !== X(b.barEnd) && (U = 0), U += D);
            const $t = y(l) || S ? U : l;
            let qt = r.getPixelForValue($t);
            if (ft = this.chart.getDataVisibility(e) ? r.getPixelForValue(U + st) : qt, gt = ft - qt, Math.abs(gt) < c) {
                gt = function va(o, e, r) {
                    return 0 !== o ? X(o) : (e.isHorizontal() ? 1 : -1) * (e.min >= r ? 1 : -1)
                }(gt, r, h) * c, D === h && (qt -= gt / 2);
                const re = r.getPixelForDecimal(0),
                    _e = r.getPixelForDecimal(1),
                    Ae = Math.min(re, _e),
                    Te = Math.max(re, _e);
                qt = Math.max(Math.min(qt, Te), Ae), ft = qt + gt
            }
            if (qt === r.getPixelForValue(h)) {
                const re = X(gt) * r.getLineWidthForValue(h) / 2;
                qt += re, gt -= re
            }
            return {
                size: gt,
                base: qt,
                head: ft,
                center: ft + gt / 2
            }
        }
        _calculateBarIndexPixels(e, r) {
            const a = r.scale,
                l = this.options,
                c = l.skipNull,
                h = O(l.maxBarThickness, 1 / 0);
            let u, b;
            if (r.grouped) {
                const S = c ? this._getStackCount(e) : r.stackCount,
                    D = "flex" === l.barThickness ? function Ia(o, e, r, a) {
                        const l = e.pixels,
                            c = l[o];
                        let h = o > 0 ? l[o - 1] : null,
                            u = o < l.length - 1 ? l[o + 1] : null;
                        const b = r.categoryPercentage;
                        null === h && (h = c - (null === u ? e.end - e.start : u - c)), null === u && (u = c + c - h);
                        const S = c - (c - Math.min(h, u)) / 2 * b;
                        return {
                            chunk: Math.abs(u - h) / 2 * b / a,
                            ratio: r.barPercentage,
                            start: S
                        }
                    }(e, r, l, S) : function Ma(o, e, r, a) {
                        const l = r.barThickness;
                        let c, h;
                        return y(l) ? (c = e.min * r.categoryPercentage, h = r.barPercentage) : (c = l * a, h = 1), {
                            chunk: c / a,
                            ratio: h,
                            start: e.pixels[o] - c / 2
                        }
                    }(e, r, l, S),
                    U = this._getStackIndex(this.index, this._cachedMeta.stack, c ? e : void 0);
                u = D.start + D.chunk * U + D.chunk / 2, b = Math.min(h, D.chunk * D.ratio)
            } else u = a.getPixelForValue(this.getParsed(e)[a.axis], e), b = Math.min(h, r.min * r.ratio);
            return {
                base: u - b / 2,
                head: u + b / 2,
                center: u,
                size: b
            }
        }
        draw() {
            const e = this._cachedMeta,
                r = e.vScale,
                a = e.data,
                l = a.length;
            let c = 0;
            for (; c < l; ++c) null !== this.getParsed(c)[r.axis] && a[c].draw(this._ctx)
        }
    }
    Wo.id = "bar", Wo.defaults = {
        datasetElementType: !1,
        dataElementType: "bar",
        categoryPercentage: .8,
        barPercentage: .9,
        grouped: !0,
        animations: {
            numbers: {
                type: "number",
                properties: ["x", "y", "base", "width", "height"]
            }
        }
    }, Wo.overrides = {
        scales: {
            _index_: {
                type: "category",
                offset: !0,
                grid: {
                    offset: !0
                }
            },
            _value_: {
                type: "linear",
                beginAtZero: !0
            }
        }
    };
    class Mo extends nn {
        initialize() {
            this.enableOptionSharing = !0, super.initialize()
        }
        parsePrimitiveData(e, r, a, l) {
            const c = super.parsePrimitiveData(e, r, a, l);
            for (let h = 0; h < c.length; h++) c[h]._custom = this.resolveDataElementOptions(h + a).radius;
            return c
        }
        parseArrayData(e, r, a, l) {
            const c = super.parseArrayData(e, r, a, l);
            for (let h = 0; h < c.length; h++) c[h]._custom = O(r[a + h][2], this.resolveDataElementOptions(h + a).radius);
            return c
        }
        parseObjectData(e, r, a, l) {
            const c = super.parseObjectData(e, r, a, l);
            for (let h = 0; h < c.length; h++) {
                const u = r[a + h];
                c[h]._custom = O(u && u.r && +u.r, this.resolveDataElementOptions(h + a).radius)
            }
            return c
        }
        getMaxOverflow() {
            const e = this._cachedMeta.data;
            let r = 0;
            for (let a = e.length - 1; a >= 0; --a) r = Math.max(r, e[a].size(this.resolveDataElementOptions(a)) / 2);
            return r > 0 && r
        }
        getLabelAndValue(e) {
            const r = this._cachedMeta,
                {
                    xScale: a,
                    yScale: l
                } = r,
                c = this.getParsed(e),
                h = a.getLabelForValue(c.x),
                u = l.getLabelForValue(c.y),
                b = c._custom;
            return {
                label: r.label,
                value: "(" + h + ", " + u + (b ? ", " + b : "") + ")"
            }
        }
        update(e) {
            const r = this._cachedMeta.data;
            this.updateElements(r, 0, r.length, e)
        }
        updateElements(e, r, a, l) {
            const c = "reset" === l,
                {
                    iScale: h,
                    vScale: u
                } = this._cachedMeta,
                {
                    sharedOptions: b,
                    includeOptions: S
                } = this._getSharedOptions(r, l),
                D = h.axis,
                U = u.axis;
            for (let st = r; st < r + a; st++) {
                const ft = e[st],
                    gt = !c && this.getParsed(st),
                    $t = {},
                    qt = $t[D] = c ? h.getPixelForDecimal(.5) : h.getPixelForValue(gt[D]),
                    re = $t[U] = c ? u.getBasePixel() : u.getPixelForValue(gt[U]);
                $t.skip = isNaN(qt) || isNaN(re), S && ($t.options = b || this.resolveDataElementOptions(st, ft.active ? "active" : l), c && ($t.options.radius = 0)), this.updateElement(ft, st, $t, l)
            }
        }
        resolveDataElementOptions(e, r) {
            const a = this.getParsed(e);
            let l = super.resolveDataElementOptions(e, r);
            l.$shared && (l = Object.assign({}, l, {
                $shared: !1
            }));
            const c = l.radius;
            return "active" !== r && (l.radius = 0), l.radius += O(a && a._custom, c), l
        }
    }
    Mo.id = "bubble", Mo.defaults = {
        datasetElementType: !1,
        dataElementType: "point",
        animations: {
            numbers: {
                type: "number",
                properties: ["x", "y", "borderWidth", "radius"]
            }
        }
    }, Mo.overrides = {
        scales: {
            x: {
                type: "linear"
            },
            y: {
                type: "linear"
            }
        },
        plugins: {
            tooltip: {
                callbacks: {
                    title: () => ""
                }
            }
        }
    };
    class Eo extends nn {
        constructor(e, r) {
            super(e, r), this.enableOptionSharing = !0, this.innerRadius = void 0, this.outerRadius = void 0, this.offsetX = void 0, this.offsetY = void 0
        }
        linkScales() {}
        parse(e, r) {
            const a = this.getDataset().data,
                l = this._cachedMeta;
            if (!1 === this._parsing) l._parsed = a;
            else {
                let h, u, c = b => +a[b];
                if (H(a[e])) {
                    const {
                        key: b = "value"
                    } = this._parsing;
                    c = S => +wt(a[S], b)
                }
                for (h = e, u = e + r; h < u; ++h) l._parsed[h] = c(h)
            }
        }
        _getRotation() {
            return Dt(this.options.rotation - 90)
        }
        _getCircumference() {
            return Dt(this.options.circumference)
        }
        _getRotationExtents() {
            let e = Yt,
                r = -Yt;
            for (let a = 0; a < this.chart.data.datasets.length; ++a)
                if (this.chart.isDatasetVisible(a)) {
                    const l = this.chart.getDatasetMeta(a).controller,
                        c = l._getRotation(),
                        h = l._getCircumference();
                    e = Math.min(e, c), r = Math.max(r, c + h)
                }
            return {
                rotation: e,
                circumference: r - e
            }
        }
        update(e) {
            const r = this.chart,
                {
                    chartArea: a
                } = r,
                l = this._cachedMeta,
                c = l.data,
                h = this.getMaxBorderWidth() + this.getMaxOffset(c) + this.options.spacing,
                u = Math.max((Math.min(a.width, a.height) - h) / 2, 0),
                b = Math.min(J(this.options.cutout, u), 1),
                S = this._getRingWeight(this.index),
                {
                    circumference: D,
                    rotation: U
                } = this._getRotationExtents(),
                {
                    ratioX: st,
                    ratioY: ft,
                    offsetX: gt,
                    offsetY: $t
                } = function wa(o, e, r) {
                    let a = 1,
                        l = 1,
                        c = 0,
                        h = 0;
                    if (e < Yt) {
                        const u = o,
                            b = u + e,
                            S = Math.cos(u),
                            D = Math.sin(u),
                            U = Math.cos(b),
                            st = Math.sin(b),
                            ft = (Ae, Te, Se) => cn(Ae, u, b, !0) ? 1 : Math.max(Te, Te * r, Se, Se * r),
                            gt = (Ae, Te, Se) => cn(Ae, u, b, !0) ? -1 : Math.min(Te, Te * r, Se, Se * r),
                            $t = ft(0, S, U),
                            qt = ft(V, D, st),
                            re = gt(Ft, S, U),
                            _e = gt(Ft + V, D, st);
                        a = ($t - re) / 2, l = (qt - _e) / 2, c = -($t + re) / 2, h = -(qt + _e) / 2
                    }
                    return {
                        ratioX: a,
                        ratioY: l,
                        offsetX: c,
                        offsetY: h
                    }
                }(U, D, b),
                _e = Math.max(Math.min((a.width - h) / st, (a.height - h) / ft) / 2, 0),
                Ae = mt(this.options.radius, _e),
                Se = (Ae - Math.max(Ae * b, 0)) / this._getVisibleDatasetWeightTotal();
            this.offsetX = gt * Ae, this.offsetY = $t * Ae, l.total = this.calculateTotal(), this.outerRadius = Ae - Se * this._getRingWeightOffset(this.index), this.innerRadius = Math.max(this.outerRadius - Se * S, 0), this.updateElements(c, 0, c.length, e)
        }
        _circumference(e, r) {
            const a = this.options,
                l = this._cachedMeta,
                c = this._getCircumference();
            return r && a.animation.animateRotate || !this.chart.getDataVisibility(e) || null === l._parsed[e] || l.data[e].hidden ? 0 : this.calculateCircumference(l._parsed[e] * c / Yt)
        }
        updateElements(e, r, a, l) {
            const c = "reset" === l,
                h = this.chart,
                u = h.chartArea,
                D = (u.left + u.right) / 2,
                U = (u.top + u.bottom) / 2,
                st = c && h.options.animation.animateScale,
                ft = st ? 0 : this.innerRadius,
                gt = st ? 0 : this.outerRadius,
                {
                    sharedOptions: $t,
                    includeOptions: qt
                } = this._getSharedOptions(r, l);
            let _e, re = this._getRotation();
            for (_e = 0; _e < r; ++_e) re += this._circumference(_e, c);
            for (_e = r; _e < r + a; ++_e) {
                const Ae = this._circumference(_e, c),
                    Te = e[_e],
                    Se = {
                        x: D + this.offsetX,
                        y: U + this.offsetY,
                        startAngle: re,
                        endAngle: re + Ae,
                        circumference: Ae,
                        outerRadius: gt,
                        innerRadius: ft
                    };
                qt && (Se.options = $t || this.resolveDataElementOptions(_e, Te.active ? "active" : l)), re += Ae, this.updateElement(Te, _e, Se, l)
            }
        }
        calculateTotal() {
            const e = this._cachedMeta,
                r = e.data;
            let l, a = 0;
            for (l = 0; l < r.length; l++) {
                const c = e._parsed[l];
                null !== c && !isNaN(c) && this.chart.getDataVisibility(l) && !r[l].hidden && (a += Math.abs(c))
            }
            return a
        }
        calculateCircumference(e) {
            const r = this._cachedMeta.total;
            return r > 0 && !isNaN(e) ? Yt * (Math.abs(e) / r) : 0
        }
        getLabelAndValue(e) {
            const a = this.chart,
                l = a.data.labels || [],
                c = vr(this._cachedMeta._parsed[e], a.options.locale);
            return {
                label: l[e] || "",
                value: c
            }
        }
        getMaxBorderWidth(e) {
            let r = 0;
            const a = this.chart;
            let l, c, h, u, b;
            if (!e)
                for (l = 0, c = a.data.datasets.length; l < c; ++l)
                    if (a.isDatasetVisible(l)) {
                        h = a.getDatasetMeta(l), e = h.data, u = h.controller;
                        break
                    }
            if (!e) return 0;
            for (l = 0, c = e.length; l < c; ++l) b = u.resolveDataElementOptions(l), "inner" !== b.borderAlign && (r = Math.max(r, b.borderWidth || 0, b.hoverBorderWidth || 0));
            return r
        }
        getMaxOffset(e) {
            let r = 0;
            for (let a = 0, l = e.length; a < l; ++a) {
                const c = this.resolveDataElementOptions(a);
                r = Math.max(r, c.offset || 0, c.hoverOffset || 0)
            }
            return r
        }
        _getRingWeightOffset(e) {
            let r = 0;
            for (let a = 0; a < e; ++a) this.chart.isDatasetVisible(a) && (r += this._getRingWeight(a));
            return r
        }
        _getRingWeight(e) {
            return Math.max(O(this.chart.data.datasets[e].weight, 1), 0)
        }
        _getVisibleDatasetWeightTotal() {
            return this._getRingWeightOffset(this.chart.data.datasets.length) || 1
        }
    }
    Eo.id = "doughnut", Eo.defaults = {
        datasetElementType: !1,
        dataElementType: "arc",
        animation: {
            animateRotate: !0,
            animateScale: !1
        },
        animations: {
            numbers: {
                type: "number",
                properties: ["circumference", "endAngle", "innerRadius", "outerRadius", "startAngle", "x", "y", "offset", "borderWidth", "spacing"]
            }
        },
        cutout: "50%",
        rotation: 0,
        circumference: 360,
        radius: "100%",
        spacing: 0,
        indexAxis: "r"
    }, Eo.descriptors = {
        _scriptable: o => "spacing" !== o,
        _indexable: o => "spacing" !== o
    }, Eo.overrides = {
        aspectRatio: 1,
        plugins: {
            legend: {
                labels: {
                    generateLabels(o) {
                        const e = o.data;
                        if (e.labels.length && e.datasets.length) {
                            const {
                                labels: {
                                    pointStyle: r
                                }
                            } = o.legend.options;
                            return e.labels.map((a, l) => {
                                const h = o.getDatasetMeta(0).controller.getStyle(l);
                                return {
                                    text: a,
                                    fillStyle: h.backgroundColor,
                                    strokeStyle: h.borderColor,
                                    lineWidth: h.borderWidth,
                                    pointStyle: r,
                                    hidden: !o.getDataVisibility(l),
                                    index: l
                                }
                            })
                        }
                        return []
                    }
                },
                onClick(o, e, r) {
                    r.chart.toggleDataVisibility(e.index), r.chart.update()
                }
            },
            tooltip: {
                callbacks: {
                    title: () => "",
                    label(o) {
                        let e = o.label;
                        const r = ": " + o.formattedValue;
                        return I(e) ? (e = e.slice(), e[0] += r) : e += r, e
                    }
                }
            }
        }
    };
    class Vo extends nn {
        initialize() {
            this.enableOptionSharing = !0, this.supportsDecimation = !0, super.initialize()
        }
        update(e) {
            const r = this._cachedMeta,
                {
                    dataset: a,
                    data: l = [],
                    _dataset: c
                } = r,
                h = this.chart._animationsDisabled;
            let {
                start: u,
                count: b
            } = wr(r, l, h);
            this._drawStart = u, this._drawCount = b, ci(r) && (u = 0, b = l.length), a._chart = this.chart, a._datasetIndex = this.index, a._decimated = !!c._decimated, a.points = l;
            const S = this.resolveDatasetElementOptions(e);
            this.options.showLine || (S.borderWidth = 0), S.segment = this.options.segment, this.updateElement(a, void 0, {
                animated: !h,
                options: S
            }, e), this.updateElements(l, u, b, e)
        }
        updateElements(e, r, a, l) {
            const c = "reset" === l,
                {
                    iScale: h,
                    vScale: u,
                    _stacked: b,
                    _dataset: S
                } = this._cachedMeta,
                {
                    sharedOptions: D,
                    includeOptions: U
                } = this._getSharedOptions(r, l),
                st = h.axis,
                ft = u.axis,
                {
                    spanGaps: gt,
                    segment: $t
                } = this.options,
                qt = Gt(gt) ? gt : Number.POSITIVE_INFINITY,
                re = this.chart._animationsDisabled || c || "none" === l;
            let _e = r > 0 && this.getParsed(r - 1);
            for (let Ae = r; Ae < r + a; ++Ae) {
                const Te = e[Ae],
                    Se = this.getParsed(Ae),
                    Ue = re ? Te : {},
                    Xe = y(Se[ft]),
                    vn = Ue[st] = h.getPixelForValue(Se[st], Ae),
                    un = Ue[ft] = c || Xe ? u.getBasePixel() : u.getPixelForValue(b ? this.applyStack(u, Se, b) : Se[ft], Ae);
                Ue.skip = isNaN(vn) || isNaN(un) || Xe, Ue.stop = Ae > 0 && Math.abs(Se[st] - _e[st]) > qt, $t && (Ue.parsed = Se, Ue.raw = S.data[Ae]), U && (Ue.options = D || this.resolveDataElementOptions(Ae, Te.active ? "active" : l)), re || this.updateElement(Te, Ae, Ue, l), _e = Se
            }
        }
        getMaxOverflow() {
            const e = this._cachedMeta,
                r = e.dataset,
                a = r.options && r.options.borderWidth || 0,
                l = e.data || [];
            if (!l.length) return a;
            const c = l[0].size(this.resolveDataElementOptions(0)),
                h = l[l.length - 1].size(this.resolveDataElementOptions(l.length - 1));
            return Math.max(a, c, h) / 2
        }
        draw() {
            const e = this._cachedMeta;
            e.dataset.updateControlPoints(this.chart.chartArea, e.iScale.axis), super.draw()
        }
    }
    Vo.id = "line", Vo.defaults = {
        datasetElementType: "line",
        dataElementType: "point",
        showLine: !0,
        spanGaps: !1
    }, Vo.overrides = {
        scales: {
            _index_: {
                type: "category"
            },
            _value_: {
                type: "linear"
            }
        }
    };
    class Uo extends nn {
        constructor(e, r) {
            super(e, r), this.innerRadius = void 0, this.outerRadius = void 0
        }
        getLabelAndValue(e) {
            const a = this.chart,
                l = a.data.labels || [],
                c = vr(this._cachedMeta._parsed[e].r, a.options.locale);
            return {
                label: l[e] || "",
                value: c
            }
        }
        parseObjectData(e, r, a, l) {
            return on.bind(this)(e, r, a, l)
        }
        update(e) {
            const r = this._cachedMeta.data;
            this._updateRadius(), this.updateElements(r, 0, r.length, e)
        }
        getMinMax() {
            const r = {
                min: Number.POSITIVE_INFINITY,
                max: Number.NEGATIVE_INFINITY
            };
            return this._cachedMeta.data.forEach((a, l) => {
                const c = this.getParsed(l).r;
                !isNaN(c) && this.chart.getDataVisibility(l) && (c < r.min && (r.min = c), c > r.max && (r.max = c))
            }), r
        }
        _updateRadius() {
            const e = this.chart,
                r = e.chartArea,
                a = e.options,
                l = Math.min(r.right - r.left, r.bottom - r.top),
                c = Math.max(l / 2, 0),
                u = (c - Math.max(a.cutoutPercentage ? c / 100 * a.cutoutPercentage : 1, 0)) / e.getVisibleDatasetCount();
            this.outerRadius = c - u * this.index, this.innerRadius = this.outerRadius - u
        }
        updateElements(e, r, a, l) {
            const c = "reset" === l,
                h = this.chart,
                b = h.options.animation,
                S = this._cachedMeta.rScale,
                D = S.xCenter,
                U = S.yCenter,
                st = S.getIndexAngle(0) - .5 * Ft;
            let gt, ft = st;
            const $t = 360 / this.countVisibleElements();
            for (gt = 0; gt < r; ++gt) ft += this._computeAngle(gt, l, $t);
            for (gt = r; gt < r + a; gt++) {
                const qt = e[gt];
                let re = ft,
                    _e = ft + this._computeAngle(gt, l, $t),
                    Ae = h.getDataVisibility(gt) ? S.getDistanceFromCenterForValue(this.getParsed(gt).r) : 0;
                ft = _e, c && (b.animateScale && (Ae = 0), b.animateRotate && (re = _e = st));
                const Te = {
                    x: D,
                    y: U,
                    innerRadius: 0,
                    outerRadius: Ae,
                    startAngle: re,
                    endAngle: _e,
                    options: this.resolveDataElementOptions(gt, qt.active ? "active" : l)
                };
                this.updateElement(qt, gt, Te, l)
            }
        }
        countVisibleElements() {
            let r = 0;
            return this._cachedMeta.data.forEach((a, l) => {
                !isNaN(this.getParsed(l).r) && this.chart.getDataVisibility(l) && r++
            }), r
        }
        _computeAngle(e, r, a) {
            return this.chart.getDataVisibility(e) ? Dt(this.resolveDataElementOptions(e, r).angle || a) : 0
        }
    }
    Uo.id = "polarArea", Uo.defaults = {
        dataElementType: "arc",
        animation: {
            animateRotate: !0,
            animateScale: !0
        },
        animations: {
            numbers: {
                type: "number",
                properties: ["x", "y", "startAngle", "endAngle", "innerRadius", "outerRadius"]
            }
        },
        indexAxis: "r",
        startAngle: 0
    }, Uo.overrides = {
        aspectRatio: 1,
        plugins: {
            legend: {
                labels: {
                    generateLabels(o) {
                        const e = o.data;
                        if (e.labels.length && e.datasets.length) {
                            const {
                                labels: {
                                    pointStyle: r
                                }
                            } = o.legend.options;
                            return e.labels.map((a, l) => {
                                const h = o.getDatasetMeta(0).controller.getStyle(l);
                                return {
                                    text: a,
                                    fillStyle: h.backgroundColor,
                                    strokeStyle: h.borderColor,
                                    lineWidth: h.borderWidth,
                                    pointStyle: r,
                                    hidden: !o.getDataVisibility(l),
                                    index: l
                                }
                            })
                        }
                        return []
                    }
                },
                onClick(o, e, r) {
                    r.chart.toggleDataVisibility(e.index), r.chart.update()
                }
            },
            tooltip: {
                callbacks: {
                    title: () => "",
                    label: o => o.chart.data.labels[o.dataIndex] + ": " + o.formattedValue
                }
            }
        },
        scales: {
            r: {
                type: "radialLinear",
                angleLines: {
                    display: !1
                },
                beginAtZero: !0,
                grid: {
                    circular: !0
                },
                pointLabels: {
                    display: !1
                },
                startAngle: 0
            }
        }
    };
    class ca extends Eo {}
    ca.id = "pie", ca.defaults = {
        cutout: 0,
        rotation: 0,
        circumference: 360,
        radius: "100%"
    };
    class Ko extends nn {
        getLabelAndValue(e) {
            const r = this._cachedMeta.vScale,
                a = this.getParsed(e);
            return {
                label: r.getLabels()[e],
                value: "" + r.getLabelForValue(a[r.axis])
            }
        }
        parseObjectData(e, r, a, l) {
            return on.bind(this)(e, r, a, l)
        }
        update(e) {
            const r = this._cachedMeta,
                a = r.dataset,
                l = r.data || [],
                c = r.iScale.getLabels();
            if (a.points = l, "resize" !== e) {
                const h = this.resolveDatasetElementOptions(e);
                this.options.showLine || (h.borderWidth = 0), this.updateElement(a, void 0, {
                    _loop: !0,
                    _fullLoop: c.length === l.length,
                    options: h
                }, e)
            }
            this.updateElements(l, 0, l.length, e)
        }
        updateElements(e, r, a, l) {
            const c = this._cachedMeta.rScale,
                h = "reset" === l;
            for (let u = r; u < r + a; u++) {
                const b = e[u],
                    S = this.resolveDataElementOptions(u, b.active ? "active" : l),
                    D = c.getPointPositionForValue(u, this.getParsed(u).r),
                    U = h ? c.xCenter : D.x,
                    st = h ? c.yCenter : D.y,
                    ft = {
                        x: U,
                        y: st,
                        angle: D.angle,
                        skip: isNaN(U) || isNaN(st),
                        options: S
                    };
                this.updateElement(b, u, ft, l)
            }
        }
    }
    Ko.id = "radar", Ko.defaults = {
        datasetElementType: "line",
        dataElementType: "point",
        indexAxis: "r",
        showLine: !0,
        elements: {
            line: {
                fill: "start"
            }
        }
    }, Ko.overrides = {
        aspectRatio: 1,
        scales: {
            r: {
                type: "radialLinear"
            }
        }
    };
    class Io extends nn {
        update(e) {
            const r = this._cachedMeta,
                {
                    data: a = []
                } = r,
                l = this.chart._animationsDisabled;
            let {
                start: c,
                count: h
            } = wr(r, a, l);
            if (this._drawStart = c, this._drawCount = h, ci(r) && (c = 0, h = a.length), this.options.showLine) {
                const {
                    dataset: u,
                    _dataset: b
                } = r;
                u._chart = this.chart, u._datasetIndex = this.index, u._decimated = !!b._decimated, u.points = a;
                const S = this.resolveDatasetElementOptions(e);
                S.segment = this.options.segment, this.updateElement(u, void 0, {
                    animated: !l,
                    options: S
                }, e)
            }
            this.updateElements(a, c, h, e)
        }
        addElements() {
            const {
                showLine: e
            } = this.options;
            !this.datasetElementType && e && (this.datasetElementType = Y.getElement("line")), super.addElements()
        }
        updateElements(e, r, a, l) {
            const c = "reset" === l,
                {
                    iScale: h,
                    vScale: u,
                    _stacked: b,
                    _dataset: S
                } = this._cachedMeta,
                D = this.resolveDataElementOptions(r, l),
                U = this.getSharedOptions(D),
                st = this.includeOptions(l, U),
                ft = h.axis,
                gt = u.axis,
                {
                    spanGaps: $t,
                    segment: qt
                } = this.options,
                re = Gt($t) ? $t : Number.POSITIVE_INFINITY,
                _e = this.chart._animationsDisabled || c || "none" === l;
            let Ae = r > 0 && this.getParsed(r - 1);
            for (let Te = r; Te < r + a; ++Te) {
                const Se = e[Te],
                    Ue = this.getParsed(Te),
                    Xe = _e ? Se : {},
                    vn = y(Ue[gt]),
                    un = Xe[ft] = h.getPixelForValue(Ue[ft], Te),
                    yi = Xe[gt] = c || vn ? u.getBasePixel() : u.getPixelForValue(b ? this.applyStack(u, Ue, b) : Ue[gt], Te);
                Xe.skip = isNaN(un) || isNaN(yi) || vn, Xe.stop = Te > 0 && Math.abs(Ue[ft] - Ae[ft]) > re, qt && (Xe.parsed = Ue, Xe.raw = S.data[Te]), st && (Xe.options = U || this.resolveDataElementOptions(Te, Se.active ? "active" : l)), _e || this.updateElement(Se, Te, Xe, l), Ae = Ue
            }
            this.updateSharedOptions(U, l, D)
        }
        getMaxOverflow() {
            const e = this._cachedMeta,
                r = e.data || [];
            if (!this.options.showLine) {
                let u = 0;
                for (let b = r.length - 1; b >= 0; --b) u = Math.max(u, r[b].size(this.resolveDataElementOptions(b)) / 2);
                return u > 0 && u
            }
            const a = e.dataset,
                l = a.options && a.options.borderWidth || 0;
            if (!r.length) return l;
            const c = r[0].size(this.resolveDataElementOptions(0)),
                h = r[r.length - 1].size(this.resolveDataElementOptions(r.length - 1));
            return Math.max(l, c, h) / 2
        }
    }
    Io.id = "scatter", Io.defaults = {
        datasetElementType: !1,
        dataElementType: "point",
        showLine: !1,
        fill: !1
    }, Io.overrides = {
        interaction: {
            mode: "point"
        },
        plugins: {
            tooltip: {
                callbacks: {
                    title: () => "",
                    label: o => "(" + o.label + ", " + o.formattedValue + ")"
                }
            }
        },
        scales: {
            x: {
                type: "linear"
            },
            y: {
                type: "linear"
            }
        }
    };
    var ha = Object.freeze({
        __proto__: null,
        BarController: Wo,
        BubbleController: Mo,
        DoughnutController: Eo,
        LineController: Vo,
        PolarAreaController: Uo,
        PieController: ca,
        RadarController: Ko,
        ScatterController: Io
    });

    function tl(o, e, r) {
        const {
            startAngle: a,
            pixelMargin: l,
            x: c,
            y: h,
            outerRadius: u,
            innerRadius: b
        } = e;
        let S = l / u;
        o.beginPath(), o.arc(c, h, u, a - S, r + S), b > l ? (S = l / b, o.arc(c, h, b, r + S, a - S, !0)) : o.arc(c, h, l, r + V, a - V), o.closePath(), o.clip()
    }

    function Qo(o, e, r, a) {
        return {
            x: r + o * Math.cos(e),
            y: a + o * Math.sin(e)
        }
    }

    function $a(o, e, r, a, l, c) {
        const {
            x: h,
            y: u,
            startAngle: b,
            pixelMargin: S,
            innerRadius: D
        } = e, U = Math.max(e.outerRadius + a + r - S, 0), st = D > 0 ? D + a + r + S : 0;
        let ft = 0;
        const gt = l - b;
        if (a) {
            const yr = ((D > 0 ? D - a : 0) + (U > 0 ? U - a : 0)) / 2;
            ft = (gt - (0 !== yr ? gt * yr / (yr + a) : gt)) / 2
        }
        const qt = (gt - Math.max(.001, gt * U - r / Ft) / U) / 2,
            re = b + qt + ft,
            _e = l - qt - ft,
            {
                outerStart: Ae,
                outerEnd: Te,
                innerStart: Se,
                innerEnd: Ue
            } = function Ml(o, e, r, a) {
                const l = function Pl(o) {
                        return qn(o, ["outerStart", "outerEnd", "innerStart", "innerEnd"])
                    }(o.options.borderRadius),
                    c = (r - e) / 2,
                    h = Math.min(c, a * e / 2),
                    u = b => {
                        const S = (r - Math.min(c, b)) * a / 2;
                        return sn(b, 0, Math.min(c, S))
                    };
                return {
                    outerStart: u(l.outerStart),
                    outerEnd: u(l.outerEnd),
                    innerStart: sn(l.innerStart, 0, h),
                    innerEnd: sn(l.innerEnd, 0, h)
                }
            }(e, st, U, _e - re),
            Xe = U - Ae,
            vn = U - Te,
            un = re + Ae / Xe,
            yi = _e - Te / vn,
            Si = st + Se,
            ri = st + Ue,
            Dr = re + Se / Si,
            Ms = _e - Ue / ri;
        if (o.beginPath(), c) {
            if (o.arc(h, u, U, un, yi), Te > 0) {
                const yr = Qo(vn, yi, h, u);
                o.arc(yr.x, yr.y, Te, yi, _e + V)
            }
            const Rn = Qo(ri, _e, h, u);
            if (o.lineTo(Rn.x, Rn.y), Ue > 0) {
                const yr = Qo(ri, Ms, h, u);
                o.arc(yr.x, yr.y, Ue, _e + V, Ms + Math.PI)
            }
            if (o.arc(h, u, st, _e - Ue / st, re + Se / st, !0), Se > 0) {
                const yr = Qo(Si, Dr, h, u);
                o.arc(yr.x, yr.y, Se, Dr + Math.PI, re - V)
            }
            const Or = Qo(Xe, re, h, u);
            if (o.lineTo(Or.x, Or.y), Ae > 0) {
                const yr = Qo(Xe, un, h, u);
                o.arc(yr.x, yr.y, Ae, re - V, un)
            }
        } else {
            o.moveTo(h, u);
            const Rn = Math.cos(un) * U + h,
                Or = Math.sin(un) * U + u;
            o.lineTo(Rn, Or);
            const yr = Math.cos(yi) * U + h,
                Xo = Math.sin(yi) * U + u;
            o.lineTo(yr, Xo)
        }
        o.closePath()
    }
    class Ca extends Yn {
        constructor(e) {
            super(), this.options = void 0, this.circumference = void 0, this.startAngle = void 0, this.endAngle = void 0, this.innerRadius = void 0, this.outerRadius = void 0, this.pixelMargin = 0, this.fullCircles = 0, e && Object.assign(this, e)
        }
        inRange(e, r, a) {
            const l = this.getProps(["x", "y"], a),
                {
                    angle: c,
                    distance: h
                } = Ce(l, {
                    x: e,
                    y: r
                }),
                {
                    startAngle: u,
                    endAngle: b,
                    innerRadius: S,
                    outerRadius: D,
                    circumference: U
                } = this.getProps(["startAngle", "endAngle", "innerRadius", "outerRadius", "circumference"], a),
                st = this.options.spacing / 2,
                gt = O(U, b - u) >= Yt || cn(c, u, b),
                $t = te(h, S + st, D + st);
            return gt && $t
        }
        getCenterPoint(e) {
            const {
                x: r,
                y: a,
                startAngle: l,
                endAngle: c,
                innerRadius: h,
                outerRadius: u
            } = this.getProps(["x", "y", "startAngle", "endAngle", "innerRadius", "outerRadius", "circumference"], e), {
                offset: b,
                spacing: S
            } = this.options, D = (l + c) / 2, U = (h + u + S + b) / 2;
            return {
                x: r + Math.cos(D) * U,
                y: a + Math.sin(D) * U
            }
        }
        tooltipPosition(e) {
            return this.getCenterPoint(e)
        }
        draw(e) {
            const {
                options: r,
                circumference: a
            } = this, l = (r.offset || 0) / 2, c = (r.spacing || 0) / 2, h = r.circular;
            if (this.pixelMargin = "inner" === r.borderAlign ? .33 : 0, this.fullCircles = a > Yt ? Math.floor(a / Yt) : 0, 0 === a || this.innerRadius < 0 || this.outerRadius < 0) return;
            e.save();
            let u = 0;
            if (l) {
                u = l / 2;
                const S = (this.startAngle + this.endAngle) / 2;
                e.translate(Math.cos(S) * u, Math.sin(S) * u), this.circumference >= Ft && (u = l)
            }
            e.fillStyle = r.backgroundColor, e.strokeStyle = r.borderColor;
            const b = function Il(o, e, r, a, l) {
                const {
                    fullCircles: c,
                    startAngle: h,
                    circumference: u
                } = e;
                let b = e.endAngle;
                if (c) {
                    $a(o, e, r, a, h + Yt, l);
                    for (let S = 0; S < c; ++S) o.fill();
                    isNaN(u) || (b = h + u % Yt, u % Yt == 0 && (b += Yt))
                }
                return $a(o, e, r, a, b, l), o.fill(), b
            }(e, this, u, c, h);
            (function $l(o, e, r, a, l, c) {
                const {
                    options: h
                } = e, {
                    borderWidth: u,
                    borderJoinStyle: b
                } = h, S = "inner" === h.borderAlign;
                u && (S ? (o.lineWidth = 2 * u, o.lineJoin = b || "round") : (o.lineWidth = u, o.lineJoin = b || "bevel"), e.fullCircles && function Ll(o, e, r) {
                    const {
                        x: a,
                        y: l,
                        startAngle: c,
                        pixelMargin: h,
                        fullCircles: u
                    } = e, b = Math.max(e.outerRadius - h, 0), S = e.innerRadius + h;
                    let D;
                    for (r && tl(o, e, c + Yt), o.beginPath(), o.arc(a, l, S, c + Yt, c, !0), D = 0; D < u; ++D) o.stroke();
                    for (o.beginPath(), o.arc(a, l, b, c, c + Yt), D = 0; D < u; ++D) o.stroke()
                }(o, e, S), S && tl(o, e, l), $a(o, e, r, a, l, c), o.stroke())
            })(e, this, u, c, b, h), e.restore()
        }
    }

    function nl(o, e, r = e) {
        o.lineCap = O(r.borderCapStyle, e.borderCapStyle), o.setLineDash(O(r.borderDash, e.borderDash)), o.lineDashOffset = O(r.borderDashOffset, e.borderDashOffset), o.lineJoin = O(r.borderJoinStyle, e.borderJoinStyle), o.lineWidth = O(r.borderWidth, e.borderWidth), o.strokeStyle = O(r.borderColor, e.borderColor)
    }

    function Fl(o, e, r) {
        o.lineTo(r.x, r.y)
    }

    function il(o, e, r = {}) {
        const a = o.length,
            {
                start: l = 0,
                end: c = a - 1
            } = r,
            {
                start: h,
                end: u
            } = e,
            b = Math.max(l, h),
            S = Math.min(c, u);
        return {
            count: a,
            start: b,
            loop: e.loop,
            ilen: S < b && !(l < h && c < h || l > u && c > u) ? a + S - b : S - b
        }
    }

    function Nl(o, e, r, a) {
        const {
            points: l,
            options: c
        } = e, {
            count: h,
            start: u,
            loop: b,
            ilen: S
        } = il(l, r, a), D = function Rl(o) {
            return o.stepped ? Xs : o.tension || "monotone" === o.cubicInterpolationMode ? qs : Fl
        }(c);
        let ft, gt, $t, {
            move: U = !0,
            reverse: st
        } = a || {};
        for (ft = 0; ft <= S; ++ft) gt = l[(u + (st ? S - ft : ft)) % h], !gt.skip && (U ? (o.moveTo(gt.x, gt.y), U = !1) : D(o, $t, gt, st, c.stepped), $t = gt);
        return b && (gt = l[(u + (st ? S : 0)) % h], D(o, $t, gt, st, c.stepped)), !!b
    }

    function Hl(o, e, r, a) {
        const l = e.points,
            {
                count: c,
                start: h,
                ilen: u
            } = il(l, r, a),
            {
                move: b = !0,
                reverse: S
            } = a || {};
        let st, ft, gt, $t, qt, re, D = 0,
            U = 0;
        const _e = Te => (h + (S ? u - Te : Te)) % c,
            Ae = () => {
                $t !== qt && (o.lineTo(D, qt), o.lineTo(D, $t), o.lineTo(D, re))
            };
        for (b && (ft = l[_e(0)], o.moveTo(ft.x, ft.y)), st = 0; st <= u; ++st) {
            if (ft = l[_e(st)], ft.skip) continue;
            const Te = ft.x,
                Se = ft.y,
                Ue = 0 | Te;
            Ue === gt ? (Se < $t ? $t = Se : Se > qt && (qt = Se), D = (U * D + Te) / ++U) : (Ae(), o.lineTo(Te, Se), gt = Ue, U = 0, $t = qt = Se), re = Se
        }
        Ae()
    }

    function Fa(o) {
        const e = o.options;
        return o._decimated || o._loop || e.tension || "monotone" === e.cubicInterpolationMode || e.stepped || e.borderDash && e.borderDash.length ? Nl : Hl
    }
    Ca.id = "arc", Ca.defaults = {
        borderAlign: "center",
        borderColor: "#fff",
        borderJoinStyle: void 0,
        borderRadius: 0,
        borderWidth: 2,
        offset: 0,
        spacing: 0,
        angle: void 0,
        circular: !0
    }, Ca.defaultRoutes = {
        backgroundColor: "backgroundColor"
    };
    const Vl = "function" == typeof Path2D;
    class Lo extends Yn {
        constructor(e) {
            super(), this.animated = !0, this.options = void 0, this._chart = void 0, this._loop = void 0, this._fullLoop = void 0, this._path = void 0, this._points = void 0, this._segments = void 0, this._decimated = !1, this._pointsUpdated = !1, this._datasetIndex = void 0, e && Object.assign(this, e)
        }
        updateControlPoints(e, r) {
            const a = this.options;
            !a.tension && "monotone" !== a.cubicInterpolationMode || a.stepped || this._pointsUpdated || (Zs(this._points, a, e, a.spanGaps ? this._loop : this._fullLoop, r), this._pointsUpdated = !0)
        }
        set points(e) {
            this._points = e, delete this._segments, delete this._path, this._pointsUpdated = !1
        }
        get points() {
            return this._points
        }
        get segments() {
            return this._segments || (this._segments = se(this, this.options.segment))
        }
        first() {
            const e = this.segments;
            return e.length && this.points[e[0].start]
        }
        last() {
            const e = this.segments,
                a = e.length;
            return a && this.points[e[a - 1].end]
        }
        interpolate(e, r) {
            const a = this.options,
                l = e[r],
                c = this.points,
                h = ct(this, {
                    property: r,
                    start: l,
                    end: l
                });
            if (!h.length) return;
            const u = [],
                b = function zl(o) {
                    return o.stepped ? Fi : o.tension || "monotone" === o.cubicInterpolationMode ? ui : qi
                }(a);
            let S, D;
            for (S = 0, D = h.length; S < D; ++S) {
                const {
                    start: U,
                    end: st
                } = h[S], ft = c[U], gt = c[st];
                if (ft === gt) {
                    u.push(ft);
                    continue
                }
                const qt = b(ft, gt, Math.abs((l - ft[r]) / (gt[r] - ft[r])), a.stepped);
                qt[r] = e[r], u.push(qt)
            }
            return 1 === u.length ? u[0] : u
        }
        pathSegment(e, r, a) {
            return Fa(this)(e, this, r, a)
        }
        path(e, r, a) {
            const l = this.segments,
                c = Fa(this);
            let h = this._loop;
            r = r || 0, a = a || this.points.length - r;
            for (const u of l) h &= c(e, this, u, {
                start: r,
                end: r + a - 1
            });
            return !!h
        }
        draw(e, r, a, l) {
            (this.points || []).length && (this.options || {}).borderWidth && (e.save(), function Ul(o, e, r, a) {
                Vl && !e.options.segment ? function jl(o, e, r, a) {
                    let l = e._path;
                    l || (l = e._path = new Path2D, e.path(l, r, a) && l.closePath()), nl(o, e.options), o.stroke(l)
                }(o, e, r, a) : function Wl(o, e, r, a) {
                    const {
                        segments: l,
                        options: c
                    } = e, h = Fa(e);
                    for (const u of l) nl(o, c, u.style), o.beginPath(), h(o, e, u, {
                        start: r,
                        end: r + a - 1
                    }) && o.closePath(), o.stroke()
                }(o, e, r, a)
            }(e, this, a, l), e.restore()), this.animated && (this._pointsUpdated = !1, this._path = void 0)
        }
    }

    function rl(o, e, r, a) {
        const l = o.options,
            {
                [r]: c
            } = o.getProps([r], a);
        return Math.abs(e - c) < l.radius + l.hitRadius
    }
    Lo.id = "line", Lo.defaults = {
        borderCapStyle: "butt",
        borderDash: [],
        borderDashOffset: 0,
        borderJoinStyle: "miter",
        borderWidth: 3,
        capBezierPoints: !0,
        cubicInterpolationMode: "default",
        fill: !1,
        spanGaps: !1,
        stepped: !1,
        tension: 0
    }, Lo.defaultRoutes = {
        backgroundColor: "backgroundColor",
        borderColor: "borderColor"
    }, Lo.descriptors = {
        _scriptable: !0,
        _indexable: o => "borderDash" !== o && "fill" !== o
    };
    class Sa extends Yn {
        constructor(e) {
            super(), this.options = void 0, this.parsed = void 0, this.skip = void 0, this.stop = void 0, e && Object.assign(this, e)
        }
        inRange(e, r, a) {
            const l = this.options,
                {
                    x: c,
                    y: h
                } = this.getProps(["x", "y"], a);
            return Math.pow(e - c, 2) + Math.pow(r - h, 2) < Math.pow(l.hitRadius + l.radius, 2)
        }
        inXRange(e, r) {
            return rl(this, e, "x", r)
        }
        inYRange(e, r) {
            return rl(this, e, "y", r)
        }
        getCenterPoint(e) {
            const {
                x: r,
                y: a
            } = this.getProps(["x", "y"], e);
            return {
                x: r,
                y: a
            }
        }
        size(e) {
            let r = (e = e || this.options || {}).radius || 0;
            return r = Math.max(r, r && e.hoverRadius || 0), 2 * (r + (r && e.borderWidth || 0))
        }
        draw(e, r) {
            const a = this.options;
            this.skip || a.radius < .1 || !Wr(this, r, this.size(a) / 2) || (e.strokeStyle = a.borderColor, e.lineWidth = a.borderWidth, e.fillStyle = a.backgroundColor, vs(e, a, this.x, this.y))
        }
        getRange() {
            const e = this.options || {};
            return e.radius + e.hitRadius
        }
    }

    function sl(o, e) {
        const {
            x: r,
            y: a,
            base: l,
            width: c,
            height: h
        } = o.getProps(["x", "y", "base", "width", "height"], e);
        let u, b, S, D, U;
        return o.horizontal ? (U = h / 2, u = Math.min(r, l), b = Math.max(r, l), S = a - U, D = a + U) : (U = c / 2, u = r - U, b = r + U, S = Math.min(a, l), D = Math.max(a, l)), {
            left: u,
            top: S,
            right: b,
            bottom: D
        }
    }

    function $o(o, e, r, a) {
        return o ? 0 : sn(e, r, a)
    }

    function Ra(o, e, r, a) {
        const l = null === e,
            c = null === r,
            u = o && !(l && c) && sl(o, a);
        return u && (l || te(e, u.left, u.right)) && (c || te(r, u.top, u.bottom))
    }

    function Zl(o, e) {
        o.rect(e.x, e.y, e.w, e.h)
    }

    function Na(o, e, r = {}) {
        const a = o.x !== r.x ? -e : 0,
            l = o.y !== r.y ? -e : 0;
        return {
            x: o.x + a,
            y: o.y + l,
            w: o.w + ((o.x + o.w !== r.x + r.w ? e : 0) - a),
            h: o.h + ((o.y + o.h !== r.y + r.h ? e : 0) - l),
            radius: o.radius
        }
    }
    Sa.id = "point", Sa.defaults = {
        borderWidth: 1,
        hitRadius: 1,
        hoverBorderWidth: 1,
        hoverRadius: 4,
        pointStyle: "circle",
        radius: 3,
        rotation: 0
    }, Sa.defaultRoutes = {
        backgroundColor: "backgroundColor",
        borderColor: "borderColor"
    };
    class ka extends Yn {
        constructor(e) {
            super(), this.options = void 0, this.horizontal = void 0, this.base = void 0, this.width = void 0, this.height = void 0, this.inflateAmount = void 0, e && Object.assign(this, e)
        }
        draw(e) {
            const {
                inflateAmount: r,
                options: {
                    borderColor: a,
                    backgroundColor: l
                }
            } = this, {
                inner: c,
                outer: h
            } = function Gl(o) {
                const e = sl(o),
                    r = e.right - e.left,
                    a = e.bottom - e.top,
                    l = function Xl(o, e, r) {
                        const l = o.borderSkipped,
                            c = Br(o.options.borderWidth);
                        return {
                            t: $o(l.top, c.top, 0, r),
                            r: $o(l.right, c.right, 0, e),
                            b: $o(l.bottom, c.bottom, 0, r),
                            l: $o(l.left, c.left, 0, e)
                        }
                    }(o, r / 2, a / 2),
                    c = function ql(o, e, r) {
                        const {
                            enableBorderRadius: a
                        } = o.getProps(["enableBorderRadius"]), l = o.options.borderRadius, c = Qn(l), h = Math.min(e, r), u = o.borderSkipped, b = a || H(l);
                        return {
                            topLeft: $o(!b || u.top || u.left, c.topLeft, 0, h),
                            topRight: $o(!b || u.top || u.right, c.topRight, 0, h),
                            bottomLeft: $o(!b || u.bottom || u.left, c.bottomLeft, 0, h),
                            bottomRight: $o(!b || u.bottom || u.right, c.bottomRight, 0, h)
                        }
                    }(o, r / 2, a / 2);
                return {
                    outer: {
                        x: e.left,
                        y: e.top,
                        w: r,
                        h: a,
                        radius: c
                    },
                    inner: {
                        x: e.left + l.l,
                        y: e.top + l.t,
                        w: r - l.l - l.r,
                        h: a - l.t - l.b,
                        radius: {
                            topLeft: Math.max(0, c.topLeft - Math.max(l.t, l.l)),
                            topRight: Math.max(0, c.topRight - Math.max(l.t, l.r)),
                            bottomLeft: Math.max(0, c.bottomLeft - Math.max(l.b, l.l)),
                            bottomRight: Math.max(0, c.bottomRight - Math.max(l.b, l.r))
                        }
                    }
                }
            }(this), u = function Yl(o) {
                return o.topLeft || o.topRight || o.bottomLeft || o.bottomRight
            }(h.radius) ? Ji : Zl;
            e.save(), (h.w !== c.w || h.h !== c.h) && (e.beginPath(), u(e, Na(h, r, c)), e.clip(), u(e, Na(c, -r, h)), e.fillStyle = a, e.fill("evenodd")), e.beginPath(), u(e, Na(c, r)), e.fillStyle = l, e.fill(), e.restore()
        }
        inRange(e, r, a) {
            return Ra(this, e, r, a)
        }
        inXRange(e, r) {
            return Ra(this, e, null, r)
        }
        inYRange(e, r) {
            return Ra(this, null, e, r)
        }
        getCenterPoint(e) {
            const {
                x: r,
                y: a,
                base: l,
                horizontal: c
            } = this.getProps(["x", "y", "base", "horizontal"], e);
            return {
                x: c ? (r + l) / 2 : r,
                y: c ? a : (a + l) / 2
            }
        }
        getRange(e) {
            return "x" === e ? this.width / 2 : this.height / 2
        }
    }
    ka.id = "bar", ka.defaults = {
        borderSkipped: "start",
        borderWidth: 0,
        borderRadius: 0,
        inflateAmount: "auto",
        pointStyle: void 0
    }, ka.defaultRoutes = {
        backgroundColor: "backgroundColor",
        borderColor: "borderColor"
    };
    var Ha = Object.freeze({
        __proto__: null,
        ArcElement: Ca,
        LineElement: Lo,
        PointElement: Sa,
        BarElement: ka
    });

    function ol(o) {
        if (o._decimated) {
            const e = o._data;
            delete o._decimated, delete o._data, Object.defineProperty(o, "data", {
                value: e
            })
        }
    }

    function al(o) {
        o.data.datasets.forEach(e => {
            ol(e)
        })
    }
    var tc = {
        id: "decimation",
        defaults: {
            algorithm: "min-max",
            enabled: !1
        },
        beforeElementsUpdate: (o, e, r) => {
            if (!r.enabled) return void al(o);
            const a = o.width;
            o.data.datasets.forEach((l, c) => {
                const {
                    _data: h,
                    indexAxis: u
                } = l, b = o.getDatasetMeta(c), S = h || l.data;
                if ("y" === as([u, o.options.indexAxis]) || !b.controller.supportsDecimation) return;
                const D = o.scales[b.xAxisID];
                if ("linear" !== D.type && "time" !== D.type || o.options.parsing) return;
                let gt, {
                    start: U,
                    count: st
                } = function Ql(o, e) {
                    const r = e.length;
                    let l, a = 0;
                    const {
                        iScale: c
                    } = o, {
                        min: h,
                        max: u,
                        minDefined: b,
                        maxDefined: S
                    } = c.getUserBounds();
                    return b && (a = sn(En(e, c.axis, h).lo, 0, r - 1)), l = S ? sn(En(e, c.axis, u).hi + 1, a, r) - a : r - a, {
                        start: a,
                        count: l
                    }
                }(b, S);
                if (st <= (r.threshold || 4 * a)) ol(l);
                else {
                    switch (y(h) && (l._data = S, delete l.data, Object.defineProperty(l, "data", {
                        configurable: !0,
                        enumerable: !0,
                        get: function() {
                            return this._decimated
                        },
                        set: function($t) {
                            this._data = $t
                        }
                    })), r.algorithm) {
                        case "lttb":
                            gt = function Jl(o, e, r, a, l) {
                                const c = l.samples || a;
                                if (c >= r) return o.slice(e, e + r);
                                const h = [],
                                    u = (r - 2) / (c - 2);
                                let b = 0;
                                const S = e + r - 1;
                                let U, st, ft, gt, $t, D = e;
                                for (h[b++] = o[D], U = 0; U < c - 2; U++) {
                                    let _e, qt = 0,
                                        re = 0;
                                    const Ae = Math.floor((U + 1) * u) + 1 + e,
                                        Te = Math.min(Math.floor((U + 2) * u) + 1, r) + e,
                                        Se = Te - Ae;
                                    for (_e = Ae; _e < Te; _e++) qt += o[_e].x, re += o[_e].y;
                                    qt /= Se, re /= Se;
                                    const Ue = Math.floor(U * u) + 1 + e,
                                        Xe = Math.min(Math.floor((U + 1) * u) + 1, r) + e,
                                        {
                                            x: vn,
                                            y: un
                                        } = o[D];
                                    for (ft = gt = -1, _e = Ue; _e < Xe; _e++) gt = .5 * Math.abs((vn - qt) * (o[_e].y - un) - (vn - o[_e].x) * (re - un)), gt > ft && (ft = gt, st = o[_e], $t = _e);
                                    h[b++] = st, D = $t
                                }
                                return h[b++] = o[S], h
                            }(S, U, st, a, r);
                            break;
                        case "min-max":
                            gt = function Kl(o, e, r, a) {
                                let h, u, b, S, D, U, st, ft, gt, $t, l = 0,
                                    c = 0;
                                const qt = [],
                                    _e = o[e].x,
                                    Te = o[e + r - 1].x - _e;
                                for (h = e; h < e + r; ++h) {
                                    u = o[h], b = (u.x - _e) / Te * a, S = u.y;
                                    const Se = 0 | b;
                                    if (Se === D) S < gt ? (gt = S, U = h) : S > $t && ($t = S, st = h), l = (c * l + u.x) / ++c;
                                    else {
                                        const Ue = h - 1;
                                        if (!y(U) && !y(st)) {
                                            const Xe = Math.min(U, st),
                                                vn = Math.max(U, st);
                                            Xe !== ft && Xe !== Ue && qt.push({ ...o[Xe],
                                                x: l
                                            }), vn !== ft && vn !== Ue && qt.push({ ...o[vn],
                                                x: l
                                            })
                                        }
                                        h > 0 && Ue !== ft && qt.push(o[Ue]), qt.push(u), D = Se, c = 0, gt = $t = S, U = st = ft = h
                                    }
                                }
                                return qt
                            }(S, U, st, a);
                            break;
                        default:
                            throw new Error(`Unsupported decimation algorithm '${r.algorithm}'`)
                    }
                    l._decimated = gt
                }
            })
        },
        destroy(o) {
            al(o)
        }
    };

    function za(o, e, r, a) {
        if (a) return;
        let l = e[o],
            c = r[o];
        return "angle" === o && (l = Me(l), c = Me(c)), {
            property: o,
            start: l,
            end: c
        }
    }

    function ja(o, e, r) {
        for (; e > o; e--) {
            const a = r[e];
            if (!isNaN(a.x) && !isNaN(a.y)) break
        }
        return e
    }

    function ll(o, e, r, a) {
        return o && e ? a(o[r], e[r]) : o ? o[r] : e ? e[r] : 0
    }

    function cl(o, e) {
        let r = [],
            a = !1;
        return I(o) ? (a = !0, r = o) : r = function nc(o, e) {
            const {
                x: r = null,
                y: a = null
            } = o || {}, l = e.points, c = [];
            return e.segments.forEach(({
                start: h,
                end: u
            }) => {
                u = ja(h, u, l);
                const b = l[h],
                    S = l[u];
                null !== a ? (c.push({
                    x: b.x,
                    y: a
                }), c.push({
                    x: S.x,
                    y: a
                })) : null !== r && (c.push({
                    x: r,
                    y: b.y
                }), c.push({
                    x: r,
                    y: S.y
                }))
            }), c
        }(o, e), r.length ? new Lo({
            points: r,
            options: {
                tension: 0
            },
            _loop: a,
            _fullLoop: a
        }) : null
    }

    function hl(o) {
        return o && !1 !== o.fill
    }

    function ic(o, e, r) {
        let l = o[e].fill;
        const c = [e];
        let h;
        if (!r) return l;
        for (; !1 !== l && -1 === c.indexOf(l);) {
            if (!P(l)) return l;
            if (h = o[l], !h) return !1;
            if (h.visible) return l;
            c.push(l), l = h.fill
        }
        return !1
    }

    function rc(o, e, r) {
        const a = function lc(o) {
            const e = o.options,
                r = e.fill;
            let a = O(r && r.target, r);
            return void 0 === a && (a = !!e.backgroundColor), !1 !== a && null !== a && (!0 === a ? "origin" : a)
        }(o);
        if (H(a)) return !isNaN(a.value) && a;
        let l = parseFloat(a);
        return P(l) && Math.floor(l) === l ? function sc(o, e, r, a) {
            return ("-" === o || "+" === o) && (r = e + r), !(r === e || r < 0 || r >= a) && r
        }(a[0], e, l, r) : ["origin", "start", "end", "stack", "shape"].indexOf(a) >= 0 && a
    }

    function fc(o, e, r) {
        const a = [];
        for (let l = 0; l < r.length; l++) {
            const c = r[l],
                {
                    first: h,
                    last: u,
                    point: b
                } = uc(c, e, "x");
            if (!(!b || h && u))
                if (h) a.unshift(b);
                else if (o.push(b), !u) break
        }
        o.push(...a)
    }

    function uc(o, e, r) {
        const a = o.interpolate(e, r);
        if (!a) return {};
        const l = a[r],
            c = o.segments,
            h = o.points;
        let u = !1,
            b = !1;
        for (let S = 0; S < c.length; S++) {
            const D = c[S],
                U = h[D.start][r],
                st = h[D.end][r];
            if (te(l, U, st)) {
                u = l === U, b = l === st;
                break
            }
        }
        return {
            first: u,
            last: b,
            point: a
        }
    }
    class fl {
        constructor(e) {
            this.x = e.x, this.y = e.y, this.radius = e.radius
        }
        pathSegment(e, r, a) {
            const {
                x: l,
                y: c,
                radius: h
            } = this;
            return e.arc(l, c, h, (r = r || {
                start: 0,
                end: Yt
            }).end, r.start, !0), !a.bounds
        }
        interpolate(e) {
            const {
                x: r,
                y: a,
                radius: l
            } = this, c = e.angle;
            return {
                x: r + Math.cos(c) * l,
                y: a + Math.sin(c) * l,
                angle: c
            }
        }
    }

    function Wa(o, e, r) {
        const a = function dc(o) {
                const {
                    chart: e,
                    fill: r,
                    line: a
                } = o;
                if (P(r)) return function pc(o, e) {
                    const r = o.getDatasetMeta(e);
                    return r && o.isDatasetVisible(e) ? r.dataset : null
                }(e, r);
                if ("stack" === r) return function cc(o) {
                    const {
                        scale: e,
                        index: r,
                        line: a
                    } = o, l = [], c = a.segments, h = a.points, u = function hc(o, e) {
                        const r = [],
                            a = o.getMatchingVisibleMetas("line");
                        for (let l = 0; l < a.length; l++) {
                            const c = a[l];
                            if (c.index === e) break;
                            c.hidden || r.unshift(c.dataset)
                        }
                        return r
                    }(e, r);
                    u.push(cl({
                        x: null,
                        y: e.bottom
                    }, a));
                    for (let b = 0; b < c.length; b++) {
                        const S = c[b];
                        for (let D = S.start; D <= S.end; D++) fc(l, h[D], u)
                    }
                    return new Lo({
                        points: l,
                        options: {}
                    })
                }(o);
                if ("shape" === r) return !0;
                const l = function gc(o) {
                    return (o.scale || {}).getPointPositionForValue ? function bc(o) {
                        const {
                            scale: e,
                            fill: r
                        } = o, a = e.options, l = e.getLabels().length, c = a.reverse ? e.max : e.min, h = function ac(o, e, r) {
                            let a;
                            return a = "start" === o ? r : "end" === o ? e.options.reverse ? e.min : e.max : H(o) ? o.value : e.getBaseValue(), a
                        }(r, e, c), u = [];
                        if (a.grid.circular) {
                            const b = e.getPointPositionForValue(0, c);
                            return new fl({
                                x: b.x,
                                y: b.y,
                                radius: e.getDistanceFromCenterForValue(h)
                            })
                        }
                        for (let b = 0; b < l; ++b) u.push(e.getPointPositionForValue(b, h));
                        return u
                    }(o) : function mc(o) {
                        const {
                            scale: e = {},
                            fill: r
                        } = o, a = function oc(o, e) {
                            let r = null;
                            return "start" === o ? r = e.bottom : "end" === o ? r = e.top : H(o) ? r = e.getPixelForValue(o.value) : e.getBasePixel && (r = e.getBasePixel()), r
                        }(r, e);
                        if (P(a)) {
                            const l = e.isHorizontal();
                            return {
                                x: l ? a : null,
                                y: l ? null : a
                            }
                        }
                        return null
                    }(o)
                }(o);
                return l instanceof fl ? l : cl(l, a)
            }(e),
            {
                line: l,
                scale: c,
                axis: h
            } = e,
            u = l.options,
            b = u.fill,
            S = u.backgroundColor,
            {
                above: D = S,
                below: U = S
            } = b || {};
        a && l.points.length && (Rs(o, r), function vc(o, e) {
            const {
                line: r,
                target: a,
                above: l,
                below: c,
                area: h,
                scale: u
            } = e, b = r._loop ? "angle" : e.axis;
            o.save(), "x" === b && c !== l && (ul(o, a, h.top), dl(o, {
                line: r,
                target: a,
                color: l,
                scale: u,
                property: b
            }), o.restore(), o.save(), ul(o, a, h.bottom)), dl(o, {
                line: r,
                target: a,
                color: c,
                scale: u,
                property: b
            }), o.restore()
        }(o, {
            line: l,
            target: a,
            above: D,
            below: U,
            area: r,
            scale: c,
            axis: h
        }), Vr(o))
    }

    function ul(o, e, r) {
        const {
            segments: a,
            points: l
        } = e;
        let c = !0,
            h = !1;
        o.beginPath();
        for (const u of a) {
            const {
                start: b,
                end: S
            } = u, D = l[b], U = l[ja(b, S, l)];
            c ? (o.moveTo(D.x, D.y), c = !1) : (o.lineTo(D.x, r), o.lineTo(D.x, D.y)), h = !!e.pathSegment(o, u, {
                move: h
            }), h ? o.closePath() : o.lineTo(U.x, r)
        }
        o.lineTo(e.first().x, r), o.closePath(), o.clip()
    }

    function dl(o, e) {
        const {
            line: r,
            target: a,
            property: l,
            color: c,
            scale: h
        } = e, u = function ec(o, e, r) {
            const a = o.segments,
                l = o.points,
                c = e.points,
                h = [];
            for (const u of a) {
                let {
                    start: b,
                    end: S
                } = u;
                S = ja(b, S, l);
                const D = za(r, l[b], l[S], u.loop);
                if (!e.segments) {
                    h.push({
                        source: u,
                        target: D,
                        start: l[b],
                        end: l[S]
                    });
                    continue
                }
                const U = ct(e, D);
                for (const st of U) {
                    const ft = za(r, c[st.start], c[st.end], st.loop),
                        gt = Ks(u, l, ft);
                    for (const $t of gt) h.push({
                        source: $t,
                        target: st,
                        start: {
                            [r]: ll(D, ft, "start", Math.max)
                        },
                        end: {
                            [r]: ll(D, ft, "end", Math.min)
                        }
                    })
                }
            }
            return h
        }(r, a, l);
        for (const {
                source: b,
                target: S,
                start: D,
                end: U
            } of u) {
            const {
                style: {
                    backgroundColor: st = c
                } = {}
            } = b, ft = !0 !== a;
            o.save(), o.fillStyle = st, _c(o, h, ft && za(l, D, U)), o.beginPath();
            const gt = !!r.pathSegment(o, b);
            let $t;
            if (ft) {
                gt ? o.closePath() : pl(o, a, U, l);
                const qt = !!a.pathSegment(o, S, {
                    move: gt,
                    reverse: !0
                });
                $t = gt && qt, $t || pl(o, a, D, l)
            }
            o.closePath(), o.fill($t ? "evenodd" : "nonzero"), o.restore()
        }
    }

    function _c(o, e, r) {
        const {
            top: a,
            bottom: l
        } = e.chart.chartArea, {
            property: c,
            start: h,
            end: u
        } = r || {};
        "x" === c && (o.beginPath(), o.rect(h, a, u - h, l - a), o.clip())
    }

    function pl(o, e, r, a) {
        const l = e.interpolate(r, a);
        l && o.lineTo(l.x, l.y)
    }
    var xc = {
        id: "filler",
        afterDatasetsUpdate(o, e, r) {
            const a = (o.data.datasets || []).length,
                l = [];
            let c, h, u, b;
            for (h = 0; h < a; ++h) c = o.getDatasetMeta(h), u = c.dataset, b = null, u && u.options && u instanceof Lo && (b = {
                visible: o.isDatasetVisible(h),
                index: h,
                fill: rc(u, h, a),
                chart: o,
                axis: c.controller.options.indexAxis,
                scale: c.vScale,
                line: u
            }), c.$filler = b, l.push(b);
            for (h = 0; h < a; ++h) b = l[h], b && !1 !== b.fill && (b.fill = ic(l, h, r.propagate))
        },
        beforeDraw(o, e, r) {
            const a = "beforeDraw" === r.drawTime,
                l = o.getSortedVisibleDatasetMetas(),
                c = o.chartArea;
            for (let h = l.length - 1; h >= 0; --h) {
                const u = l[h].$filler;
                u && (u.line.updateControlPoints(c, u.axis), a && u.fill && Wa(o.ctx, u, c))
            }
        },
        beforeDatasetsDraw(o, e, r) {
            if ("beforeDatasetsDraw" !== r.drawTime) return;
            const a = o.getSortedVisibleDatasetMetas();
            for (let l = a.length - 1; l >= 0; --l) {
                const c = a[l].$filler;
                hl(c) && Wa(o.ctx, c, o.chartArea)
            }
        },
        beforeDatasetDraw(o, e, r) {
            const a = e.meta.$filler;
            !hl(a) || "beforeDatasetDraw" !== r.drawTime || Wa(o.ctx, a, o.chartArea)
        },
        defaults: {
            propagate: !0,
            drawTime: "beforeDatasetDraw"
        }
    };
    const gl = (o, e) => {
        let {
            boxHeight: r = e,
            boxWidth: a = e
        } = o;
        return o.usePointStyle && (r = Math.min(r, e), a = o.pointStyleWidth || Math.min(a, e)), {
            boxWidth: a,
            boxHeight: r,
            itemHeight: Math.max(e, r)
        }
    };
    class ml extends Yn {
        constructor(e) {
            super(), this._added = !1, this.legendHitBoxes = [], this._hoveredItem = null, this.doughnutMode = !1, this.chart = e.chart, this.options = e.options, this.ctx = e.ctx, this.legendItems = void 0, this.columnSizes = void 0, this.lineWidths = void 0, this.maxHeight = void 0, this.maxWidth = void 0, this.top = void 0, this.bottom = void 0, this.left = void 0, this.right = void 0, this.height = void 0, this.width = void 0, this._margins = void 0, this.position = void 0, this.weight = void 0, this.fullSize = void 0
        }
        update(e, r, a) {
            this.maxWidth = e, this.maxHeight = r, this._margins = a, this.setDimensions(), this.buildLabels(), this.fit()
        }
        setDimensions() {
            this.isHorizontal() ? (this.width = this.maxWidth, this.left = this._margins.left, this.right = this.width) : (this.height = this.maxHeight, this.top = this._margins.top, this.bottom = this.height)
        }
        buildLabels() {
            const e = this.options.labels || {};
            let r = Z(e.generateLabels, [this.chart], this) || [];
            e.filter && (r = r.filter(a => e.filter(a, this.chart.data))), e.sort && (r = r.sort((a, l) => e.sort(a, l, this.chart.data))), this.options.reverse && r.reverse(), this.legendItems = r
        }
        fit() {
            const {
                options: e,
                ctx: r
            } = this;
            if (!e.display) return void(this.width = this.height = 0);
            const a = e.labels,
                l = ti(a.font),
                c = l.size,
                h = this._computeTitleHeight(),
                {
                    boxWidth: u,
                    itemHeight: b
                } = gl(a, c);
            let S, D;
            r.font = l.string, this.isHorizontal() ? (S = this.maxWidth, D = this._fitRows(h, c, u, b) + 10) : (D = this.maxHeight, S = this._fitCols(h, c, u, b) + 10), this.width = Math.min(S, e.maxWidth || this.maxWidth), this.height = Math.min(D, e.maxHeight || this.maxHeight)
        }
        _fitRows(e, r, a, l) {
            const {
                ctx: c,
                maxWidth: h,
                options: {
                    labels: {
                        padding: u
                    }
                }
            } = this, b = this.legendHitBoxes = [], S = this.lineWidths = [0], D = l + u;
            let U = e;
            c.textAlign = "left", c.textBaseline = "middle";
            let st = -1,
                ft = -D;
            return this.legendItems.forEach((gt, $t) => {
                const qt = a + r / 2 + c.measureText(gt.text).width;
                (0 === $t || S[S.length - 1] + qt + 2 * u > h) && (U += D, S[S.length - ($t > 0 ? 0 : 1)] = 0, ft += D, st++), b[$t] = {
                    left: 0,
                    top: ft,
                    row: st,
                    width: qt,
                    height: l
                }, S[S.length - 1] += qt + u
            }), U
        }
        _fitCols(e, r, a, l) {
            const {
                ctx: c,
                maxHeight: h,
                options: {
                    labels: {
                        padding: u
                    }
                }
            } = this, b = this.legendHitBoxes = [], S = this.columnSizes = [], D = h - e;
            let U = u,
                st = 0,
                ft = 0,
                gt = 0,
                $t = 0;
            return this.legendItems.forEach((qt, re) => {
                const _e = a + r / 2 + c.measureText(qt.text).width;
                re > 0 && ft + l + 2 * u > D && (U += st + u, S.push({
                    width: st,
                    height: ft
                }), gt += st + u, $t++, st = ft = 0), b[re] = {
                    left: gt,
                    top: ft,
                    col: $t,
                    width: _e,
                    height: l
                }, st = Math.max(st, _e), ft += l + u
            }), U += st, S.push({
                width: st,
                height: ft
            }), U
        }
        adjustHitBoxes() {
            if (!this.options.display) return;
            const e = this._computeTitleHeight(),
                {
                    legendHitBoxes: r,
                    options: {
                        align: a,
                        labels: {
                            padding: l
                        },
                        rtl: c
                    }
                } = this,
                h = Gr(c, this.left, this.width);
            if (this.isHorizontal()) {
                let u = 0,
                    b = mn(a, this.left + l, this.right - this.lineWidths[u]);
                for (const S of r) u !== S.row && (u = S.row, b = mn(a, this.left + l, this.right - this.lineWidths[u])), S.top += this.top + e + l, S.left = h.leftForLtr(h.x(b), S.width), b += S.width + l
            } else {
                let u = 0,
                    b = mn(a, this.top + e + l, this.bottom - this.columnSizes[u].height);
                for (const S of r) S.col !== u && (u = S.col, b = mn(a, this.top + e + l, this.bottom - this.columnSizes[u].height)), S.top = b, S.left += this.left + l, S.left = h.leftForLtr(h.x(S.left), S.width), b += S.height + l
            }
        }
        isHorizontal() {
            return "top" === this.options.position || "bottom" === this.options.position
        }
        draw() {
            if (this.options.display) {
                const e = this.ctx;
                Rs(e, this), this._draw(), Vr(e)
            }
        }
        _draw() {
            const {
                options: e,
                columnSizes: r,
                lineWidths: a,
                ctx: l
            } = this, {
                align: c,
                labels: h
            } = e, u = De.color, b = Gr(e.rtl, this.left, this.width), S = ti(h.font), {
                color: D,
                padding: U
            } = h, st = S.size, ft = st / 2;
            let gt;
            this.drawTitle(), l.textAlign = b.textAlign("left"), l.textBaseline = "middle", l.lineWidth = .5, l.font = S.string;
            const {
                boxWidth: $t,
                boxHeight: qt,
                itemHeight: re
            } = gl(h, st), Te = this.isHorizontal(), Se = this._computeTitleHeight();
            gt = Te ? {
                x: mn(c, this.left + U, this.right - a[0]),
                y: this.top + U + Se,
                line: 0
            } : {
                x: this.left + U,
                y: mn(c, this.top + Se + U, this.bottom - r[0].height),
                line: 0
            }, Js(this.ctx, e.textDirection);
            const Ue = re + U;
            this.legendItems.forEach((Xe, vn) => {
                l.strokeStyle = Xe.fontColor || D, l.fillStyle = Xe.fontColor || D;
                const un = l.measureText(Xe.text).width,
                    yi = b.textAlign(Xe.textAlign || (Xe.textAlign = h.textAlign)),
                    Si = $t + ft + un;
                let ri = gt.x,
                    Dr = gt.y;
                b.setWidth(this.width), Te ? vn > 0 && ri + Si + U > this.right && (Dr = gt.y += Ue, gt.line++, ri = gt.x = mn(c, this.left + U, this.right - a[gt.line])) : vn > 0 && Dr + Ue > this.bottom && (ri = gt.x = ri + r[gt.line].width + U, gt.line++, Dr = gt.y = mn(c, this.top + Se + U, this.bottom - r[gt.line].height)),
                    function(Xe, vn, un) {
                        if (isNaN($t) || $t <= 0 || isNaN(qt) || qt < 0) return;
                        l.save();
                        const yi = O(un.lineWidth, 1);
                        if (l.fillStyle = O(un.fillStyle, u), l.lineCap = O(un.lineCap, "butt"), l.lineDashOffset = O(un.lineDashOffset, 0), l.lineJoin = O(un.lineJoin, "miter"), l.lineWidth = yi, l.strokeStyle = O(un.strokeStyle, u), l.setLineDash(O(un.lineDash, [])), h.usePointStyle) {
                            const Si = {
                                    radius: qt * Math.SQRT2 / 2,
                                    pointStyle: un.pointStyle,
                                    rotation: un.rotation,
                                    borderWidth: yi
                                },
                                ri = b.xPlus(Xe, $t / 2);
                            Es(l, Si, ri, vn + ft, h.pointStyleWidth && $t)
                        } else {
                            const Si = vn + Math.max((st - qt) / 2, 0),
                                ri = b.leftForLtr(Xe, $t),
                                Dr = Qn(un.borderRadius);
                            l.beginPath(), Object.values(Dr).some(Ms => 0 !== Ms) ? Ji(l, {
                                x: ri,
                                y: Si,
                                w: $t,
                                h: qt,
                                radius: Dr
                            }) : l.rect(ri, Si, $t, qt), l.fill(), 0 !== yi && l.stroke()
                        }
                        l.restore()
                    }(b.x(ri), Dr, Xe), ri = v(yi, ri + $t + ft, Te ? ri + Si : this.right, e.rtl),
                    function(Xe, vn, un) {
                        fr(l, un.text, Xe, vn + re / 2, S, {
                            strikethrough: un.hidden,
                            textAlign: b.textAlign(un.textAlign)
                        })
                    }(b.x(ri), Dr, Xe), Te ? gt.x += Si + U : gt.y += Ue
            }), As(this.ctx, e.textDirection)
        }
        drawTitle() {
            const e = this.options,
                r = e.title,
                a = ti(r.font),
                l = Ci(r.padding);
            if (!r.display) return;
            const c = Gr(e.rtl, this.left, this.width),
                h = this.ctx,
                u = r.position,
                S = l.top + a.size / 2;
            let D, U = this.left,
                st = this.width;
            if (this.isHorizontal()) st = Math.max(...this.lineWidths), D = this.top + S, U = mn(e.align, U, this.right - st);
            else {
                const gt = this.columnSizes.reduce(($t, qt) => Math.max($t, qt.height), 0);
                D = S + mn(e.align, this.top, this.bottom - gt - e.labels.padding - this._computeTitleHeight())
            }
            const ft = mn(u, U, U + st);
            h.textAlign = c.textAlign(Bi(u)), h.textBaseline = "middle", h.strokeStyle = r.color, h.fillStyle = r.color, h.font = a.string, fr(h, r.text, ft, D, a)
        }
        _computeTitleHeight() {
            const e = this.options.title,
                r = ti(e.font),
                a = Ci(e.padding);
            return e.display ? r.lineHeight + a.height : 0
        }
        _getLegendItemAt(e, r) {
            let a, l, c;
            if (te(e, this.left, this.right) && te(r, this.top, this.bottom))
                for (c = this.legendHitBoxes, a = 0; a < c.length; ++a)
                    if (l = c[a], te(e, l.left, l.left + l.width) && te(r, l.top, l.top + l.height)) return this.legendItems[a];
            return null
        }
        handleEvent(e) {
            const r = this.options;
            if (! function wc(o, e) {
                    return !(("mousemove" !== o && "mouseout" !== o || !e.onHover && !e.onLeave) && (!e.onClick || "click" !== o && "mouseup" !== o))
                }(e.type, r)) return;
            const a = this._getLegendItemAt(e.x, e.y);
            if ("mousemove" === e.type || "mouseout" === e.type) {
                const l = this._hoveredItem,
                    c = ((o, e) => null !== o && null !== e && o.datasetIndex === e.datasetIndex && o.index === e.index)(l, a);
                l && !c && Z(r.onLeave, [e, l, this], this), this._hoveredItem = a, a && !c && Z(r.onHover, [e, a, this], this)
            } else a && Z(r.onClick, [e, a, this], this)
        }
    }
    var Cc = {
        id: "legend",
        _element: ml,
        start(o, e, r) {
            const a = o.legend = new ml({
                ctx: o.ctx,
                options: r,
                chart: o
            });
            ue.configure(o, a, r), ue.addBox(o, a)
        },
        stop(o) {
            ue.removeBox(o, o.legend), delete o.legend
        },
        beforeUpdate(o, e, r) {
            const a = o.legend;
            ue.configure(o, a, r), a.options = r
        },
        afterUpdate(o) {
            const e = o.legend;
            e.buildLabels(), e.adjustHitBoxes()
        },
        afterEvent(o, e) {
            e.replay || o.legend.handleEvent(e.event)
        },
        defaults: {
            display: !0,
            position: "top",
            align: "center",
            fullSize: !0,
            reverse: !1,
            weight: 1e3,
            onClick(o, e, r) {
                const a = e.datasetIndex,
                    l = r.chart;
                l.isDatasetVisible(a) ? (l.hide(a), e.hidden = !0) : (l.show(a), e.hidden = !1)
            },
            onHover: null,
            onLeave: null,
            labels: {
                color: o => o.chart.options.color,
                boxWidth: 40,
                padding: 10,
                generateLabels(o) {
                    const e = o.data.datasets,
                        {
                            labels: {
                                usePointStyle: r,
                                pointStyle: a,
                                textAlign: l,
                                color: c
                            }
                        } = o.legend.options;
                    return o._getSortedDatasetMetas().map(h => {
                        const u = h.controller.getStyle(r ? 0 : void 0),
                            b = Ci(u.borderWidth);
                        return {
                            text: e[h.index].label,
                            fillStyle: u.backgroundColor,
                            fontColor: c,
                            hidden: !h.visible,
                            lineCap: u.borderCapStyle,
                            lineDash: u.borderDash,
                            lineDashOffset: u.borderDashOffset,
                            lineJoin: u.borderJoinStyle,
                            lineWidth: (b.width + b.height) / 4,
                            strokeStyle: u.borderColor,
                            pointStyle: a || u.pointStyle,
                            rotation: u.rotation,
                            textAlign: l || u.textAlign,
                            borderRadius: 0,
                            datasetIndex: h.index
                        }
                    }, this)
                }
            },
            title: {
                color: o => o.chart.options.color,
                display: !1,
                position: "center",
                text: ""
            }
        },
        descriptors: {
            _scriptable: o => !o.startsWith("on"),
            labels: {
                _scriptable: o => !["generateLabels", "filter", "sort"].includes(o)
            }
        }
    };
    class Va extends Yn {
        constructor(e) {
            super(), this.chart = e.chart, this.options = e.options, this.ctx = e.ctx, this._padding = void 0, this.top = void 0, this.bottom = void 0, this.left = void 0, this.right = void 0, this.width = void 0, this.height = void 0, this.position = void 0, this.weight = void 0, this.fullSize = void 0
        }
        update(e, r) {
            const a = this.options;
            if (this.left = 0, this.top = 0, !a.display) return void(this.width = this.height = this.right = this.bottom = 0);
            this.width = this.right = e, this.height = this.bottom = r;
            const l = I(a.text) ? a.text.length : 1;
            this._padding = Ci(a.padding);
            const c = l * ti(a.font).lineHeight + this._padding.height;
            this.isHorizontal() ? this.height = c : this.width = c
        }
        isHorizontal() {
            const e = this.options.position;
            return "top" === e || "bottom" === e
        }
        _drawArgs(e) {
            const {
                top: r,
                left: a,
                bottom: l,
                right: c,
                options: h
            } = this, u = h.align;
            let S, D, U, b = 0;
            return this.isHorizontal() ? (D = mn(u, a, c), U = r + e, S = c - a) : ("left" === h.position ? (D = a + e, U = mn(u, l, r), b = -.5 * Ft) : (D = c - e, U = mn(u, r, l), b = .5 * Ft), S = l - r), {
                titleX: D,
                titleY: U,
                maxWidth: S,
                rotation: b
            }
        }
        draw() {
            const e = this.ctx,
                r = this.options;
            if (!r.display) return;
            const a = ti(r.font),
                c = a.lineHeight / 2 + this._padding.top,
                {
                    titleX: h,
                    titleY: u,
                    maxWidth: b,
                    rotation: S
                } = this._drawArgs(c);
            fr(e, r.text, 0, 0, a, {
                color: r.color,
                maxWidth: b,
                rotation: S,
                textAlign: Bi(r.align),
                textBaseline: "middle",
                translation: [h, u]
            })
        }
    }
    var kc = {
        id: "title",
        _element: Va,
        start(o, e, r) {
            ! function Sc(o, e) {
                const r = new Va({
                    ctx: o.ctx,
                    options: e,
                    chart: o
                });
                ue.configure(o, r, e), ue.addBox(o, r), o.titleBlock = r
            }(o, r)
        },
        stop(o) {
            ue.removeBox(o, o.titleBlock), delete o.titleBlock
        },
        beforeUpdate(o, e, r) {
            const a = o.titleBlock;
            ue.configure(o, a, r), a.options = r
        },
        defaults: {
            align: "center",
            display: !1,
            font: {
                weight: "bold"
            },
            fullSize: !0,
            padding: 10,
            position: "top",
            text: "",
            weight: 2e3
        },
        defaultRoutes: {
            color: "color"
        },
        descriptors: {
            _scriptable: !0,
            _indexable: !1
        }
    };
    const Ba = new WeakMap;
    var Bc = {
        id: "subtitle",
        start(o, e, r) {
            const a = new Va({
                ctx: o.ctx,
                options: r,
                chart: o
            });
            ue.configure(o, a, r), ue.addBox(o, a), Ba.set(o, a)
        },
        stop(o) {
            ue.removeBox(o, Ba.get(o)), Ba.delete(o)
        },
        beforeUpdate(o, e, r) {
            const a = Ba.get(o);
            ue.configure(o, a, r), a.options = r
        },
        defaults: {
            align: "center",
            display: !1,
            font: {
                weight: "normal"
            },
            fullSize: !0,
            padding: 0,
            position: "top",
            text: "",
            weight: 1500
        },
        defaultRoutes: {
            color: "color"
        },
        descriptors: {
            _scriptable: !0,
            _indexable: !1
        }
    };
    const fa = {
        average(o) {
            if (!o.length) return !1;
            let e, r, a = 0,
                l = 0,
                c = 0;
            for (e = 0, r = o.length; e < r; ++e) {
                const h = o[e].element;
                if (h && h.hasValue()) {
                    const u = h.tooltipPosition();
                    a += u.x, l += u.y, ++c
                }
            }
            return {
                x: a / c,
                y: l / c
            }
        },
        nearest(o, e) {
            if (!o.length) return !1;
            let c, h, u, r = e.x,
                a = e.y,
                l = Number.POSITIVE_INFINITY;
            for (c = 0, h = o.length; c < h; ++c) {
                const b = o[c].element;
                if (b && b.hasValue()) {
                    const D = Ne(e, b.getCenterPoint());
                    D < l && (l = D, u = b)
                }
            }
            if (u) {
                const b = u.tooltipPosition();
                r = b.x, a = b.y
            }
            return {
                x: r,
                y: a
            }
        }
    };

    function wo(o, e) {
        return e && (I(e) ? Array.prototype.push.apply(o, e) : o.push(e)), o
    }

    function To(o) {
        return ("string" == typeof o || o instanceof String) && o.indexOf("\n") > -1 ? o.split("\n") : o
    }

    function Ec(o, e) {
        const {
            element: r,
            datasetIndex: a,
            index: l
        } = e, c = o.getDatasetMeta(a).controller, {
            label: h,
            value: u
        } = c.getLabelAndValue(l);
        return {
            chart: o,
            label: h,
            parsed: c.getParsed(l),
            raw: o.data.datasets[a].data[l],
            formattedValue: u,
            dataset: c.getDataset(),
            dataIndex: l,
            datasetIndex: a,
            element: r
        }
    }

    function bl(o, e) {
        const r = o.chart.ctx,
            {
                body: a,
                footer: l,
                title: c
            } = o,
            {
                boxWidth: h,
                boxHeight: u
            } = e,
            b = ti(e.bodyFont),
            S = ti(e.titleFont),
            D = ti(e.footerFont),
            U = c.length,
            st = l.length,
            ft = a.length,
            gt = Ci(e.padding);
        let $t = gt.height,
            qt = 0,
            re = a.reduce((Te, Se) => Te + Se.before.length + Se.lines.length + Se.after.length, 0);
        re += o.beforeBody.length + o.afterBody.length, U && ($t += U * S.lineHeight + (U - 1) * e.titleSpacing + e.titleMarginBottom), re && ($t += ft * (e.displayColors ? Math.max(u, b.lineHeight) : b.lineHeight) + (re - ft) * b.lineHeight + (re - 1) * e.bodySpacing), st && ($t += e.footerMarginTop + st * D.lineHeight + (st - 1) * e.footerSpacing);
        let _e = 0;
        const Ae = function(Te) {
            qt = Math.max(qt, r.measureText(Te).width + _e)
        };
        return r.save(), r.font = S.string, A(o.title, Ae), r.font = b.string, A(o.beforeBody.concat(o.afterBody), Ae), _e = e.displayColors ? h + 2 + e.boxPadding : 0, A(a, Te => {
            A(Te.before, Ae), A(Te.lines, Ae), A(Te.after, Ae)
        }), _e = 0, r.font = D.string, A(o.footer, Ae), r.restore(), qt += gt.width, {
            width: qt,
            height: $t
        }
    }

    function Dc(o, e, r, a) {
        const {
            x: l,
            width: c
        } = r, {
            width: h,
            chartArea: {
                left: u,
                right: b
            }
        } = o;
        let S = "center";
        return "center" === a ? S = l <= (u + b) / 2 ? "left" : "right" : l <= c / 2 ? S = "left" : l >= h - c / 2 && (S = "right"),
            function Ac(o, e, r, a) {
                const {
                    x: l,
                    width: c
                } = a, h = r.caretSize + r.caretPadding;
                if ("left" === o && l + c + h > e.width || "right" === o && l - c - h < 0) return !0
            }(S, o, e, r) && (S = "center"), S
    }

    function vl(o, e, r) {
        const a = r.yAlign || e.yAlign || function Tc(o, e) {
            const {
                y: r,
                height: a
            } = e;
            return r < a / 2 ? "top" : r > o.height - a / 2 ? "bottom" : "center"
        }(o, r);
        return {
            xAlign: r.xAlign || e.xAlign || Dc(o, e, r, a),
            yAlign: a
        }
    }

    function _l(o, e, r, a) {
        const {
            caretSize: l,
            caretPadding: c,
            cornerRadius: h
        } = o, {
            xAlign: u,
            yAlign: b
        } = r, S = l + c, {
            topLeft: D,
            topRight: U,
            bottomLeft: st,
            bottomRight: ft
        } = Qn(h);
        let gt = function Oc(o, e) {
            let {
                x: r,
                width: a
            } = o;
            return "right" === e ? r -= a : "center" === e && (r -= a / 2), r
        }(e, u);
        const $t = function Pc(o, e, r) {
            let {
                y: a,
                height: l
            } = o;
            return "top" === e ? a += r : a -= "bottom" === e ? l + r : l / 2, a
        }(e, b, S);
        return "center" === b ? "left" === u ? gt += S : "right" === u && (gt -= S) : "left" === u ? gt -= Math.max(D, st) + l : "right" === u && (gt += Math.max(U, ft) + l), {
            x: sn(gt, 0, a.width - e.width),
            y: sn($t, 0, a.height - e.height)
        }
    }

    function Ea(o, e, r) {
        const a = Ci(r.padding);
        return "center" === e ? o.x + o.width / 2 : "right" === e ? o.x + o.width - a.right : o.x + a.left
    }

    function xl(o) {
        return wo([], To(o))
    }

    function yl(o, e) {
        const r = e && e.dataset && e.dataset.tooltip && e.dataset.tooltip.callbacks;
        return r ? o.override(r) : o
    }
    class Ua extends Yn {
        constructor(e) {
            super(), this.opacity = 0, this._active = [], this._eventPosition = void 0, this._size = void 0, this._cachedAnimations = void 0, this._tooltipItems = [], this.$animations = void 0, this.$context = void 0, this.chart = e.chart || e._chart, this._chart = this.chart, this.options = e.options, this.dataPoints = void 0, this.title = void 0, this.beforeBody = void 0, this.body = void 0, this.afterBody = void 0, this.footer = void 0, this.xAlign = void 0, this.yAlign = void 0, this.x = void 0, this.y = void 0, this.height = void 0, this.width = void 0, this.caretX = void 0, this.caretY = void 0, this.labelColors = void 0, this.labelPointStyles = void 0, this.labelTextColors = void 0
        }
        initialize(e) {
            this.options = e, this._cachedAnimations = void 0, this.$context = void 0
        }
        _resolveAnimations() {
            const e = this._cachedAnimations;
            if (e) return e;
            const r = this.chart,
                a = this.options.setContext(this.getContext()),
                l = a.enabled && r.options.animation && a.animations,
                c = new Ro(this.chart, l);
            return l._cacheable && (this._cachedAnimations = Object.freeze(c)), c
        }
        getContext() {
            return this.$context || (this.$context = function Mc(o, e, r) {
                return Xr(o, {
                    tooltip: e,
                    tooltipItems: r,
                    type: "tooltip"
                })
            }(this.chart.getContext(), this, this._tooltipItems))
        }
        getTitle(e, r) {
            const {
                callbacks: a
            } = r, l = a.beforeTitle.apply(this, [e]), c = a.title.apply(this, [e]), h = a.afterTitle.apply(this, [e]);
            let u = [];
            return u = wo(u, To(l)), u = wo(u, To(c)), u = wo(u, To(h)), u
        }
        getBeforeBody(e, r) {
            return xl(r.callbacks.beforeBody.apply(this, [e]))
        }
        getBody(e, r) {
            const {
                callbacks: a
            } = r, l = [];
            return A(e, c => {
                const h = {
                        before: [],
                        lines: [],
                        after: []
                    },
                    u = yl(a, c);
                wo(h.before, To(u.beforeLabel.call(this, c))), wo(h.lines, u.label.call(this, c)), wo(h.after, To(u.afterLabel.call(this, c))), l.push(h)
            }), l
        }
        getAfterBody(e, r) {
            return xl(r.callbacks.afterBody.apply(this, [e]))
        }
        getFooter(e, r) {
            const {
                callbacks: a
            } = r, l = a.beforeFooter.apply(this, [e]), c = a.footer.apply(this, [e]), h = a.afterFooter.apply(this, [e]);
            let u = [];
            return u = wo(u, To(l)), u = wo(u, To(c)), u = wo(u, To(h)), u
        }
        _createItems(e) {
            const r = this._active,
                a = this.chart.data,
                l = [],
                c = [],
                h = [];
            let b, S, u = [];
            for (b = 0, S = r.length; b < S; ++b) u.push(Ec(this.chart, r[b]));
            return e.filter && (u = u.filter((D, U, st) => e.filter(D, U, st, a))), e.itemSort && (u = u.sort((D, U) => e.itemSort(D, U, a))), A(u, D => {
                const U = yl(e.callbacks, D);
                l.push(U.labelColor.call(this, D)), c.push(U.labelPointStyle.call(this, D)), h.push(U.labelTextColor.call(this, D))
            }), this.labelColors = l, this.labelPointStyles = c, this.labelTextColors = h, this.dataPoints = u, u
        }
        update(e, r) {
            const a = this.options.setContext(this.getContext()),
                l = this._active;
            let c, h = [];
            if (l.length) {
                const u = fa[a.position].call(this, l, this._eventPosition);
                h = this._createItems(a), this.title = this.getTitle(h, a), this.beforeBody = this.getBeforeBody(h, a), this.body = this.getBody(h, a), this.afterBody = this.getAfterBody(h, a), this.footer = this.getFooter(h, a);
                const b = this._size = bl(this, a),
                    S = Object.assign({}, u, b),
                    D = vl(this.chart, a, S),
                    U = _l(a, S, D, this.chart);
                this.xAlign = D.xAlign, this.yAlign = D.yAlign, c = {
                    opacity: 1,
                    x: U.x,
                    y: U.y,
                    width: b.width,
                    height: b.height,
                    caretX: u.x,
                    caretY: u.y
                }
            } else 0 !== this.opacity && (c = {
                opacity: 0
            });
            this._tooltipItems = h, this.$context = void 0, c && this._resolveAnimations().update(this, c), e && a.external && a.external.call(this, {
                chart: this.chart,
                tooltip: this,
                replay: r
            })
        }
        drawCaret(e, r, a, l) {
            const c = this.getCaretPosition(e, a, l);
            r.lineTo(c.x1, c.y1), r.lineTo(c.x2, c.y2), r.lineTo(c.x3, c.y3)
        }
        getCaretPosition(e, r, a) {
            const {
                xAlign: l,
                yAlign: c
            } = this, {
                caretSize: h,
                cornerRadius: u
            } = a, {
                topLeft: b,
                topRight: S,
                bottomLeft: D,
                bottomRight: U
            } = Qn(u), {
                x: st,
                y: ft
            } = e, {
                width: gt,
                height: $t
            } = r;
            let qt, re, _e, Ae, Te, Se;
            return "center" === c ? (Te = ft + $t / 2, "left" === l ? (qt = st, re = qt - h, Ae = Te + h, Se = Te - h) : (qt = st + gt, re = qt + h, Ae = Te - h, Se = Te + h), _e = qt) : (re = "left" === l ? st + Math.max(b, D) + h : "right" === l ? st + gt - Math.max(S, U) - h : this.caretX, "top" === c ? (Ae = ft, Te = Ae - h, qt = re - h, _e = re + h) : (Ae = ft + $t, Te = Ae + h, qt = re + h, _e = re - h), Se = Ae), {
                x1: qt,
                x2: re,
                x3: _e,
                y1: Ae,
                y2: Te,
                y3: Se
            }
        }
        drawTitle(e, r, a) {
            const l = this.title,
                c = l.length;
            let h, u, b;
            if (c) {
                const S = Gr(a.rtl, this.x, this.width);
                for (e.x = Ea(this, a.titleAlign, a), r.textAlign = S.textAlign(a.titleAlign), r.textBaseline = "middle", h = ti(a.titleFont), u = a.titleSpacing, r.fillStyle = a.titleColor, r.font = h.string, b = 0; b < c; ++b) r.fillText(l[b], S.x(e.x), e.y + h.lineHeight / 2), e.y += h.lineHeight + u, b + 1 === c && (e.y += a.titleMarginBottom - u)
            }
        }
        _drawColorBox(e, r, a, l, c) {
            const h = this.labelColors[a],
                u = this.labelPointStyles[a],
                {
                    boxHeight: b,
                    boxWidth: S,
                    boxPadding: D
                } = c,
                U = ti(c.bodyFont),
                st = Ea(this, "left", c),
                ft = l.x(st),
                $t = r.y + (b < U.lineHeight ? (U.lineHeight - b) / 2 : 0);
            if (c.usePointStyle) {
                const qt = {
                        radius: Math.min(S, b) / 2,
                        pointStyle: u.pointStyle,
                        rotation: u.rotation,
                        borderWidth: 1
                    },
                    re = l.leftForLtr(ft, S) + S / 2,
                    _e = $t + b / 2;
                e.strokeStyle = c.multiKeyBackground, e.fillStyle = c.multiKeyBackground, vs(e, qt, re, _e), e.strokeStyle = h.borderColor, e.fillStyle = h.backgroundColor, vs(e, qt, re, _e)
            } else {
                e.lineWidth = H(h.borderWidth) ? Math.max(...Object.values(h.borderWidth)) : h.borderWidth || 1, e.strokeStyle = h.borderColor, e.setLineDash(h.borderDash || []), e.lineDashOffset = h.borderDashOffset || 0;
                const qt = l.leftForLtr(ft, S - D),
                    re = l.leftForLtr(l.xPlus(ft, 1), S - D - 2),
                    _e = Qn(h.borderRadius);
                Object.values(_e).some(Ae => 0 !== Ae) ? (e.beginPath(), e.fillStyle = c.multiKeyBackground, Ji(e, {
                    x: qt,
                    y: $t,
                    w: S,
                    h: b,
                    radius: _e
                }), e.fill(), e.stroke(), e.fillStyle = h.backgroundColor, e.beginPath(), Ji(e, {
                    x: re,
                    y: $t + 1,
                    w: S - 2,
                    h: b - 2,
                    radius: _e
                }), e.fill()) : (e.fillStyle = c.multiKeyBackground, e.fillRect(qt, $t, S, b), e.strokeRect(qt, $t, S, b), e.fillStyle = h.backgroundColor, e.fillRect(re, $t + 1, S - 2, b - 2))
            }
            e.fillStyle = this.labelTextColors[a]
        }
        drawBody(e, r, a) {
            const {
                body: l
            } = this, {
                bodySpacing: c,
                bodyAlign: h,
                displayColors: u,
                boxHeight: b,
                boxWidth: S,
                boxPadding: D
            } = a, U = ti(a.bodyFont);
            let st = U.lineHeight,
                ft = 0;
            const gt = Gr(a.rtl, this.x, this.width),
                $t = function(vn) {
                    r.fillText(vn, gt.x(e.x + ft), e.y + st / 2), e.y += st + c
                },
                qt = gt.textAlign(h);
            let re, _e, Ae, Te, Se, Ue, Xe;
            for (r.textAlign = h, r.textBaseline = "middle", r.font = U.string, e.x = Ea(this, qt, a), r.fillStyle = a.bodyColor, A(this.beforeBody, $t), ft = u && "right" !== qt ? "center" === h ? S / 2 + D : S + 2 + D : 0, Te = 0, Ue = l.length; Te < Ue; ++Te) {
                for (re = l[Te], _e = this.labelTextColors[Te], r.fillStyle = _e, A(re.before, $t), Ae = re.lines, u && Ae.length && (this._drawColorBox(r, e, Te, gt, a), st = Math.max(U.lineHeight, b)), Se = 0, Xe = Ae.length; Se < Xe; ++Se) $t(Ae[Se]), st = U.lineHeight;
                A(re.after, $t)
            }
            ft = 0, st = U.lineHeight, A(this.afterBody, $t), e.y -= c
        }
        drawFooter(e, r, a) {
            const l = this.footer,
                c = l.length;
            let h, u;
            if (c) {
                const b = Gr(a.rtl, this.x, this.width);
                for (e.x = Ea(this, a.footerAlign, a), e.y += a.footerMarginTop, r.textAlign = b.textAlign(a.footerAlign), r.textBaseline = "middle", h = ti(a.footerFont), r.fillStyle = a.footerColor, r.font = h.string, u = 0; u < c; ++u) r.fillText(l[u], b.x(e.x), e.y + h.lineHeight / 2), e.y += h.lineHeight + a.footerSpacing
            }
        }
        drawBackground(e, r, a, l) {
            const {
                xAlign: c,
                yAlign: h
            } = this, {
                x: u,
                y: b
            } = e, {
                width: S,
                height: D
            } = a, {
                topLeft: U,
                topRight: st,
                bottomLeft: ft,
                bottomRight: gt
            } = Qn(l.cornerRadius);
            r.fillStyle = l.backgroundColor, r.strokeStyle = l.borderColor, r.lineWidth = l.borderWidth, r.beginPath(), r.moveTo(u + U, b), "top" === h && this.drawCaret(e, r, a, l), r.lineTo(u + S - st, b), r.quadraticCurveTo(u + S, b, u + S, b + st), "center" === h && "right" === c && this.drawCaret(e, r, a, l), r.lineTo(u + S, b + D - gt), r.quadraticCurveTo(u + S, b + D, u + S - gt, b + D), "bottom" === h && this.drawCaret(e, r, a, l), r.lineTo(u + ft, b + D), r.quadraticCurveTo(u, b + D, u, b + D - ft), "center" === h && "left" === c && this.drawCaret(e, r, a, l), r.lineTo(u, b + U), r.quadraticCurveTo(u, b, u + U, b), r.closePath(), r.fill(), l.borderWidth > 0 && r.stroke()
        }
        _updateAnimationTarget(e) {
            const r = this.chart,
                a = this.$animations,
                l = a && a.x,
                c = a && a.y;
            if (l || c) {
                const h = fa[e.position].call(this, this._active, this._eventPosition);
                if (!h) return;
                const u = this._size = bl(this, e),
                    b = Object.assign({}, h, this._size),
                    S = vl(r, e, b),
                    D = _l(e, b, S, r);
                (l._to !== D.x || c._to !== D.y) && (this.xAlign = S.xAlign, this.yAlign = S.yAlign, this.width = u.width, this.height = u.height, this.caretX = h.x, this.caretY = h.y, this._resolveAnimations().update(this, D))
            }
        }
        _willRender() {
            return !!this.opacity
        }
        draw(e) {
            const r = this.options.setContext(this.getContext());
            let a = this.opacity;
            if (!a) return;
            this._updateAnimationTarget(r);
            const l = {
                    width: this.width,
                    height: this.height
                },
                c = {
                    x: this.x,
                    y: this.y
                };
            a = Math.abs(a) < .001 ? 0 : a;
            const h = Ci(r.padding);
            r.enabled && (this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length) && (e.save(), e.globalAlpha = a, this.drawBackground(c, e, l, r), Js(e, r.textDirection), c.y += h.top, this.drawTitle(c, e, r), this.drawBody(c, e, r), this.drawFooter(c, e, r), As(e, r.textDirection), e.restore())
        }
        getActiveElements() {
            return this._active || []
        }
        setActiveElements(e, r) {
            const a = this._active,
                l = e.map(({
                    datasetIndex: u,
                    index: b
                }) => {
                    const S = this.chart.getDatasetMeta(u);
                    if (!S) throw new Error("Cannot find a dataset at index " + u);
                    return {
                        datasetIndex: u,
                        element: S.data[b],
                        index: b
                    }
                }),
                c = !q(a, l),
                h = this._positionChanged(l, r);
            (c || h) && (this._active = l, this._eventPosition = r, this._ignoreReplayEvents = !0, this.update(!0))
        }
        handleEvent(e, r, a = !0) {
            if (r && this._ignoreReplayEvents) return !1;
            this._ignoreReplayEvents = !1;
            const l = this.options,
                c = this._active || [],
                h = this._getActiveElements(e, c, r, a),
                u = this._positionChanged(h, e),
                b = r || !q(h, c) || u;
            return b && (this._active = h, (l.enabled || l.external) && (this._eventPosition = {
                x: e.x,
                y: e.y
            }, this.update(!0, r))), b
        }
        _getActiveElements(e, r, a, l) {
            const c = this.options;
            if ("mouseout" === e.type) return [];
            if (!l) return r;
            const h = this.chart.getElementsAtEventForMode(e, c.mode, c, a);
            return c.reverse && h.reverse(), h
        }
        _positionChanged(e, r) {
            const {
                caretX: a,
                caretY: l,
                options: c
            } = this, h = fa[c.position].call(this, e, r);
            return !1 !== h && (a !== h.x || l !== h.y)
        }
    }
    Ua.positioners = fa;
    var wl = Object.freeze({
        __proto__: null,
        Decimation: tc,
        Filler: xc,
        Legend: Cc,
        SubTitle: Bc,
        Title: kc,
        Tooltip: {
            id: "tooltip",
            _element: Ua,
            positioners: fa,
            afterInit(o, e, r) {
                r && (o.tooltip = new Ua({
                    chart: o,
                    options: r
                }))
            },
            beforeUpdate(o, e, r) {
                o.tooltip && o.tooltip.initialize(r)
            },
            reset(o, e, r) {
                o.tooltip && o.tooltip.initialize(r)
            },
            afterDraw(o) {
                const e = o.tooltip;
                if (e && e._willRender()) {
                    const r = {
                        tooltip: e
                    };
                    if (!1 === o.notifyPlugins("beforeTooltipDraw", r)) return;
                    e.draw(o.ctx), o.notifyPlugins("afterTooltipDraw", r)
                }
            },
            afterEvent(o, e) {
                o.tooltip && o.tooltip.handleEvent(e.event, e.replay, e.inChartArea) && (e.changed = !0)
            },
            defaults: {
                enabled: !0,
                external: null,
                position: "average",
                backgroundColor: "rgba(0,0,0,0.8)",
                titleColor: "#fff",
                titleFont: {
                    weight: "bold"
                },
                titleSpacing: 2,
                titleMarginBottom: 6,
                titleAlign: "left",
                bodyColor: "#fff",
                bodySpacing: 2,
                bodyFont: {},
                bodyAlign: "left",
                footerColor: "#fff",
                footerSpacing: 2,
                footerMarginTop: 6,
                footerFont: {
                    weight: "bold"
                },
                footerAlign: "left",
                padding: 6,
                caretPadding: 2,
                caretSize: 5,
                cornerRadius: 6,
                boxHeight: (o, e) => e.bodyFont.size,
                boxWidth: (o, e) => e.bodyFont.size,
                multiKeyBackground: "#fff",
                displayColors: !0,
                boxPadding: 0,
                borderColor: "rgba(0,0,0,0)",
                borderWidth: 0,
                animation: {
                    duration: 400,
                    easing: "easeOutQuart"
                },
                animations: {
                    numbers: {
                        type: "number",
                        properties: ["x", "y", "width", "height", "caretX", "caretY"]
                    },
                    opacity: {
                        easing: "linear",
                        duration: 200
                    }
                },
                callbacks: {
                    beforeTitle: p,
                    title(o) {
                        if (o.length > 0) {
                            const e = o[0],
                                r = e.chart.data.labels,
                                a = r ? r.length : 0;
                            if (this && this.options && "dataset" === this.options.mode) return e.dataset.label || "";
                            if (e.label) return e.label;
                            if (a > 0 && e.dataIndex < a) return r[e.dataIndex]
                        }
                        return ""
                    },
                    afterTitle: p,
                    beforeBody: p,
                    beforeLabel: p,
                    label(o) {
                        if (this && this.options && "dataset" === this.options.mode) return o.label + ": " + o.formattedValue || o.formattedValue;
                        let e = o.dataset.label || "";
                        e && (e += ": ");
                        const r = o.formattedValue;
                        return y(r) || (e += r), e
                    },
                    labelColor(o) {
                        const r = o.chart.getDatasetMeta(o.datasetIndex).controller.getStyle(o.dataIndex);
                        return {
                            borderColor: r.borderColor,
                            backgroundColor: r.backgroundColor,
                            borderWidth: r.borderWidth,
                            borderDash: r.borderDash,
                            borderDashOffset: r.borderDashOffset,
                            borderRadius: 0
                        }
                    },
                    labelTextColor() {
                        return this.options.bodyColor
                    },
                    labelPointStyle(o) {
                        const r = o.chart.getDatasetMeta(o.datasetIndex).controller.getStyle(o.dataIndex);
                        return {
                            pointStyle: r.pointStyle,
                            rotation: r.rotation
                        }
                    },
                    afterLabel: p,
                    afterBody: p,
                    beforeFooter: p,
                    footer: p,
                    afterFooter: p
                }
            },
            defaultRoutes: {
                bodyFont: "font",
                footerFont: "font",
                titleFont: "font"
            },
            descriptors: {
                _scriptable: o => "filter" !== o && "itemSort" !== o && "external" !== o,
                _indexable: !1,
                callbacks: {
                    _scriptable: !1,
                    _indexable: !1
                },
                animation: {
                    _fallback: !1
                },
                animations: {
                    _fallback: "animation"
                }
            },
            additionalOptionScopes: ["interaction"]
        }
    });
    class Ta extends Ut {
        constructor(e) {
            super(e), this._startValue = void 0, this._valueRange = 0, this._addedLabels = []
        }
        init(e) {
            const r = this._addedLabels;
            if (r.length) {
                const a = this.getLabels();
                for (const {
                        index: l,
                        label: c
                    } of r) a[l] === c && a.splice(l, 1);
                this._addedLabels = []
            }
            super.init(e)
        }
        parse(e, r) {
            if (y(e)) return null;
            const a = this.getLabels();
            return r = isFinite(r) && a[r] === e ? r : function $c(o, e, r, a) {
                const l = o.indexOf(e);
                return -1 === l ? ((o, e, r, a) => ("string" == typeof e ? (r = o.push(e) - 1, a.unshift({
                    index: r,
                    label: e
                })) : isNaN(e) && (r = null), r))(o, e, r, a) : l !== o.lastIndexOf(e) ? r : l
            }(a, e, O(r, e), this._addedLabels), ((o, e) => null === o ? null : sn(Math.round(o), 0, e))(r, a.length - 1)
        }
        determineDataLimits() {
            const {
                minDefined: e,
                maxDefined: r
            } = this.getUserBounds();
            let {
                min: a,
                max: l
            } = this.getMinMax(!0);
            "ticks" === this.options.bounds && (e || (a = 0), r || (l = this.getLabels().length - 1)), this.min = a, this.max = l
        }
        buildTicks() {
            const e = this.min,
                r = this.max,
                a = this.options.offset,
                l = [];
            let c = this.getLabels();
            c = 0 === e && r === c.length - 1 ? c : c.slice(e, r + 1), this._valueRange = Math.max(c.length - (a ? 0 : 1), 1), this._startValue = this.min - (a ? .5 : 0);
            for (let h = e; h <= r; h++) l.push({
                value: h
            });
            return l
        }
        getLabelForValue(e) {
            const r = this.getLabels();
            return e >= 0 && e < r.length ? r[e] : e
        }
        configure() {
            super.configure(), this.isHorizontal() || (this._reversePixels = !this._reversePixels)
        }
        getPixelForValue(e) {
            return "number" != typeof e && (e = this.parse(e)), null === e ? NaN : this.getPixelForDecimal((e - this._startValue) / this._valueRange)
        }
        getPixelForTick(e) {
            const r = this.ticks;
            return e < 0 || e > r.length - 1 ? null : this.getPixelForValue(r[e].value)
        }
        getValueForPixel(e) {
            return Math.round(this._startValue + this.getDecimalForPixel(e) * this._valueRange)
        }
        getBasePixel() {
            return this.bottom
        }
    }

    function Cl(o, e, {
        horizontal: r,
        minRotation: a
    }) {
        const l = Dt(a),
            c = (r ? Math.sin(l) : Math.cos(l)) || .001;
        return Math.min(e / c, .75 * e * ("" + o).length)
    }
    Ta.id = "category", Ta.defaults = {
        ticks: {
            callback: Ta.prototype.getLabelForValue
        }
    };
    class Aa extends Ut {
        constructor(e) {
            super(e), this.start = void 0, this.end = void 0, this._startValue = void 0, this._endValue = void 0, this._valueRange = 0
        }
        parse(e, r) {
            return y(e) || ("number" == typeof e || e instanceof Number) && !isFinite(+e) ? null : +e
        }
        handleTickRangeOptions() {
            const {
                beginAtZero: e
            } = this.options, {
                minDefined: r,
                maxDefined: a
            } = this.getUserBounds();
            let {
                min: l,
                max: c
            } = this;
            const h = b => l = r ? l : b,
                u = b => c = a ? c : b;
            if (e) {
                const b = X(l),
                    S = X(c);
                b < 0 && S < 0 ? u(0) : b > 0 && S > 0 && h(0)
            }
            if (l === c) {
                let b = 1;
                (c >= Number.MAX_SAFE_INTEGER || l <= Number.MIN_SAFE_INTEGER) && (b = Math.abs(.05 * c)), u(c + b), e || h(l - b)
            }
            this.min = l, this.max = c
        }
        getTickLimit() {
            const e = this.options.ticks;
            let l, {
                maxTicksLimit: r,
                stepSize: a
            } = e;
            return a ? (l = Math.ceil(this.max / a) - Math.floor(this.min / a) + 1, l > 1e3 && (console.warn(`scales.${this.id}.ticks.stepSize: ${a} would result generating up to ${l} ticks. Limiting to 1000.`), l = 1e3)) : (l = this.computeTickLimit(), r = r || 11), r && (l = Math.min(r, l)), l
        }
        computeTickLimit() {
            return Number.POSITIVE_INFINITY
        }
        buildTicks() {
            const e = this.options,
                r = e.ticks;
            let a = this.getTickLimit();
            a = Math.max(2, a);
            const h = function Rc(o, e) {
                const r = [],
                    {
                        bounds: l,
                        step: c,
                        min: h,
                        max: u,
                        precision: b,
                        count: S,
                        maxTicks: D,
                        maxDigits: U,
                        includeBounds: st
                    } = o,
                    ft = c || 1,
                    gt = D - 1,
                    {
                        min: $t,
                        max: qt
                    } = e,
                    re = !y(h),
                    _e = !y(u),
                    Ae = !y(S),
                    Te = (qt - $t) / (U + 1);
                let Ue, Xe, vn, un, Se = _t((qt - $t) / gt / ft) * ft;
                if (Se < 1e-14 && !re && !_e) return [{
                    value: $t
                }, {
                    value: qt
                }];
                un = Math.ceil(qt / Se) - Math.floor($t / Se), un > gt && (Se = _t(un * Se / gt / ft) * ft), y(b) || (Ue = Math.pow(10, b), Se = Math.ceil(Se * Ue) / Ue), "ticks" === l ? (Xe = Math.floor($t / Se) * Se, vn = Math.ceil(qt / Se) * Se) : (Xe = $t, vn = qt), re && _e && c && pt((u - h) / c, Se / 1e3) ? (un = Math.round(Math.min((u - h) / Se, D)), Se = (u - h) / un, Xe = h, vn = u) : Ae ? (Xe = re ? h : Xe, vn = _e ? u : vn, un = S - 1, Se = (vn - Xe) / un) : (un = (vn - Xe) / Se, un = xt(un, Math.round(un), Se / 1e3) ? Math.round(un) : Math.ceil(un));
                const yi = Math.max(le(Se), le(Xe));
                Ue = Math.pow(10, y(b) ? yi : b), Xe = Math.round(Xe * Ue) / Ue, vn = Math.round(vn * Ue) / Ue;
                let Si = 0;
                for (re && (st && Xe !== h ? (r.push({
                        value: h
                    }), Xe < h && Si++, xt(Math.round((Xe + Si * Se) * Ue) / Ue, h, Cl(h, Te, o)) && Si++) : Xe < h && Si++); Si < un; ++Si) r.push({
                    value: Math.round((Xe + Si * Se) * Ue) / Ue
                });
                return _e && st && vn !== u ? r.length && xt(r[r.length - 1].value, u, Cl(u, Te, o)) ? r[r.length - 1].value = u : r.push({
                    value: u
                }) : (!_e || vn === u) && r.push({
                    value: vn
                }), r
            }({
                maxTicks: a,
                bounds: e.bounds,
                min: e.min,
                max: e.max,
                precision: r.precision,
                step: r.stepSize,
                count: r.count,
                maxDigits: this._maxDigits(),
                horizontal: this.isHorizontal(),
                minRotation: r.minRotation || 0,
                includeBounds: !1 !== r.includeBounds
            }, this._range || this);
            return "ticks" === e.bounds && Tt(h, this, "value"), e.reverse ? (h.reverse(), this.start = this.max, this.end = this.min) : (this.start = this.min, this.end = this.max), h
        }
        configure() {
            const e = this.ticks;
            let r = this.min,
                a = this.max;
            if (super.configure(), this.options.offset && e.length) {
                const l = (a - r) / Math.max(e.length - 1, 1) / 2;
                r -= l, a += l
            }
            this._startValue = r, this._endValue = a, this._valueRange = a - r
        }
        getLabelForValue(e) {
            return vr(e, this.chart.options.locale, this.options.ticks.format)
        }
    }
    class Xa extends Aa {
        determineDataLimits() {
            const {
                min: e,
                max: r
            } = this.getMinMax(!0);
            this.min = P(e) ? e : 0, this.max = P(r) ? r : 1, this.handleTickRangeOptions()
        }
        computeTickLimit() {
            const e = this.isHorizontal(),
                r = e ? this.width : this.height,
                a = Dt(this.options.ticks.minRotation),
                l = (e ? Math.sin(a) : Math.cos(a)) || .001,
                c = this._resolveTickFontOptions(0);
            return Math.ceil(r / Math.min(40, c.lineHeight / l))
        }
        getPixelForValue(e) {
            return null === e ? NaN : this.getPixelForDecimal((e - this._startValue) / this._valueRange)
        }
        getValueForPixel(e) {
            return this._startValue + this.getDecimalForPixel(e) * this._valueRange
        }
    }

    function Sl(o) {
        return o / Math.pow(10, Math.floor(z(o))) == 1
    }
    Xa.id = "linear", Xa.defaults = {
        ticks: {
            callback: li.formatters.numeric
        }
    };
    class qa extends Ut {
        constructor(e) {
            super(e), this.start = void 0, this.end = void 0, this._startValue = void 0, this._valueRange = 0
        }
        parse(e, r) {
            const a = Aa.prototype.parse.apply(this, [e, r]);
            if (0 !== a) return P(a) && a > 0 ? a : null;
            this._zero = !0
        }
        determineDataLimits() {
            const {
                min: e,
                max: r
            } = this.getMinMax(!0);
            this.min = P(e) ? Math.max(0, e) : null, this.max = P(r) ? Math.max(0, r) : null, this.options.beginAtZero && (this._zero = !0), this.handleTickRangeOptions()
        }
        handleTickRangeOptions() {
            const {
                minDefined: e,
                maxDefined: r
            } = this.getUserBounds();
            let a = this.min,
                l = this.max;
            const c = b => a = e ? a : b,
                h = b => l = r ? l : b,
                u = (b, S) => Math.pow(10, Math.floor(z(b)) + S);
            a === l && (a <= 0 ? (c(1), h(10)) : (c(u(a, -1)), h(u(l, 1)))), a <= 0 && c(u(l, -1)), l <= 0 && h(u(a, 1)), this._zero && this.min !== this._suggestedMin && a === u(this.min, 0) && c(u(a, -1)), this.min = a, this.max = l
        }
        buildTicks() {
            const e = this.options,
                a = function Nc(o, e) {
                    const r = Math.floor(z(e.max)),
                        a = Math.ceil(e.max / Math.pow(10, r)),
                        l = [];
                    let c = K(o.min, Math.pow(10, Math.floor(z(e.min)))),
                        h = Math.floor(z(c)),
                        u = Math.floor(c / Math.pow(10, h)),
                        b = h < 0 ? Math.pow(10, Math.abs(h)) : 1;
                    do {
                        l.push({
                            value: c,
                            major: Sl(c)
                        }), ++u, 10 === u && (u = 1, ++h, b = h >= 0 ? 1 : b), c = Math.round(u * Math.pow(10, h) * b) / b
                    } while (h < r || h === r && u < a);
                    const S = K(o.max, c);
                    return l.push({
                        value: S,
                        major: Sl(c)
                    }), l
                }({
                    min: this._userMin,
                    max: this._userMax
                }, this);
            return "ticks" === e.bounds && Tt(a, this, "value"), e.reverse ? (a.reverse(), this.start = this.max, this.end = this.min) : (this.start = this.min, this.end = this.max), a
        }
        getLabelForValue(e) {
            return void 0 === e ? "0" : vr(e, this.chart.options.locale, this.options.ticks.format)
        }
        configure() {
            const e = this.min;
            super.configure(), this._startValue = z(e), this._valueRange = z(this.max) - z(e)
        }
        getPixelForValue(e) {
            return (void 0 === e || 0 === e) && (e = this.min), null === e || isNaN(e) ? NaN : this.getPixelForDecimal(e === this.min ? 0 : (z(e) - this._startValue) / this._valueRange)
        }
        getValueForPixel(e) {
            const r = this.getDecimalForPixel(e);
            return Math.pow(10, this._startValue + r * this._valueRange)
        }
    }

    function Ga(o) {
        const e = o.ticks;
        if (e.display && o.display) {
            const r = Ci(e.backdropPadding);
            return O(e.font && e.font.size, De.font.size) + r.height
        }
        return 0
    }

    function Hc(o, e, r) {
        return r = I(r) ? r : [r], {
            w: $i(o, e.string, r),
            h: r.length * e.lineHeight
        }
    }

    function kl(o, e, r, a, l) {
        return o === a || o === l ? {
            start: e - r / 2,
            end: e + r / 2
        } : o < a || o > l ? {
            start: e - r,
            end: e
        } : {
            start: e,
            end: e + r
        }
    }

    function jc(o, e, r, a, l) {
        const c = Math.abs(Math.sin(r)),
            h = Math.abs(Math.cos(r));
        let u = 0,
            b = 0;
        a.start < e.l ? (u = (e.l - a.start) / c, o.l = Math.min(o.l, e.l - u)) : a.end > e.r && (u = (a.end - e.r) / c, o.r = Math.max(o.r, e.r + u)), l.start < e.t ? (b = (e.t - l.start) / h, o.t = Math.min(o.t, e.t - b)) : l.end > e.b && (b = (l.end - e.b) / h, o.b = Math.max(o.b, e.b + b))
    }

    function Vc(o) {
        return 0 === o || 180 === o ? "center" : o < 180 ? "left" : "right"
    }

    function Uc(o, e, r) {
        return "right" === r ? o -= e : "center" === r && (o -= e / 2), o
    }

    function Xc(o, e, r) {
        return 90 === r || 270 === r ? o -= e / 2 : (r > 270 || r < 90) && (o -= e), o
    }

    function Bl(o, e, r, a) {
        const {
            ctx: l
        } = o;
        if (r) l.arc(o.xCenter, o.yCenter, e, 0, Yt);
        else {
            let c = o.getPointPosition(0, e);
            l.moveTo(c.x, c.y);
            for (let h = 1; h < a; h++) c = o.getPointPosition(h, e), l.lineTo(c.x, c.y)
        }
    }
    qa.id = "logarithmic", qa.defaults = {
        ticks: {
            callback: li.formatters.logarithmic,
            major: {
                enabled: !0
            }
        }
    };
    class ua extends Aa {
        constructor(e) {
            super(e), this.xCenter = void 0, this.yCenter = void 0, this.drawingArea = void 0, this._pointLabels = [], this._pointLabelItems = []
        }
        setDimensions() {
            const e = this._padding = Ci(Ga(this.options) / 2),
                r = this.width = this.maxWidth - e.width,
                a = this.height = this.maxHeight - e.height;
            this.xCenter = Math.floor(this.left + r / 2 + e.left), this.yCenter = Math.floor(this.top + a / 2 + e.top), this.drawingArea = Math.floor(Math.min(r, a) / 2)
        }
        determineDataLimits() {
            const {
                min: e,
                max: r
            } = this.getMinMax(!1);
            this.min = P(e) && !isNaN(e) ? e : 0, this.max = P(r) && !isNaN(r) ? r : 0, this.handleTickRangeOptions()
        }
        computeTickLimit() {
            return Math.ceil(this.drawingArea / Ga(this.options))
        }
        generateTickLabels(e) {
            Aa.prototype.generateTickLabels.call(this, e), this._pointLabels = this.getLabels().map((r, a) => {
                const l = Z(this.options.pointLabels.callback, [r, a], this);
                return l || 0 === l ? l : ""
            }).filter((r, a) => this.chart.getDataVisibility(a))
        }
        fit() {
            const e = this.options;
            e.display && e.pointLabels.display ? function zc(o) {
                const e = {
                        l: o.left + o._padding.left,
                        r: o.right - o._padding.right,
                        t: o.top + o._padding.top,
                        b: o.bottom - o._padding.bottom
                    },
                    r = Object.assign({}, e),
                    a = [],
                    l = [],
                    c = o._pointLabels.length,
                    h = o.options.pointLabels,
                    u = h.centerPointLabels ? Ft / c : 0;
                for (let b = 0; b < c; b++) {
                    const S = h.setContext(o.getPointLabelContext(b));
                    l[b] = S.padding;
                    const D = o.getPointPosition(b, o.drawingArea + l[b], u),
                        U = ti(S.font),
                        st = Hc(o.ctx, U, o._pointLabels[b]);
                    a[b] = st;
                    const ft = Me(o.getIndexAngle(b) + u),
                        gt = Math.round(ce(ft));
                    jc(r, e, ft, kl(gt, D.x, st.w, 0, 180), kl(gt, D.y, st.h, 90, 270))
                }
                o.setCenterPoint(e.l - r.l, r.r - e.r, e.t - r.t, r.b - e.b), o._pointLabelItems = function Wc(o, e, r) {
                    const a = [],
                        l = o._pointLabels.length,
                        c = o.options,
                        h = Ga(c) / 2,
                        u = o.drawingArea,
                        b = c.pointLabels.centerPointLabels ? Ft / l : 0;
                    for (let S = 0; S < l; S++) {
                        const D = o.getPointPosition(S, u + h + r[S], b),
                            U = Math.round(ce(Me(D.angle + V))),
                            st = e[S],
                            ft = Xc(D.y, st.h, U),
                            gt = Vc(U),
                            $t = Uc(D.x, st.w, gt);
                        a.push({
                            x: D.x,
                            y: ft,
                            textAlign: gt,
                            left: $t,
                            top: ft,
                            right: $t + st.w,
                            bottom: ft + st.h
                        })
                    }
                    return a
                }(o, a, l)
            }(this) : this.setCenterPoint(0, 0, 0, 0)
        }
        setCenterPoint(e, r, a, l) {
            this.xCenter += Math.floor((e - r) / 2), this.yCenter += Math.floor((a - l) / 2), this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(e, r, a, l))
        }
        getIndexAngle(e) {
            return Me(e * (Yt / (this._pointLabels.length || 1)) + Dt(this.options.startAngle || 0))
        }
        getDistanceFromCenterForValue(e) {
            if (y(e)) return NaN;
            const r = this.drawingArea / (this.max - this.min);
            return this.options.reverse ? (this.max - e) * r : (e - this.min) * r
        }
        getValueForDistanceFromCenter(e) {
            if (y(e)) return NaN;
            const r = e / (this.drawingArea / (this.max - this.min));
            return this.options.reverse ? this.max - r : this.min + r
        }
        getPointLabelContext(e) {
            const r = this._pointLabels || [];
            if (e >= 0 && e < r.length) {
                const a = r[e];
                return function Yc(o, e, r) {
                    return Xr(o, {
                        label: r,
                        index: e,
                        type: "pointLabel"
                    })
                }(this.getContext(), e, a)
            }
        }
        getPointPosition(e, r, a = 0) {
            const l = this.getIndexAngle(e) - V + a;
            return {
                x: Math.cos(l) * r + this.xCenter,
                y: Math.sin(l) * r + this.yCenter,
                angle: l
            }
        }
        getPointPositionForValue(e, r) {
            return this.getPointPosition(e, this.getDistanceFromCenterForValue(r))
        }
        getBasePosition(e) {
            return this.getPointPositionForValue(e || 0, this.getBaseValue())
        }
        getPointLabelPosition(e) {
            const {
                left: r,
                top: a,
                right: l,
                bottom: c
            } = this._pointLabelItems[e];
            return {
                left: r,
                top: a,
                right: l,
                bottom: c
            }
        }
        drawBackground() {
            const {
                backgroundColor: e,
                grid: {
                    circular: r
                }
            } = this.options;
            if (e) {
                const a = this.ctx;
                a.save(), a.beginPath(), Bl(this, this.getDistanceFromCenterForValue(this._endValue), r, this._pointLabels.length), a.closePath(), a.fillStyle = e, a.fill(), a.restore()
            }
        }
        drawGrid() {
            const e = this.ctx,
                r = this.options,
                {
                    angleLines: a,
                    grid: l
                } = r,
                c = this._pointLabels.length;
            let h, u, b;
            if (r.pointLabels.display && function qc(o, e) {
                    const {
                        ctx: r,
                        options: {
                            pointLabels: a
                        }
                    } = o;
                    for (let l = e - 1; l >= 0; l--) {
                        const c = a.setContext(o.getPointLabelContext(l)),
                            h = ti(c.font),
                            {
                                x: u,
                                y: b,
                                textAlign: S,
                                left: D,
                                top: U,
                                right: st,
                                bottom: ft
                            } = o._pointLabelItems[l],
                            {
                                backdropColor: gt
                            } = c;
                        if (!y(gt)) {
                            const $t = Qn(c.borderRadius),
                                qt = Ci(c.backdropPadding);
                            r.fillStyle = gt;
                            const re = D - qt.left,
                                _e = U - qt.top,
                                Ae = st - D + qt.width,
                                Te = ft - U + qt.height;
                            Object.values($t).some(Se => 0 !== Se) ? (r.beginPath(), Ji(r, {
                                x: re,
                                y: _e,
                                w: Ae,
                                h: Te,
                                radius: $t
                            }), r.fill()) : r.fillRect(re, _e, Ae, Te)
                        }
                        fr(r, o._pointLabels[l], u, b + h.lineHeight / 2, h, {
                            color: c.color,
                            textAlign: S,
                            textBaseline: "middle"
                        })
                    }
                }(this, c), l.display && this.ticks.forEach((S, D) => {
                    0 !== D && (u = this.getDistanceFromCenterForValue(S.value), function Gc(o, e, r, a) {
                        const l = o.ctx,
                            c = e.circular,
                            {
                                color: h,
                                lineWidth: u
                            } = e;
                        !c && !a || !h || !u || r < 0 || (l.save(), l.strokeStyle = h, l.lineWidth = u, l.setLineDash(e.borderDash), l.lineDashOffset = e.borderDashOffset, l.beginPath(), Bl(o, r, c, a), l.closePath(), l.stroke(), l.restore())
                    }(this, l.setContext(this.getContext(D - 1)), u, c))
                }), a.display) {
                for (e.save(), h = c - 1; h >= 0; h--) {
                    const S = a.setContext(this.getPointLabelContext(h)),
                        {
                            color: D,
                            lineWidth: U
                        } = S;
                    !U || !D || (e.lineWidth = U, e.strokeStyle = D, e.setLineDash(S.borderDash), e.lineDashOffset = S.borderDashOffset, u = this.getDistanceFromCenterForValue(r.ticks.reverse ? this.min : this.max), b = this.getPointPosition(h, u), e.beginPath(), e.moveTo(this.xCenter, this.yCenter), e.lineTo(b.x, b.y), e.stroke())
                }
                e.restore()
            }
        }
        drawBorder() {}
        drawLabels() {
            const e = this.ctx,
                r = this.options,
                a = r.ticks;
            if (!a.display) return;
            const l = this.getIndexAngle(0);
            let c, h;
            e.save(), e.translate(this.xCenter, this.yCenter), e.rotate(l), e.textAlign = "center", e.textBaseline = "middle", this.ticks.forEach((u, b) => {
                if (0 === b && !r.reverse) return;
                const S = a.setContext(this.getContext(b)),
                    D = ti(S.font);
                if (c = this.getDistanceFromCenterForValue(this.ticks[b].value), S.showLabelBackdrop) {
                    e.font = D.string, h = e.measureText(u.label).width, e.fillStyle = S.backdropColor;
                    const U = Ci(S.backdropPadding);
                    e.fillRect(-h / 2 - U.left, -c - D.size / 2 - U.top, h + U.width, D.size + U.height)
                }
                fr(e, u.label, 0, -c, D, {
                    color: S.color
                })
            }), e.restore()
        }
        drawTitle() {}
    }
    ua.id = "radialLinear", ua.defaults = {
        display: !0,
        animate: !0,
        position: "chartArea",
        angleLines: {
            display: !0,
            lineWidth: 1,
            borderDash: [],
            borderDashOffset: 0
        },
        grid: {
            circular: !1
        },
        startAngle: 0,
        ticks: {
            showLabelBackdrop: !0,
            callback: li.formatters.numeric
        },
        pointLabels: {
            backdropColor: void 0,
            backdropPadding: 2,
            display: !0,
            font: {
                size: 10
            },
            callback: o => o,
            padding: 5,
            centerPointLabels: !1
        }
    }, ua.defaultRoutes = {
        "angleLines.color": "borderColor",
        "pointLabels.color": "color",
        "ticks.color": "color"
    }, ua.descriptors = {
        angleLines: {
            _fallback: "grid"
        }
    };
    const Da = {
            millisecond: {
                common: !0,
                size: 1,
                steps: 1e3
            },
            second: {
                common: !0,
                size: 1e3,
                steps: 60
            },
            minute: {
                common: !0,
                size: 6e4,
                steps: 60
            },
            hour: {
                common: !0,
                size: 36e5,
                steps: 24
            },
            day: {
                common: !0,
                size: 864e5,
                steps: 30
            },
            week: {
                common: !1,
                size: 6048e5,
                steps: 4
            },
            month: {
                common: !0,
                size: 2628e6,
                steps: 12
            },
            quarter: {
                common: !1,
                size: 7884e6,
                steps: 4
            },
            year: {
                common: !0,
                size: 3154e7
            }
        },
        Vs = Object.keys(Da);

    function Zc(o, e) {
        return o - e
    }

    function El(o, e) {
        if (y(e)) return null;
        const r = o._adapter,
            {
                parser: a,
                round: l,
                isoWeekday: c
            } = o._parseOpts;
        let h = e;
        return "function" == typeof a && (h = a(h)), P(h) || (h = "string" == typeof a ? r.parse(h, a) : r.parse(h)), null === h ? null : (l && (h = "week" !== l || !Gt(c) && !0 !== c ? r.startOf(h, l) : r.startOf(h, "isoWeek", c)), +h)
    }

    function Tl(o, e, r, a) {
        const l = Vs.length;
        for (let c = Vs.indexOf(o); c < l - 1; ++c) {
            const h = Da[Vs[c]];
            if (h.common && Math.ceil((r - e) / ((h.steps ? h.steps : Number.MAX_SAFE_INTEGER) * h.size)) <= a) return Vs[c]
        }
        return Vs[l - 1]
    }

    function Al(o, e, r) {
        if (r) {
            if (r.length) {
                const {
                    lo: a,
                    hi: l
                } = Pn(r, e);
                o[r[a] >= e ? r[a] : r[l]] = !0
            }
        } else o[e] = !0
    }

    function Dl(o, e, r) {
        const a = [],
            l = {},
            c = e.length;
        let h, u;
        for (h = 0; h < c; ++h) u = e[h], l[u] = h, a.push({
            value: u,
            major: !1
        });
        return 0 !== c && r ? function Qc(o, e, r, a) {
            const l = o._adapter,
                c = +l.startOf(e[0].value, a),
                h = e[e.length - 1].value;
            let u, b;
            for (u = c; u <= h; u = +l.add(u, 1, a)) b = r[u], b >= 0 && (e[b].major = !0);
            return e
        }(o, a, l, r) : a
    }
    class da extends Ut {
        constructor(e) {
            super(e), this._cache = {
                data: [],
                labels: [],
                all: []
            }, this._unit = "day", this._majorUnit = void 0, this._offsets = {}, this._normalized = !1, this._parseOpts = void 0
        }
        init(e, r) {
            const a = e.time || (e.time = {}),
                l = this._adapter = new sa._date(e.adapters.date);
            l.init(r), G(a.displayFormats, l.formats()), this._parseOpts = {
                parser: a.parser,
                round: a.round,
                isoWeekday: a.isoWeekday
            }, super.init(e), this._normalized = r.normalized
        }
        parse(e, r) {
            return void 0 === e ? null : El(this, e)
        }
        beforeLayout() {
            super.beforeLayout(), this._cache = {
                data: [],
                labels: [],
                all: []
            }
        }
        determineDataLimits() {
            const e = this.options,
                r = this._adapter,
                a = e.time.unit || "day";
            let {
                min: l,
                max: c,
                minDefined: h,
                maxDefined: u
            } = this.getUserBounds();

            function b(S) {
                !h && !isNaN(S.min) && (l = Math.min(l, S.min)), !u && !isNaN(S.max) && (c = Math.max(c, S.max))
            }(!h || !u) && (b(this._getLabelBounds()), ("ticks" !== e.bounds || "labels" !== e.ticks.source) && b(this.getMinMax(!1))), l = P(l) && !isNaN(l) ? l : +r.startOf(Date.now(), a), c = P(c) && !isNaN(c) ? c : +r.endOf(Date.now(), a) + 1, this.min = Math.min(l, c - 1), this.max = Math.max(l + 1, c)
        }
        _getLabelBounds() {
            const e = this.getLabelTimestamps();
            let r = Number.POSITIVE_INFINITY,
                a = Number.NEGATIVE_INFINITY;
            return e.length && (r = e[0], a = e[e.length - 1]), {
                min: r,
                max: a
            }
        }
        buildTicks() {
            const e = this.options,
                r = e.time,
                a = e.ticks,
                l = "labels" === a.source ? this.getLabelTimestamps() : this._generate();
            "ticks" === e.bounds && l.length && (this.min = this._userMin || l[0], this.max = this._userMax || l[l.length - 1]);
            const c = this.min,
                u = qe(l, c, this.max);
            return this._unit = r.unit || (a.autoSkip ? Tl(r.minUnit, this.min, this.max, this._getLabelCapacity(c)) : function Jc(o, e, r, a, l) {
                for (let c = Vs.length - 1; c >= Vs.indexOf(r); c--) {
                    const h = Vs[c];
                    if (Da[h].common && o._adapter.diff(l, a, h) >= e - 1) return h
                }
                return Vs[r ? Vs.indexOf(r) : 0]
            }(this, u.length, r.minUnit, this.min, this.max)), this._majorUnit = a.major.enabled && "year" !== this._unit ? function Kc(o) {
                for (let e = Vs.indexOf(o) + 1, r = Vs.length; e < r; ++e)
                    if (Da[Vs[e]].common) return Vs[e]
            }(this._unit) : void 0, this.initOffsets(l), e.reverse && u.reverse(), Dl(this, u, this._majorUnit)
        }
        afterAutoSkip() {
            this.options.offsetAfterAutoskip && this.initOffsets(this.ticks.map(e => +e.value))
        }
        initOffsets(e) {
            let l, c, r = 0,
                a = 0;
            this.options.offset && e.length && (l = this.getDecimalForValue(e[0]), r = 1 === e.length ? 1 - l : (this.getDecimalForValue(e[1]) - l) / 2, c = this.getDecimalForValue(e[e.length - 1]), a = 1 === e.length ? c : (c - this.getDecimalForValue(e[e.length - 2])) / 2);
            const h = e.length < 3 ? .5 : .25;
            r = sn(r, 0, h), a = sn(a, 0, h), this._offsets = {
                start: r,
                end: a,
                factor: 1 / (r + 1 + a)
            }
        }
        _generate() {
            const e = this._adapter,
                r = this.min,
                a = this.max,
                l = this.options,
                c = l.time,
                h = c.unit || Tl(c.minUnit, r, a, this._getLabelCapacity(r)),
                u = O(c.stepSize, 1),
                b = "week" === h && c.isoWeekday,
                S = Gt(b) || !0 === b,
                D = {};
            let st, ft, U = r;
            if (S && (U = +e.startOf(U, "isoWeek", b)), U = +e.startOf(U, S ? "day" : h), e.diff(a, r, h) > 1e5 * u) throw new Error(r + " and " + a + " are too far apart with stepSize of " + u + " " + h);
            const gt = "data" === l.ticks.source && this.getDataTimestamps();
            for (st = U, ft = 0; st < a; st = +e.add(st, u, h), ft++) Al(D, st, gt);
            return (st === a || "ticks" === l.bounds || 1 === ft) && Al(D, st, gt), Object.keys(D).sort(($t, qt) => $t - qt).map($t => +$t)
        }
        getLabelForValue(e) {
            const a = this.options.time;
            return this._adapter.format(e, a.tooltipFormat ? a.tooltipFormat : a.displayFormats.datetime)
        }
        _tickFormatFunction(e, r, a, l) {
            const c = this.options,
                h = c.time.displayFormats,
                u = this._unit,
                b = this._majorUnit,
                D = b && h[b],
                U = a[r],
                ft = this._adapter.format(e, l || (b && D && U && U.major ? D : u && h[u])),
                gt = c.ticks.callback;
            return gt ? Z(gt, [ft, r, a], this) : ft
        }
        generateTickLabels(e) {
            let r, a, l;
            for (r = 0, a = e.length; r < a; ++r) l = e[r], l.label = this._tickFormatFunction(l.value, r, e)
        }
        getDecimalForValue(e) {
            return null === e ? NaN : (e - this.min) / (this.max - this.min)
        }
        getPixelForValue(e) {
            const r = this._offsets,
                a = this.getDecimalForValue(e);
            return this.getPixelForDecimal((r.start + a) * r.factor)
        }
        getValueForPixel(e) {
            const r = this._offsets,
                a = this.getDecimalForPixel(e) / r.factor - r.end;
            return this.min + a * (this.max - this.min)
        }
        _getLabelSize(e) {
            const r = this.options.ticks,
                a = this.ctx.measureText(e).width,
                l = Dt(this.isHorizontal() ? r.maxRotation : r.minRotation),
                c = Math.cos(l),
                h = Math.sin(l),
                u = this._resolveTickFontOptions(0).size;
            return {
                w: a * c + u * h,
                h: a * h + u * c
            }
        }
        _getLabelCapacity(e) {
            const r = this.options.time,
                a = r.displayFormats,
                l = a[r.unit] || a.millisecond,
                c = this._tickFormatFunction(e, 0, Dl(this, [e], this._majorUnit), l),
                h = this._getLabelSize(c),
                u = Math.floor(this.isHorizontal() ? this.width / h.w : this.height / h.h) - 1;
            return u > 0 ? u : 1
        }
        getDataTimestamps() {
            let r, a, e = this._cache.data || [];
            if (e.length) return e;
            const l = this.getMatchingVisibleMetas();
            if (this._normalized && l.length) return this._cache.data = l[0].controller.getAllParsedValues(this);
            for (r = 0, a = l.length; r < a; ++r) e = e.concat(l[r].controller.getAllParsedValues(this));
            return this._cache.data = this.normalize(e)
        }
        getLabelTimestamps() {
            const e = this._cache.labels || [];
            let r, a;
            if (e.length) return e;
            const l = this.getLabels();
            for (r = 0, a = l.length; r < a; ++r) e.push(El(this, l[r]));
            return this._cache.labels = this._normalized ? e : this.normalize(e)
        }
        normalize(e) {
            return Ni(e.sort(Zc))
        }
    }

    function Oa(o, e, r) {
        let c, h, u, b, a = 0,
            l = o.length - 1;
        r ? (e >= o[a].pos && e <= o[l].pos && ({
            lo: a,
            hi: l
        } = En(o, "pos", e)), ({
            pos: c,
            time: u
        } = o[a]), ({
            pos: h,
            time: b
        } = o[l])) : (e >= o[a].time && e <= o[l].time && ({
            lo: a,
            hi: l
        } = En(o, "time", e)), ({
            time: c,
            pos: u
        } = o[a]), ({
            time: h,
            pos: b
        } = o[l]));
        const S = h - c;
        return S ? u + (b - u) * (e - c) / S : u
    }
    da.id = "time", da.defaults = {
        bounds: "data",
        adapters: {},
        time: {
            parser: !1,
            unit: !1,
            round: !1,
            isoWeekday: !1,
            minUnit: "millisecond",
            displayFormats: {}
        },
        ticks: {
            source: "auto",
            major: {
                enabled: !1
            }
        }
    };
    class Ya extends da {
        constructor(e) {
            super(e), this._table = [], this._minPos = void 0, this._tableRange = void 0
        }
        initOffsets() {
            const e = this._getTimestampsForTable(),
                r = this._table = this.buildLookupTable(e);
            this._minPos = Oa(r, this.min), this._tableRange = Oa(r, this.max) - this._minPos, super.initOffsets(e)
        }
        buildLookupTable(e) {
            const {
                min: r,
                max: a
            } = this, l = [], c = [];
            let h, u, b, S, D;
            for (h = 0, u = e.length; h < u; ++h) S = e[h], S >= r && S <= a && l.push(S);
            if (l.length < 2) return [{
                time: r,
                pos: 0
            }, {
                time: a,
                pos: 1
            }];
            for (h = 0, u = l.length; h < u; ++h) D = l[h + 1], b = l[h - 1], S = l[h], Math.round((D + b) / 2) !== S && c.push({
                time: S,
                pos: h / (u - 1)
            });
            return c
        }
        _getTimestampsForTable() {
            let e = this._cache.all || [];
            if (e.length) return e;
            const r = this.getDataTimestamps(),
                a = this.getLabelTimestamps();
            return e = r.length && a.length ? this.normalize(r.concat(a)) : r.length ? r : a, e = this._cache.all = e, e
        }
        getDecimalForValue(e) {
            return (Oa(this._table, e) - this._minPos) / this._tableRange
        }
        getValueForPixel(e) {
            const r = this._offsets,
                a = this.getDecimalForPixel(e) / r.factor - r.end;
            return Oa(this._table, a * this._tableRange + this._minPos, !0)
        }
    }
    Ya.id = "timeseries", Ya.defaults = da.defaults;
    var Ol = Object.freeze({
        __proto__: null,
        CategoryScale: Ta,
        LinearScale: Xa,
        LogarithmicScale: qa,
        RadialLinearScale: ua,
        TimeScale: da,
        TimeSeriesScale: Ya
    });
    return wn.register(ha, Ol, Ha, wl), wn.helpers = { ...He
    }, wn._adapters = sa, wn.Animation = Jr, wn.Animations = Ro, wn.animator = gn, wn.controllers = Y.controllers.items, wn.DatasetController = nn, wn.Element = Yn, wn.elements = Ha, wn.Interaction = Ki, wn.layouts = ue, wn.platforms = vo, wn.Scale = Ut, wn.Ticks = li, Object.assign(wn, ha, Ol, Ha, wl, vo), wn.Chart = wn, typeof window < "u" && (window.Chart = wn), wn
}),
function(p, R) {
    "object" == typeof exports ? module.exports = exports = R() : "function" == typeof define && define.amd ? define([], R) : p.CryptoJS = R()
}(this, function() {
    var R, I, H, P, K, O, J, mt, Z, A, q, nt, p = p || (R = Math, I = Object.create || function() {
        function lt() {}
        return function(M) {
            var G;
            return lt.prototype = M, G = new lt, lt.prototype = null, G
        }
    }(), P = (H = {}).lib = {}, K = P.Base = {
        extend: function(lt) {
            var M = I(this);
            return lt && M.mixIn(lt), (!M.hasOwnProperty("init") || this.init === M.init) && (M.init = function() {
                M.$super.init.apply(this, arguments)
            }), M.init.prototype = M, M.$super = this, M
        },
        create: function() {
            var lt = this.extend();
            return lt.init.apply(lt, arguments), lt
        },
        init: function() {},
        mixIn: function(lt) {
            for (var M in lt) lt.hasOwnProperty(M) && (this[M] = lt[M]);
            lt.hasOwnProperty("toString") && (this.toString = lt.toString)
        },
        clone: function() {
            return this.init.prototype.extend(this)
        }
    }, O = P.WordArray = K.extend({
        init: function(lt, M) {
            lt = this.words = lt || [], this.sigBytes = null != M ? M : 4 * lt.length
        },
        toString: function(lt) {
            return (lt || mt).stringify(this)
        },
        concat: function(lt) {
            var M = this.words,
                G = lt.words,
                et = this.sigBytes,
                dt = lt.sigBytes;
            if (this.clamp(), et % 4)
                for (var Bt = 0; Bt < dt; Bt++) M[et + Bt >>> 2] |= (G[Bt >>> 2] >>> 24 - Bt % 4 * 8 & 255) << 24 - (et + Bt) % 4 * 8;
            else
                for (Bt = 0; Bt < dt; Bt += 4) M[et + Bt >>> 2] = G[Bt >>> 2];
            return this.sigBytes += dt, this
        },
        clamp: function() {
            var lt = this.words,
                M = this.sigBytes;
            lt[M >>> 2] &= 4294967295 << 32 - M % 4 * 8, lt.length = R.ceil(M / 4)
        },
        clone: function() {
            var lt = K.clone.call(this);
            return lt.words = this.words.slice(0), lt
        },
        random: function(lt) {
            for (var dt, M = [], G = function(_) {
                    var Jt = 987654321,
                        jt = 4294967295;
                    return function() {
                        var Wt = ((Jt = 36969 * (65535 & Jt) + (Jt >> 16) & jt) << 16) + (_ = 18e3 * (65535 & _) + (_ >> 16) & jt) & jt;
                        return Wt /= 4294967296, (Wt += .5) * (R.random() > .5 ? 1 : -1)
                    }
                }, et = 0; et < lt; et += 4) {
                var Bt = G(4294967296 * (dt || R.random()));
                dt = 987654071 * Bt(), M.push(4294967296 * Bt() | 0)
            }
            return new O.init(M, lt)
        }
    }), J = H.enc = {}, mt = J.Hex = {
        stringify: function(lt) {
            for (var M = lt.words, G = lt.sigBytes, et = [], dt = 0; dt < G; dt++) {
                var Bt = M[dt >>> 2] >>> 24 - dt % 4 * 8 & 255;
                et.push((Bt >>> 4).toString(16)), et.push((15 & Bt).toString(16))
            }
            return et.join("")
        },
        parse: function(lt) {
            for (var M = lt.length, G = [], et = 0; et < M; et += 2) G[et >>> 3] |= parseInt(lt.substr(et, 2), 16) << 24 - et % 8 * 4;
            return new O.init(G, M / 2)
        }
    }, Z = J.Latin1 = {
        stringify: function(lt) {
            for (var M = lt.words, G = lt.sigBytes, et = [], dt = 0; dt < G; dt++) et.push(String.fromCharCode(M[dt >>> 2] >>> 24 - dt % 4 * 8 & 255));
            return et.join("")
        },
        parse: function(lt) {
            for (var M = lt.length, G = [], et = 0; et < M; et++) G[et >>> 2] |= (255 & lt.charCodeAt(et)) << 24 - et % 4 * 8;
            return new O.init(G, M)
        }
    }, A = J.Utf8 = {
        stringify: function(lt) {
            try {
                return decodeURIComponent(escape(Z.stringify(lt)))
            } catch {
                throw new Error("Malformed UTF-8 data")
            }
        },
        parse: function(lt) {
            return Z.parse(unescape(encodeURIComponent(lt)))
        }
    }, q = P.BufferedBlockAlgorithm = K.extend({
        reset: function() {
            this._data = new O.init, this._nDataBytes = 0
        },
        _append: function(lt) {
            "string" == typeof lt && (lt = A.parse(lt)), this._data.concat(lt), this._nDataBytes += lt.sigBytes
        },
        _process: function(lt) {
            var M = this._data,
                G = M.words,
                et = M.sigBytes,
                dt = this.blockSize,
                wt = et / (4 * dt),
                _ = (wt = lt ? R.ceil(wt) : R.max((0 | wt) - this._minBufferSize, 0)) * dt,
                Jt = R.min(4 * _, et);
            if (_) {
                for (var jt = 0; jt < _; jt += dt) this._doProcessBlock(G, jt);
                var Wt = G.splice(0, _);
                M.sigBytes -= Jt
            }
            return new O.init(Wt, Jt)
        },
        clone: function() {
            var lt = K.clone.call(this);
            return lt._data = this._data.clone(), lt
        },
        _minBufferSize: 0
    }), P.Hasher = q.extend({
        cfg: K.extend(),
        init: function(lt) {
            this.cfg = this.cfg.extend(lt), this.reset()
        },
        reset: function() {
            q.reset.call(this), this._doReset()
        },
        update: function(lt) {
            return this._append(lt), this._process(), this
        },
        finalize: function(lt) {
            return lt && this._append(lt), this._doFinalize()
        },
        blockSize: 16,
        _createHelper: function(lt) {
            return function(M, G) {
                return new lt.init(G).finalize(M)
            }
        },
        _createHmacHelper: function(lt) {
            return function(M, G) {
                return new nt.HMAC.init(lt, G).finalize(M)
            }
        }
    }), nt = H.algo = {}, H);
    return function() {
            var I = p.lib.WordArray;
            p.enc.Base64 = {
                stringify: function(O) {
                    var J = O.words,
                        mt = O.sigBytes,
                        Z = this._map;
                    O.clamp();
                    for (var A = [], q = 0; q < mt; q += 3)
                        for (var M = (J[q >>> 2] >>> 24 - q % 4 * 8 & 255) << 16 | (J[q + 1 >>> 2] >>> 24 - (q + 1) % 4 * 8 & 255) << 8 | J[q + 2 >>> 2] >>> 24 - (q + 2) % 4 * 8 & 255, G = 0; G < 4 && q + .75 * G < mt; G++) A.push(Z.charAt(M >>> 6 * (3 - G) & 63));
                    var et = Z.charAt(64);
                    if (et)
                        for (; A.length % 4;) A.push(et);
                    return A.join("")
                },
                parse: function(O) {
                    var J = O.length,
                        mt = this._map,
                        Z = this._reverseMap;
                    if (!Z) {
                        Z = this._reverseMap = [];
                        for (var A = 0; A < mt.length; A++) Z[mt.charCodeAt(A)] = A
                    }
                    var q = mt.charAt(64);
                    if (q) {
                        var tt = O.indexOf(q); - 1 !== tt && (J = tt)
                    }
                    return function K(O, J, mt) {
                        for (var Z = [], A = 0, q = 0; q < J; q++)
                            if (q % 4) {
                                var tt = mt[O.charCodeAt(q - 1)] << q % 4 * 2,
                                    nt = mt[O.charCodeAt(q)] >>> 6 - q % 4 * 2;
                                Z[A >>> 2] |= (tt | nt) << 24 - A % 4 * 8, A++
                            }
                        return I.create(Z, A)
                    }(O, J, Z)
                },
                _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
            }
        }(),
        function(R) {
            var y = p,
                I = y.lib,
                H = I.WordArray,
                P = I.Hasher,
                K = y.algo,
                O = [];
            ! function() {
                for (var tt = 0; tt < 64; tt++) O[tt] = 4294967296 * R.abs(R.sin(tt + 1)) | 0
            }();
            var J = K.MD5 = P.extend({
                _doReset: function() {
                    this._hash = new H.init([1732584193, 4023233417, 2562383102, 271733878])
                },
                _doProcessBlock: function(tt, nt) {
                    for (var lt = 0; lt < 16; lt++) {
                        var M = nt + lt,
                            G = tt[M];
                        tt[M] = 16711935 & (G << 8 | G >>> 24) | 4278255360 & (G << 24 | G >>> 8)
                    }
                    var et = this._hash.words,
                        dt = tt[nt + 0],
                        Bt = tt[nt + 1],
                        wt = tt[nt + 2],
                        _ = tt[nt + 3],
                        Jt = tt[nt + 4],
                        jt = tt[nt + 5],
                        Wt = tt[nt + 6],
                        be = tt[nt + 7],
                        Kt = tt[nt + 8],
                        Qt = tt[nt + 9],
                        Ft = tt[nt + 10],
                        Yt = tt[nt + 11],
                        it = tt[nt + 12],
                        ot = tt[nt + 13],
                        St = tt[nt + 14],
                        V = tt[nt + 15],
                        rt = et[0],
                        ut = et[1],
                        z = et[2],
                        X = et[3];
                    rt = mt(rt, ut, z, X, dt, 7, O[0]), X = mt(X, rt, ut, z, Bt, 12, O[1]), z = mt(z, X, rt, ut, wt, 17, O[2]), ut = mt(ut, z, X, rt, _, 22, O[3]), rt = mt(rt, ut, z, X, Jt, 7, O[4]), X = mt(X, rt, ut, z, jt, 12, O[5]), z = mt(z, X, rt, ut, Wt, 17, O[6]), ut = mt(ut, z, X, rt, be, 22, O[7]), rt = mt(rt, ut, z, X, Kt, 7, O[8]), X = mt(X, rt, ut, z, Qt, 12, O[9]), z = mt(z, X, rt, ut, Ft, 17, O[10]), ut = mt(ut, z, X, rt, Yt, 22, O[11]), rt = mt(rt, ut, z, X, it, 7, O[12]), X = mt(X, rt, ut, z, ot, 12, O[13]), z = mt(z, X, rt, ut, St, 17, O[14]), rt = Z(rt, ut = mt(ut, z, X, rt, V, 22, O[15]), z, X, Bt, 5, O[16]), X = Z(X, rt, ut, z, Wt, 9, O[17]), z = Z(z, X, rt, ut, Yt, 14, O[18]), ut = Z(ut, z, X, rt, dt, 20, O[19]), rt = Z(rt, ut, z, X, jt, 5, O[20]), X = Z(X, rt, ut, z, Ft, 9, O[21]), z = Z(z, X, rt, ut, V, 14, O[22]), ut = Z(ut, z, X, rt, Jt, 20, O[23]), rt = Z(rt, ut, z, X, Qt, 5, O[24]), X = Z(X, rt, ut, z, St, 9, O[25]), z = Z(z, X, rt, ut, _, 14, O[26]), ut = Z(ut, z, X, rt, Kt, 20, O[27]), rt = Z(rt, ut, z, X, ot, 5, O[28]), X = Z(X, rt, ut, z, wt, 9, O[29]), z = Z(z, X, rt, ut, be, 14, O[30]), rt = A(rt, ut = Z(ut, z, X, rt, it, 20, O[31]), z, X, jt, 4, O[32]), X = A(X, rt, ut, z, Kt, 11, O[33]), z = A(z, X, rt, ut, Yt, 16, O[34]), ut = A(ut, z, X, rt, St, 23, O[35]), rt = A(rt, ut, z, X, Bt, 4, O[36]), X = A(X, rt, ut, z, Jt, 11, O[37]), z = A(z, X, rt, ut, be, 16, O[38]), ut = A(ut, z, X, rt, Ft, 23, O[39]), rt = A(rt, ut, z, X, ot, 4, O[40]), X = A(X, rt, ut, z, dt, 11, O[41]), z = A(z, X, rt, ut, _, 16, O[42]), ut = A(ut, z, X, rt, Wt, 23, O[43]), rt = A(rt, ut, z, X, Qt, 4, O[44]), X = A(X, rt, ut, z, it, 11, O[45]), z = A(z, X, rt, ut, V, 16, O[46]), rt = q(rt, ut = A(ut, z, X, rt, wt, 23, O[47]), z, X, dt, 6, O[48]), X = q(X, rt, ut, z, be, 10, O[49]), z = q(z, X, rt, ut, St, 15, O[50]), ut = q(ut, z, X, rt, jt, 21, O[51]), rt = q(rt, ut, z, X, it, 6, O[52]), X = q(X, rt, ut, z, _, 10, O[53]), z = q(z, X, rt, ut, Ft, 15, O[54]), ut = q(ut, z, X, rt, Bt, 21, O[55]), rt = q(rt, ut, z, X, Kt, 6, O[56]), X = q(X, rt, ut, z, V, 10, O[57]), z = q(z, X, rt, ut, Wt, 15, O[58]), ut = q(ut, z, X, rt, ot, 21, O[59]), rt = q(rt, ut, z, X, Jt, 6, O[60]), X = q(X, rt, ut, z, Yt, 10, O[61]), z = q(z, X, rt, ut, wt, 15, O[62]), ut = q(ut, z, X, rt, Qt, 21, O[63]), et[0] = et[0] + rt | 0, et[1] = et[1] + ut | 0, et[2] = et[2] + z | 0, et[3] = et[3] + X | 0
                },
                _doFinalize: function() {
                    var tt = this._data,
                        nt = tt.words,
                        lt = 8 * this._nDataBytes,
                        M = 8 * tt.sigBytes;
                    nt[M >>> 5] |= 128 << 24 - M % 32;
                    var G = R.floor(lt / 4294967296),
                        et = lt;
                    nt[15 + (M + 64 >>> 9 << 4)] = 16711935 & (G << 8 | G >>> 24) | 4278255360 & (G << 24 | G >>> 8), nt[14 + (M + 64 >>> 9 << 4)] = 16711935 & (et << 8 | et >>> 24) | 4278255360 & (et << 24 | et >>> 8), tt.sigBytes = 4 * (nt.length + 1), this._process();
                    for (var dt = this._hash, Bt = dt.words, wt = 0; wt < 4; wt++) {
                        var _ = Bt[wt];
                        Bt[wt] = 16711935 & (_ << 8 | _ >>> 24) | 4278255360 & (_ << 24 | _ >>> 8)
                    }
                    return dt
                },
                clone: function() {
                    var tt = P.clone.call(this);
                    return tt._hash = this._hash.clone(), tt
                }
            });

            function mt(tt, nt, lt, M, G, et, dt) {
                var Bt = tt + (nt & lt | ~nt & M) + G + dt;
                return (Bt << et | Bt >>> 32 - et) + nt
            }

            function Z(tt, nt, lt, M, G, et, dt) {
                var Bt = tt + (nt & M | lt & ~M) + G + dt;
                return (Bt << et | Bt >>> 32 - et) + nt
            }

            function A(tt, nt, lt, M, G, et, dt) {
                var Bt = tt + (nt ^ lt ^ M) + G + dt;
                return (Bt << et | Bt >>> 32 - et) + nt
            }

            function q(tt, nt, lt, M, G, et, dt) {
                var Bt = tt + (lt ^ (nt | ~M)) + G + dt;
                return (Bt << et | Bt >>> 32 - et) + nt
            }
            y.MD5 = P._createHelper(J), y.HmacMD5 = P._createHmacHelper(J)
        }(Math),
        function() {
            var R = p,
                y = R.lib,
                I = y.WordArray,
                H = y.Hasher,
                K = [],
                O = R.algo.SHA1 = H.extend({
                    _doReset: function() {
                        this._hash = new I.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520])
                    },
                    _doProcessBlock: function(J, mt) {
                        for (var Z = this._hash.words, A = Z[0], q = Z[1], tt = Z[2], nt = Z[3], lt = Z[4], M = 0; M < 80; M++) {
                            if (M < 16) K[M] = 0 | J[mt + M];
                            else {
                                var G = K[M - 3] ^ K[M - 8] ^ K[M - 14] ^ K[M - 16];
                                K[M] = G << 1 | G >>> 31
                            }
                            var et = (A << 5 | A >>> 27) + lt + K[M];
                            et += M < 20 ? 1518500249 + (q & tt | ~q & nt) : M < 40 ? 1859775393 + (q ^ tt ^ nt) : M < 60 ? (q & tt | q & nt | tt & nt) - 1894007588 : (q ^ tt ^ nt) - 899497514, lt = nt, nt = tt, tt = q << 30 | q >>> 2, q = A, A = et
                        }
                        Z[0] = Z[0] + A | 0, Z[1] = Z[1] + q | 0, Z[2] = Z[2] + tt | 0, Z[3] = Z[3] + nt | 0, Z[4] = Z[4] + lt | 0
                    },
                    _doFinalize: function() {
                        var J = this._data,
                            mt = J.words,
                            Z = 8 * this._nDataBytes,
                            A = 8 * J.sigBytes;
                        return mt[A >>> 5] |= 128 << 24 - A % 32, mt[14 + (A + 64 >>> 9 << 4)] = Math.floor(Z / 4294967296), mt[15 + (A + 64 >>> 9 << 4)] = Z, J.sigBytes = 4 * mt.length, this._process(), this._hash
                    },
                    clone: function() {
                        var J = H.clone.call(this);
                        return J._hash = this._hash.clone(), J
                    }
                });
            R.SHA1 = H._createHelper(O), R.HmacSHA1 = H._createHmacHelper(O)
        }(),
        function(R) {
            var y = p,
                I = y.lib,
                H = I.WordArray,
                P = I.Hasher,
                K = y.algo,
                O = [],
                J = [];
            ! function() {
                function A(lt) {
                    for (var M = R.sqrt(lt), G = 2; G <= M; G++)
                        if (!(lt % G)) return !1;
                    return !0
                }

                function q(lt) {
                    return 4294967296 * (lt - (0 | lt)) | 0
                }
                for (var tt = 2, nt = 0; nt < 64;) A(tt) && (nt < 8 && (O[nt] = q(R.pow(tt, .5))), J[nt] = q(R.pow(tt, 1 / 3)), nt++), tt++
            }();
            var mt = [],
                Z = K.SHA256 = P.extend({
                    _doReset: function() {
                        this._hash = new H.init(O.slice(0))
                    },
                    _doProcessBlock: function(A, q) {
                        for (var tt = this._hash.words, nt = tt[0], lt = tt[1], M = tt[2], G = tt[3], et = tt[4], dt = tt[5], Bt = tt[6], wt = tt[7], _ = 0; _ < 64; _++) {
                            if (_ < 16) mt[_] = 0 | A[q + _];
                            else {
                                var Jt = mt[_ - 15],
                                    Wt = mt[_ - 2];
                                mt[_] = ((Jt << 25 | Jt >>> 7) ^ (Jt << 14 | Jt >>> 18) ^ Jt >>> 3) + mt[_ - 7] + ((Wt << 15 | Wt >>> 17) ^ (Wt << 13 | Wt >>> 19) ^ Wt >>> 10) + mt[_ - 16]
                            }
                            var Qt = nt & lt ^ nt & M ^ lt & M,
                                it = wt + ((et << 26 | et >>> 6) ^ (et << 21 | et >>> 11) ^ (et << 7 | et >>> 25)) + (et & dt ^ ~et & Bt) + J[_] + mt[_];
                            wt = Bt, Bt = dt, dt = et, et = G + it | 0, G = M, M = lt, lt = nt, nt = it + (((nt << 30 | nt >>> 2) ^ (nt << 19 | nt >>> 13) ^ (nt << 10 | nt >>> 22)) + Qt) | 0
                        }
                        tt[0] = tt[0] + nt | 0, tt[1] = tt[1] + lt | 0, tt[2] = tt[2] + M | 0, tt[3] = tt[3] + G | 0, tt[4] = tt[4] + et | 0, tt[5] = tt[5] + dt | 0, tt[6] = tt[6] + Bt | 0, tt[7] = tt[7] + wt | 0
                    },
                    _doFinalize: function() {
                        var A = this._data,
                            q = A.words,
                            tt = 8 * this._nDataBytes,
                            nt = 8 * A.sigBytes;
                        return q[nt >>> 5] |= 128 << 24 - nt % 32, q[14 + (nt + 64 >>> 9 << 4)] = R.floor(tt / 4294967296), q[15 + (nt + 64 >>> 9 << 4)] = tt, A.sigBytes = 4 * q.length, this._process(), this._hash
                    },
                    clone: function() {
                        var A = P.clone.call(this);
                        return A._hash = this._hash.clone(), A
                    }
                });
            y.SHA256 = P._createHelper(Z), y.HmacSHA256 = P._createHmacHelper(Z)
        }(Math),
        function() {
            var I = p.lib.WordArray,
                H = p.enc;

            function K(O) {
                return O << 8 & 4278255360 | O >>> 8 & 16711935
            }
            H.Utf16 = H.Utf16BE = {
                stringify: function(O) {
                    for (var J = O.words, mt = O.sigBytes, Z = [], A = 0; A < mt; A += 2) Z.push(String.fromCharCode(J[A >>> 2] >>> 16 - A % 4 * 8 & 65535));
                    return Z.join("")
                },
                parse: function(O) {
                    for (var J = O.length, mt = [], Z = 0; Z < J; Z++) mt[Z >>> 1] |= O.charCodeAt(Z) << 16 - Z % 2 * 16;
                    return I.create(mt, 2 * J)
                }
            }, H.Utf16LE = {
                stringify: function(O) {
                    for (var J = O.words, mt = O.sigBytes, Z = [], A = 0; A < mt; A += 2) {
                        var q = K(J[A >>> 2] >>> 16 - A % 4 * 8 & 65535);
                        Z.push(String.fromCharCode(q))
                    }
                    return Z.join("")
                },
                parse: function(O) {
                    for (var J = O.length, mt = [], Z = 0; Z < J; Z++) mt[Z >>> 1] |= K(O.charCodeAt(Z) << 16 - Z % 2 * 16);
                    return I.create(mt, 2 * J)
                }
            }
        }(),
        function() {
            if ("function" == typeof ArrayBuffer) {
                var I = p.lib.WordArray,
                    H = I.init,
                    P = I.init = function(K) {
                        if (K instanceof ArrayBuffer && (K = new Uint8Array(K)), (K instanceof Int8Array || typeof Uint8ClampedArray < "u" && K instanceof Uint8ClampedArray || K instanceof Int16Array || K instanceof Uint16Array || K instanceof Int32Array || K instanceof Uint32Array || K instanceof Float32Array || K instanceof Float64Array) && (K = new Uint8Array(K.buffer, K.byteOffset, K.byteLength)), K instanceof Uint8Array) {
                            for (var O = K.byteLength, J = [], mt = 0; mt < O; mt++) J[mt >>> 2] |= K[mt] << 24 - mt % 4 * 8;
                            H.call(this, J, O)
                        } else H.apply(this, arguments)
                    };
                P.prototype = I
            }
        }(),
        function(R) {
            var y = p,
                I = y.lib,
                H = I.WordArray,
                P = I.Hasher,
                K = y.algo,
                O = H.create([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]),
                J = H.create([5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]),
                mt = H.create([11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]),
                Z = H.create([8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]),
                A = H.create([0, 1518500249, 1859775393, 2400959708, 2840853838]),
                q = H.create([1352829926, 1548603684, 1836072691, 2053994217, 0]),
                tt = K.RIPEMD160 = P.extend({
                    _doReset: function() {
                        this._hash = H.create([1732584193, 4023233417, 2562383102, 271733878, 3285377520])
                    },
                    _doProcessBlock: function(Bt, wt) {
                        for (var _ = 0; _ < 16; _++) {
                            var Jt = wt + _,
                                jt = Bt[Jt];
                            Bt[Jt] = 16711935 & (jt << 8 | jt >>> 24) | 4278255360 & (jt << 24 | jt >>> 8)
                        }
                        var ot, St, V, rt, ut, z, X, _t, Mt, Gt, xt, Wt = this._hash.words,
                            be = A.words,
                            Kt = q.words,
                            Qt = O.words,
                            Ft = J.words,
                            Yt = mt.words,
                            it = Z.words;
                        for (z = ot = Wt[0], X = St = Wt[1], _t = V = Wt[2], Mt = rt = Wt[3], Gt = ut = Wt[4], _ = 0; _ < 80; _ += 1) xt = ot + Bt[wt + Qt[_]] | 0, xt += _ < 16 ? nt(St, V, rt) + be[0] : _ < 32 ? lt(St, V, rt) + be[1] : _ < 48 ? M(St, V, rt) + be[2] : _ < 64 ? G(St, V, rt) + be[3] : et(St, V, rt) + be[4], xt = (xt = dt(xt |= 0, Yt[_])) + ut | 0, ot = ut, ut = rt, rt = dt(V, 10), V = St, St = xt, xt = z + Bt[wt + Ft[_]] | 0, xt += _ < 16 ? et(X, _t, Mt) + Kt[0] : _ < 32 ? G(X, _t, Mt) + Kt[1] : _ < 48 ? M(X, _t, Mt) + Kt[2] : _ < 64 ? lt(X, _t, Mt) + Kt[3] : nt(X, _t, Mt) + Kt[4], xt = (xt = dt(xt |= 0, it[_])) + Gt | 0, z = Gt, Gt = Mt, Mt = dt(_t, 10), _t = X, X = xt;
                        xt = Wt[1] + V + Mt | 0, Wt[1] = Wt[2] + rt + Gt | 0, Wt[2] = Wt[3] + ut + z | 0, Wt[3] = Wt[4] + ot + X | 0, Wt[4] = Wt[0] + St + _t | 0, Wt[0] = xt
                    },
                    _doFinalize: function() {
                        var Bt = this._data,
                            wt = Bt.words,
                            _ = 8 * this._nDataBytes,
                            Jt = 8 * Bt.sigBytes;
                        wt[Jt >>> 5] |= 128 << 24 - Jt % 32, wt[14 + (Jt + 64 >>> 9 << 4)] = 16711935 & (_ << 8 | _ >>> 24) | 4278255360 & (_ << 24 | _ >>> 8), Bt.sigBytes = 4 * (wt.length + 1), this._process();
                        for (var jt = this._hash, Wt = jt.words, be = 0; be < 5; be++) {
                            var Kt = Wt[be];
                            Wt[be] = 16711935 & (Kt << 8 | Kt >>> 24) | 4278255360 & (Kt << 24 | Kt >>> 8)
                        }
                        return jt
                    },
                    clone: function() {
                        var Bt = P.clone.call(this);
                        return Bt._hash = this._hash.clone(), Bt
                    }
                });

            function nt(Bt, wt, _) {
                return Bt ^ wt ^ _
            }

            function lt(Bt, wt, _) {
                return Bt & wt | ~Bt & _
            }

            function M(Bt, wt, _) {
                return (Bt | ~wt) ^ _
            }

            function G(Bt, wt, _) {
                return Bt & _ | wt & ~_
            }

            function et(Bt, wt, _) {
                return Bt ^ (wt | ~_)
            }

            function dt(Bt, wt) {
                return Bt << wt | Bt >>> 32 - wt
            }
            y.RIPEMD160 = P._createHelper(tt), y.HmacRIPEMD160 = P._createHmacHelper(tt)
        }(Math),
        function() {
            var P = p.enc.Utf8;
            p.algo.HMAC = p.lib.Base.extend({
                init: function(J, mt) {
                    J = this._hasher = new J.init, "string" == typeof mt && (mt = P.parse(mt));
                    var Z = J.blockSize,
                        A = 4 * Z;
                    mt.sigBytes > A && (mt = J.finalize(mt)), mt.clamp();
                    for (var q = this._oKey = mt.clone(), tt = this._iKey = mt.clone(), nt = q.words, lt = tt.words, M = 0; M < Z; M++) nt[M] ^= 1549556828, lt[M] ^= 909522486;
                    q.sigBytes = tt.sigBytes = A, this.reset()
                },
                reset: function() {
                    var J = this._hasher;
                    J.reset(), J.update(this._iKey)
                },
                update: function(J) {
                    return this._hasher.update(J), this
                },
                finalize: function(J) {
                    var mt = this._hasher,
                        Z = mt.finalize(J);
                    return mt.reset(), mt.finalize(this._oKey.clone().concat(Z))
                }
            })
        }(),
        function() {
            var R = p,
                y = R.lib,
                I = y.Base,
                H = y.WordArray,
                P = R.algo,
                O = P.HMAC,
                J = P.PBKDF2 = I.extend({
                    cfg: I.extend({
                        keySize: 4,
                        hasher: P.SHA1,
                        iterations: 1
                    }),
                    init: function(mt) {
                        this.cfg = this.cfg.extend(mt)
                    },
                    compute: function(mt, Z) {
                        for (var A = this.cfg, q = O.create(A.hasher, mt), tt = H.create(), nt = H.create([1]), lt = tt.words, M = nt.words, G = A.keySize, et = A.iterations; lt.length < G;) {
                            var dt = q.update(Z).finalize(nt);
                            q.reset();
                            for (var Bt = dt.words, wt = Bt.length, _ = dt, Jt = 1; Jt < et; Jt++) {
                                _ = q.finalize(_), q.reset();
                                for (var jt = _.words, Wt = 0; Wt < wt; Wt++) Bt[Wt] ^= jt[Wt]
                            }
                            tt.concat(dt), M[0]++
                        }
                        return tt.sigBytes = 4 * G, tt
                    }
                });
            R.PBKDF2 = function(mt, Z, A) {
                return J.create(A).compute(mt, Z)
            }
        }(),
        function() {
            var R = p,
                y = R.lib,
                I = y.Base,
                H = y.WordArray,
                P = R.algo,
                O = P.EvpKDF = I.extend({
                    cfg: I.extend({
                        keySize: 4,
                        hasher: P.MD5,
                        iterations: 1
                    }),
                    init: function(J) {
                        this.cfg = this.cfg.extend(J)
                    },
                    compute: function(J, mt) {
                        for (var Z = this.cfg, A = Z.hasher.create(), q = H.create(), tt = q.words, nt = Z.keySize, lt = Z.iterations; tt.length < nt;) {
                            M && A.update(M);
                            var M = A.update(J).finalize(mt);
                            A.reset();
                            for (var G = 1; G < lt; G++) M = A.finalize(M), A.reset();
                            q.concat(M)
                        }
                        return q.sigBytes = 4 * nt, q
                    }
                });
            R.EvpKDF = function(J, mt, Z) {
                return O.create(Z).compute(J, mt)
            }
        }(),
        function() {
            var R = p,
                I = R.lib.WordArray,
                H = R.algo,
                P = H.SHA256,
                K = H.SHA224 = P.extend({
                    _doReset: function() {
                        this._hash = new I.init([3238371032, 914150663, 812702999, 4144912697, 4290775857, 1750603025, 1694076839, 3204075428])
                    },
                    _doFinalize: function() {
                        var O = P._doFinalize.call(this);
                        return O.sigBytes -= 4, O
                    }
                });
            R.SHA224 = P._createHelper(K), R.HmacSHA224 = P._createHmacHelper(K)
        }(),
        function(R) {
            var I = p.lib,
                H = I.Base,
                P = I.WordArray,
                K = p.x64 = {};
            K.Word = H.extend({
                init: function(mt, Z) {
                    this.high = mt, this.low = Z
                }
            }), K.WordArray = H.extend({
                init: function(mt, Z) {
                    mt = this.words = mt || [], this.sigBytes = null != Z ? Z : 8 * mt.length
                },
                toX32: function() {
                    for (var mt = this.words, Z = mt.length, A = [], q = 0; q < Z; q++) {
                        var tt = mt[q];
                        A.push(tt.high), A.push(tt.low)
                    }
                    return P.create(A, this.sigBytes)
                },
                clone: function() {
                    for (var mt = H.clone.call(this), Z = mt.words = this.words.slice(0), A = Z.length, q = 0; q < A; q++) Z[q] = Z[q].clone();
                    return mt
                }
            })
        }(),
        function(R) {
            var y = p,
                I = y.lib,
                H = I.WordArray,
                P = I.Hasher,
                O = y.x64.Word,
                J = y.algo,
                mt = [],
                Z = [],
                A = [];
            ! function() {
                for (var nt = 1, lt = 0, M = 0; M < 24; M++) {
                    mt[nt + 5 * lt] = (M + 1) * (M + 2) / 2 % 64;
                    var et = (2 * nt + 3 * lt) % 5;
                    nt = lt % 5, lt = et
                }
                for (nt = 0; nt < 5; nt++)
                    for (lt = 0; lt < 5; lt++) Z[nt + 5 * lt] = lt + (2 * nt + 3 * lt) % 5 * 5;
                for (var dt = 1, Bt = 0; Bt < 24; Bt++) {
                    for (var wt = 0, _ = 0, Jt = 0; Jt < 7; Jt++) {
                        if (1 & dt) {
                            var jt = (1 << Jt) - 1;
                            jt < 32 ? _ ^= 1 << jt : wt ^= 1 << jt - 32
                        }
                        128 & dt ? dt = dt << 1 ^ 113 : dt <<= 1
                    }
                    A[Bt] = O.create(wt, _)
                }
            }();
            var q = [];
            ! function() {
                for (var nt = 0; nt < 25; nt++) q[nt] = O.create()
            }();
            var tt = J.SHA3 = P.extend({
                cfg: P.cfg.extend({
                    outputLength: 512
                }),
                _doReset: function() {
                    for (var nt = this._state = [], lt = 0; lt < 25; lt++) nt[lt] = new O.init;
                    this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32
                },
                _doProcessBlock: function(nt, lt) {
                    for (var M = this._state, G = this.blockSize / 2, et = 0; et < G; et++) {
                        var dt = nt[lt + 2 * et],
                            Bt = nt[lt + 2 * et + 1];
                        dt = 16711935 & (dt << 8 | dt >>> 24) | 4278255360 & (dt << 24 | dt >>> 8), (wt = M[et]).high ^= Bt = 16711935 & (Bt << 8 | Bt >>> 24) | 4278255360 & (Bt << 24 | Bt >>> 8), wt.low ^= dt
                    }
                    for (var _ = 0; _ < 24; _++) {
                        for (var Jt = 0; Jt < 5; Jt++) {
                            for (var jt = 0, Wt = 0, be = 0; be < 5; be++) jt ^= (wt = M[Jt + 5 * be]).high, Wt ^= wt.low;
                            var Kt = q[Jt];
                            Kt.high = jt, Kt.low = Wt
                        }
                        for (Jt = 0; Jt < 5; Jt++) {
                            var Qt = q[(Jt + 4) % 5],
                                Ft = q[(Jt + 1) % 5],
                                Yt = Ft.high,
                                it = Ft.low;
                            for (jt = Qt.high ^ (Yt << 1 | it >>> 31), Wt = Qt.low ^ (it << 1 | Yt >>> 31), be = 0; be < 5; be++)(wt = M[Jt + 5 * be]).high ^= jt, wt.low ^= Wt
                        }
                        for (var ot = 1; ot < 25; ot++) {
                            var St = (wt = M[ot]).high,
                                V = wt.low,
                                rt = mt[ot];
                            rt < 32 ? (jt = St << rt | V >>> 32 - rt, Wt = V << rt | St >>> 32 - rt) : (jt = V << rt - 32 | St >>> 64 - rt, Wt = St << rt - 32 | V >>> 64 - rt);
                            var ut = q[Z[ot]];
                            ut.high = jt, ut.low = Wt
                        }
                        var z = q[0],
                            X = M[0];
                        for (z.high = X.high, z.low = X.low, Jt = 0; Jt < 5; Jt++)
                            for (be = 0; be < 5; be++) {
                                var _t = q[ot = Jt + 5 * be],
                                    Mt = q[(Jt + 1) % 5 + 5 * be],
                                    Gt = q[(Jt + 2) % 5 + 5 * be];
                                (wt = M[ot]).high = _t.high ^ ~Mt.high & Gt.high, wt.low = _t.low ^ ~Mt.low & Gt.low
                            }
                        var wt, xt = A[_];
                        (wt = M[0]).high ^= xt.high, wt.low ^= xt.low
                    }
                },
                _doFinalize: function() {
                    var nt = this._data,
                        lt = nt.words,
                        G = 8 * nt.sigBytes,
                        et = 32 * this.blockSize;
                    lt[G >>> 5] |= 1 << 24 - G % 32, lt[(R.ceil((G + 1) / et) * et >>> 5) - 1] |= 128, nt.sigBytes = 4 * lt.length, this._process();
                    for (var dt = this._state, Bt = this.cfg.outputLength / 8, wt = Bt / 8, _ = [], Jt = 0; Jt < wt; Jt++) {
                        var jt = dt[Jt],
                            Wt = jt.high,
                            be = jt.low;
                        Wt = 16711935 & (Wt << 8 | Wt >>> 24) | 4278255360 & (Wt << 24 | Wt >>> 8), _.push(be = 16711935 & (be << 8 | be >>> 24) | 4278255360 & (be << 24 | be >>> 8)), _.push(Wt)
                    }
                    return new H.init(_, Bt)
                },
                clone: function() {
                    for (var nt = P.clone.call(this), lt = nt._state = this._state.slice(0), M = 0; M < 25; M++) lt[M] = lt[M].clone();
                    return nt
                }
            });
            y.SHA3 = P._createHelper(tt), y.HmacSHA3 = P._createHmacHelper(tt)
        }(Math),
        function() {
            var R = p,
                I = R.lib.Hasher,
                H = R.x64,
                P = H.Word,
                K = H.WordArray,
                O = R.algo;

            function J() {
                return P.create.apply(P, arguments)
            }
            var mt = [J(1116352408, 3609767458), J(1899447441, 602891725), J(3049323471, 3964484399), J(3921009573, 2173295548), J(961987163, 4081628472), J(1508970993, 3053834265), J(2453635748, 2937671579), J(2870763221, 3664609560), J(3624381080, 2734883394), J(310598401, 1164996542), J(607225278, 1323610764), J(1426881987, 3590304994), J(1925078388, 4068182383), J(2162078206, 991336113), J(2614888103, 633803317), J(3248222580, 3479774868), J(3835390401, 2666613458), J(4022224774, 944711139), J(264347078, 2341262773), J(604807628, 2007800933), J(770255983, 1495990901), J(1249150122, 1856431235), J(1555081692, 3175218132), J(1996064986, 2198950837), J(2554220882, 3999719339), J(2821834349, 766784016), J(2952996808, 2566594879), J(3210313671, 3203337956), J(3336571891, 1034457026), J(3584528711, 2466948901), J(113926993, 3758326383), J(338241895, 168717936), J(666307205, 1188179964), J(773529912, 1546045734), J(1294757372, 1522805485), J(1396182291, 2643833823), J(1695183700, 2343527390), J(1986661051, 1014477480), J(2177026350, 1206759142), J(2456956037, 344077627), J(2730485921, 1290863460), J(2820302411, 3158454273), J(3259730800, 3505952657), J(3345764771, 106217008), J(3516065817, 3606008344), J(3600352804, 1432725776), J(4094571909, 1467031594), J(275423344, 851169720), J(430227734, 3100823752), J(506948616, 1363258195), J(659060556, 3750685593), J(883997877, 3785050280), J(958139571, 3318307427), J(1322822218, 3812723403), J(1537002063, 2003034995), J(1747873779, 3602036899), J(1955562222, 1575990012), J(2024104815, 1125592928), J(2227730452, 2716904306), J(2361852424, 442776044), J(2428436474, 593698344), J(2756734187, 3733110249), J(3204031479, 2999351573), J(3329325298, 3815920427), J(3391569614, 3928383900), J(3515267271, 566280711), J(3940187606, 3454069534), J(4118630271, 4000239992), J(116418474, 1914138554), J(174292421, 2731055270), J(289380356, 3203993006), J(460393269, 320620315), J(685471733, 587496836), J(852142971, 1086792851), J(1017036298, 365543100), J(1126000580, 2618297676), J(1288033470, 3409855158), J(1501505948, 4234509866), J(1607167915, 987167468), J(1816402316, 1246189591)],
                Z = [];
            ! function() {
                for (var q = 0; q < 80; q++) Z[q] = J()
            }();
            var A = O.SHA512 = I.extend({
                _doReset: function() {
                    this._hash = new K.init([new P.init(1779033703, 4089235720), new P.init(3144134277, 2227873595), new P.init(1013904242, 4271175723), new P.init(2773480762, 1595750129), new P.init(1359893119, 2917565137), new P.init(2600822924, 725511199), new P.init(528734635, 4215389547), new P.init(1541459225, 327033209)])
                },
                _doProcessBlock: function(q, tt) {
                    for (var nt = this._hash.words, lt = nt[0], M = nt[1], G = nt[2], et = nt[3], dt = nt[4], Bt = nt[5], wt = nt[6], _ = nt[7], Jt = lt.high, jt = lt.low, Wt = M.high, be = M.low, Kt = G.high, Qt = G.low, Ft = et.high, Yt = et.low, it = dt.high, ot = dt.low, St = Bt.high, V = Bt.low, rt = wt.high, ut = wt.low, z = _.high, X = _.low, _t = Jt, Mt = jt, Gt = Wt, xt = be, pt = Kt, Tt = Qt, Dt = Ft, ce = Yt, le = it, Ce = ot, Ne = St, dn = V, Me = rt, cn = ut, sn = z, Wn = X, te = 0; te < 80; te++) {
                        var Pn = Z[te];
                        if (te < 16) var En = Pn.high = 0 | q[tt + 2 * te],
                            Be = Pn.low = 0 | q[tt + 2 * te + 1];
                        else {
                            var qe = Z[te - 15],
                                gi = qe.high,
                                mi = qe.low,
                                Ni = (mi >>> 1 | gi << 31) ^ (mi >>> 8 | gi << 24) ^ (mi >>> 7 | gi << 25),
                                Pi = Z[te - 2],
                                Un = Pi.high,
                                Xn = Pi.low,
                                Bi = (Xn >>> 19 | Un << 13) ^ (Xn << 3 | Un >>> 29) ^ (Xn >>> 6 | Un << 26),
                                mn = Z[te - 7],
                                ci = Z[te - 16],
                                gn = ci.low;
                            Pn.high = En = (En = (En = ((gi >>> 1 | mi << 31) ^ (gi >>> 8 | mi << 24) ^ gi >>> 7) + mn.high + ((Be = Ni + mn.low) >>> 0 < Ni >>> 0 ? 1 : 0)) + ((Un >>> 19 | Xn << 13) ^ (Un << 3 | Xn >>> 29) ^ Un >>> 6) + ((Be += Bi) >>> 0 < Bi >>> 0 ? 1 : 0)) + ci.high + ((Be += gn) >>> 0 < gn >>> 0 ? 1 : 0), Pn.low = Be
                        }
                        var Fn, si = le & Ne ^ ~le & Me,
                            Ke = Ce & dn ^ ~Ce & cn,
                            Ai = _t & Gt ^ _t & pt ^ Gt & pt,
                            hi = (Mt >>> 28 | _t << 4) ^ (Mt << 30 | _t >>> 2) ^ (Mt << 25 | _t >>> 7),
                            oi = mt[te],
                            Hi = oi.low,
                            wi = sn + ((le >>> 14 | Ce << 18) ^ (le >>> 18 | Ce << 14) ^ (le << 23 | Ce >>> 9)) + ((Fn = Wn + ((Ce >>> 14 | le << 18) ^ (Ce >>> 18 | le << 14) ^ (Ce << 23 | le >>> 9))) >>> 0 < Wn >>> 0 ? 1 : 0),
                            Cr = hi + (Mt & xt ^ Mt & Tt ^ xt & Tt);
                        sn = Me, Wn = cn, Me = Ne, cn = dn, Ne = le, dn = Ce, le = Dt + (wi = (wi = (wi = wi + si + ((Fn += Ke) >>> 0 < Ke >>> 0 ? 1 : 0)) + oi.high + ((Fn += Hi) >>> 0 < Hi >>> 0 ? 1 : 0)) + En + ((Fn += Be) >>> 0 < Be >>> 0 ? 1 : 0)) + ((Ce = ce + Fn | 0) >>> 0 < ce >>> 0 ? 1 : 0) | 0, Dt = pt, ce = Tt, pt = Gt, Tt = xt, Gt = _t, xt = Mt, _t = wi + (((_t >>> 28 | Mt << 4) ^ (_t << 30 | Mt >>> 2) ^ (_t << 25 | Mt >>> 7)) + Ai + (Cr >>> 0 < hi >>> 0 ? 1 : 0)) + ((Mt = Fn + Cr | 0) >>> 0 < Fn >>> 0 ? 1 : 0) | 0
                    }
                    jt = lt.low = jt + Mt, lt.high = Jt + _t + (jt >>> 0 < Mt >>> 0 ? 1 : 0), be = M.low = be + xt, M.high = Wt + Gt + (be >>> 0 < xt >>> 0 ? 1 : 0), Qt = G.low = Qt + Tt, G.high = Kt + pt + (Qt >>> 0 < Tt >>> 0 ? 1 : 0), Yt = et.low = Yt + ce, et.high = Ft + Dt + (Yt >>> 0 < ce >>> 0 ? 1 : 0), ot = dt.low = ot + Ce, dt.high = it + le + (ot >>> 0 < Ce >>> 0 ? 1 : 0), V = Bt.low = V + dn, Bt.high = St + Ne + (V >>> 0 < dn >>> 0 ? 1 : 0), ut = wt.low = ut + cn, wt.high = rt + Me + (ut >>> 0 < cn >>> 0 ? 1 : 0), X = _.low = X + Wn, _.high = z + sn + (X >>> 0 < Wn >>> 0 ? 1 : 0)
                },
                _doFinalize: function() {
                    var q = this._data,
                        tt = q.words,
                        nt = 8 * this._nDataBytes,
                        lt = 8 * q.sigBytes;
                    return tt[lt >>> 5] |= 128 << 24 - lt % 32, tt[30 + (lt + 128 >>> 10 << 5)] = Math.floor(nt / 4294967296), tt[31 + (lt + 128 >>> 10 << 5)] = nt, q.sigBytes = 4 * tt.length, this._process(), this._hash.toX32()
                },
                clone: function() {
                    var q = I.clone.call(this);
                    return q._hash = this._hash.clone(), q
                },
                blockSize: 32
            });
            R.SHA512 = I._createHelper(A), R.HmacSHA512 = I._createHmacHelper(A)
        }(),
        function() {
            var R = p,
                y = R.x64,
                I = y.Word,
                H = y.WordArray,
                P = R.algo,
                K = P.SHA512,
                O = P.SHA384 = K.extend({
                    _doReset: function() {
                        this._hash = new H.init([new I.init(3418070365, 3238371032), new I.init(1654270250, 914150663), new I.init(2438529370, 812702999), new I.init(355462360, 4144912697), new I.init(1731405415, 4290775857), new I.init(2394180231, 1750603025), new I.init(3675008525, 1694076839), new I.init(1203062813, 3204075428)])
                    },
                    _doFinalize: function() {
                        var J = K._doFinalize.call(this);
                        return J.sigBytes -= 16, J
                    }
                });
            R.SHA384 = K._createHelper(O), R.HmacSHA384 = K._createHmacHelper(O)
        }(), p.lib.Cipher || function(R) {
            var y = p,
                I = y.lib,
                H = I.Base,
                P = I.WordArray,
                K = I.BufferedBlockAlgorithm,
                mt = y.enc.Base64,
                A = y.algo.EvpKDF,
                q = I.Cipher = K.extend({
                    cfg: H.extend(),
                    createEncryptor: function(Kt, Qt) {
                        return this.create(this._ENC_XFORM_MODE, Kt, Qt)
                    },
                    createDecryptor: function(Kt, Qt) {
                        return this.create(this._DEC_XFORM_MODE, Kt, Qt)
                    },
                    init: function(Kt, Qt, Ft) {
                        this.cfg = this.cfg.extend(Ft), this._xformMode = Kt, this._key = Qt, this.reset()
                    },
                    reset: function() {
                        K.reset.call(this), this._doReset()
                    },
                    process: function(Kt) {
                        return this._append(Kt), this._process()
                    },
                    finalize: function(Kt) {
                        return Kt && this._append(Kt), this._doFinalize()
                    },
                    keySize: 4,
                    ivSize: 4,
                    _ENC_XFORM_MODE: 1,
                    _DEC_XFORM_MODE: 2,
                    _createHelper: function() {
                        function Kt(Qt) {
                            return "string" == typeof Qt ? be : Jt
                        }
                        return function(Qt) {
                            return {
                                encrypt: function(Ft, Yt, it) {
                                    return Kt(Yt).encrypt(Qt, Ft, Yt, it)
                                },
                                decrypt: function(Ft, Yt, it) {
                                    return Kt(Yt).decrypt(Qt, Ft, Yt, it)
                                }
                            }
                        }
                    }()
                }),
                nt = (I.StreamCipher = q.extend({
                    _doFinalize: function() {
                        return this._process(!0)
                    },
                    blockSize: 1
                }), y.mode = {}),
                lt = I.BlockCipherMode = H.extend({
                    createEncryptor: function(Kt, Qt) {
                        return this.Encryptor.create(Kt, Qt)
                    },
                    createDecryptor: function(Kt, Qt) {
                        return this.Decryptor.create(Kt, Qt)
                    },
                    init: function(Kt, Qt) {
                        this._cipher = Kt, this._iv = Qt
                    }
                }),
                M = nt.CBC = function() {
                    var Kt = lt.extend();

                    function Qt(Ft, Yt, it) {
                        var ot = this._iv;
                        if (ot) {
                            var St = ot;
                            this._iv = R
                        } else St = this._prevBlock;
                        for (var V = 0; V < it; V++) Ft[Yt + V] ^= St[V]
                    }
                    return Kt.Encryptor = Kt.extend({
                        processBlock: function(Ft, Yt) {
                            var it = this._cipher,
                                ot = it.blockSize;
                            Qt.call(this, Ft, Yt, ot), it.encryptBlock(Ft, Yt), this._prevBlock = Ft.slice(Yt, Yt + ot)
                        }
                    }), Kt.Decryptor = Kt.extend({
                        processBlock: function(Ft, Yt) {
                            var it = this._cipher,
                                ot = it.blockSize,
                                St = Ft.slice(Yt, Yt + ot);
                            it.decryptBlock(Ft, Yt), Qt.call(this, Ft, Yt, ot), this._prevBlock = St
                        }
                    }), Kt
                }(),
                et = (y.pad = {}).Pkcs7 = {
                    pad: function(Kt, Qt) {
                        for (var Ft = 4 * Qt, Yt = Ft - Kt.sigBytes % Ft, it = Yt << 24 | Yt << 16 | Yt << 8 | Yt, ot = [], St = 0; St < Yt; St += 4) ot.push(it);
                        var V = P.create(ot, Yt);
                        Kt.concat(V)
                    },
                    unpad: function(Kt) {
                        Kt.sigBytes -= 255 & Kt.words[Kt.sigBytes - 1 >>> 2]
                    }
                },
                Bt = (I.BlockCipher = q.extend({
                    cfg: q.cfg.extend({
                        mode: M,
                        padding: et
                    }),
                    reset: function() {
                        q.reset.call(this);
                        var Kt = this.cfg,
                            Qt = Kt.iv,
                            Ft = Kt.mode;
                        if (this._xformMode == this._ENC_XFORM_MODE) var Yt = Ft.createEncryptor;
                        else Yt = Ft.createDecryptor, this._minBufferSize = 1;
                        this._mode && this._mode.__creator == Yt ? this._mode.init(this, Qt && Qt.words) : (this._mode = Yt.call(Ft, this, Qt && Qt.words), this._mode.__creator = Yt)
                    },
                    _doProcessBlock: function(Kt, Qt) {
                        this._mode.processBlock(Kt, Qt)
                    },
                    _doFinalize: function() {
                        var Kt = this.cfg.padding;
                        if (this._xformMode == this._ENC_XFORM_MODE) {
                            Kt.pad(this._data, this.blockSize);
                            var Qt = this._process(!0)
                        } else Qt = this._process(!0), Kt.unpad(Qt);
                        return Qt
                    },
                    blockSize: 4
                }), I.CipherParams = H.extend({
                    init: function(Kt) {
                        this.mixIn(Kt)
                    },
                    toString: function(Kt) {
                        return (Kt || this.formatter).stringify(this)
                    }
                })),
                _ = (y.format = {}).OpenSSL = {
                    stringify: function(Kt) {
                        var Qt = Kt.ciphertext,
                            Ft = Kt.salt;
                        if (Ft) var Yt = P.create([1398893684, 1701076831]).concat(Ft).concat(Qt);
                        else Yt = Qt;
                        return Yt.toString(mt)
                    },
                    parse: function(Kt) {
                        var Qt = mt.parse(Kt),
                            Ft = Qt.words;
                        if (1398893684 == Ft[0] && 1701076831 == Ft[1]) {
                            var Yt = P.create(Ft.slice(2, 4));
                            Ft.splice(0, 4), Qt.sigBytes -= 16
                        }
                        return Bt.create({
                            ciphertext: Qt,
                            salt: Yt
                        })
                    }
                },
                Jt = I.SerializableCipher = H.extend({
                    cfg: H.extend({
                        format: _
                    }),
                    encrypt: function(Kt, Qt, Ft, Yt) {
                        Yt = this.cfg.extend(Yt);
                        var it = Kt.createEncryptor(Ft, Yt),
                            ot = it.finalize(Qt),
                            St = it.cfg;
                        return Bt.create({
                            ciphertext: ot,
                            key: Ft,
                            iv: St.iv,
                            algorithm: Kt,
                            mode: St.mode,
                            padding: St.padding,
                            blockSize: Kt.blockSize,
                            formatter: Yt.format
                        })
                    },
                    decrypt: function(Kt, Qt, Ft, Yt) {
                        return Yt = this.cfg.extend(Yt), Qt = this._parse(Qt, Yt.format), Kt.createDecryptor(Ft, Yt).finalize(Qt.ciphertext)
                    },
                    _parse: function(Kt, Qt) {
                        return "string" == typeof Kt ? Qt.parse(Kt, this) : Kt
                    }
                }),
                Wt = (y.kdf = {}).OpenSSL = {
                    execute: function(Kt, Qt, Ft, Yt) {
                        Yt || (Yt = P.random(8));
                        var it = A.create({
                                keySize: Qt + Ft
                            }).compute(Kt, Yt),
                            ot = P.create(it.words.slice(Qt), 4 * Ft);
                        return it.sigBytes = 4 * Qt, Bt.create({
                            key: it,
                            iv: ot,
                            salt: Yt
                        })
                    }
                },
                be = I.PasswordBasedCipher = Jt.extend({
                    cfg: Jt.cfg.extend({
                        kdf: Wt
                    }),
                    encrypt: function(Kt, Qt, Ft, Yt) {
                        var it = (Yt = this.cfg.extend(Yt)).kdf.execute(Ft, Kt.keySize, Kt.ivSize);
                        Yt.iv = it.iv;
                        var ot = Jt.encrypt.call(this, Kt, Qt, it.key, Yt);
                        return ot.mixIn(it), ot
                    },
                    decrypt: function(Kt, Qt, Ft, Yt) {
                        Yt = this.cfg.extend(Yt), Qt = this._parse(Qt, Yt.format);
                        var it = Yt.kdf.execute(Ft, Kt.keySize, Kt.ivSize, Qt.salt);
                        return Yt.iv = it.iv, Jt.decrypt.call(this, Kt, Qt, it.key, Yt)
                    }
                })
        }(), p.mode.CFB = function() {
            var R = p.lib.BlockCipherMode.extend();

            function y(I, H, P, K) {
                var O = this._iv;
                if (O) {
                    var J = O.slice(0);
                    this._iv = void 0
                } else J = this._prevBlock;
                K.encryptBlock(J, 0);
                for (var mt = 0; mt < P; mt++) I[H + mt] ^= J[mt]
            }
            return R.Encryptor = R.extend({
                processBlock: function(I, H) {
                    var P = this._cipher,
                        K = P.blockSize;
                    y.call(this, I, H, K, P), this._prevBlock = I.slice(H, H + K)
                }
            }), R.Decryptor = R.extend({
                processBlock: function(I, H) {
                    var P = this._cipher,
                        K = P.blockSize,
                        O = I.slice(H, H + K);
                    y.call(this, I, H, K, P), this._prevBlock = O
                }
            }), R
        }(), p.mode.ECB = function() {
            var R = p.lib.BlockCipherMode.extend();
            return R.Encryptor = R.extend({
                processBlock: function(y, I) {
                    this._cipher.encryptBlock(y, I)
                }
            }), R.Decryptor = R.extend({
                processBlock: function(y, I) {
                    this._cipher.decryptBlock(y, I)
                }
            }), R
        }(), p.pad.AnsiX923 = {
            pad: function(R, y) {
                var I = R.sigBytes,
                    H = 4 * y,
                    P = H - I % H,
                    K = I + P - 1;
                R.clamp(), R.words[K >>> 2] |= P << 24 - K % 4 * 8, R.sigBytes += P
            },
            unpad: function(R) {
                R.sigBytes -= 255 & R.words[R.sigBytes - 1 >>> 2]
            }
        }, p.pad.Iso10126 = {
            pad: function(R, y) {
                var I = 4 * y,
                    H = I - R.sigBytes % I;
                R.concat(p.lib.WordArray.random(H - 1)).concat(p.lib.WordArray.create([H << 24], 1))
            },
            unpad: function(R) {
                R.sigBytes -= 255 & R.words[R.sigBytes - 1 >>> 2]
            }
        }, p.pad.Iso97971 = {
            pad: function(R, y) {
                R.concat(p.lib.WordArray.create([2147483648], 1)), p.pad.ZeroPadding.pad(R, y)
            },
            unpad: function(R) {
                p.pad.ZeroPadding.unpad(R), R.sigBytes--
            }
        }, p.mode.OFB = function() {
            var R = p.lib.BlockCipherMode.extend(),
                y = R.Encryptor = R.extend({
                    processBlock: function(I, H) {
                        var P = this._cipher,
                            K = P.blockSize,
                            O = this._iv,
                            J = this._keystream;
                        O && (J = this._keystream = O.slice(0), this._iv = void 0), P.encryptBlock(J, 0);
                        for (var mt = 0; mt < K; mt++) I[H + mt] ^= J[mt]
                    }
                });
            return R.Decryptor = y, R
        }(), p.pad.NoPadding = {
            pad: function() {},
            unpad: function() {}
        },
        function(R) {
            var H = p.lib.CipherParams,
                K = p.enc.Hex;
            p.format.Hex = {
                stringify: function(mt) {
                    return mt.ciphertext.toString(K)
                },
                parse: function(mt) {
                    var Z = K.parse(mt);
                    return H.create({
                        ciphertext: Z
                    })
                }
            }
        }(),
        function() {
            var R = p,
                I = R.lib.BlockCipher,
                H = R.algo,
                P = [],
                K = [],
                O = [],
                J = [],
                mt = [],
                Z = [],
                A = [],
                q = [],
                tt = [],
                nt = [];
            ! function() {
                for (var G = [], et = 0; et < 256; et++) G[et] = et < 128 ? et << 1 : et << 1 ^ 283;
                var dt = 0,
                    Bt = 0;
                for (et = 0; et < 256; et++) {
                    var wt = Bt ^ Bt << 1 ^ Bt << 2 ^ Bt << 3 ^ Bt << 4;
                    P[dt] = wt = wt >>> 8 ^ 255 & wt ^ 99, K[wt] = dt;
                    var Wt, _ = G[dt],
                        Jt = G[_],
                        jt = G[Jt];
                    O[dt] = (Wt = 257 * G[wt] ^ 16843008 * wt) << 24 | Wt >>> 8, J[dt] = Wt << 16 | Wt >>> 16, mt[dt] = Wt << 8 | Wt >>> 24, Z[dt] = Wt, A[wt] = (Wt = 16843009 * jt ^ 65537 * Jt ^ 257 * _ ^ 16843008 * dt) << 24 | Wt >>> 8, q[wt] = Wt << 16 | Wt >>> 16, tt[wt] = Wt << 8 | Wt >>> 24, nt[wt] = Wt, dt ? (dt = _ ^ G[G[G[jt ^ _]]], Bt ^= G[G[Bt]]) : dt = Bt = 1
                }
            }();
            var lt = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54],
                M = H.AES = I.extend({
                    _doReset: function() {
                        if (!this._nRounds || this._keyPriorReset !== this._key) {
                            for (var G = this._keyPriorReset = this._key, et = G.words, dt = G.sigBytes / 4, wt = 4 * ((this._nRounds = dt + 6) + 1), _ = this._keySchedule = [], Jt = 0; Jt < wt; Jt++)
                                if (Jt < dt) _[Jt] = et[Jt];
                                else {
                                    var jt = _[Jt - 1];
                                    Jt % dt ? dt > 6 && Jt % dt == 4 && (jt = P[jt >>> 24] << 24 | P[jt >>> 16 & 255] << 16 | P[jt >>> 8 & 255] << 8 | P[255 & jt]) : (jt = P[(jt = jt << 8 | jt >>> 24) >>> 24] << 24 | P[jt >>> 16 & 255] << 16 | P[jt >>> 8 & 255] << 8 | P[255 & jt], jt ^= lt[Jt / dt | 0] << 24), _[Jt] = _[Jt - dt] ^ jt
                                }
                            for (var Wt = this._invKeySchedule = [], be = 0; be < wt; be++) Jt = wt - be, jt = be % 4 ? _[Jt] : _[Jt - 4], Wt[be] = be < 4 || Jt <= 4 ? jt : A[P[jt >>> 24]] ^ q[P[jt >>> 16 & 255]] ^ tt[P[jt >>> 8 & 255]] ^ nt[P[255 & jt]]
                        }
                    },
                    encryptBlock: function(G, et) {
                        this._doCryptBlock(G, et, this._keySchedule, O, J, mt, Z, P)
                    },
                    decryptBlock: function(G, et) {
                        var dt = G[et + 1];
                        G[et + 1] = G[et + 3], G[et + 3] = dt, this._doCryptBlock(G, et, this._invKeySchedule, A, q, tt, nt, K), dt = G[et + 1], G[et + 1] = G[et + 3], G[et + 3] = dt
                    },
                    _doCryptBlock: function(G, et, dt, Bt, wt, _, Jt, jt) {
                        for (var Wt = this._nRounds, be = G[et] ^ dt[0], Kt = G[et + 1] ^ dt[1], Qt = G[et + 2] ^ dt[2], Ft = G[et + 3] ^ dt[3], Yt = 4, it = 1; it < Wt; it++) {
                            var ot = Bt[be >>> 24] ^ wt[Kt >>> 16 & 255] ^ _[Qt >>> 8 & 255] ^ Jt[255 & Ft] ^ dt[Yt++],
                                St = Bt[Kt >>> 24] ^ wt[Qt >>> 16 & 255] ^ _[Ft >>> 8 & 255] ^ Jt[255 & be] ^ dt[Yt++],
                                V = Bt[Qt >>> 24] ^ wt[Ft >>> 16 & 255] ^ _[be >>> 8 & 255] ^ Jt[255 & Kt] ^ dt[Yt++],
                                rt = Bt[Ft >>> 24] ^ wt[be >>> 16 & 255] ^ _[Kt >>> 8 & 255] ^ Jt[255 & Qt] ^ dt[Yt++];
                            be = ot, Kt = St, Qt = V, Ft = rt
                        }
                        ot = (jt[be >>> 24] << 24 | jt[Kt >>> 16 & 255] << 16 | jt[Qt >>> 8 & 255] << 8 | jt[255 & Ft]) ^ dt[Yt++], St = (jt[Kt >>> 24] << 24 | jt[Qt >>> 16 & 255] << 16 | jt[Ft >>> 8 & 255] << 8 | jt[255 & be]) ^ dt[Yt++], V = (jt[Qt >>> 24] << 24 | jt[Ft >>> 16 & 255] << 16 | jt[be >>> 8 & 255] << 8 | jt[255 & Kt]) ^ dt[Yt++], rt = (jt[Ft >>> 24] << 24 | jt[be >>> 16 & 255] << 16 | jt[Kt >>> 8 & 255] << 8 | jt[255 & Qt]) ^ dt[Yt++], G[et] = ot, G[et + 1] = St, G[et + 2] = V, G[et + 3] = rt
                    },
                    keySize: 8
                });
            R.AES = I._createHelper(M)
        }(),
        function() {
            var R = p,
                y = R.lib,
                I = y.WordArray,
                H = y.BlockCipher,
                P = R.algo,
                K = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4],
                O = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32],
                J = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28],
                mt = [{
                    0: 8421888,
                    268435456: 32768,
                    536870912: 8421378,
                    805306368: 2,
                    1073741824: 512,
                    1342177280: 8421890,
                    1610612736: 8389122,
                    1879048192: 8388608,
                    2147483648: 514,
                    2415919104: 8389120,
                    2684354560: 33280,
                    2952790016: 8421376,
                    3221225472: 32770,
                    3489660928: 8388610,
                    3758096384: 0,
                    4026531840: 33282,
                    134217728: 0,
                    402653184: 8421890,
                    671088640: 33282,
                    939524096: 32768,
                    1207959552: 8421888,
                    1476395008: 512,
                    1744830464: 8421378,
                    2013265920: 2,
                    2281701376: 8389120,
                    2550136832: 33280,
                    2818572288: 8421376,
                    3087007744: 8389122,
                    3355443200: 8388610,
                    3623878656: 32770,
                    3892314112: 514,
                    4160749568: 8388608,
                    1: 32768,
                    268435457: 2,
                    536870913: 8421888,
                    805306369: 8388608,
                    1073741825: 8421378,
                    1342177281: 33280,
                    1610612737: 512,
                    1879048193: 8389122,
                    2147483649: 8421890,
                    2415919105: 8421376,
                    2684354561: 8388610,
                    2952790017: 33282,
                    3221225473: 514,
                    3489660929: 8389120,
                    3758096385: 32770,
                    4026531841: 0,
                    134217729: 8421890,
                    402653185: 8421376,
                    671088641: 8388608,
                    939524097: 512,
                    1207959553: 32768,
                    1476395009: 8388610,
                    1744830465: 2,
                    2013265921: 33282,
                    2281701377: 32770,
                    2550136833: 8389122,
                    2818572289: 514,
                    3087007745: 8421888,
                    3355443201: 8389120,
                    3623878657: 0,
                    3892314113: 33280,
                    4160749569: 8421378
                }, {
                    0: 1074282512,
                    16777216: 16384,
                    33554432: 524288,
                    50331648: 1074266128,
                    67108864: 1073741840,
                    83886080: 1074282496,
                    100663296: 1073758208,
                    117440512: 16,
                    134217728: 540672,
                    150994944: 1073758224,
                    167772160: 1073741824,
                    184549376: 540688,
                    201326592: 524304,
                    218103808: 0,
                    234881024: 16400,
                    251658240: 1074266112,
                    8388608: 1073758208,
                    25165824: 540688,
                    41943040: 16,
                    58720256: 1073758224,
                    75497472: 1074282512,
                    92274688: 1073741824,
                    109051904: 524288,
                    125829120: 1074266128,
                    142606336: 524304,
                    159383552: 0,
                    176160768: 16384,
                    192937984: 1074266112,
                    209715200: 1073741840,
                    226492416: 540672,
                    243269632: 1074282496,
                    260046848: 16400,
                    268435456: 0,
                    285212672: 1074266128,
                    301989888: 1073758224,
                    318767104: 1074282496,
                    335544320: 1074266112,
                    352321536: 16,
                    369098752: 540688,
                    385875968: 16384,
                    402653184: 16400,
                    419430400: 524288,
                    436207616: 524304,
                    452984832: 1073741840,
                    469762048: 540672,
                    486539264: 1073758208,
                    503316480: 1073741824,
                    520093696: 1074282512,
                    276824064: 540688,
                    293601280: 524288,
                    310378496: 1074266112,
                    327155712: 16384,
                    343932928: 1073758208,
                    360710144: 1074282512,
                    377487360: 16,
                    394264576: 1073741824,
                    411041792: 1074282496,
                    427819008: 1073741840,
                    444596224: 1073758224,
                    461373440: 524304,
                    478150656: 0,
                    494927872: 16400,
                    511705088: 1074266128,
                    528482304: 540672
                }, {
                    0: 260,
                    1048576: 0,
                    2097152: 67109120,
                    3145728: 65796,
                    4194304: 65540,
                    5242880: 67108868,
                    6291456: 67174660,
                    7340032: 67174400,
                    8388608: 67108864,
                    9437184: 67174656,
                    10485760: 65792,
                    11534336: 67174404,
                    12582912: 67109124,
                    13631488: 65536,
                    14680064: 4,
                    15728640: 256,
                    524288: 67174656,
                    1572864: 67174404,
                    2621440: 0,
                    3670016: 67109120,
                    4718592: 67108868,
                    5767168: 65536,
                    6815744: 65540,
                    7864320: 260,
                    8912896: 4,
                    9961472: 256,
                    11010048: 67174400,
                    12058624: 65796,
                    13107200: 65792,
                    14155776: 67109124,
                    15204352: 67174660,
                    16252928: 67108864,
                    16777216: 67174656,
                    17825792: 65540,
                    18874368: 65536,
                    19922944: 67109120,
                    20971520: 256,
                    22020096: 67174660,
                    23068672: 67108868,
                    24117248: 0,
                    25165824: 67109124,
                    26214400: 67108864,
                    27262976: 4,
                    28311552: 65792,
                    29360128: 67174400,
                    30408704: 260,
                    31457280: 65796,
                    32505856: 67174404,
                    17301504: 67108864,
                    18350080: 260,
                    19398656: 67174656,
                    20447232: 0,
                    21495808: 65540,
                    22544384: 67109120,
                    23592960: 256,
                    24641536: 67174404,
                    25690112: 65536,
                    26738688: 67174660,
                    27787264: 65796,
                    28835840: 67108868,
                    29884416: 67109124,
                    30932992: 67174400,
                    31981568: 4,
                    33030144: 65792
                }, {
                    0: 2151682048,
                    65536: 2147487808,
                    131072: 4198464,
                    196608: 2151677952,
                    262144: 0,
                    327680: 4198400,
                    393216: 2147483712,
                    458752: 4194368,
                    524288: 2147483648,
                    589824: 4194304,
                    655360: 64,
                    720896: 2147487744,
                    786432: 2151678016,
                    851968: 4160,
                    917504: 4096,
                    983040: 2151682112,
                    32768: 2147487808,
                    98304: 64,
                    163840: 2151678016,
                    229376: 2147487744,
                    294912: 4198400,
                    360448: 2151682112,
                    425984: 0,
                    491520: 2151677952,
                    557056: 4096,
                    622592: 2151682048,
                    688128: 4194304,
                    753664: 4160,
                    819200: 2147483648,
                    884736: 4194368,
                    950272: 4198464,
                    1015808: 2147483712,
                    1048576: 4194368,
                    1114112: 4198400,
                    1179648: 2147483712,
                    1245184: 0,
                    1310720: 4160,
                    1376256: 2151678016,
                    1441792: 2151682048,
                    1507328: 2147487808,
                    1572864: 2151682112,
                    1638400: 2147483648,
                    1703936: 2151677952,
                    1769472: 4198464,
                    1835008: 2147487744,
                    1900544: 4194304,
                    1966080: 64,
                    2031616: 4096,
                    1081344: 2151677952,
                    1146880: 2151682112,
                    1212416: 0,
                    1277952: 4198400,
                    1343488: 4194368,
                    1409024: 2147483648,
                    1474560: 2147487808,
                    1540096: 64,
                    1605632: 2147483712,
                    1671168: 4096,
                    1736704: 2147487744,
                    1802240: 2151678016,
                    1867776: 4160,
                    1933312: 2151682048,
                    1998848: 4194304,
                    2064384: 4198464
                }, {
                    0: 128,
                    4096: 17039360,
                    8192: 262144,
                    12288: 536870912,
                    16384: 537133184,
                    20480: 16777344,
                    24576: 553648256,
                    28672: 262272,
                    32768: 16777216,
                    36864: 537133056,
                    40960: 536871040,
                    45056: 553910400,
                    49152: 553910272,
                    53248: 0,
                    57344: 17039488,
                    61440: 553648128,
                    2048: 17039488,
                    6144: 553648256,
                    10240: 128,
                    14336: 17039360,
                    18432: 262144,
                    22528: 537133184,
                    26624: 553910272,
                    30720: 536870912,
                    34816: 537133056,
                    38912: 0,
                    43008: 553910400,
                    47104: 16777344,
                    51200: 536871040,
                    55296: 553648128,
                    59392: 16777216,
                    63488: 262272,
                    65536: 262144,
                    69632: 128,
                    73728: 536870912,
                    77824: 553648256,
                    81920: 16777344,
                    86016: 553910272,
                    90112: 537133184,
                    94208: 16777216,
                    98304: 553910400,
                    102400: 553648128,
                    106496: 17039360,
                    110592: 537133056,
                    114688: 262272,
                    118784: 536871040,
                    122880: 0,
                    126976: 17039488,
                    67584: 553648256,
                    71680: 16777216,
                    75776: 17039360,
                    79872: 537133184,
                    83968: 536870912,
                    88064: 17039488,
                    92160: 128,
                    96256: 553910272,
                    100352: 262272,
                    104448: 553910400,
                    108544: 0,
                    112640: 553648128,
                    116736: 16777344,
                    120832: 262144,
                    124928: 537133056,
                    129024: 536871040
                }, {
                    0: 268435464,
                    256: 8192,
                    512: 270532608,
                    768: 270540808,
                    1024: 268443648,
                    1280: 2097152,
                    1536: 2097160,
                    1792: 268435456,
                    2048: 0,
                    2304: 268443656,
                    2560: 2105344,
                    2816: 8,
                    3072: 270532616,
                    3328: 2105352,
                    3584: 8200,
                    3840: 270540800,
                    128: 270532608,
                    384: 270540808,
                    640: 8,
                    896: 2097152,
                    1152: 2105352,
                    1408: 268435464,
                    1664: 268443648,
                    1920: 8200,
                    2176: 2097160,
                    2432: 8192,
                    2688: 268443656,
                    2944: 270532616,
                    3200: 0,
                    3456: 270540800,
                    3712: 2105344,
                    3968: 268435456,
                    4096: 268443648,
                    4352: 270532616,
                    4608: 270540808,
                    4864: 8200,
                    5120: 2097152,
                    5376: 268435456,
                    5632: 268435464,
                    5888: 2105344,
                    6144: 2105352,
                    6400: 0,
                    6656: 8,
                    6912: 270532608,
                    7168: 8192,
                    7424: 268443656,
                    7680: 270540800,
                    7936: 2097160,
                    4224: 8,
                    4480: 2105344,
                    4736: 2097152,
                    4992: 268435464,
                    5248: 268443648,
                    5504: 8200,
                    5760: 270540808,
                    6016: 270532608,
                    6272: 270540800,
                    6528: 270532616,
                    6784: 8192,
                    7040: 2105352,
                    7296: 2097160,
                    7552: 0,
                    7808: 268435456,
                    8064: 268443656
                }, {
                    0: 1048576,
                    16: 33555457,
                    32: 1024,
                    48: 1049601,
                    64: 34604033,
                    80: 0,
                    96: 1,
                    112: 34603009,
                    128: 33555456,
                    144: 1048577,
                    160: 33554433,
                    176: 34604032,
                    192: 34603008,
                    208: 1025,
                    224: 1049600,
                    240: 33554432,
                    8: 34603009,
                    24: 0,
                    40: 33555457,
                    56: 34604032,
                    72: 1048576,
                    88: 33554433,
                    104: 33554432,
                    120: 1025,
                    136: 1049601,
                    152: 33555456,
                    168: 34603008,
                    184: 1048577,
                    200: 1024,
                    216: 34604033,
                    232: 1,
                    248: 1049600,
                    256: 33554432,
                    272: 1048576,
                    288: 33555457,
                    304: 34603009,
                    320: 1048577,
                    336: 33555456,
                    352: 34604032,
                    368: 1049601,
                    384: 1025,
                    400: 34604033,
                    416: 1049600,
                    432: 1,
                    448: 0,
                    464: 34603008,
                    480: 33554433,
                    496: 1024,
                    264: 1049600,
                    280: 33555457,
                    296: 34603009,
                    312: 1,
                    328: 33554432,
                    344: 1048576,
                    360: 1025,
                    376: 34604032,
                    392: 33554433,
                    408: 34603008,
                    424: 0,
                    440: 34604033,
                    456: 1049601,
                    472: 1024,
                    488: 33555456,
                    504: 1048577
                }, {
                    0: 134219808,
                    1: 131072,
                    2: 134217728,
                    3: 32,
                    4: 131104,
                    5: 134350880,
                    6: 134350848,
                    7: 2048,
                    8: 134348800,
                    9: 134219776,
                    10: 133120,
                    11: 134348832,
                    12: 2080,
                    13: 0,
                    14: 134217760,
                    15: 133152,
                    2147483648: 2048,
                    2147483649: 134350880,
                    2147483650: 134219808,
                    2147483651: 134217728,
                    2147483652: 134348800,
                    2147483653: 133120,
                    2147483654: 133152,
                    2147483655: 32,
                    2147483656: 134217760,
                    2147483657: 2080,
                    2147483658: 131104,
                    2147483659: 134350848,
                    2147483660: 0,
                    2147483661: 134348832,
                    2147483662: 134219776,
                    2147483663: 131072,
                    16: 133152,
                    17: 134350848,
                    18: 32,
                    19: 2048,
                    20: 134219776,
                    21: 134217760,
                    22: 134348832,
                    23: 131072,
                    24: 0,
                    25: 131104,
                    26: 134348800,
                    27: 134219808,
                    28: 134350880,
                    29: 133120,
                    30: 2080,
                    31: 134217728,
                    2147483664: 131072,
                    2147483665: 2048,
                    2147483666: 134348832,
                    2147483667: 133152,
                    2147483668: 32,
                    2147483669: 134348800,
                    2147483670: 134217728,
                    2147483671: 134219808,
                    2147483672: 134350880,
                    2147483673: 134217760,
                    2147483674: 134219776,
                    2147483675: 0,
                    2147483676: 133120,
                    2147483677: 2080,
                    2147483678: 131104,
                    2147483679: 134350848
                }],
                Z = [4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679],
                A = P.DES = H.extend({
                    _doReset: function() {
                        for (var M = this._key.words, G = [], et = 0; et < 56; et++) {
                            var dt = K[et] - 1;
                            G[et] = M[dt >>> 5] >>> 31 - dt % 32 & 1
                        }
                        for (var Bt = this._subKeys = [], wt = 0; wt < 16; wt++) {
                            var _ = Bt[wt] = [],
                                Jt = J[wt];
                            for (et = 0; et < 24; et++) _[et / 6 | 0] |= G[(O[et] - 1 + Jt) % 28] << 31 - et % 6, _[4 + (et / 6 | 0)] |= G[28 + (O[et + 24] - 1 + Jt) % 28] << 31 - et % 6;
                            for (_[0] = _[0] << 1 | _[0] >>> 31, et = 1; et < 7; et++) _[et] = _[et] >>> 4 * (et - 1) + 3;
                            _[7] = _[7] << 5 | _[7] >>> 27
                        }
                        var jt = this._invSubKeys = [];
                        for (et = 0; et < 16; et++) jt[et] = Bt[15 - et]
                    },
                    encryptBlock: function(lt, M) {
                        this._doCryptBlock(lt, M, this._subKeys)
                    },
                    decryptBlock: function(lt, M) {
                        this._doCryptBlock(lt, M, this._invSubKeys)
                    },
                    _doCryptBlock: function(lt, M, G) {
                        this._lBlock = lt[M], this._rBlock = lt[M + 1], q.call(this, 4, 252645135), q.call(this, 16, 65535), tt.call(this, 2, 858993459), tt.call(this, 8, 16711935), q.call(this, 1, 1431655765);
                        for (var et = 0; et < 16; et++) {
                            for (var dt = G[et], Bt = this._lBlock, wt = this._rBlock, _ = 0, Jt = 0; Jt < 8; Jt++) _ |= mt[Jt][((wt ^ dt[Jt]) & Z[Jt]) >>> 0];
                            this._lBlock = wt, this._rBlock = Bt ^ _
                        }
                        var jt = this._lBlock;
                        this._lBlock = this._rBlock, this._rBlock = jt, q.call(this, 1, 1431655765), tt.call(this, 8, 16711935), tt.call(this, 2, 858993459), q.call(this, 16, 65535), q.call(this, 4, 252645135), lt[M] = this._lBlock, lt[M + 1] = this._rBlock
                    },
                    keySize: 2,
                    ivSize: 2,
                    blockSize: 2
                });

            function q(lt, M) {
                var G = (this._lBlock >>> lt ^ this._rBlock) & M;
                this._rBlock ^= G, this._lBlock ^= G << lt
            }

            function tt(lt, M) {
                var G = (this._rBlock >>> lt ^ this._lBlock) & M;
                this._lBlock ^= G, this._rBlock ^= G << lt
            }
            R.DES = H._createHelper(A);
            var nt = P.TripleDES = H.extend({
                _doReset: function() {
                    var M = this._key.words;
                    this._des1 = A.createEncryptor(I.create(M.slice(0, 2))), this._des2 = A.createEncryptor(I.create(M.slice(2, 4))), this._des3 = A.createEncryptor(I.create(M.slice(4, 6)))
                },
                encryptBlock: function(lt, M) {
                    this._des1.encryptBlock(lt, M), this._des2.decryptBlock(lt, M), this._des3.encryptBlock(lt, M)
                },
                decryptBlock: function(lt, M) {
                    this._des3.decryptBlock(lt, M), this._des2.encryptBlock(lt, M), this._des1.decryptBlock(lt, M)
                },
                keySize: 6,
                ivSize: 2,
                blockSize: 2
            });
            R.TripleDES = H._createHelper(nt)
        }(),
        function() {
            var R = p,
                I = R.lib.StreamCipher,
                H = R.algo,
                P = H.RC4 = I.extend({
                    _doReset: function() {
                        for (var J = this._key, mt = J.words, Z = J.sigBytes, A = this._S = [], q = 0; q < 256; q++) A[q] = q;
                        q = 0;
                        for (var tt = 0; q < 256; q++) {
                            var nt = q % Z,
                                M = A[q];
                            A[q] = A[tt = (tt + A[q] + (mt[nt >>> 2] >>> 24 - nt % 4 * 8 & 255)) % 256], A[tt] = M
                        }
                        this._i = this._j = 0
                    },
                    _doProcessBlock: function(J, mt) {
                        J[mt] ^= K.call(this)
                    },
                    keySize: 8,
                    ivSize: 0
                });

            function K() {
                for (var J = this._S, mt = this._i, Z = this._j, A = 0, q = 0; q < 4; q++) {
                    var tt = J[mt = (mt + 1) % 256];
                    J[mt] = J[Z = (Z + J[mt]) % 256], J[Z] = tt, A |= J[(J[mt] + J[Z]) % 256] << 24 - 8 * q
                }
                return this._i = mt, this._j = Z, A
            }
            R.RC4 = I._createHelper(P);
            var O = H.RC4Drop = P.extend({
                cfg: P.cfg.extend({
                    drop: 192
                }),
                _doReset: function() {
                    P._doReset.call(this);
                    for (var J = this.cfg.drop; J > 0; J--) K.call(this)
                }
            });
            R.RC4Drop = I._createHelper(O)
        }(), p.mode.CTRGladman = function() {
            var R = p.lib.BlockCipherMode.extend();

            function y(P) {
                if (255 == (P >> 24 & 255)) {
                    var K = P >> 16 & 255,
                        O = P >> 8 & 255,
                        J = 255 & P;
                    255 === K ? (K = 0, 255 === O ? (O = 0, 255 === J ? J = 0 : ++J) : ++O) : ++K, P = 0, P += K << 16, P += O << 8, P += J
                } else P += 1 << 24;
                return P
            }
            var H = R.Encryptor = R.extend({
                processBlock: function(P, K) {
                    var O = this._cipher,
                        J = O.blockSize,
                        mt = this._iv,
                        Z = this._counter;
                    mt && (Z = this._counter = mt.slice(0), this._iv = void 0),
                        function I(P) {
                            0 === (P[0] = y(P[0])) && (P[1] = y(P[1]))
                        }(Z);
                    var A = Z.slice(0);
                    O.encryptBlock(A, 0);
                    for (var q = 0; q < J; q++) P[K + q] ^= A[q]
                }
            });
            return R.Decryptor = H, R
        }(),
        function() {
            var R = p,
                I = R.lib.StreamCipher,
                P = [],
                K = [],
                O = [],
                J = R.algo.Rabbit = I.extend({
                    _doReset: function() {
                        for (var Z = this._key.words, A = this.cfg.iv, q = 0; q < 4; q++) Z[q] = 16711935 & (Z[q] << 8 | Z[q] >>> 24) | 4278255360 & (Z[q] << 24 | Z[q] >>> 8);
                        var tt = this._X = [Z[0], Z[3] << 16 | Z[2] >>> 16, Z[1], Z[0] << 16 | Z[3] >>> 16, Z[2], Z[1] << 16 | Z[0] >>> 16, Z[3], Z[2] << 16 | Z[1] >>> 16],
                            nt = this._C = [Z[2] << 16 | Z[2] >>> 16, 4294901760 & Z[0] | 65535 & Z[1], Z[3] << 16 | Z[3] >>> 16, 4294901760 & Z[1] | 65535 & Z[2], Z[0] << 16 | Z[0] >>> 16, 4294901760 & Z[2] | 65535 & Z[3], Z[1] << 16 | Z[1] >>> 16, 4294901760 & Z[3] | 65535 & Z[0]];
                        for (this._b = 0, q = 0; q < 4; q++) mt.call(this);
                        for (q = 0; q < 8; q++) nt[q] ^= tt[q + 4 & 7];
                        if (A) {
                            var lt = A.words,
                                M = lt[0],
                                G = lt[1],
                                et = 16711935 & (M << 8 | M >>> 24) | 4278255360 & (M << 24 | M >>> 8),
                                dt = 16711935 & (G << 8 | G >>> 24) | 4278255360 & (G << 24 | G >>> 8),
                                Bt = et >>> 16 | 4294901760 & dt,
                                wt = dt << 16 | 65535 & et;
                            for (nt[0] ^= et, nt[1] ^= Bt, nt[2] ^= dt, nt[3] ^= wt, nt[4] ^= et, nt[5] ^= Bt, nt[6] ^= dt, nt[7] ^= wt, q = 0; q < 4; q++) mt.call(this)
                        }
                    },
                    _doProcessBlock: function(Z, A) {
                        var q = this._X;
                        mt.call(this), P[0] = q[0] ^ q[5] >>> 16 ^ q[3] << 16, P[1] = q[2] ^ q[7] >>> 16 ^ q[5] << 16, P[2] = q[4] ^ q[1] >>> 16 ^ q[7] << 16, P[3] = q[6] ^ q[3] >>> 16 ^ q[1] << 16;
                        for (var tt = 0; tt < 4; tt++) P[tt] = 16711935 & (P[tt] << 8 | P[tt] >>> 24) | 4278255360 & (P[tt] << 24 | P[tt] >>> 8), Z[A + tt] ^= P[tt]
                    },
                    blockSize: 4,
                    ivSize: 2
                });

            function mt() {
                for (var Z = this._X, A = this._C, q = 0; q < 8; q++) K[q] = A[q];
                for (A[0] = A[0] + 1295307597 + this._b | 0, A[1] = A[1] + 3545052371 + (A[0] >>> 0 < K[0] >>> 0 ? 1 : 0) | 0, A[2] = A[2] + 886263092 + (A[1] >>> 0 < K[1] >>> 0 ? 1 : 0) | 0, A[3] = A[3] + 1295307597 + (A[2] >>> 0 < K[2] >>> 0 ? 1 : 0) | 0, A[4] = A[4] + 3545052371 + (A[3] >>> 0 < K[3] >>> 0 ? 1 : 0) | 0, A[5] = A[5] + 886263092 + (A[4] >>> 0 < K[4] >>> 0 ? 1 : 0) | 0, A[6] = A[6] + 1295307597 + (A[5] >>> 0 < K[5] >>> 0 ? 1 : 0) | 0, A[7] = A[7] + 3545052371 + (A[6] >>> 0 < K[6] >>> 0 ? 1 : 0) | 0, this._b = A[7] >>> 0 < K[7] >>> 0 ? 1 : 0, q = 0; q < 8; q++) {
                    var tt = Z[q] + A[q],
                        nt = 65535 & tt,
                        lt = tt >>> 16;
                    O[q] = ((nt * nt >>> 17) + nt * lt >>> 15) + lt * lt ^ ((4294901760 & tt) * tt | 0) + ((65535 & tt) * tt | 0)
                }
                Z[0] = O[0] + (O[7] << 16 | O[7] >>> 16) + (O[6] << 16 | O[6] >>> 16) | 0, Z[1] = O[1] + (O[0] << 8 | O[0] >>> 24) + O[7] | 0, Z[2] = O[2] + (O[1] << 16 | O[1] >>> 16) + (O[0] << 16 | O[0] >>> 16) | 0, Z[3] = O[3] + (O[2] << 8 | O[2] >>> 24) + O[1] | 0, Z[4] = O[4] + (O[3] << 16 | O[3] >>> 16) + (O[2] << 16 | O[2] >>> 16) | 0, Z[5] = O[5] + (O[4] << 8 | O[4] >>> 24) + O[3] | 0, Z[6] = O[6] + (O[5] << 16 | O[5] >>> 16) + (O[4] << 16 | O[4] >>> 16) | 0, Z[7] = O[7] + (O[6] << 8 | O[6] >>> 24) + O[5] | 0
            }
            R.Rabbit = I._createHelper(J)
        }(), p.mode.CTR = function() {
            var R = p.lib.BlockCipherMode.extend(),
                y = R.Encryptor = R.extend({
                    processBlock: function(I, H) {
                        var P = this._cipher,
                            K = P.blockSize,
                            O = this._iv,
                            J = this._counter;
                        O && (J = this._counter = O.slice(0), this._iv = void 0);
                        var mt = J.slice(0);
                        P.encryptBlock(mt, 0), J[K - 1] = J[K - 1] + 1 | 0;
                        for (var Z = 0; Z < K; Z++) I[H + Z] ^= mt[Z]
                    }
                });
            return R.Decryptor = y, R
        }(),
        function() {
            var R = p,
                I = R.lib.StreamCipher,
                P = [],
                K = [],
                O = [],
                J = R.algo.RabbitLegacy = I.extend({
                    _doReset: function() {
                        var Z = this._key.words,
                            A = this.cfg.iv,
                            q = this._X = [Z[0], Z[3] << 16 | Z[2] >>> 16, Z[1], Z[0] << 16 | Z[3] >>> 16, Z[2], Z[1] << 16 | Z[0] >>> 16, Z[3], Z[2] << 16 | Z[1] >>> 16],
                            tt = this._C = [Z[2] << 16 | Z[2] >>> 16, 4294901760 & Z[0] | 65535 & Z[1], Z[3] << 16 | Z[3] >>> 16, 4294901760 & Z[1] | 65535 & Z[2], Z[0] << 16 | Z[0] >>> 16, 4294901760 & Z[2] | 65535 & Z[3], Z[1] << 16 | Z[1] >>> 16, 4294901760 & Z[3] | 65535 & Z[0]];
                        this._b = 0;
                        for (var nt = 0; nt < 4; nt++) mt.call(this);
                        for (nt = 0; nt < 8; nt++) tt[nt] ^= q[nt + 4 & 7];
                        if (A) {
                            var lt = A.words,
                                M = lt[0],
                                G = lt[1],
                                et = 16711935 & (M << 8 | M >>> 24) | 4278255360 & (M << 24 | M >>> 8),
                                dt = 16711935 & (G << 8 | G >>> 24) | 4278255360 & (G << 24 | G >>> 8),
                                Bt = et >>> 16 | 4294901760 & dt,
                                wt = dt << 16 | 65535 & et;
                            for (tt[0] ^= et, tt[1] ^= Bt, tt[2] ^= dt, tt[3] ^= wt, tt[4] ^= et, tt[5] ^= Bt, tt[6] ^= dt, tt[7] ^= wt, nt = 0; nt < 4; nt++) mt.call(this)
                        }
                    },
                    _doProcessBlock: function(Z, A) {
                        var q = this._X;
                        mt.call(this), P[0] = q[0] ^ q[5] >>> 16 ^ q[3] << 16, P[1] = q[2] ^ q[7] >>> 16 ^ q[5] << 16, P[2] = q[4] ^ q[1] >>> 16 ^ q[7] << 16, P[3] = q[6] ^ q[3] >>> 16 ^ q[1] << 16;
                        for (var tt = 0; tt < 4; tt++) P[tt] = 16711935 & (P[tt] << 8 | P[tt] >>> 24) | 4278255360 & (P[tt] << 24 | P[tt] >>> 8), Z[A + tt] ^= P[tt]
                    },
                    blockSize: 4,
                    ivSize: 2
                });

            function mt() {
                for (var Z = this._X, A = this._C, q = 0; q < 8; q++) K[q] = A[q];
                for (A[0] = A[0] + 1295307597 + this._b | 0, A[1] = A[1] + 3545052371 + (A[0] >>> 0 < K[0] >>> 0 ? 1 : 0) | 0, A[2] = A[2] + 886263092 + (A[1] >>> 0 < K[1] >>> 0 ? 1 : 0) | 0, A[3] = A[3] + 1295307597 + (A[2] >>> 0 < K[2] >>> 0 ? 1 : 0) | 0, A[4] = A[4] + 3545052371 + (A[3] >>> 0 < K[3] >>> 0 ? 1 : 0) | 0, A[5] = A[5] + 886263092 + (A[4] >>> 0 < K[4] >>> 0 ? 1 : 0) | 0, A[6] = A[6] + 1295307597 + (A[5] >>> 0 < K[5] >>> 0 ? 1 : 0) | 0, A[7] = A[7] + 3545052371 + (A[6] >>> 0 < K[6] >>> 0 ? 1 : 0) | 0, this._b = A[7] >>> 0 < K[7] >>> 0 ? 1 : 0, q = 0; q < 8; q++) {
                    var tt = Z[q] + A[q],
                        nt = 65535 & tt,
                        lt = tt >>> 16;
                    O[q] = ((nt * nt >>> 17) + nt * lt >>> 15) + lt * lt ^ ((4294901760 & tt) * tt | 0) + ((65535 & tt) * tt | 0)
                }
                Z[0] = O[0] + (O[7] << 16 | O[7] >>> 16) + (O[6] << 16 | O[6] >>> 16) | 0, Z[1] = O[1] + (O[0] << 8 | O[0] >>> 24) + O[7] | 0, Z[2] = O[2] + (O[1] << 16 | O[1] >>> 16) + (O[0] << 16 | O[0] >>> 16) | 0, Z[3] = O[3] + (O[2] << 8 | O[2] >>> 24) + O[1] | 0, Z[4] = O[4] + (O[3] << 16 | O[3] >>> 16) + (O[2] << 16 | O[2] >>> 16) | 0, Z[5] = O[5] + (O[4] << 8 | O[4] >>> 24) + O[3] | 0, Z[6] = O[6] + (O[5] << 16 | O[5] >>> 16) + (O[4] << 16 | O[4] >>> 16) | 0, Z[7] = O[7] + (O[6] << 8 | O[6] >>> 24) + O[5] | 0
            }
            R.RabbitLegacy = I._createHelper(J)
        }(), p.pad.ZeroPadding = {
            pad: function(R, y) {
                var I = 4 * y;
                R.clamp(), R.sigBytes += I - (R.sigBytes % I || I)
            },
            unpad: function(R) {
                for (var y = R.words, I = R.sigBytes - 1; !(y[I >>> 2] >>> 24 - I % 4 * 8 & 255);) I--;
                R.sigBytes = I + 1
            }
        }, p
}),
function() {
    "use strict";

    function R(ht) {
        return "function" == typeof ht
    }
    var H = Array.isArray ? Array.isArray : function(ht) {
            return "[object Array]" === Object.prototype.toString.call(ht)
        },
        P = Date.now || function() {
            return (new Date).getTime()
        };

    function K() {}
    var O = Object.create || function(ht) {
        if (arguments.length > 1) throw new Error("Second argument not supported");
        if ("object" != typeof ht) throw new TypeError("Argument must be an object");
        return K.prototype = ht, new K
    };

    function J(ht, Et) {
        for (var Rt = 0, ge = ht.length; Rt < ge; Rt++)
            if (ht[Rt] === Et) return Rt;
        return -1
    }

    function mt(ht) {
        var Et = ht._promiseCallbacks;
        return Et || (Et = ht._promiseCallbacks = {}), Et
    }
    var Z = {
            mixin: function(ht) {
                return ht.on = this.on, ht.off = this.off, ht.trigger = this.trigger, ht._promiseCallbacks = void 0, ht
            },
            on: function(ht, Et) {
                if ("function" != typeof Et) throw new TypeError("Callback must be a function");
                var ge, Rt = mt(this);
                (ge = Rt[ht]) || (ge = Rt[ht] = []), -1 === J(ge, Et) && ge.push(Et)
            },
            off: function(ht, Et) {
                var ge, xe, Rt = mt(this);
                Et ? -1 !== (xe = J(ge = Rt[ht], Et)) && ge.splice(xe, 1) : Rt[ht] = []
            },
            trigger: function(ht, Et, Rt) {
                var xe;
                if (xe = mt(this)[ht])
                    for (var De = 0; De < xe.length; De++)(0, xe[De])(Et, Rt)
            }
        },
        A = {
            instrument: !1
        };

    function q(ht, Et) {
        if ("onerror" !== ht) return 2 !== arguments.length ? A[ht] : void(A[ht] = Et);
        A.on("error", Et)
    }
    Z.mixin(A);
    var tt = [],
        M = function lt(ht, Et, Rt) {
            1 === tt.push({
                name: ht,
                payload: {
                    key: Et._guidKey,
                    id: Et._id,
                    eventName: ht,
                    detail: Et._result,
                    childId: Rt && Rt._id,
                    label: Et._label,
                    timeStamp: P(),
                    error: A["instrument-with-stack"] ? new Error(Et._label) : null
                }
            }) && function nt() {
                setTimeout(function() {
                    for (var ht, Et = 0; Et < tt.length; Et++) {
                        var Rt = (ht = tt[Et]).payload;
                        Rt.guid = Rt.key + Rt.id, Rt.childGuid = Rt.key + Rt.childId, Rt.error && (Rt.stack = Rt.error.stack), A.trigger(ht.name, ht.payload)
                    }
                    tt.length = 0
                }, 50)
            }()
        };

    function et() {}
    var dt = void 0,
        Bt = 1,
        wt = 2,
        _ = new V;

    function Qt(ht, Et) {
        ht === Et ? Yt(ht, Et) : function p(ht) {
            return "function" == typeof ht || "object" == typeof ht && null !== ht
        }(Et) ? function Kt(ht, Et) {
            if (Et.constructor === ht.constructor) ! function be(ht, Et) {
                Et._state === Bt ? Yt(ht, Et._result) : Et._state === wt ? (Et._onError = null, it(ht, Et._result)) : ot(Et, void 0, function(Rt) {
                    Et !== Rt ? Qt(ht, Rt) : Yt(ht, Rt)
                }, function(Rt) {
                    it(ht, Rt)
                })
            }(ht, Et);
            else {
                var Rt = function Jt(ht) {
                    try {
                        return ht.then
                    } catch (Et) {
                        return _.error = Et, _
                    }
                }(Et);
                Rt === _ ? it(ht, _.error) : void 0 === Rt ? Yt(ht, Et) : R(Rt) ? function Wt(ht, Et, Rt) {
                    A.async(function(ge) {
                        var xe = !1,
                            Ge = function jt(ht, Et, Rt, ge) {
                                try {
                                    ht.call(Et, Rt, ge)
                                } catch (xe) {
                                    return xe
                                }
                            }(Rt, Et, function(De) {
                                xe || (xe = !0, Et !== De ? Qt(ge, De) : Yt(ge, De))
                            }, function(De) {
                                xe || (xe = !0, it(ge, De))
                            });
                        !xe && Ge && (xe = !0, it(ge, Ge))
                    }, ht)
                }(ht, Et, Rt) : Yt(ht, Et)
            }
        }(ht, Et) : Yt(ht, Et)
    }

    function Ft(ht) {
        ht._onError && ht._onError(ht._result), St(ht)
    }

    function Yt(ht, Et) {
        ht._state === dt && (ht._result = Et, ht._state = Bt, 0 === ht._subscribers.length ? A.instrument && M("fulfilled", ht) : A.async(St, ht))
    }

    function it(ht, Et) {
        ht._state === dt && (ht._state = wt, ht._result = Et, A.async(Ft, ht))
    }

    function ot(ht, Et, Rt, ge) {
        var xe = ht._subscribers,
            Ge = xe.length;
        ht._onError = null, xe[Ge] = Et, xe[Ge + Bt] = Rt, xe[Ge + wt] = ge, 0 === Ge && ht._state && A.async(St, ht)
    }

    function St(ht) {
        var Et = ht._subscribers,
            Rt = ht._state;
        if (A.instrument && M(Rt === Bt ? "fulfilled" : "rejected", ht), 0 !== Et.length) {
            for (var ge, xe, Ge = ht._result, De = 0; De < Et.length; De += 3) xe = Et[De + Rt], (ge = Et[De]) ? z(Rt, ge, xe, Ge) : xe(Ge);
            ht._subscribers.length = 0
        }
    }

    function V() {
        this.error = null
    }
    var rt = new V;

    function z(ht, Et, Rt, ge) {
        var Ge, De, Cn, zn, xe = R(Rt);
        if (xe) {
            if (Ge = function ut(ht, Et) {
                    try {
                        return ht(Et)
                    } catch (Rt) {
                        return rt.error = Rt, rt
                    }
                }(Rt, ge), Ge === rt ? (zn = !0, De = Ge.error, Ge = null) : Cn = !0, Et === Ge) return void it(Et, function G() {
                return new TypeError("A promises callback cannot return that same promise.")
            }())
        } else Ge = ge, Cn = !0;
        Et._state !== dt || (xe && Cn ? Qt(Et, Ge) : zn ? it(Et, De) : ht === Bt ? Yt(Et, Ge) : ht === wt && it(Et, Ge))
    }

    function _t(ht, Et, Rt) {
        return ht === Bt ? {
            state: "fulfilled",
            value: Rt
        } : {
            state: "rejected",
            reason: Rt
        }
    }

    function Mt(ht, Et, Rt, ge) {
        var xe = this;
        xe._instanceConstructor = ht, xe.promise = new ht(et, ge), xe._abortOnReject = Rt, xe._validateInput(Et) ? (xe._input = Et, xe.length = Et.length, xe._remaining = Et.length, xe._init(), 0 === xe.length ? Yt(xe.promise, xe._result) : (xe.length = xe.length || 0, xe._enumerate(), 0 === xe._remaining && Yt(xe.promise, xe._result))) : it(xe.promise, xe._validationError())
    }
    var Gt = Mt;
    Mt.prototype._validateInput = function(ht) {
        return H(ht)
    }, Mt.prototype._validationError = function() {
        return new Error("Array Methods must be provided an Array")
    }, Mt.prototype._init = function() {
        this._result = new Array(this.length)
    }, Mt.prototype._enumerate = function() {
        for (var Et = this.length, Rt = this.promise, ge = this._input, xe = 0; Rt._state === dt && xe < Et; xe++) this._eachEntry(ge[xe], xe)
    }, Mt.prototype._eachEntry = function(ht, Et) {
        var Rt = this,
            ge = Rt._instanceConstructor;
        ! function y(ht) {
            return "object" == typeof ht && null !== ht
        }(ht) ? (Rt._remaining--, Rt._result[Et] = Rt._makeResult(Bt, Et, ht)) : ht.constructor === ge && ht._state !== dt ? (ht._onError = null, Rt._settledAt(ht._state, Et, ht._result)) : Rt._willSettleAt(ge.resolve(ht), Et)
    }, Mt.prototype._settledAt = function(ht, Et, Rt) {
        var ge = this,
            xe = ge.promise;
        xe._state === dt && (ge._remaining--, ge._abortOnReject && ht === wt ? it(xe, Rt) : ge._result[Et] = ge._makeResult(ht, Et, Rt)), 0 === ge._remaining && Yt(xe, ge._result)
    }, Mt.prototype._makeResult = function(ht, Et, Rt) {
        return Rt
    }, Mt.prototype._willSettleAt = function(ht, Et) {
        var Rt = this;
        ot(ht, void 0, function(ge) {
            Rt._settledAt(Bt, Et, ge)
        }, function(ge) {
            Rt._settledAt(wt, Et, ge)
        })
    };
    var le = function ce(ht, Et) {
            if (ht && "object" == typeof ht && ht.constructor === this) return ht;
            var ge = new this(et, Et);
            return Qt(ge, ht), ge
        },
        dn = "rsvp_" + P() + "-",
        Me = 0;

    function Wn(ht, Et) {
        var Rt = this;
        Rt._id = Me++, Rt._label = Et, Rt._state = void 0, Rt._result = void 0, Rt._subscribers = [], A.instrument && M("created", Rt), et !== ht && (R(ht) || function cn() {
            throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")
        }(), Rt instanceof Wn || function sn() {
            throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")
        }(), function X(ht, Et) {
            var Rt = !1;
            try {
                Et(function(xe) {
                    Rt || (Rt = !0, Qt(ht, xe))
                }, function(xe) {
                    Rt || (Rt = !0, it(ht, xe))
                })
            } catch (ge) {
                it(ht, ge)
            }
        }(Rt, ht))
    }
    var te = Wn;

    function Pn(ht, Et, Rt) {
        this._superConstructor(ht, Et, !1, Rt)
    }
    Wn.cast = le, Wn.all = function xt(ht, Et) {
        return new Gt(this, ht, !0, Et).promise
    }, Wn.race = function Tt(ht, Et) {
        var ge = new this(et, Et);
        if (!H(ht)) return it(ge, new TypeError("You must pass an array to race.")), ge;
        var xe = ht.length;

        function Ge(zn) {
            Qt(ge, zn)
        }

        function De(zn) {
            it(ge, zn)
        }
        for (var Cn = 0; ge._state === dt && Cn < xe; Cn++) ot(this.resolve(ht[Cn]), void 0, Ge, De);
        return ge
    }, Wn.resolve = le, Wn.reject = function Ce(ht, Et) {
        var ge = new this(et, Et);
        return it(ge, ht), ge
    }, Wn.prototype = {
        constructor: Wn,
        _guidKey: dn,
        _onError: function(ht) {
            var Et = this;
            A.after(function() {
                Et._onError && A.trigger("error", ht, Et._label)
            })
        },
        then: function(ht, Et, Rt) {
            var ge = this,
                xe = ge._state;
            if (xe === Bt && !ht || xe === wt && !Et) return A.instrument && M("chained", ge, ge), ge;
            ge._onError = null;
            var Ge = new ge.constructor(et, Rt),
                De = ge._result;
            if (A.instrument && M("chained", ge, Ge), xe) {
                var Cn = arguments[xe - 1];
                A.async(function() {
                    z(xe, Ge, Cn, De)
                })
            } else ot(ge, Ge, ht, Et);
            return Ge
        },
        catch: function(ht, Et) {
            return this.then(void 0, ht, Et)
        },
        finally: function(ht, Et) {
            var ge = this.constructor;
            return this.then(function(xe) {
                return ge.resolve(ht()).then(function() {
                    return xe
                })
            }, function(xe) {
                return ge.resolve(ht()).then(function() {
                    throw xe
                })
            }, Et)
        }
    }, (Pn.prototype = O(Gt.prototype))._superConstructor = Gt, Pn.prototype._makeResult = _t, Pn.prototype._validationError = function() {
        return new Error("allSettled must be called with an array")
    };
    var Ni, mi = 0,
        Xn = typeof window < "u" ? window : void 0,
        bi = Xn || {},
        Bi = bi.MutationObserver || bi.WebKitMutationObserver,
        mn = typeof self > "u" && typeof process < "u" && "[object process]" === {}.toString.call(process),
        v = typeof Uint8ClampedArray < "u" && typeof importScripts < "u" && typeof MessageChannel < "u";

    function si() {
        return function() {
            setTimeout(Ai, 1)
        }
    }
    var Qe, Ke = new Array(1e3);

    function Ai() {
        for (var ht = 0; ht < mi; ht += 2)(0, Ke[ht])(Ke[ht + 1]), Ke[ht] = void 0, Ke[ht + 1] = void 0;
        mi = 0
    }
    Qe = mn ? function wr() {
        var ht = process.nextTick,
            Et = process.versions.node.match(/^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$/);
        return Array.isArray(Et) && "0" === Et[1] && "10" === Et[2] && (ht = setImmediate),
            function() {
                ht(Ai)
            }
    }() : Bi ? function Ei() {
        var ht = 0,
            Et = new Bi(Ai),
            Rt = document.createTextNode("");
        return Et.observe(Rt, {
                characterData: !0
            }),
            function() {
                Rt.data = ht = ++ht % 2
            }
    }() : v ? function gn() {
        var ht = new MessageChannel;
        return ht.port1.onmessage = Ai,
            function() {
                ht.port2.postMessage(0)
            }
    }() : void 0 === Xn && "function" == typeof require ? function An() {
        try {
            var Et = require("vertx");
            return Ni = Et.runOnLoop || Et.runOnContext,
                function ci() {
                    return function() {
                        Ni(Ai)
                    }
                }()
        } catch {
            return si()
        }
    }() : si();

    function $n(ht, Et, Rt) {
        this._superConstructor(ht, Et, !0, Rt)
    }
    var Hi = $n;

    function Fn(ht, Et, Rt) {
        this._superConstructor(ht, Et, !1, Rt)
    }($n.prototype = O(Gt.prototype))._superConstructor = Gt, $n.prototype._init = function() {
        this._result = {}
    }, $n.prototype._validateInput = function(ht) {
        return ht && "object" == typeof ht
    }, $n.prototype._validationError = function() {
        return new Error("Promise.hash must be called with an object")
    }, $n.prototype._enumerate = function() {
        var Et = this.promise,
            Rt = this._input,
            ge = [];
        for (var xe in Rt) Et._state === dt && Object.prototype.hasOwnProperty.call(Rt, xe) && ge.push({
            position: xe,
            entry: Rt[xe]
        });
        var Ge = ge.length;
        this._remaining = Ge;
        for (var De, Cn = 0; Et._state === dt && Cn < Ge; Cn++) this._eachEntry((De = ge[Cn]).entry, De.position)
    }, (Fn.prototype = O(Hi.prototype))._superConstructor = Gt, Fn.prototype._makeResult = _t, Fn.prototype._validationError = function() {
        return new Error("hashSettled must be called with an object")
    };

    function Is() {
        this.value = void 0
    }
    var tr = new Is,
        lr = new Is;

    function er(ht, Et, Rt) {
        try {
            ht.apply(Et, Rt)
        } catch (ge) {
            return tr.value = ge, tr
        }
    }

    function Ti(ht, Et) {
        return {
            then: function(Rt, ge) {
                return ht.call(Et, Rt, ge)
            }
        }
    }
    var ds;

    function Mr(ht) {
        return !(!ht || "object" != typeof ht) && (ht.constructor === te || function ns(ht) {
            try {
                return ht.then
            } catch (Et) {
                return tr.value = Et, tr
            }
        }(ht))
    }
    if ("object" == typeof self) ds = self;
    else {
        if ("object" != typeof global) throw new Error("no global: `self` or `global` found");
        ds = global
    }
    var cr = ds;

    function Ls() {
        A.on.apply(A, arguments)
    }
    if (A.async = function Pi(ht, Et) {
            Ke[mi] = ht, Ke[mi + 1] = Et, 2 === (mi += 2) && Qe()
        }, A.after = function(ht) {
            setTimeout(ht, 0)
        }, typeof window < "u" && "object" == typeof window.__PROMISE_INSTRUMENTATION__) {
        var ks = window.__PROMISE_INSTRUMENTATION__;
        for (var zr in q("instrument", !0), ks) ks.hasOwnProperty(zr) && Ls(zr, ks[zr])
    }
    var Yi = {
        race: function ps(ht, Et) {
            return te.race(ht, Et)
        },
        Promise: te,
        allSettled: function En(ht, Et) {
            return new Pn(te, ht, Et).promise
        },
        hash: function us(ht, Et) {
            return new Hi(te, ht, Et).promise
        },
        hashSettled: function wi(ht, Et) {
            return new Fn(te, ht, Et).promise
        },
        denodeify: function ji(ht, Et) {
            var Rt = function() {
                for (var De, xe = arguments.length, Ge = new Array(xe + 1), Cn = !1, zn = 0; zn < xe; ++zn) {
                    if (De = arguments[zn], !Cn) {
                        if ((Cn = Mr(De)) === lr) {
                            var Wi = new te(et);
                            return it(Wi, lr.value), Wi
                        }
                        Cn && !0 !== Cn && (De = Ti(Cn, De))
                    }
                    Ge[zn] = De
                }
                var Vi = new te(et);
                return Ge[xe] = function(hr, gs) {
                    hr ? it(Vi, hr) : void 0 === Et ? Qt(Vi, gs) : !0 === Et ? Qt(Vi, function zi(ht) {
                        for (var Et = ht.length, Rt = new Array(Et - 1), ge = 1; ge < Et; ge++) Rt[ge - 1] = ht[ge];
                        return Rt
                    }(arguments)) : H(Et) ? Qt(Vi, function Mi(ht, Et) {
                        for (var xe, Rt = {}, Ge = ht.length, De = new Array(Ge), Cn = 0; Cn < Ge; Cn++) De[Cn] = ht[Cn];
                        for (xe = 0; xe < Et.length; xe++) Rt[Et[xe]] = De[xe + 1];
                        return Rt
                    }(arguments, Et)) : Qt(Vi, gs)
                }, Cn ? function Sr(ht, Et, Rt, ge) {
                    return te.all(Et).then(function(xe) {
                        var Ge = er(Rt, ge, xe);
                        return Ge === tr && it(ht, Ge.value), ht
                    })
                }(Vi, Ge, ht, this) : function fi(ht, Et, Rt, ge) {
                    var xe = er(Rt, ge, Et);
                    return xe === tr && it(ht, xe.value), ht
                }(Vi, Ge, ht, this)
            };
            return Rt.__proto__ = ht, Rt
        },
        on: Ls,
        off: function Ss() {
            A.off.apply(A, arguments)
        },
        map: function pr(ht, Et, Rt) {
            return te.all(ht, Rt).then(function(ge) {
                if (!R(Et)) throw new TypeError("You must pass a function as map's second argument.");
                for (var xe = ge.length, Ge = new Array(xe), De = 0; De < xe; De++) Ge[De] = Et(ge[De]);
                return te.all(Ge, Rt)
            })
        },
        filter: function Pr(ht, Et, Rt) {
            return te.all(ht, Rt).then(function(ge) {
                if (!R(Et)) throw new TypeError("You must pass a function as filter's second argument.");
                for (var xe = ge.length, Ge = new Array(xe), De = 0; De < xe; De++) Ge[De] = Et(ge[De]);
                return te.all(Ge, Rt).then(function(Cn) {
                    for (var zn = new Array(xe), Wi = 0, Vi = 0; Vi < xe; Vi++) Cn[Vi] && (zn[Wi] = ge[Vi], Wi++);
                    return zn.length = Wi, zn
                })
            })
        },
        resolve: function rs(ht, Et) {
            return te.resolve(ht, Et)
        },
        reject: function is(ht, Et) {
            return te.reject(ht, Et)
        },
        all: function qe(ht, Et) {
            return te.all(ht, Et)
        },
        rethrow: function Ii(ht) {
            throw setTimeout(function() {
                throw ht
            }), ht
        },
        defer: function hi(ht) {
            var Et = {};
            return Et.promise = new te(function(Rt, ge) {
                Et.resolve = Rt, Et.reject = ge
            }, ht), Et
        },
        EventTarget: Z,
        configure: q,
        async: function Hr(ht, Et) {
            A.async(ht, Et)
        }
    };
    "function" == typeof define && define.amd ? define(function() {
        return Yi
    }) : typeof module < "u" && module.exports ? module.exports = Yi : typeof cr < "u" && (cr.RSVP = Yi)
}.call(this);
var Sha256 = {
    hash: function(p) {
        p = p.utf8Encode();
        var R = [1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298],
            y = [1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225];
        p += String.fromCharCode(128);
        for (var H = Math.ceil((p.length / 4 + 2) / 16), P = new Array(H), K = 0; H > K; K++) {
            P[K] = new Array(16);
            for (var O = 0; 16 > O; O++) P[K][O] = p.charCodeAt(64 * K + 4 * O) << 24 | p.charCodeAt(64 * K + 4 * O + 1) << 16 | p.charCodeAt(64 * K + 4 * O + 2) << 8 | p.charCodeAt(64 * K + 4 * O + 3)
        }
        P[H - 1][14] = 8 * (p.length - 1) / Math.pow(2, 32), P[H - 1][14] = Math.floor(P[H - 1][14]), P[H - 1][15] = 8 * (p.length - 1) & 4294967295;
        var J, mt, Z, A, q, tt, nt, lt, M = new Array(64);
        for (K = 0; H > K; K++) {
            for (var G = 0; 16 > G; G++) M[G] = P[K][G];
            for (G = 16; 64 > G; G++) M[G] = Sha256.\u03c31(M[G - 2]) + M[G - 7] + Sha256.\u03c30(M[G - 15]) + M[G - 16] & 4294967295;
            for (J = y[0], mt = y[1], Z = y[2], A = y[3], q = y[4], tt = y[5], nt = y[6], lt = y[7], G = 0; 64 > G; G++) {
                var et = lt + Sha256.\u03a31(q) + Sha256.Ch(q, tt, nt) + R[G] + M[G],
                    dt = Sha256.\u03a30(J) + Sha256.Maj(J, mt, Z);
                lt = nt, nt = tt, tt = q, q = A + et & 4294967295, A = Z, Z = mt, mt = J, J = et + dt & 4294967295
            }
            y[0] = y[0] + J & 4294967295, y[1] = y[1] + mt & 4294967295, y[2] = y[2] + Z & 4294967295, y[3] = y[3] + A & 4294967295, y[4] = y[4] + q & 4294967295, y[5] = y[5] + tt & 4294967295, y[6] = y[6] + nt & 4294967295, y[7] = y[7] + lt & 4294967295
        }
        return Sha256.toHexStr(y[0]) + Sha256.toHexStr(y[1]) + Sha256.toHexStr(y[2]) + Sha256.toHexStr(y[3]) + Sha256.toHexStr(y[4]) + Sha256.toHexStr(y[5]) + Sha256.toHexStr(y[6]) + Sha256.toHexStr(y[7])
    },
    ROTR: function(p, R) {
        return R >>> p | R << 32 - p
    },
    \u03a30: function(p) {
        return Sha256.ROTR(2, p) ^ Sha256.ROTR(13, p) ^ Sha256.ROTR(22, p)
    },
    \u03a31: function(p) {
        return Sha256.ROTR(6, p) ^ Sha256.ROTR(11, p) ^ Sha256.ROTR(25, p)
    },
    \u03c30: function(p) {
        return Sha256.ROTR(7, p) ^ Sha256.ROTR(18, p) ^ p >>> 3
    },
    \u03c31: function(p) {
        return Sha256.ROTR(17, p) ^ Sha256.ROTR(19, p) ^ p >>> 10
    },
    Ch: function(p, R, y) {
        return p & R ^ ~p & y
    },
    Maj: function(p, R, y) {
        return p & R ^ p & y ^ R & y
    },
    toHexStr: function(p) {
        for (var y = "", I = 7; I >= 0; I--) y += (p >>> 4 * I & 15).toString(16);
        return y
    }
};
typeof String.prototype.utf8Encode > "u" && (String.prototype.utf8Encode = function() {
    return unescape(encodeURIComponent(this))
}), typeof String.prototype.utf8Decode > "u" && (String.prototype.utf8Decode = function() {
    try {
        return decodeURIComponent(escape(this))
    } catch {
        return this
    }
}), typeof module < "u" && module.exports && (module.exports = Sha256), "function" == typeof define && define.amd && define([], function() {
    return Sha256
});
var qz = function() {
    Array.isArray || (Array.isArray = function(y) {
        return "[object Array]" === Object.prototype.toString.call(y)
    });
    var p = {
        VERSION: "2.1.0",
        DEBUG: !1,
        log: {
            trace: function() {
                p.DEBUG && console.log.apply(console, arguments)
            },
            info: function() {
                console.info.apply(console, arguments)
            },
            warn: function() {
                p.DEBUG && console.warn.apply(console, arguments)
            },
            error: function() {
                console.error.apply(console, arguments)
            }
        },
        streams: {
            serial: "SERIAL",
            usb: "USB",
            hid: "HID",
            printer: "PRINTER",
            file: "FILE"
        },
        websocket: {
            connection: null,
            connectConfig: {
                host: ["localhost", "localhost.qz.io"],
                hostIndex: 0,
                usingSecure: !0,
                protocol: {
                    secure: "ws://",
                    insecure: "ws://"
                },
                port: {
                    secure: [8182, 8283, 8384, 8485],
                    insecure: [8182, 8283, 8384, 8485],
                    portIndex: 0
                },
                keepAlive: 60,
                retries: 0,
                delay: 0
            },
            setup: {
                findConnection: function(y, I, H) {
                    if (y.port.secure.length) !y.port.insecure.length && !y.usingSecure && (p.log.trace("No insecure ports specified - forcing secure connection"), y.usingSecure = !0);
                    else {
                        if (!y.port.insecure.length) return void H(new Error("No ports have been specified to connect over"));
                        y.usingSecure && (p.log.error("No secure ports specified - forcing insecure connection"), y.usingSecure = !1)
                    }
                    var K, P = function() {
                        if (y.port.portIndex++, y.usingSecure && y.port.portIndex >= y.port.secure.length || !y.usingSecure && y.port.portIndex >= y.port.insecure.length) {
                            if (y.hostIndex >= y.host.length - 1) return void H(new Error("Unable to establish connection with QZ"));
                            y.hostIndex++, y.port.portIndex = 0
                        }
                        p.websocket.setup.findConnection(y, I, H)
                    };
                    K = y.usingSecure ? y.protocol.secure + y.host[y.hostIndex] + ":" + y.port.secure[y.port.portIndex] : y.protocol.insecure + y.host[y.hostIndex] + ":" + y.port.insecure[y.port.portIndex];
                    try {
                        p.log.trace("Attempting connection", K), p.websocket.connection = new p.tools.ws(K)
                    } catch (O) {
                        return p.log.error(O), void P()
                    }
                    null != p.websocket.connection ? (p.websocket.connection.established = !1, p.websocket.connection.onopen = function(O) {
                        if (!p.websocket.connection.established && (p.log.trace(O), p.log.info("Established connection with QZ Tray on " + K), p.websocket.setup.openConnection({
                                resolve: I,
                                reject: H
                            }), y.keepAlive > 0)) var J = setInterval(function() {
                            qz.websocket.isActive() ? p.websocket.connection.send("ping") : clearInterval(J)
                        }, 1e3 * y.keepAlive)
                    }, p.websocket.connection.onclose = function() {
                        p.websocket.connection && typeof navigator < "u" && -1 != navigator.userAgent.indexOf("Safari") && -1 == navigator.userAgent.indexOf("Chrome") && p.websocket.connection.onerror()
                    }, p.websocket.connection.onerror = function(O) {
                        p.log.trace(O), p.websocket.connection = null, P()
                    }) : H(new Error("Unable to create a websocket connection"))
                },
                openConnection: function(y) {
                    function I(H) {
                        void 0 === H && (H = null), p.websocket.connection.sendData({
                            certificate: H,
                            promise: y
                        })
                    }
                    p.websocket.connection.established = !0, p.websocket.connection.onclose = function(H) {
                        for (var P in p.log.trace(H), p.log.info("Closed connection with QZ Tray"), null != p.websocket.connection.promise && p.websocket.connection.promise.resolve(), p.websocket.callClose(H), p.websocket.connection = null, p.websocket.pendingCalls) p.websocket.pendingCalls.hasOwnProperty(P) && p.websocket.pendingCalls[P].reject(new Error("Connection closed before response received"))
                    }, p.websocket.connection.onerror = function(H) {
                        p.websocket.callError(H)
                    }, p.websocket.connection.sendData = function(H) {
                        p.log.trace("Preparing object for websocket", H), null == H.timestamp && (H.timestamp = Date.now(), "number" != typeof H.timestamp && (H.timestamp = (new Date).getTime())), null != H.promise && (H.uid = p.websocket.setup.newUID(), p.websocket.pendingCalls[H.uid] = H.promise), H.signAlgorithm = p.security.signAlgorithm, H.position = {
                            x: screen ? (screen.availWidth || screen.width) / 2 + (screen.left || screen.availLeft) : 0,
                            y: screen ? (screen.availHeight || screen.height) / 2 + (screen.top || screen.availTop) : 0
                        };
                        try {
                            if (null != H.call && null == H.signature) {
                                var K = p.tools.hash(p.tools.stringify({
                                    call: H.call,
                                    params: H.params,
                                    timestamp: H.timestamp
                                }));
                                K.then || (K = p.tools.promise(function(O) {
                                    O(K)
                                })), K.then(function(O) {
                                    return p.security.callSign(O)
                                }).then(function(O) {
                                    p.log.trace("Signature for call", O), H.signature = O, p.signContent = void 0, p.websocket.connection.send(p.tools.stringify(H))
                                })
                            } else p.log.trace("Signature for call", H.signature), p.websocket.connection.send(p.tools.stringify(H))
                        } catch (O) {
                            p.log.error(O), null != H.promise && (H.promise.reject(O), delete p.websocket.pendingCalls[H.uid])
                        }
                    }, p.websocket.connection.onmessage = function(H) {
                        var P = JSON.parse(H.data);
                        if (null != P.uid) {
                            p.log.trace("Received response from websocket", P);
                            var K = p.websocket.pendingCalls[P.uid];
                            null == K ? p.log.warn("No promise found for returned response") : null != P.error ? K.reject(new Error(P.error)) : K.resolve(P.result), delete p.websocket.pendingCalls[P.uid]
                        } else if (null == P.type) p.websocket.connection.close(4003, "Connected to incompatible QZ Tray version");
                        else switch (P.type) {
                            case p.streams.serial:
                                P.event || (P.event = JSON.stringify({
                                    portName: P.key,
                                    output: P.data
                                })), p.serial.callSerial(JSON.parse(P.event));
                                break;
                            case p.streams.usb:
                                P.event || (P.event = JSON.stringify({
                                    vendorId: P.key[0],
                                    productId: P.key[1],
                                    output: P.data
                                })), p.usb.callUsb(JSON.parse(P.event));
                                break;
                            case p.streams.hid:
                                p.hid.callHid(JSON.parse(P.event));
                                break;
                            case p.streams.printer:
                                p.printers.callPrinter(JSON.parse(P.event));
                                break;
                            case p.streams.file:
                                p.file.callFile(JSON.parse(P.event));
                                break;
                            default:
                                p.log.warn("Cannot determine stream type for callback", P)
                        }
                    }, p.security.callCert().then(I).catch(I), qz.api.getVersion().then(function(H) {
                        p.websocket.connection.version = H, p.security.isAlgorithmCompatible()
                    })
                },
                newUID: function() {
                    return (new Array(7).join("0") + (Math.random() * Math.pow(36, 6) << 0).toString(36)).slice(-6)
                }
            },
            dataPromise: function(y, I, H, P) {
                return p.tools.promise(function(K, O) {
                    p.websocket.connection.sendData({
                        call: y,
                        promise: {
                            resolve: K,
                            reject: O
                        },
                        params: I,
                        signature: H,
                        timestamp: P
                    })
                })
            },
            pendingCalls: {},
            errorCallbacks: [],
            callError: function(y) {
                if (Array.isArray(p.websocket.errorCallbacks))
                    for (var I = 0; I < p.websocket.errorCallbacks.length; I++) p.websocket.errorCallbacks[I](y);
                else p.websocket.errorCallbacks(y)
            },
            closedCallbacks: [],
            callClose: function(y) {
                if (Array.isArray(p.websocket.closedCallbacks))
                    for (var I = 0; I < p.websocket.closedCallbacks.length; I++) p.websocket.closedCallbacks[I](y);
                else p.websocket.closedCallbacks(y)
            }
        },
        printing: {
            defaultConfig: {
                colorType: "color",
                copies: 1,
                density: 0,
                duplex: !1,
                fallbackDensity: null,
                interpolation: "bicubic",
                jobName: null,
                legacy: !1,
                margins: 0,
                orientation: null,
                paperThickness: null,
                printerTray: null,
                rasterize: !1,
                rotation: 0,
                scaleContent: !0,
                size: null,
                units: "in",
                altPrinting: !1,
                encoding: null,
                endOfDoc: null,
                perSpool: 1
            }
        },
        serial: {
            serialCallbacks: [],
            callSerial: function(y) {
                if (Array.isArray(p.serial.serialCallbacks))
                    for (var I = 0; I < p.serial.serialCallbacks.length; I++) p.serial.serialCallbacks[I](y);
                else p.serial.serialCallbacks(y)
            }
        },
        usb: {
            usbCallbacks: [],
            callUsb: function(y) {
                if (Array.isArray(p.usb.usbCallbacks))
                    for (var I = 0; I < p.usb.usbCallbacks.length; I++) p.usb.usbCallbacks[I](y);
                else p.usb.usbCallbacks(y)
            }
        },
        hid: {
            hidCallbacks: [],
            callHid: function(y) {
                if (Array.isArray(p.hid.hidCallbacks))
                    for (var I = 0; I < p.hid.hidCallbacks.length; I++) p.hid.hidCallbacks[I](y);
                else p.hid.hidCallbacks(y)
            }
        },
        printers: {
            printerCallbacks: [],
            callPrinter: function(y) {
                if (Array.isArray(p.printers.printerCallbacks))
                    for (var I = 0; I < p.printers.printerCallbacks.length; I++) p.printers.printerCallbacks[I](y);
                else p.printers.printerCallbacks(y)
            }
        },
        file: {
            fileCallbacks: [],
            callFile: function(y) {
                if (Array.isArray(p.file.fileCallbacks))
                    for (var I = 0; I < p.file.fileCallbacks.length; I++) p.file.fileCallbacks[I](y);
                else p.file.fileCallbacks(y)
            }
        },
        security: {
            certPromise: function(y, I) {
                I()
            },
            callCert: function() {
                return p.tools.promise(p.security.certPromise)
            },
            signaturePromise: function() {
                return function(y) {
                    y()
                }
            },
            callSign: function(y) {
                return p.tools.promise(p.security.signaturePromise(y))
            },
            signAlgorithm: "SHA1",
            isAlgorithmCompatible: function() {
                if (p.websocket.connection) {
                    var y = p.websocket.connection.version.split(/[.-]/g);
                    if ("2" === y[0] && "0" === y[1]) return p.log.warn("Connected to an older version of QZ, alternate signature algorithms are not supported"), !1
                }
                return !0
            }
        },
        tools: {
            promise: function(y) {
                return new RSVP.Promise(y)
            },
            stringify: function(y) {
                var I = Array.prototype.toJSON;
                delete Array.prototype.toJSON;
                var H = JSON.stringify(y);
                return I && (Array.prototype.toJSON = I), H
            },
            hash: function(y) {
                return Sha256.hash(y)
            },
            ws: typeof WebSocket < "u" ? WebSocket : null,
            absolute: function(y) {
                if (typeof window < "u" && "function" == typeof document.createElement) {
                    var I = document.createElement("a");
                    return I.href = y, I.href
                }
                return y
            },
            relative: function(y) {
                for (var I = 0; I < y.length; I++)
                    if (y[I].constructor === Object) {
                        var H = !1;
                        0 === y[I].data.search(/data:image\/\w+;base64,/) ? (y[I].flavor = "base64", y[I].data = y[I].data.replace(/^data:image\/\w+;base64,/, "")) : y[I].flavor ? ["FILE", "XML"].indexOf(y[I].flavor.toUpperCase()) > -1 && (H = !0) : (y[I].format && ["HTML", "IMAGE", "PDF", "FILE", "XML"].indexOf(y[I].format.toUpperCase()) > -1 || y[I].type && (["PIXEL", "IMAGE", "PDF"].indexOf(y[I].type.toUpperCase()) > -1 && !y[I].format || ["HTML", "PDF"].indexOf(y[I].type.toUpperCase()) > -1 && (!y[I].format || "FILE" === y[I].format.toUpperCase()))) && (H = !0), H && (y[I].data = p.tools.absolute(y[I].data)), y[I].options && "string" == typeof y[I].options.overlay && (y[I].options.overlay = p.tools.absolute(y[I].options.overlay))
                    }
            },
            extend: function(y) {
                "object" != typeof y && (y = {});
                for (var I = 1; I < arguments.length; I++) {
                    var H = arguments[I];
                    if (H)
                        for (var P in H)
                            if (H.hasOwnProperty(P)) {
                                if (y === H[P]) continue;
                                var K;
                                H[P] && H[P].constructor && H[P].constructor === Object ? (K = Array.isArray(H[P]) ? y[P] || [] : y[P] || {}, y[P] = p.tools.extend(K, H[P])) : void 0 !== H[P] && (y[P] = H[P])
                            }
                }
                return y
            },
            compatible: function(y) {
                var I = p.websocket.connection.version.split(/[.-]/g);
                if ("2" === I[0] && "0" === I[1]) {
                    p.log.trace("Converting print data to v2.0 for " + p.websocket.connection.version);
                    for (var H = 0; H < y.length; H++) y[H].constructor === Object && ("RAW" === y[H].type.toUpperCase() && "IMAGE" === y[H].format.toUpperCase() && ("BASE64" === y[H].flavor.toUpperCase() && (y[H].data = "data:image/compat;base64," + y[H].data), y[H].flavor = "IMAGE"), ("RAW" === y[H].type.toUpperCase() || "COMMAND" === y[H].format.toUpperCase()) && (y[H].format = "RAW"), y[H].type = y[H].format, y[H].format = y[H].flavor, delete y[H].flavor)
                }
            }
        }
    };

    function R(y, I) {
        this.setPrinter = function(H) {
            "string" == typeof H && (H = {
                name: H
            }), this.printer = H
        }, this.getPrinter = function() {
            return this.printer
        }, this.reconfigure = function(H) {
            p.tools.extend(this.config, H)
        }, this.getOptions = function() {
            return this.config
        }, this.setPrinter(y), this.config = I
    }
    return R.prototype.print = function(y, I, H) {
        qz.print(this, y, I, H)
    }, {
        websocket: {
            isActive: function() {
                return null != p.websocket.connection && p.websocket.connection.established
            },
            connect: function(y) {
                return p.tools.promise(function(I, H) {
                    if (qz.websocket.isActive()) H(new Error("An open connection with QZ Tray already exists"));
                    else if (null == p.websocket.connection)
                        if (p.tools.ws)
                            if (p.tools.ws.CLOSED && 2 != p.tools.ws.CLOSED) {
                                null == y && (y = {}), (typeof location > "u" || "https:" !== location.protocol) && typeof y.usingSecure > "u" && (p.log.trace("Disabling secure ports due to insecure page"), y.usingSecure = !1), typeof y.host < "u" && !Array.isArray(y.host) && (y.host = [y.host]);
                                var P = function(K) {
                                    var O = !1,
                                        J = function() {
                                            O || (O = !0, y && K < y.retries ? P(K + 1) : (p.websocket.connection = null, H.apply(null, arguments)))
                                        },
                                        mt = function() {
                                            var Z = p.tools.extend({}, p.websocket.connectConfig, y);
                                            p.websocket.setup.findConnection(Z, I, J)
                                        };
                                    0 == K ? mt() : setTimeout(mt, 1e3 * y.delay)
                                };
                                P(0)
                            } else H(new Error("Unsupported WebSocket version detected: HyBi-00/Hixie-76"));
                    else H(new Error("WebSocket not supported by this browser"));
                    else H(new Error("The current connection attempt has not returned yet"))
                })
            },
            disconnect: function() {
                return p.tools.promise(function(y, I) {
                    qz.websocket.isActive() ? (p.websocket.connection.close(), p.websocket.connection.promise = {
                        resolve: y,
                        reject: I
                    }) : I(new Error("No open connection with QZ Tray"))
                })
            },
            setErrorCallbacks: function(y) {
                p.websocket.errorCallbacks = y
            },
            setClosedCallbacks: function(y) {
                p.websocket.closedCallbacks = y
            },
            getNetworkInfo: function(y, I, H, P) {
                return p.tools.promise(function(K, O) {
                    p.websocket.dataPromise("networking.device", {
                        hostname: y,
                        port: I
                    }, H, P).then(function(J) {
                        K({
                            ipAddress: J.ip,
                            macAddress: J.mac
                        })
                    }, O)
                })
            },
            getConnectionInfo: function() {
                if (p.websocket.connection) {
                    var y = p.websocket.connection.url.split(/[:\/]+/g);
                    return {
                        socket: y[0],
                        host: y[1],
                        port: +y[2]
                    }
                }
                throw new Error("A connection to QZ has not been established yet")
            }
        },
        printers: {
            getDefault: function(y, I) {
                return p.websocket.dataPromise("printers.getDefault", null, y, I)
            },
            find: function(y, I, H) {
                return p.websocket.dataPromise("printers.find", {
                    query: y
                }, I, H)
            },
            details: function() {
                return p.websocket.dataPromise("printers.detail")
            },
            startListening: function(y) {
                return Array.isArray(y) || (y = [y]), p.websocket.dataPromise("printers.startListening", {
                    printerNames: y
                })
            },
            stopListening: function() {
                return p.websocket.dataPromise("printers.stopListening")
            },
            getStatus: function() {
                return p.websocket.dataPromise("printers.getStatus")
            },
            setPrinterCallbacks: function(y) {
                p.printers.printerCallbacks = y
            }
        },
        configs: {
            setDefaults: function(y) {
                p.tools.extend(p.printing.defaultConfig, y)
            },
            create: function(y, I) {
                return new R(y, p.tools.extend({}, p.printing.defaultConfig, I))
            }
        },
        print: function(y, I) {
            var H = !1,
                P = [],
                K = [];
            arguments.length >= 3 && ("boolean" == typeof arguments[2] ? (H = arguments[2], arguments.length >= 5 && (P = arguments[3], K = arguments[4])) : arguments.length >= 4 && (P = arguments[2], K = arguments[3]), P && !Array.isArray(P) && (P = [P]), K && !Array.isArray(K) && (K = [K])), Array.isArray(y) || (y = [y]), Array.isArray(I[0]) || (I = [I]);
            for (var O = 0; O < I.length; O++) p.tools.relative(I[O]), p.tools.compatible(I[O]);
            for (var J = function(nt) {
                    var lt = {
                        printer: nt.config.getPrinter(),
                        options: nt.config.getOptions(),
                        data: nt.data
                    };
                    return p.websocket.dataPromise("print", lt, nt.signature, nt.timestamp)
                }, mt = [], Z = 0; Z < y.length || Z < I.length; Z++) ! function(nt) {
                var lt = {
                    config: y[Math.min(nt, y.length - 1)],
                    data: I[Math.min(nt, I.length - 1)],
                    signature: P[nt],
                    timestamp: K[nt]
                };
                mt.push(function() {
                    return J(lt)
                })
            }(Z);
            var A = null;
            if (H) {
                var q = [];
                A = function(nt) {
                    q.push(nt)
                }, mt.push(function() {
                    return p.tools.promise(function(nt, lt) {
                        q.length ? lt(q) : nt()
                    })
                })
            }
            var tt = null;
            return mt.reduce(function(nt, lt) {
                return tt = nt.catch(A).then(lt)
            }, p.tools.promise(function(nt) {
                nt()
            })), tt
        },
        serial: {
            findPorts: function() {
                return p.websocket.dataPromise("serial.findPorts")
            },
            setSerialCallbacks: function(y) {
                p.serial.serialCallbacks = y
            },
            openPort: function(y, I) {
                return p.websocket.dataPromise("serial.openPort", {
                    port: y,
                    options: I
                })
            },
            sendData: function(y, I, H) {
                return "object" != typeof I && (I = {
                    data: I,
                    type: "PLAIN"
                }), p.websocket.dataPromise("serial.sendData", {
                    port: y,
                    data: I,
                    options: H
                })
            },
            closePort: function(y) {
                return p.websocket.dataPromise("serial.closePort", {
                    port: y
                })
            }
        },
        usb: {
            listDevices: function(y) {
                return p.websocket.dataPromise("usb.listDevices", {
                    includeHubs: y
                })
            },
            listInterfaces: function(y) {
                return "object" != typeof y && (y = {
                    vendorId: arguments[0],
                    productId: arguments[1]
                }), p.websocket.dataPromise("usb.listInterfaces", y)
            },
            listEndpoints: function(y) {
                return "object" != typeof y && (y = {
                    vendorId: arguments[0],
                    productId: arguments[1],
                    interface: arguments[2]
                }), p.websocket.dataPromise("usb.listEndpoints", y)
            },
            setUsbCallbacks: function(y) {
                p.usb.usbCallbacks = y
            },
            claimDevice: function(y) {
                return "object" != typeof y && (y = {
                    vendorId: arguments[0],
                    productId: arguments[1],
                    interface: arguments[2]
                }), p.websocket.dataPromise("usb.claimDevice", y)
            },
            isClaimed: function(y) {
                return "object" != typeof y && (y = {
                    vendorId: arguments[0],
                    productId: arguments[1]
                }), p.websocket.dataPromise("usb.isClaimed", y)
            },
            sendData: function(y) {
                return "object" != typeof y && (y = {
                    vendorId: arguments[0],
                    productId: arguments[1],
                    endpoint: arguments[2],
                    data: arguments[3]
                }), p.websocket.dataPromise("usb.sendData", y)
            },
            readData: function(y) {
                return "object" != typeof y && (y = {
                    vendorId: arguments[0],
                    productId: arguments[1],
                    endpoint: arguments[2],
                    responseSize: arguments[3]
                }), p.websocket.dataPromise("usb.readData", y)
            },
            openStream: function(y) {
                return "object" != typeof y && (y = {
                    vendorId: arguments[0],
                    productId: arguments[1],
                    endpoint: arguments[2],
                    responseSize: arguments[3],
                    interval: arguments[4]
                }), p.websocket.dataPromise("usb.openStream", y)
            },
            closeStream: function(y) {
                return "object" != typeof y && (y = {
                    vendorId: arguments[0],
                    productId: arguments[1],
                    endpoint: arguments[2]
                }), p.websocket.dataPromise("usb.closeStream", y)
            },
            releaseDevice: function(y) {
                return "object" != typeof y && (y = {
                    vendorId: arguments[0],
                    productId: arguments[1]
                }), p.websocket.dataPromise("usb.releaseDevice", y)
            }
        },
        hid: {
            listDevices: function() {
                return p.websocket.dataPromise("hid.listDevices")
            },
            startListening: function() {
                return p.websocket.dataPromise("hid.startListening")
            },
            stopListening: function() {
                return p.websocket.dataPromise("hid.stopListening")
            },
            setHidCallbacks: function(y) {
                p.hid.hidCallbacks = y
            },
            claimDevice: function(y) {
                return "object" != typeof y && (y = {
                    vendorId: arguments[0],
                    productId: arguments[1]
                }), p.websocket.dataPromise("hid.claimDevice", y)
            },
            isClaimed: function(y) {
                return "object" != typeof y && (y = {
                    vendorId: arguments[0],
                    productId: arguments[1]
                }), p.websocket.dataPromise("hid.isClaimed", y)
            },
            sendData: function(y) {
                return "object" != typeof y && (y = {
                    vendorId: arguments[0],
                    productId: arguments[1],
                    data: arguments[2],
                    endpoint: arguments[3]
                }), p.websocket.dataPromise("hid.sendData", y)
            },
            readData: function(y) {
                return "object" != typeof y && (y = {
                    vendorId: arguments[0],
                    productId: arguments[1],
                    responseSize: arguments[2]
                }), p.websocket.dataPromise("hid.readData", y)
            },
            openStream: function(y) {
                return "object" != typeof y && (y = {
                    vendorId: arguments[0],
                    productId: arguments[1],
                    responseSize: arguments[2],
                    interval: arguments[3]
                }), p.websocket.dataPromise("hid.openStream", y)
            },
            closeStream: function(y) {
                return "object" != typeof y && (y = {
                    vendorId: arguments[0],
                    productId: arguments[1]
                }), p.websocket.dataPromise("hid.closeStream", y)
            },
            releaseDevice: function(y) {
                return "object" != typeof y && (y = {
                    vendorId: arguments[0],
                    productId: arguments[1]
                }), p.websocket.dataPromise("hid.releaseDevice", y)
            }
        },
        file: {
            list: function(y, I) {
                var H = p.tools.extend({
                    path: y
                }, I);
                return p.websocket.dataPromise("file.list", H)
            },
            read: function(y, I) {
                var H = p.tools.extend({
                    path: y
                }, I);
                return p.websocket.dataPromise("file.read", H)
            },
            write: function(y, I) {
                var H = p.tools.extend({
                    path: y
                }, I);
                return p.websocket.dataPromise("file.write", H)
            },
            remove: function(y, I) {
                var H = p.tools.extend({
                    path: y
                }, I);
                return p.websocket.dataPromise("file.remove", H)
            },
            startListening: function(y, I) {
                var H = p.tools.extend({
                    path: y
                }, I);
                return p.websocket.dataPromise("file.startListening", H)
            },
            stopListening: function(y, I) {
                var H = p.tools.extend({
                    path: y
                }, I);
                return p.websocket.dataPromise("file.stopListening", H)
            },
            setFileCallbacks: function(y) {
                p.file.fileCallbacks = y
            }
        },
        networking: {
            device: function(y, I) {
                return p.websocket.dataPromise("networking.device", {
                    hostname: y,
                    port: I
                })
            },
            devices: function(y, I) {
                return p.websocket.dataPromise("networking.devices", {
                    hostname: y,
                    port: I
                })
            }
        },
        security: {
            setCertificatePromise: function(y) {
                p.security.certPromise = y
            },
            setSignaturePromise: function(y) {
                p.security.signaturePromise = y
            },
            setSignatureAlgorithm: function(y) {
                p.security.isAlgorithmCompatible() && (["SHA1", "SHA256", "SHA512"].indexOf(y.toUpperCase()) < 0 ? p.log.error("Signing algorithm '" + y + "' is not supported.") : p.security.signAlgorithm = y)
            },
            getSignatureAlgorithm: function() {
                return p.security.signAlgorithm
            }
        },
        api: {
            showDebug: function(y) {
                return p.DEBUG = y
            },
            getVersion: function() {
                return p.websocket.dataPromise("getVersion")
            },
            setPromiseType: function(y) {
                p.tools.promise = y
            },
            setSha256Type: function(y) {
                p.tools.hash = y
            },
            setWebSocketType: function(y) {
                p.tools.ws = y
            }
        },
        version: p.VERSION
    }
}();
! function() {
    if ("function" == typeof define && define.amd) define(qz);
    else if ("object" == typeof exports) {
        module.exports = qz;
        try {
            var p = require("crypto");
            qz.api.setSha256Type(function(R) {
                return p.createHash("sha256").update(R).digest("hex")
            })
        } catch {}
    } else window.qz = qz
}();