if (function(a, b) {
        "object" == typeof module && "object" == typeof module.exports ? module.exports = a.document ? b(a, !0) : function(a) {
            if (!a.document) throw new Error("jQuery requires a window with a document");
            return b(a)
        } : b(a)
    }("undefined" != typeof window ? window : this, function(a, b) {
        function c(a) {
            var b = "length" in a && a.length,
                c = _.type(a);
            return "function" === c || _.isWindow(a) ? !1 : 1 === a.nodeType && b ? !0 : "array" === c || 0 === b || "number" == typeof b && b > 0 && b - 1 in a
        }

        function d(a, b, c) {
            if (_.isFunction(b)) return _.grep(a, function(a, d) {
                return !!b.call(a, d, a) !== c
            });
            if (b.nodeType) return _.grep(a, function(a) {
                return a === b !== c
            });
            if ("string" == typeof b) {
                if (ha.test(b)) return _.filter(b, a, c);
                b = _.filter(b, a)
            }
            return _.grep(a, function(a) {
                return U.call(b, a) >= 0 !== c
            })
        }

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

        function f(a) {
            var b = oa[a] = {};
            return _.each(a.match(na) || [], function(a, c) {
                b[c] = !0
            }), b
        }

        function g() {
            Z.removeEventListener("DOMContentLoaded", g, !1), a.removeEventListener("load", g, !1), _.ready()
        }

        function h() {
            Object.defineProperty(this.cache = {}, 0, {
                get: function() {
                    return {}
                }
            }), this.expando = _.expando + h.uid++
        }

        function i(a, b, c) {
            var d;
            if (void 0 === c && 1 === a.nodeType)
                if (d = "data-" + b.replace(ua, "-$1").toLowerCase(), c = a.getAttribute(d), "string" == typeof c) {
                    try {
                        c = "true" === c ? !0 : "false" === c ? !1 : "null" === c ? null : +c + "" === c ? +c : ta.test(c) ? _.parseJSON(c) : c
                    } catch (e) {}
                    sa.set(a, b, c)
                } else c = void 0;
            return c
        }

        function j() {
            return !0
        }

        function k() {
            return !1
        }

        function l() {
            try {
                return Z.activeElement
            } catch (a) {}
        }

        function m(a, b) {
            return _.nodeName(a, "table") && _.nodeName(11 !== b.nodeType ? b : b.firstChild, "tr") ? a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody")) : a
        }

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

        function o(a) {
            var b = Ka.exec(a.type);
            return b ? a.type = b[1] : a.removeAttribute("type"), a
        }

        function p(a, b) {
            for (var c = 0, d = a.length; d > c; c++) ra.set(a[c], "globalEval", !b || ra.get(b[c], "globalEval"))
        }

        function q(a, b) {
            var c, d, e, f, g, h, i, j;
            if (1 === b.nodeType) {
                if (ra.hasData(a) && (f = ra.access(a), g = ra.set(b, f), j = f.events)) {
                    delete g.handle, g.events = {};
                    for (e in j)
                        for (c = 0, d = j[e].length; d > c; c++) _.event.add(b, e, j[e][c])
                }
                sa.hasData(a) && (h = sa.access(a), i = _.extend({}, h), sa.set(b, i))
            }
        }

        function r(a, b) {
            var c = a.getElementsByTagName ? a.getElementsByTagName(b || "*") : a.querySelectorAll ? a.querySelectorAll(b || "*") : [];
            return void 0 === b || b && _.nodeName(a, b) ? _.merge([a], c) : c
        }

        function s(a, b) {
            var c = b.nodeName.toLowerCase();
            "input" === c && ya.test(a.type) ? b.checked = a.checked : ("input" === c || "textarea" === c) && (b.defaultValue = a.defaultValue)
        }

        function t(b, c) {
            var d, e = _(c.createElement(b)).appendTo(c.body),
                f = a.getDefaultComputedStyle && (d = a.getDefaultComputedStyle(e[0])) ? d.display : _.css(e[0], "display");
            return e.detach(), f
        }

        function u(a) {
            var b = Z,
                c = Oa[a];
            return c || (c = t(a, b), "none" !== c && c || (Na = (Na || _("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement), b = Na[0].contentDocument, b.write(), b.close(), c = t(a, b), Na.detach()), Oa[a] = c), c
        }

        function v(a, b, c) {
            var d, e, f, g, h = a.style;
            return c = c || Ra(a), c && (g = c.getPropertyValue(b) || c[b]), c && ("" !== g || _.contains(a.ownerDocument, a) || (g = _.style(a, b)), Qa.test(g) && Pa.test(b) && (d = h.width, e = h.minWidth, f = h.maxWidth, h.minWidth = h.maxWidth = h.width = g, g = c.width, h.width = d, h.minWidth = e, h.maxWidth = f)), void 0 !== g ? g + "" : g
        }

        function w(a, b) {
            return {
                get: function() {
                    return a() ? void delete this.get : (this.get = b).apply(this, arguments)
                }
            }
        }

        function x(a, b) {
            if (b in a) return b;
            for (var c = b[0].toUpperCase() + b.slice(1), d = b, e = Xa.length; e--;)
                if (b = Xa[e] + c, b in a) return b;
            return d
        }

        function y(a, b, c) {
            var d = Ta.exec(b);
            return d ? Math.max(0, d[1] - (c || 0)) + (d[2] || "px") : b
        }

        function z(a, b, c, d, e) {
            for (var f = c === (d ? "border" : "content") ? 4 : "width" === b ? 1 : 0, g = 0; 4 > f; f += 2) "margin" === c && (g += _.css(a, c + wa[f], !0, e)), d ? ("content" === c && (g -= _.css(a, "padding" + wa[f], !0, e)), "margin" !== c && (g -= _.css(a, "border" + wa[f] + "Width", !0, e))) : (g += _.css(a, "padding" + wa[f], !0, e), "padding" !== c && (g += _.css(a, "border" + wa[f] + "Width", !0, e)));
            return g
        }

        function A(a, b, c) {
            var d = !0,
                e = "width" === b ? a.offsetWidth : a.offsetHeight,
                f = Ra(a),
                g = "border-box" === _.css(a, "boxSizing", !1, f);
            if (0 >= e || null == e) {
                if (e = v(a, b, f), (0 > e || null == e) && (e = a.style[b]), Qa.test(e)) return e;
                d = g && (Y.boxSizingReliable() || e === a.style[b]), e = parseFloat(e) || 0
            }
            return e + z(a, b, c || (g ? "border" : "content"), d, f) + "px"
        }

        function B(a, b) {
            for (var c, d, e, f = [], g = 0, h = a.length; h > g; g++) d = a[g], d.style && (f[g] = ra.get(d, "olddisplay"), c = d.style.display, b ? (f[g] || "none" !== c || (d.style.display = ""), "" === d.style.display && xa(d) && (f[g] = ra.access(d, "olddisplay", u(d.nodeName)))) : (e = xa(d), "none" === c && e || ra.set(d, "olddisplay", e ? c : _.css(d, "display"))));
            for (g = 0; h > g; g++) d = a[g], d.style && (b && "none" !== d.style.display && "" !== d.style.display || (d.style.display = b ? f[g] || "" : "none"));
            return a
        }

        function C(a, b, c, d, e) {
            return new C.prototype.init(a, b, c, d, e)
        }

        function D() {
            return setTimeout(function() {
                Ya = void 0
            }), Ya = _.now()
        }

        function E(a, b) {
            var c, d = 0,
                e = {
                    height: a
                };
            for (b = b ? 1 : 0; 4 > d; d += 2 - b) c = wa[d], e["margin" + c] = e["padding" + c] = a;
            return b && (e.opacity = e.width = a), e
        }

        function F(a, b, c) {
            for (var d, e = (cb[b] || []).concat(cb["*"]), f = 0, g = e.length; g > f; f++)
                if (d = e[f].call(c, b, a)) return d
        }

        function G(a, b, c) {
            var d, e, f, g, h, i, j, k, l = this,
                m = {},
                n = a.style,
                o = a.nodeType && xa(a),
                p = ra.get(a, "fxshow");
            c.queue || (h = _._queueHooks(a, "fx"), null == h.unqueued && (h.unqueued = 0, i = h.empty.fire, h.empty.fire = function() {
                h.unqueued || i()
            }), h.unqueued++, l.always(function() {
                l.always(function() {
                    h.unqueued--, _.queue(a, "fx").length || h.empty.fire()
                })
            })), 1 === a.nodeType && ("height" in b || "width" in b) && (c.overflow = [n.overflow, n.overflowX, n.overflowY], j = _.css(a, "display"), k = "none" === j ? ra.get(a, "olddisplay") || u(a.nodeName) : j, "inline" === k && "none" === _.css(a, "float") && (n.display = "inline-block")), c.overflow && (n.overflow = "hidden", l.always(function() {
                n.overflow = c.overflow[0], n.overflowX = c.overflow[1], n.overflowY = c.overflow[2]
            }));
            for (d in b)
                if (e = b[d], $a.exec(e)) {
                    if (delete b[d], f = f || "toggle" === e, e === (o ? "hide" : "show")) {
                        if ("show" !== e || !p || void 0 === p[d]) continue;
                        o = !0
                    }
                    m[d] = p && p[d] || _.style(a, d)
                } else j = void 0;
            if (_.isEmptyObject(m)) "inline" === ("none" === j ? u(a.nodeName) : j) && (n.display = j);
            else {
                p ? "hidden" in p && (o = p.hidden) : p = ra.access(a, "fxshow", {}), f && (p.hidden = !o), o ? _(a).show() : l.done(function() {
                    _(a).hide()
                }), l.done(function() {
                    var b;
                    ra.remove(a, "fxshow");
                    for (b in m) _.style(a, b, m[b])
                });
                for (d in m) g = F(o ? p[d] : 0, d, l), d in p || (p[d] = g.start, o && (g.end = g.start, g.start = "width" === d || "height" === d ? 1 : 0))
            }
        }

        function H(a, b) {
            var c, d, e, f, g;
            for (c in a)
                if (d = _.camelCase(c), e = b[d], f = a[c], _.isArray(f) && (e = f[1], f = a[c] = f[0]), c !== d && (a[d] = f, delete a[c]), g = _.cssHooks[d], g && "expand" in g) {
                    f = g.expand(f), delete a[d];
                    for (c in f) c in a || (a[c] = f[c], b[c] = e)
                } else b[d] = e
        }

        function I(a, b, c) {
            var d, e, f = 0,
                g = bb.length,
                h = _.Deferred().always(function() {
                    delete i.elem
                }),
                i = function() {
                    if (e) return !1;
                    for (var b = Ya || D(), c = Math.max(0, j.startTime + j.duration - b), d = c / j.duration || 0, f = 1 - d, g = 0, i = j.tweens.length; i > g; g++) j.tweens[g].run(f);
                    return h.notifyWith(a, [j, f, c]), 1 > f && i ? c : (h.resolveWith(a, [j]), !1)
                },
                j = h.promise({
                    elem: a,
                    props: _.extend({}, b),
                    opts: _.extend(!0, {
                        specialEasing: {}
                    }, c),
                    originalProperties: b,
                    originalOptions: c,
                    startTime: Ya || D(),
                    duration: c.duration,
                    tweens: [],
                    createTween: function(b, c) {
                        var d = _.Tween(a, j.opts, b, c, j.opts.specialEasing[b] || j.opts.easing);
                        return j.tweens.push(d), d
                    },
                    stop: function(b) {
                        var c = 0,
                            d = b ? j.tweens.length : 0;
                        if (e) return this;
                        for (e = !0; d > c; c++) j.tweens[c].run(1);
                        return b ? h.resolveWith(a, [j, b]) : h.rejectWith(a, [j, b]), this
                    }
                }),
                k = j.props;
            for (H(k, j.opts.specialEasing); g > f; f++)
                if (d = bb[f].call(j, a, k, j.opts)) return d;
            return _.map(k, F, j), _.isFunction(j.opts.start) && j.opts.start.call(a, j), _.fx.timer(_.extend(i, {
                elem: a,
                anim: j,
                queue: j.opts.queue
            })), j.progress(j.opts.progress).done(j.opts.done, j.opts.complete).fail(j.opts.fail).always(j.opts.always)
        }

        function J(a) {
            return function(b, c) {
                "string" != typeof b && (c = b, b = "*");
                var d, e = 0,
                    f = b.toLowerCase().match(na) || [];
                if (_.isFunction(c))
                    for (; d = f[e++];) "+" === d[0] ? (d = d.slice(1) || "*", (a[d] = a[d] || []).unshift(c)) : (a[d] = a[d] || []).push(c)
            }
        }

        function K(a, b, c, d) {
            function e(h) {
                var i;
                return f[h] = !0, _.each(a[h] || [], function(a, h) {
                    var j = h(b, c, d);
                    return "string" != typeof j || g || f[j] ? g ? !(i = j) : void 0 : (b.dataTypes.unshift(j), e(j), !1)
                }), i
            }
            var f = {},
                g = a === tb;
            return e(b.dataTypes[0]) || !f["*"] && e("*")
        }

        function L(a, b) {
            var c, d, e = _.ajaxSettings.flatOptions || {};
            for (c in b) void 0 !== b[c] && ((e[c] ? a : d || (d = {}))[c] = b[c]);
            return d && _.extend(!0, a, d), a
        }

        function M(a, b, c) {
            for (var d, e, f, g, h = a.contents, i = a.dataTypes;
                "*" === i[0];) i.shift(), void 0 === d && (d = a.mimeType || b.getResponseHeader("Content-Type"));
            if (d)
                for (e in h)
                    if (h[e] && h[e].test(d)) {
                        i.unshift(e);
                        break
                    }
            if (i[0] in c) f = i[0];
            else {
                for (e in c) {
                    if (!i[0] || a.converters[e + " " + i[0]]) {
                        f = e;
                        break
                    }
                    g || (g = e)
                }
                f = f || g
            }
            return f ? (f !== i[0] && i.unshift(f), c[f]) : void 0
        }

        function N(a, b, c, d) {
            var e, f, g, h, i, j = {},
                k = a.dataTypes.slice();
            if (k[1])
                for (g in a.converters) j[g.toLowerCase()] = a.converters[g];
            for (f = k.shift(); f;)
                if (a.responseFields[f] && (c[a.responseFields[f]] = b), !i && d && a.dataFilter && (b = a.dataFilter(b, a.dataType)), i = f, f = k.shift())
                    if ("*" === f) f = i;
                    else if ("*" !== i && i !== f) {
                if (g = j[i + " " + f] || j["* " + f], !g)
                    for (e in j)
                        if (h = e.split(" "), h[1] === f && (g = j[i + " " + h[0]] || j["* " + h[0]])) {
                            g === !0 ? g = j[e] : j[e] !== !0 && (f = h[0], k.unshift(h[1]));
                            break
                        }
                if (g !== !0)
                    if (g && a["throws"]) b = g(b);
                    else try {
                        b = g(b)
                    } catch (l) {
                        return {
                            state: "parsererror",
                            error: g ? l : "No conversion from " + i + " to " + f
                        }
                    }
            }
            return {
                state: "success",
                data: b
            }
        }

        function O(a, b, c, d) {
            var e;
            if (_.isArray(b)) _.each(b, function(b, e) {
                c || yb.test(a) ? d(a, e) : O(a + "[" + ("object" == typeof e ? b : "") + "]", e, c, d)
            });
            else if (c || "object" !== _.type(b)) d(a, b);
            else
                for (e in b) O(a + "[" + e + "]", b[e], c, d)
        }

        function P(a) {
            return _.isWindow(a) ? a : 9 === a.nodeType && a.defaultView
        }
        var Q = [],
            R = Q.slice,
            S = Q.concat,
            T = Q.push,
            U = Q.indexOf,
            V = {},
            W = V.toString,
            X = V.hasOwnProperty,
            Y = {},
            Z = a.document,
            $ = "2.1.4",
            _ = function(a, b) {
                return new _.fn.init(a, b)
            },
            aa = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
            ba = /^-ms-/,
            ca = /-([\da-z])/gi,
            da = function(a, b) {
                return b.toUpperCase()
            };
        _.fn = _.prototype = {
            jquery: $,
            constructor: _,
            selector: "",
            length: 0,
            toArray: function() {
                return R.call(this)
            },
            get: function(a) {
                return null != a ? 0 > a ? this[a + this.length] : this[a] : R.call(this)
            },
            pushStack: function(a) {
                var b = _.merge(this.constructor(), a);
                return b.prevObject = this, b.context = this.context, b
            },
            each: function(a, b) {
                return _.each(this, a, b)
            },
            map: function(a) {
                return this.pushStack(_.map(this, function(b, c) {
                    return a.call(b, c, b)
                }))
            },
            slice: function() {
                return this.pushStack(R.apply(this, arguments))
            },
            first: function() {
                return this.eq(0)
            },
            last: function() {
                return this.eq(-1)
            },
            eq: function(a) {
                var b = this.length,
                    c = +a + (0 > a ? b : 0);
                return this.pushStack(c >= 0 && b > c ? [this[c]] : [])
            },
            end: function() {
                return this.prevObject || this.constructor(null)
            },
            push: T,
            sort: Q.sort,
            splice: Q.splice
        }, _.extend = _.fn.extend = function() {
            var a, b, c, d, e, f, g = arguments[0] || {},
                h = 1,
                i = arguments.length,
                j = !1;
            for ("boolean" == typeof g && (j = g, g = arguments[h] || {}, h++), "object" == typeof g || _.isFunction(g) || (g = {}), h === i && (g = this, h--); i > h; h++)
                if (null != (a = arguments[h]))
                    for (b in a) c = g[b], d = a[b], g !== d && (j && d && (_.isPlainObject(d) || (e = _.isArray(d))) ? (e ? (e = !1, f = c && _.isArray(c) ? c : []) : f = c && _.isPlainObject(c) ? c : {}, g[b] = _.extend(j, f, d)) : void 0 !== d && (g[b] = d));
            return g
        }, _.extend({
            expando: "jQuery" + ($ + Math.random()).replace(/\D/g, ""),
            isReady: !0,
            error: function(a) {
                throw new Error(a)
            },
            noop: function() {},
            isFunction: function(a) {
                return "function" === _.type(a)
            },
            isArray: Array.isArray,
            isWindow: function(a) {
                return null != a && a === a.window
            },
            isNumeric: function(a) {
                return !_.isArray(a) && a - parseFloat(a) + 1 >= 0
            },
            isPlainObject: function(a) {
                return "object" !== _.type(a) || a.nodeType || _.isWindow(a) ? !1 : a.constructor && !X.call(a.constructor.prototype, "isPrototypeOf") ? !1 : !0
            },
            isEmptyObject: function(a) {
                var b;
                for (b in a) return !1;
                return !0
            },
            type: function(a) {
                return null == a ? a + "" : "object" == typeof a || "function" == typeof a ? V[W.call(a)] || "object" : typeof a
            },
            globalEval: function(a) {
                var b, c = eval;
                a = _.trim(a), a && (1 === a.indexOf("use strict") ? (b = Z.createElement("script"), b.text = a, Z.head.appendChild(b).parentNode.removeChild(b)) : c(a))
            },
            camelCase: function(a) {
                return a.replace(ba, "ms-").replace(ca, da)
            },
            nodeName: function(a, b) {
                return a.nodeName && a.nodeName.toLowerCase() === b.toLowerCase()
            },
            each: function(a, b, d) {
                var e, f = 0,
                    g = a.length,
                    h = c(a);
                if (d) {
                    if (h)
                        for (; g > f && (e = b.apply(a[f], d), e !== !1); f++);
                    else
                        for (f in a)
                            if (e = b.apply(a[f], d), e === !1) break
                } else if (h)
                    for (; g > f && (e = b.call(a[f], f, a[f]), e !== !1); f++);
                else
                    for (f in a)
                        if (e = b.call(a[f], f, a[f]), e === !1) break;
                return a
            },
            trim: function(a) {
                return null == a ? "" : (a + "").replace(aa, "")
            },
            makeArray: function(a, b) {
                var d = b || [];
                return null != a && (c(Object(a)) ? _.merge(d, "string" == typeof a ? [a] : a) : T.call(d, a)), d
            },
            inArray: function(a, b, c) {
                return null == b ? -1 : U.call(b, a, c)
            },
            merge: function(a, b) {
                for (var c = +b.length, d = 0, e = a.length; c > d; d++) a[e++] = b[d];
                return a.length = e, a
            },
            grep: function(a, b, c) {
                for (var d, e = [], f = 0, g = a.length, h = !c; g > f; f++) d = !b(a[f], f), d !== h && e.push(a[f]);
                return e
            },
            map: function(a, b, d) {
                var e, f = 0,
                    g = a.length,
                    h = c(a),
                    i = [];
                if (h)
                    for (; g > f; f++) e = b(a[f], f, d), null != e && i.push(e);
                else
                    for (f in a) e = b(a[f], f, d), null != e && i.push(e);
                return S.apply([], i)
            },
            guid: 1,
            proxy: function(a, b) {
                var c, d, e;
                return "string" == typeof b && (c = a[b], b = a, a = c), _.isFunction(a) ? (d = R.call(arguments, 2), e = function() {
                    return a.apply(b || this, d.concat(R.call(arguments)))
                }, e.guid = a.guid = a.guid || _.guid++, e) : void 0
            },
            now: Date.now,
            support: Y
        }), _.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(a, b) {
            V["[object " + b + "]"] = b.toLowerCase()
        });
        var ea = function(a) {
            function b(a, b, c, d) {
                var e, f, g, h, i, j, l, n, o, p;
                if ((b ? b.ownerDocument || b : O) !== G && F(b), b = b || G, c = c || [], h = b.nodeType, "string" != typeof a || !a || 1 !== h && 9 !== h && 11 !== h) return c;
                if (!d && I) {
                    if (11 !== h && (e = sa.exec(a)))
                        if (g = e[1]) {
                            if (9 === h) {
                                if (f = b.getElementById(g), !f || !f.parentNode) return c;
                                if (f.id === g) return c.push(f), c
                            } else if (b.ownerDocument && (f = b.ownerDocument.getElementById(g)) && M(b, f) && f.id === g) return c.push(f), c
                        } else {
                            if (e[2]) return $.apply(c, b.getElementsByTagName(a)), c;
                            if ((g = e[3]) && v.getElementsByClassName) return $.apply(c, b.getElementsByClassName(g)), c
                        }
                    if (v.qsa && (!J || !J.test(a))) {
                        if (n = l = N, o = b, p = 1 !== h && a, 1 === h && "object" !== b.nodeName.toLowerCase()) {
                            for (j = z(a), (l = b.getAttribute("id")) ? n = l.replace(ua, "\\$&") : b.setAttribute("id", n), n = "[id='" + n + "'] ", i = j.length; i--;) j[i] = n + m(j[i]);
                            o = ta.test(a) && k(b.parentNode) || b, p = j.join(",")
                        }
                        if (p) try {
                            return $.apply(c, o.querySelectorAll(p)), c
                        } catch (q) {} finally {
                            l || b.removeAttribute("id")
                        }
                    }
                }
                return B(a.replace(ia, "$1"), b, c, d)
            }

            function c() {
                function a(c, d) {
                    return b.push(c + " ") > w.cacheLength && delete a[b.shift()], a[c + " "] = d
                }
                var b = [];
                return a
            }

            function d(a) {
                return a[N] = !0, a
            }

            function e(a) {
                var b = G.createElement("div");
                try {
                    return !!a(b)
                } catch (c) {
                    return !1
                } finally {
                    b.parentNode && b.parentNode.removeChild(b), b = null
                }
            }

            function f(a, b) {
                for (var c = a.split("|"), d = a.length; d--;) w.attrHandle[c[d]] = b
            }

            function g(a, b) {
                var c = b && a,
                    d = c && 1 === a.nodeType && 1 === b.nodeType && (~b.sourceIndex || V) - (~a.sourceIndex || V);
                if (d) return d;
                if (c)
                    for (; c = c.nextSibling;)
                        if (c === b) return -1;
                return a ? 1 : -1
            }

            function h(a) {
                return function(b) {
                    var c = b.nodeName.toLowerCase();
                    return "input" === c && b.type === a
                }
            }

            function i(a) {
                return function(b) {
                    var c = b.nodeName.toLowerCase();
                    return ("input" === c || "button" === c) && b.type === a
                }
            }

            function j(a) {
                return d(function(b) {
                    return b = +b, d(function(c, d) {
                        for (var e, f = a([], c.length, b), g = f.length; g--;) c[e = f[g]] && (c[e] = !(d[e] = c[e]))
                    })
                })
            }

            function k(a) {
                return a && "undefined" != typeof a.getElementsByTagName && a
            }

            function l() {}

            function m(a) {
                for (var b = 0, c = a.length, d = ""; c > b; b++) d += a[b].value;
                return d
            }

            function n(a, b, c) {
                var d = b.dir,
                    e = c && "parentNode" === d,
                    f = Q++;
                return b.first ? function(b, c, f) {
                    for (; b = b[d];)
                        if (1 === b.nodeType || e) return a(b, c, f)
                } : function(b, c, g) {
                    var h, i, j = [P, f];
                    if (g) {
                        for (; b = b[d];)
                            if ((1 === b.nodeType || e) && a(b, c, g)) return !0
                    } else
                        for (; b = b[d];)
                            if (1 === b.nodeType || e) {
                                if (i = b[N] || (b[N] = {}), (h = i[d]) && h[0] === P && h[1] === f) return j[2] = h[2];
                                if (i[d] = j, j[2] = a(b, c, g)) return !0
                            }
                }
            }

            function o(a) {
                return a.length > 1 ? function(b, c, d) {
                    for (var e = a.length; e--;)
                        if (!a[e](b, c, d)) return !1;
                    return !0
                } : a[0]
            }

            function p(a, c, d) {
                for (var e = 0, f = c.length; f > e; e++) b(a, c[e], d);
                return d
            }

            function q(a, b, c, d, e) {
                for (var f, g = [], h = 0, i = a.length, j = null != b; i > h; h++)(f = a[h]) && (!c || c(f, d, e)) && (g.push(f), j && b.push(h));
                return g
            }

            function r(a, b, c, e, f, g) {
                return e && !e[N] && (e = r(e)), f && !f[N] && (f = r(f, g)), d(function(d, g, h, i) {
                    var j, k, l, m = [],
                        n = [],
                        o = g.length,
                        r = d || p(b || "*", h.nodeType ? [h] : h, []),
                        s = !a || !d && b ? r : q(r, m, a, h, i),
                        t = c ? f || (d ? a : o || e) ? [] : g : s;
                    if (c && c(s, t, h, i), e)
                        for (j = q(t, n), e(j, [], h, i), k = j.length; k--;)(l = j[k]) && (t[n[k]] = !(s[n[k]] = l));
                    if (d) {
                        if (f || a) {
                            if (f) {
                                for (j = [], k = t.length; k--;)(l = t[k]) && j.push(s[k] = l);
                                f(null, t = [], j, i)
                            }
                            for (k = t.length; k--;)(l = t[k]) && (j = f ? aa(d, l) : m[k]) > -1 && (d[j] = !(g[j] = l))
                        }
                    } else t = q(t === g ? t.splice(o, t.length) : t), f ? f(null, g, t, i) : $.apply(g, t)
                })
            }

            function s(a) {
                for (var b, c, d, e = a.length, f = w.relative[a[0].type], g = f || w.relative[" "], h = f ? 1 : 0, i = n(function(a) {
                        return a === b
                    }, g, !0), j = n(function(a) {
                        return aa(b, a) > -1
                    }, g, !0), k = [function(a, c, d) {
                        var e = !f && (d || c !== C) || ((b = c).nodeType ? i(a, c, d) : j(a, c, d));
                        return b = null, e
                    }]; e > h; h++)
                    if (c = w.relative[a[h].type]) k = [n(o(k), c)];
                    else {
                        if (c = w.filter[a[h].type].apply(null, a[h].matches), c[N]) {
                            for (d = ++h; e > d && !w.relative[a[d].type]; d++);
                            return r(h > 1 && o(k), h > 1 && m(a.slice(0, h - 1).concat({
                                value: " " === a[h - 2].type ? "*" : ""
                            })).replace(ia, "$1"), c, d > h && s(a.slice(h, d)), e > d && s(a = a.slice(d)), e > d && m(a))
                        }
                        k.push(c)
                    }
                return o(k)
            }

            function t(a, c) {
                var e = c.length > 0,
                    f = a.length > 0,
                    g = function(d, g, h, i, j) {
                        var k, l, m, n = 0,
                            o = "0",
                            p = d && [],
                            r = [],
                            s = C,
                            t = d || f && w.find.TAG("*", j),
                            u = P += null == s ? 1 : Math.random() || .1,
                            v = t.length;
                        for (j && (C = g !== G && g); o !== v && null != (k = t[o]); o++) {
                            if (f && k) {
                                for (l = 0; m = a[l++];)
                                    if (m(k, g, h)) {
                                        i.push(k);
                                        break
                                    }
                                j && (P = u)
                            }
                            e && ((k = !m && k) && n--, d && p.push(k))
                        }
                        if (n += o, e && o !== n) {
                            for (l = 0; m = c[l++];) m(p, r, g, h);
                            if (d) {
                                if (n > 0)
                                    for (; o--;) p[o] || r[o] || (r[o] = Y.call(i));
                                r = q(r)
                            }
                            $.apply(i, r), j && !d && r.length > 0 && n + c.length > 1 && b.uniqueSort(i)
                        }
                        return j && (P = u, C = s), p
                    };
                return e ? d(g) : g
            }
            var u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N = "sizzle" + 1 * new Date,
                O = a.document,
                P = 0,
                Q = 0,
                R = c(),
                S = c(),
                T = c(),
                U = function(a, b) {
                    return a === b && (E = !0), 0
                },
                V = 1 << 31,
                W = {}.hasOwnProperty,
                X = [],
                Y = X.pop,
                Z = X.push,
                $ = X.push,
                _ = X.slice,
                aa = function(a, b) {
                    for (var c = 0, d = a.length; d > c; c++)
                        if (a[c] === b) return c;
                    return -1
                },
                ba = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
                ca = "[\\x20\\t\\r\\n\\f]",
                da = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
                ea = da.replace("w", "w#"),
                fa = "\\[" + ca + "*(" + da + ")(?:" + ca + "*([*^$|!~]?=)" + ca + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + ea + "))|)" + ca + "*\\]",
                ga = ":(" + da + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + fa + ")*)|.*)\\)|)",
                ha = new RegExp(ca + "+", "g"),
                ia = new RegExp("^" + ca + "+|((?:^|[^\\\\])(?:\\\\.)*)" + ca + "+$", "g"),
                ja = new RegExp("^" + ca + "*," + ca + "*"),
                ka = new RegExp("^" + ca + "*([>+~]|" + ca + ")" + ca + "*"),
                la = new RegExp("=" + ca + "*([^\\]'\"]*?)" + ca + "*\\]", "g"),
                ma = new RegExp(ga),
                na = new RegExp("^" + ea + "$"),
                oa = {
                    ID: new RegExp("^#(" + da + ")"),
                    CLASS: new RegExp("^\\.(" + da + ")"),
                    TAG: new RegExp("^(" + da.replace("w", "w*") + ")"),
                    ATTR: new RegExp("^" + fa),
                    PSEUDO: new RegExp("^" + ga),
                    CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + ca + "*(even|odd|(([+-]|)(\\d*)n|)" + ca + "*(?:([+-]|)" + ca + "*(\\d+)|))" + ca + "*\\)|)", "i"),
                    bool: new RegExp("^(?:" + ba + ")$", "i"),
                    needsContext: new RegExp("^" + ca + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + ca + "*((?:-\\d)?\\d*)" + ca + "*\\)|)(?=[^-]|$)", "i")
                },
                pa = /^(?:input|select|textarea|button)$/i,
                qa = /^h\d$/i,
                ra = /^[^{]+\{\s*\[native \w/,
                sa = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
                ta = /[+~]/,
                ua = /'|\\/g,
                va = new RegExp("\\\\([\\da-f]{1,6}" + ca + "?|(" + ca + ")|.)", "ig"),
                wa = function(a, b, c) {
                    var d = "0x" + b - 65536;
                    return d !== d || c ? b : 0 > d ? String.fromCharCode(d + 65536) : String.fromCharCode(d >> 10 | 55296, 1023 & d | 56320)
                },
                xa = function() {
                    F()
                };
            try {
                $.apply(X = _.call(O.childNodes), O.childNodes), X[O.childNodes.length].nodeType
            } catch (ya) {
                $ = {
                    apply: X.length ? function(a, b) {
                        Z.apply(a, _.call(b))
                    } : function(a, b) {
                        for (var c = a.length, d = 0; a[c++] = b[d++];);
                        a.length = c - 1
                    }
                }
            }
            v = b.support = {}, y = b.isXML = function(a) {
                var b = a && (a.ownerDocument || a).documentElement;
                return b ? "HTML" !== b.nodeName : !1
            }, F = b.setDocument = function(a) {
                var b, c, d = a ? a.ownerDocument || a : O;
                return d !== G && 9 === d.nodeType && d.documentElement ? (G = d, H = d.documentElement, c = d.defaultView, c && c !== c.top && (c.addEventListener ? c.addEventListener("unload", xa, !1) : c.attachEvent && c.attachEvent("onunload", xa)), I = !y(d), v.attributes = e(function(a) {
                    return a.className = "i", !a.getAttribute("className")
                }), v.getElementsByTagName = e(function(a) {
                    return a.appendChild(d.createComment("")), !a.getElementsByTagName("*").length
                }), v.getElementsByClassName = ra.test(d.getElementsByClassName), v.getById = e(function(a) {
                    return H.appendChild(a).id = N, !d.getElementsByName || !d.getElementsByName(N).length
                }), v.getById ? (w.find.ID = function(a, b) {
                    if ("undefined" != typeof b.getElementById && I) {
                        var c = b.getElementById(a);
                        return c && c.parentNode ? [c] : []
                    }
                }, w.filter.ID = function(a) {
                    var b = a.replace(va, wa);
                    return function(a) {
                        return a.getAttribute("id") === b
                    }
                }) : (delete w.find.ID, w.filter.ID = function(a) {
                    var b = a.replace(va, wa);
                    return function(a) {
                        var c = "undefined" != typeof a.getAttributeNode && a.getAttributeNode("id");
                        return c && c.value === b
                    }
                }), w.find.TAG = v.getElementsByTagName ? function(a, b) {
                    return "undefined" != typeof b.getElementsByTagName ? b.getElementsByTagName(a) : v.qsa ? b.querySelectorAll(a) : void 0
                } : function(a, b) {
                    var c, d = [],
                        e = 0,
                        f = b.getElementsByTagName(a);
                    if ("*" === a) {
                        for (; c = f[e++];) 1 === c.nodeType && d.push(c);
                        return d
                    }
                    return f
                }, w.find.CLASS = v.getElementsByClassName && function(a, b) {
                    return I ? b.getElementsByClassName(a) : void 0
                }, K = [], J = [], (v.qsa = ra.test(d.querySelectorAll)) && (e(function(a) {
                    H.appendChild(a).innerHTML = "<a id='" + N + "'></a><select id='" + N + "-\f]' msallowcapture=''><option selected=''></option></select>", a.querySelectorAll("[msallowcapture^='']").length && J.push("[*^$]=" + ca + "*(?:''|\"\")"), a.querySelectorAll("[selected]").length || J.push("\\[" + ca + "*(?:value|" + ba + ")"), a.querySelectorAll("[id~=" + N + "-]").length || J.push("~="), a.querySelectorAll(":checked").length || J.push(":checked"), a.querySelectorAll("a#" + N + "+*").length || J.push(".#.+[+~]")
                }), e(function(a) {
                    var b = d.createElement("input");
                    b.setAttribute("type", "hidden"), a.appendChild(b).setAttribute("name", "D"), a.querySelectorAll("[name=d]").length && J.push("name" + ca + "*[*^$|!~]?="), a.querySelectorAll(":enabled").length || J.push(":enabled", ":disabled"), a.querySelectorAll("*,:x"), J.push(",.*:")
                })), (v.matchesSelector = ra.test(L = H.matches || H.webkitMatchesSelector || H.mozMatchesSelector || H.oMatchesSelector || H.msMatchesSelector)) && e(function(a) {
                    v.disconnectedMatch = L.call(a, "div"), L.call(a, "[s!='']:x"), K.push("!=", ga)
                }), J = J.length && new RegExp(J.join("|")), K = K.length && new RegExp(K.join("|")), b = ra.test(H.compareDocumentPosition), M = b || ra.test(H.contains) ? function(a, b) {
                    var c = 9 === a.nodeType ? a.documentElement : a,
                        d = b && b.parentNode;
                    return a === d || !(!d || 1 !== d.nodeType || !(c.contains ? c.contains(d) : a.compareDocumentPosition && 16 & a.compareDocumentPosition(d)))
                } : function(a, b) {
                    if (b)
                        for (; b = b.parentNode;)
                            if (b === a) return !0;
                    return !1
                }, U = b ? function(a, b) {
                    if (a === b) return E = !0, 0;
                    var c = !a.compareDocumentPosition - !b.compareDocumentPosition;
                    return c ? c : (c = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1, 1 & c || !v.sortDetached && b.compareDocumentPosition(a) === c ? a === d || a.ownerDocument === O && M(O, a) ? -1 : b === d || b.ownerDocument === O && M(O, b) ? 1 : D ? aa(D, a) - aa(D, b) : 0 : 4 & c ? -1 : 1)
                } : function(a, b) {
                    if (a === b) return E = !0, 0;
                    var c, e = 0,
                        f = a.parentNode,
                        h = b.parentNode,
                        i = [a],
                        j = [b];
                    if (!f || !h) return a === d ? -1 : b === d ? 1 : f ? -1 : h ? 1 : D ? aa(D, a) - aa(D, b) : 0;
                    if (f === h) return g(a, b);
                    for (c = a; c = c.parentNode;) i.unshift(c);
                    for (c = b; c = c.parentNode;) j.unshift(c);
                    for (; i[e] === j[e];) e++;
                    return e ? g(i[e], j[e]) : i[e] === O ? -1 : j[e] === O ? 1 : 0
                }, d) : G
            }, b.matches = function(a, c) {
                return b(a, null, null, c)
            }, b.matchesSelector = function(a, c) {
                if ((a.ownerDocument || a) !== G && F(a), c = c.replace(la, "='$1']"), v.matchesSelector && I && (!K || !K.test(c)) && (!J || !J.test(c))) try {
                    var d = L.call(a, c);
                    if (d || v.disconnectedMatch || a.document && 11 !== a.document.nodeType) return d
                } catch (e) {}
                return b(c, G, null, [a]).length > 0
            }, b.contains = function(a, b) {
                return (a.ownerDocument || a) !== G && F(a), M(a, b)
            }, b.attr = function(a, b) {
                (a.ownerDocument || a) !== G && F(a);
                var c = w.attrHandle[b.toLowerCase()],
                    d = c && W.call(w.attrHandle, b.toLowerCase()) ? c(a, b, !I) : void 0;
                return void 0 !== d ? d : v.attributes || !I ? a.getAttribute(b) : (d = a.getAttributeNode(b)) && d.specified ? d.value : null
            }, b.error = function(a) {
                throw new Error("Syntax error, unrecognized expression: " + a)
            }, b.uniqueSort = function(a) {
                var b, c = [],
                    d = 0,
                    e = 0;
                if (E = !v.detectDuplicates, D = !v.sortStable && a.slice(0), a.sort(U), E) {
                    for (; b = a[e++];) b === a[e] && (d = c.push(e));
                    for (; d--;) a.splice(c[d], 1)
                }
                return D = null, a
            }, x = b.getText = function(a) {
                var b, c = "",
                    d = 0,
                    e = a.nodeType;
                if (e) {
                    if (1 === e || 9 === e || 11 === e) {
                        if ("string" == typeof a.textContent) return a.textContent;
                        for (a = a.firstChild; a; a = a.nextSibling) c += x(a)
                    } else if (3 === e || 4 === e) return a.nodeValue
                } else
                    for (; b = a[d++];) c += x(b);
                return c
            }, w = b.selectors = {
                cacheLength: 50,
                createPseudo: d,
                match: oa,
                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(va, wa), a[3] = (a[3] || a[4] || a[5] || "").replace(va, wa), "~=" === 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] || b.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] && b.error(a[0]), a
                    },
                    PSEUDO: function(a) {
                        var b, c = !a[6] && a[2];
                        return oa.CHILD.test(a[0]) ? null : (a[3] ? a[2] = a[4] || a[5] || "" : c && ma.test(c) && (b = z(c, !0)) && (b = c.indexOf(")", c.length - b) - c.length) && (a[0] = a[0].slice(0, b), a[2] = c.slice(0, b)), a.slice(0, 3))
                    }
                },
                filter: {
                    TAG: function(a) {
                        var b = a.replace(va, wa).toLowerCase();
                        return "*" === a ? function() {
                            return !0
                        } : function(a) {
                            return a.nodeName && a.nodeName.toLowerCase() === b
                        }
                    },
                    CLASS: function(a) {
                        var b = R[a + " "];
                        return b || (b = new RegExp("(^|" + ca + ")" + a + "(" + ca + "|$)")) && R(a, function(a) {
                            return b.test("string" == typeof a.className && a.className || "undefined" != typeof a.getAttribute && a.getAttribute("class") || "")
                        })
                    },
                    ATTR: function(a, c, d) {
                        return function(e) {
                            var f = b.attr(e, a);
                            return null == f ? "!=" === c : c ? (f += "", "=" === c ? f === d : "!=" === c ? f !== d : "^=" === c ? d && 0 === f.indexOf(d) : "*=" === c ? d && f.indexOf(d) > -1 : "$=" === c ? d && f.slice(-d.length) === d : "~=" === c ? (" " + f.replace(ha, " ") + " ").indexOf(d) > -1 : "|=" === c ? f === d || f.slice(0, d.length + 1) === d + "-" : !1) : !0
                        }
                    },
                    CHILD: function(a, b, c, d, e) {
                        var f = "nth" !== a.slice(0, 3),
                            g = "last" !== a.slice(-4),
                            h = "of-type" === b;
                        return 1 === d && 0 === e ? function(a) {
                            return !!a.parentNode
                        } : function(b, c, i) {
                            var j, k, l, m, n, o, p = f !== g ? "nextSibling" : "previousSibling",
                                q = b.parentNode,
                                r = h && b.nodeName.toLowerCase(),
                                s = !i && !h;
                            if (q) {
                                if (f) {
                                    for (; p;) {
                                        for (l = b; l = l[p];)
                                            if (h ? l.nodeName.toLowerCase() === r : 1 === l.nodeType) return !1;
                                        o = p = "only" === a && !o && "nextSibling"
                                    }
                                    return !0
                                }
                                if (o = [g ? q.firstChild : q.lastChild], g && s) {
                                    for (k = q[N] || (q[N] = {}), j = k[a] || [], n = j[0] === P && j[1], m = j[0] === P && j[2], l = n && q.childNodes[n]; l = ++n && l && l[p] || (m = n = 0) || o.pop();)
                                        if (1 === l.nodeType && ++m && l === b) {
                                            k[a] = [P, n, m];
                                            break
                                        }
                                } else if (s && (j = (b[N] || (b[N] = {}))[a]) && j[0] === P) m = j[1];
                                else
                                    for (;
                                        (l = ++n && l && l[p] || (m = n = 0) || o.pop()) && ((h ? l.nodeName.toLowerCase() !== r : 1 !== l.nodeType) || !++m || (s && ((l[N] || (l[N] = {}))[a] = [P, m]), l !== b)););
                                return m -= e, m === d || m % d === 0 && m / d >= 0
                            }
                        }
                    },
                    PSEUDO: function(a, c) {
                        var e, f = w.pseudos[a] || w.setFilters[a.toLowerCase()] || b.error("unsupported pseudo: " + a);
                        return f[N] ? f(c) : f.length > 1 ? (e = [a, a, "", c], w.setFilters.hasOwnProperty(a.toLowerCase()) ? d(function(a, b) {
                            for (var d, e = f(a, c), g = e.length; g--;) d = aa(a, e[g]), a[d] = !(b[d] = e[g])
                        }) : function(a) {
                            return f(a, 0, e)
                        }) : f
                    }
                },
                pseudos: {
                    not: d(function(a) {
                        var b = [],
                            c = [],
                            e = A(a.replace(ia, "$1"));
                        return e[N] ? d(function(a, b, c, d) {
                            for (var f, g = e(a, null, d, []), h = a.length; h--;)(f = g[h]) && (a[h] = !(b[h] = f))
                        }) : function(a, d, f) {
                            return b[0] = a, e(b, null, f, c), b[0] = null, !c.pop()
                        }
                    }),
                    has: d(function(a) {
                        return function(c) {
                            return b(a, c).length > 0
                        }
                    }),
                    contains: d(function(a) {
                        return a = a.replace(va, wa),
                            function(b) {
                                return (b.textContent || b.innerText || x(b)).indexOf(a) > -1
                            }
                    }),
                    lang: d(function(a) {
                        return na.test(a || "") || b.error("unsupported lang: " + a), a = a.replace(va, wa).toLowerCase(),
                            function(b) {
                                var c;
                                do
                                    if (c = I ? b.lang : b.getAttribute("xml:lang") || b.getAttribute("lang")) return c = c.toLowerCase(), c === a || 0 === c.indexOf(a + "-"); while ((b = b.parentNode) && 1 === b.nodeType);
                                return !1
                            }
                    }),
                    target: function(b) {
                        var c = a.location && a.location.hash;
                        return c && c.slice(1) === b.id
                    },
                    root: function(a) {
                        return a === H
                    },
                    focus: function(a) {
                        return a === G.activeElement && (!G.hasFocus || G.hasFocus()) && !!(a.type || a.href || ~a.tabIndex)
                    },
                    enabled: function(a) {
                        return a.disabled === !1
                    },
                    disabled: function(a) {
                        return a.disabled === !0
                    },
                    checked: function(a) {
                        var b = a.nodeName.toLowerCase();
                        return "input" === b && !!a.checked || "option" === b && !!a.selected
                    },
                    selected: function(a) {
                        return a.parentNode && a.parentNode.selectedIndex, a.selected === !0
                    },
                    empty: function(a) {
                        for (a = a.firstChild; a; a = a.nextSibling)
                            if (a.nodeType < 6) return !1;
                        return !0
                    },
                    parent: function(a) {
                        return !w.pseudos.empty(a)
                    },
                    header: function(a) {
                        return qa.test(a.nodeName)
                    },
                    input: function(a) {
                        return pa.test(a.nodeName)
                    },
                    button: function(a) {
                        var b = a.nodeName.toLowerCase();
                        return "input" === b && "button" === a.type || "button" === b
                    },
                    text: function(a) {
                        var b;
                        return "input" === a.nodeName.toLowerCase() && "text" === a.type && (null == (b = a.getAttribute("type")) || "text" === b.toLowerCase())
                    },
                    first: j(function() {
                        return [0]
                    }),
                    last: j(function(a, b) {
                        return [b - 1]
                    }),
                    eq: j(function(a, b, c) {
                        return [0 > c ? c + b : c]
                    }),
                    even: j(function(a, b) {
                        for (var c = 0; b > c; c += 2) a.push(c);
                        return a
                    }),
                    odd: j(function(a, b) {
                        for (var c = 1; b > c; c += 2) a.push(c);
                        return a
                    }),
                    lt: j(function(a, b, c) {
                        for (var d = 0 > c ? c + b : c; --d >= 0;) a.push(d);
                        return a
                    }),
                    gt: j(function(a, b, c) {
                        for (var d = 0 > c ? c + b : c; ++d < b;) a.push(d);
                        return a
                    })
                }
            }, w.pseudos.nth = w.pseudos.eq;
            for (u in {
                    radio: !0,
                    checkbox: !0,
                    file: !0,
                    password: !0,
                    image: !0
                }) w.pseudos[u] = h(u);
            for (u in {
                    submit: !0,
                    reset: !0
                }) w.pseudos[u] = i(u);
            return l.prototype = w.filters = w.pseudos, w.setFilters = new l, z = b.tokenize = function(a, c) {
                var d, e, f, g, h, i, j, k = S[a + " "];
                if (k) return c ? 0 : k.slice(0);
                for (h = a, i = [], j = w.preFilter; h;) {
                    (!d || (e = ja.exec(h))) && (e && (h = h.slice(e[0].length) || h), i.push(f = [])), d = !1, (e = ka.exec(h)) && (d = e.shift(), f.push({
                        value: d,
                        type: e[0].replace(ia, " ")
                    }), h = h.slice(d.length));
                    for (g in w.filter) !(e = oa[g].exec(h)) || j[g] && !(e = j[g](e)) || (d = e.shift(), f.push({
                        value: d,
                        type: g,
                        matches: e
                    }), h = h.slice(d.length));
                    if (!d) break
                }
                return c ? h.length : h ? b.error(a) : S(a, i).slice(0)
            }, A = b.compile = function(a, b) {
                var c, d = [],
                    e = [],
                    f = T[a + " "];
                if (!f) {
                    for (b || (b = z(a)), c = b.length; c--;) f = s(b[c]), f[N] ? d.push(f) : e.push(f);
                    f = T(a, t(e, d)), f.selector = a
                }
                return f
            }, B = b.select = function(a, b, c, d) {
                var e, f, g, h, i, j = "function" == typeof a && a,
                    l = !d && z(a = j.selector || a);
                if (c = c || [], 1 === l.length) {
                    if (f = l[0] = l[0].slice(0), f.length > 2 && "ID" === (g = f[0]).type && v.getById && 9 === b.nodeType && I && w.relative[f[1].type]) {
                        if (b = (w.find.ID(g.matches[0].replace(va, wa), b) || [])[0], !b) return c;
                        j && (b = b.parentNode), a = a.slice(f.shift().value.length)
                    }
                    for (e = oa.needsContext.test(a) ? 0 : f.length; e-- && (g = f[e], !w.relative[h = g.type]);)
                        if ((i = w.find[h]) && (d = i(g.matches[0].replace(va, wa), ta.test(f[0].type) && k(b.parentNode) || b))) {
                            if (f.splice(e, 1), a = d.length && m(f), !a) return $.apply(c, d), c;
                            break
                        }
                }
                return (j || A(a, l))(d, b, !I, c, ta.test(a) && k(b.parentNode) || b), c
            }, v.sortStable = N.split("").sort(U).join("") === N, v.detectDuplicates = !!E, F(), v.sortDetached = e(function(a) {
                return 1 & a.compareDocumentPosition(G.createElement("div"))
            }), e(function(a) {
                return a.innerHTML = "<a href='#'></a>", "#" === a.firstChild.getAttribute("href")
            }) || f("type|href|height|width", function(a, b, c) {
                return c ? void 0 : a.getAttribute(b, "type" === b.toLowerCase() ? 1 : 2)
            }), v.attributes && e(function(a) {
                return a.innerHTML = "<input/>", a.firstChild.setAttribute("value", ""), "" === a.firstChild.getAttribute("value")
            }) || f("value", function(a, b, c) {
                return c || "input" !== a.nodeName.toLowerCase() ? void 0 : a.defaultValue
            }), e(function(a) {
                return null == a.getAttribute("disabled")
            }) || f(ba, function(a, b, c) {
                var d;
                return c ? void 0 : a[b] === !0 ? b.toLowerCase() : (d = a.getAttributeNode(b)) && d.specified ? d.value : null
            }), b
        }(a);
        _.find = ea, _.expr = ea.selectors, _.expr[":"] = _.expr.pseudos, _.unique = ea.uniqueSort, _.text = ea.getText, _.isXMLDoc = ea.isXML, _.contains = ea.contains;
        var fa = _.expr.match.needsContext,
            ga = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
            ha = /^.[^:#\[\.,]*$/;
        _.filter = function(a, b, c) {
            var d = b[0];
            return c && (a = ":not(" + a + ")"), 1 === b.length && 1 === d.nodeType ? _.find.matchesSelector(d, a) ? [d] : [] : _.find.matches(a, _.grep(b, function(a) {
                return 1 === a.nodeType
            }))
        }, _.fn.extend({
            find: function(a) {
                var b, c = this.length,
                    d = [],
                    e = this;
                if ("string" != typeof a) return this.pushStack(_(a).filter(function() {
                    for (b = 0; c > b; b++)
                        if (_.contains(e[b], this)) return !0
                }));
                for (b = 0; c > b; b++) _.find(a, e[b], d);
                return d = this.pushStack(c > 1 ? _.unique(d) : d), d.selector = this.selector ? this.selector + " " + a : a, d
            },
            filter: function(a) {
                return this.pushStack(d(this, a || [], !1))
            },
            not: function(a) {
                return this.pushStack(d(this, a || [], !0))
            },
            is: function(a) {
                return !!d(this, "string" == typeof a && fa.test(a) ? _(a) : a || [], !1).length
            }
        });
        var ia, ja = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
            ka = _.fn.init = function(a, b) {
                var c, d;
                if (!a) return this;
                if ("string" == typeof a) {
                    if (c = "<" === a[0] && ">" === a[a.length - 1] && a.length >= 3 ? [null, a, null] : ja.exec(a), !c || !c[1] && b) return !b || b.jquery ? (b || ia).find(a) : this.constructor(b).find(a);
                    if (c[1]) {
                        if (b = b instanceof _ ? b[0] : b, _.merge(this, _.parseHTML(c[1], b && b.nodeType ? b.ownerDocument || b : Z, !0)), ga.test(c[1]) && _.isPlainObject(b))
                            for (c in b) _.isFunction(this[c]) ? this[c](b[c]) : this.attr(c, b[c]);
                        return this
                    }
                    return d = Z.getElementById(c[2]), d && d.parentNode && (this.length = 1, this[0] = d), this.context = Z, this.selector = a, this
                }
                return a.nodeType ? (this.context = this[0] = a, this.length = 1, this) : _.isFunction(a) ? "undefined" != typeof ia.ready ? ia.ready(a) : a(_) : (void 0 !== a.selector && (this.selector = a.selector, this.context = a.context), _.makeArray(a, this))
            };
        ka.prototype = _.fn, ia = _(Z);
        var la = /^(?:parents|prev(?:Until|All))/,
            ma = {
                children: !0,
                contents: !0,
                next: !0,
                prev: !0
            };
        _.extend({
            dir: function(a, b, c) {
                for (var d = [], e = void 0 !== c;
                    (a = a[b]) && 9 !== a.nodeType;)
                    if (1 === a.nodeType) {
                        if (e && _(a).is(c)) break;
                        d.push(a)
                    }
                return d
            },
            sibling: function(a, b) {
                for (var c = []; a; a = a.nextSibling) 1 === a.nodeType && a !== b && c.push(a);
                return c
            }
        }), _.fn.extend({
            has: function(a) {
                var b = _(a, this),
                    c = b.length;
                return this.filter(function() {
                    for (var a = 0; c > a; a++)
                        if (_.contains(this, b[a])) return !0
                })
            },
            closest: function(a, b) {
                for (var c, d = 0, e = this.length, f = [], g = fa.test(a) || "string" != typeof a ? _(a, b || this.context) : 0; e > d; d++)
                    for (c = this[d]; c && c !== b; c = c.parentNode)
                        if (c.nodeType < 11 && (g ? g.index(c) > -1 : 1 === c.nodeType && _.find.matchesSelector(c, a))) {
                            f.push(c);
                            break
                        }
                return this.pushStack(f.length > 1 ? _.unique(f) : f)
            },
            index: function(a) {
                return a ? "string" == typeof a ? U.call(_(a), this[0]) : U.call(this, a.jquery ? a[0] : a) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
            },
            add: function(a, b) {
                return this.pushStack(_.unique(_.merge(this.get(), _(a, b))))
            },
            addBack: function(a) {
                return this.add(null == a ? this.prevObject : this.prevObject.filter(a))
            }
        }), _.each({
            parent: function(a) {
                var b = a.parentNode;
                return b && 11 !== b.nodeType ? b : null
            },
            parents: function(a) {
                return _.dir(a, "parentNode")
            },
            parentsUntil: function(a, b, c) {
                return _.dir(a, "parentNode", c)
            },
            next: function(a) {
                return e(a, "nextSibling")
            },
            prev: function(a) {
                return e(a, "previousSibling")
            },
            nextAll: function(a) {
                return _.dir(a, "nextSibling")
            },
            prevAll: function(a) {
                return _.dir(a, "previousSibling")
            },
            nextUntil: function(a, b, c) {
                return _.dir(a, "nextSibling", c)
            },
            prevUntil: function(a, b, c) {
                return _.dir(a, "previousSibling", c)
            },
            siblings: function(a) {
                return _.sibling((a.parentNode || {}).firstChild, a)
            },
            children: function(a) {
                return _.sibling(a.firstChild)
            },
            contents: function(a) {
                return a.contentDocument || _.merge([], a.childNodes)
            }
        }, function(a, b) {
            _.fn[a] = function(c, d) {
                var e = _.map(this, b, c);
                return "Until" !== a.slice(-5) && (d = c), d && "string" == typeof d && (e = _.filter(d, e)), this.length > 1 && (ma[a] || _.unique(e), la.test(a) && e.reverse()), this.pushStack(e)
            }
        });
        var na = /\S+/g,
            oa = {};
        _.Callbacks = function(a) {
            a = "string" == typeof a ? oa[a] || f(a) : _.extend({}, a);
            var b, c, d, e, g, h, i = [],
                j = !a.once && [],
                k = function(f) {
                    for (b = a.memory && f, c = !0, h = e || 0, e = 0, g = i.length, d = !0; i && g > h; h++)
                        if (i[h].apply(f[0], f[1]) === !1 && a.stopOnFalse) {
                            b = !1;
                            break
                        }
                    d = !1, i && (j ? j.length && k(j.shift()) : b ? i = [] : l.disable())
                },
                l = {
                    add: function() {
                        if (i) {
                            var c = i.length;
                            ! function f(b) {
                                _.each(b, function(b, c) {
                                    var d = _.type(c);
                                    "function" === d ? a.unique && l.has(c) || i.push(c) : c && c.length && "string" !== d && f(c)
                                })
                            }(arguments), d ? g = i.length : b && (e = c, k(b))
                        }
                        return this
                    },
                    remove: function() {
                        return i && _.each(arguments, function(a, b) {
                            for (var c;
                                (c = _.inArray(b, i, c)) > -1;) i.splice(c, 1), d && (g >= c && g--, h >= c && h--)
                        }), this
                    },
                    has: function(a) {
                        return a ? _.inArray(a, i) > -1 : !(!i || !i.length)
                    },
                    empty: function() {
                        return i = [], g = 0, this
                    },
                    disable: function() {
                        return i = j = b = void 0, this
                    },
                    disabled: function() {
                        return !i
                    },
                    lock: function() {
                        return j = void 0, b || l.disable(), this
                    },
                    locked: function() {
                        return !j
                    },
                    fireWith: function(a, b) {
                        return !i || c && !j || (b = b || [], b = [a, b.slice ? b.slice() : b], d ? j.push(b) : k(b)), this
                    },
                    fire: function() {
                        return l.fireWith(this, arguments), this
                    },
                    fired: function() {
                        return !!c
                    }
                };
            return l
        }, _.extend({
            Deferred: function(a) {
                var b = [
                        ["resolve", "done", _.Callbacks("once memory"), "resolved"],
                        ["reject", "fail", _.Callbacks("once memory"), "rejected"],
                        ["notify", "progress", _.Callbacks("memory")]
                    ],
                    c = "pending",
                    d = {
                        state: function() {
                            return c
                        },
                        always: function() {
                            return e.done(arguments).fail(arguments), this
                        },
                        then: function() {
                            var a = arguments;
                            return _.Deferred(function(c) {
                                _.each(b, function(b, f) {
                                    var g = _.isFunction(a[b]) && a[b];
                                    e[f[1]](function() {
                                        var a = g && g.apply(this, arguments);
                                        a && _.isFunction(a.promise) ? a.promise().done(c.resolve).fail(c.reject).progress(c.notify) : c[f[0] + "With"](this === d ? c.promise() : this, g ? [a] : arguments)
                                    })
                                }), a = null
                            }).promise()
                        },
                        promise: function(a) {
                            return null != a ? _.extend(a, d) : d
                        }
                    },
                    e = {};
                return d.pipe = d.then, _.each(b, function(a, f) {
                    var g = f[2],
                        h = f[3];
                    d[f[1]] = g.add, h && g.add(function() {
                        c = h
                    }, b[1 ^ a][2].disable, b[2][2].lock), e[f[0]] = function() {
                        return e[f[0] + "With"](this === e ? d : this, arguments), this
                    }, e[f[0] + "With"] = g.fireWith
                }), d.promise(e), a && a.call(e, e), e
            },
            when: function(a) {
                var b, c, d, e = 0,
                    f = R.call(arguments),
                    g = f.length,
                    h = 1 !== g || a && _.isFunction(a.promise) ? g : 0,
                    i = 1 === h ? a : _.Deferred(),
                    j = function(a, c, d) {
                        return function(e) {
                            c[a] = this, d[a] = arguments.length > 1 ? R.call(arguments) : e, d === b ? i.notifyWith(c, d) : --h || i.resolveWith(c, d)
                        }
                    };
                if (g > 1)
                    for (b = new Array(g), c = new Array(g), d = new Array(g); g > e; e++) f[e] && _.isFunction(f[e].promise) ? f[e].promise().done(j(e, d, f)).fail(i.reject).progress(j(e, c, b)) : --h;
                return h || i.resolveWith(d, f), i.promise()
            }
        });
        var pa;
        _.fn.ready = function(a) {
            return _.ready.promise().done(a), this
        }, _.extend({
            isReady: !1,
            readyWait: 1,
            holdReady: function(a) {
                a ? _.readyWait++ : _.ready(!0)
            },
            ready: function(a) {
                (a === !0 ? --_.readyWait : _.isReady) || (_.isReady = !0, a !== !0 && --_.readyWait > 0 || (pa.resolveWith(Z, [_]), _.fn.triggerHandler && (_(Z).triggerHandler("ready"), _(Z).off("ready"))))
            }
        }), _.ready.promise = function(b) {
            return pa || (pa = _.Deferred(), "complete" === Z.readyState ? setTimeout(_.ready) : (Z.addEventListener("DOMContentLoaded", g, !1), a.addEventListener("load", g, !1))), pa.promise(b)
        }, _.ready.promise();
        var qa = _.access = function(a, b, c, d, e, f, g) {
            var h = 0,
                i = a.length,
                j = null == c;
            if ("object" === _.type(c)) {
                e = !0;
                for (h in c) _.access(a, b, h, c[h], !0, f, g)
            } else if (void 0 !== d && (e = !0, _.isFunction(d) || (g = !0), j && (g ? (b.call(a, d), b = null) : (j = b, b = function(a, b, c) {
                    return j.call(_(a), c)
                })), b))
                for (; i > h; h++) b(a[h], c, g ? d : d.call(a[h], h, b(a[h], c)));
            return e ? a : j ? b.call(a) : i ? b(a[0], c) : f
        };
        _.acceptData = function(a) {
            return 1 === a.nodeType || 9 === a.nodeType || !+a.nodeType
        }, h.uid = 1, h.accepts = _.acceptData, h.prototype = {
            key: function(a) {
                if (!h.accepts(a)) return 0;
                var b = {},
                    c = a[this.expando];
                if (!c) {
                    c = h.uid++;
                    try {
                        b[this.expando] = {
                            value: c
                        }, Object.defineProperties(a, b)
                    } catch (d) {
                        b[this.expando] = c, _.extend(a, b)
                    }
                }
                return this.cache[c] || (this.cache[c] = {}), c
            },
            set: function(a, b, c) {
                var d, e = this.key(a),
                    f = this.cache[e];
                if ("string" == typeof b) f[b] = c;
                else if (_.isEmptyObject(f)) _.extend(this.cache[e], b);
                else
                    for (d in b) f[d] = b[d];
                return f
            },
            get: function(a, b) {
                var c = this.cache[this.key(a)];
                return void 0 === b ? c : c[b]
            },
            access: function(a, b, c) {
                var d;
                return void 0 === b || b && "string" == typeof b && void 0 === c ? (d = this.get(a, b), void 0 !== d ? d : this.get(a, _.camelCase(b))) : (this.set(a, b, c), void 0 !== c ? c : b)
            },
            remove: function(a, b) {
                var c, d, e, f = this.key(a),
                    g = this.cache[f];
                if (void 0 === b) this.cache[f] = {};
                else {
                    _.isArray(b) ? d = b.concat(b.map(_.camelCase)) : (e = _.camelCase(b), b in g ? d = [b, e] : (d = e, d = d in g ? [d] : d.match(na) || [])), c = d.length;
                    for (; c--;) delete g[d[c]]
                }
            },
            hasData: function(a) {
                return !_.isEmptyObject(this.cache[a[this.expando]] || {})
            },
            discard: function(a) {
                a[this.expando] && delete this.cache[a[this.expando]]
            }
        };
        var ra = new h,
            sa = new h,
            ta = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
            ua = /([A-Z])/g;
        _.extend({
            hasData: function(a) {
                return sa.hasData(a) || ra.hasData(a)
            },
            data: function(a, b, c) {
                return sa.access(a, b, c)
            },
            removeData: function(a, b) {
                sa.remove(a, b)
            },
            _data: function(a, b, c) {
                return ra.access(a, b, c)
            },
            _removeData: function(a, b) {
                ra.remove(a, b)
            }
        }), _.fn.extend({
            data: function(a, b) {
                var c, d, e, f = this[0],
                    g = f && f.attributes;
                if (void 0 === a) {
                    if (this.length && (e = sa.get(f), 1 === f.nodeType && !ra.get(f, "hasDataAttrs"))) {
                        for (c = g.length; c--;) g[c] && (d = g[c].name, 0 === d.indexOf("data-") && (d = _.camelCase(d.slice(5)), i(f, d, e[d])));
                        ra.set(f, "hasDataAttrs", !0)
                    }
                    return e
                }
                return "object" == typeof a ? this.each(function() {
                    sa.set(this, a)
                }) : qa(this, function(b) {
                    var c, d = _.camelCase(a);
                    if (f && void 0 === b) {
                        if (c = sa.get(f, a), void 0 !== c) return c;
                        if (c = sa.get(f, d), void 0 !== c) return c;
                        if (c = i(f, d, void 0), void 0 !== c) return c
                    } else this.each(function() {
                        var c = sa.get(this, d);
                        sa.set(this, d, b), -1 !== a.indexOf("-") && void 0 !== c && sa.set(this, a, b)
                    })
                }, null, b, arguments.length > 1, null, !0)
            },
            removeData: function(a) {
                return this.each(function() {
                    sa.remove(this, a)
                })
            }
        }), _.extend({
            queue: function(a, b, c) {
                var d;
                return a ? (b = (b || "fx") + "queue", d = ra.get(a, b), c && (!d || _.isArray(c) ? d = ra.access(a, b, _.makeArray(c)) : d.push(c)), d || []) : void 0
            },
            dequeue: function(a, b) {
                b = b || "fx";
                var c = _.queue(a, b),
                    d = c.length,
                    e = c.shift(),
                    f = _._queueHooks(a, b),
                    g = function() {
                        _.dequeue(a, b)
                    };
                "inprogress" === e && (e = c.shift(), d--), e && ("fx" === b && c.unshift("inprogress"), delete f.stop, e.call(a, g, f)), !d && f && f.empty.fire()
            },
            _queueHooks: function(a, b) {
                var c = b + "queueHooks";
                return ra.get(a, c) || ra.access(a, c, {
                    empty: _.Callbacks("once memory").add(function() {
                        ra.remove(a, [b + "queue", c])
                    })
                })
            }
        }), _.fn.extend({
            queue: function(a, b) {
                var c = 2;
                return "string" != typeof a && (b = a, a = "fx", c--), arguments.length < c ? _.queue(this[0], a) : void 0 === b ? this : this.each(function() {
                    var c = _.queue(this, a, b);
                    _._queueHooks(this, a), "fx" === a && "inprogress" !== c[0] && _.dequeue(this, a)
                })
            },
            dequeue: function(a) {
                return this.each(function() {
                    _.dequeue(this, a)
                })
            },
            clearQueue: function(a) {
                return this.queue(a || "fx", [])
            },
            promise: function(a, b) {
                var c, d = 1,
                    e = _.Deferred(),
                    f = this,
                    g = this.length,
                    h = function() {
                        --d || e.resolveWith(f, [f])
                    };
                for ("string" != typeof a && (b = a, a = void 0), a = a || "fx"; g--;) c = ra.get(f[g], a + "queueHooks"), c && c.empty && (d++, c.empty.add(h));
                return h(), e.promise(b)
            }
        });
        var va = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
            wa = ["Top", "Right", "Bottom", "Left"],
            xa = function(a, b) {
                return a = b || a, "none" === _.css(a, "display") || !_.contains(a.ownerDocument, a)
            },
            ya = /^(?:checkbox|radio)$/i;
        ! function() {
            var a = Z.createDocumentFragment(),
                b = a.appendChild(Z.createElement("div")),
                c = Z.createElement("input");
            c.setAttribute("type", "radio"), c.setAttribute("checked", "checked"), c.setAttribute("name", "t"), b.appendChild(c), Y.checkClone = b.cloneNode(!0).cloneNode(!0).lastChild.checked, b.innerHTML = "<textarea>x</textarea>", Y.noCloneChecked = !!b.cloneNode(!0).lastChild.defaultValue
        }();
        var za = "undefined";
        Y.focusinBubbles = "onfocusin" in a;
        var Aa = /^key/,
            Ba = /^(?:mouse|pointer|contextmenu)|click/,
            Ca = /^(?:focusinfocus|focusoutblur)$/,
            Da = /^([^.]*)(?:\.(.+)|)$/;
        _.event = {
            global: {},
            add: function(a, b, c, d, e) {
                var f, g, h, i, j, k, l, m, n, o, p, q = ra.get(a);
                if (q)
                    for (c.handler && (f = c, c = f.handler, e = f.selector), c.guid || (c.guid = _.guid++), (i = q.events) || (i = q.events = {}), (g = q.handle) || (g = q.handle = function(b) {
                            return typeof _ !== za && _.event.triggered !== b.type ? _.event.dispatch.apply(a, arguments) : void 0
                        }), b = (b || "").match(na) || [""], j = b.length; j--;) h = Da.exec(b[j]) || [], n = p = h[1], o = (h[2] || "").split(".").sort(), n && (l = _.event.special[n] || {}, n = (e ? l.delegateType : l.bindType) || n, l = _.event.special[n] || {}, k = _.extend({
                        type: n,
                        origType: p,
                        data: d,
                        handler: c,
                        guid: c.guid,
                        selector: e,
                        needsContext: e && _.expr.match.needsContext.test(e),
                        namespace: o.join(".")
                    }, f), (m = i[n]) || (m = i[n] = [], m.delegateCount = 0, l.setup && l.setup.call(a, d, o, g) !== !1 || a.addEventListener && a.addEventListener(n, g, !1)), l.add && (l.add.call(a, k), k.handler.guid || (k.handler.guid = c.guid)), e ? m.splice(m.delegateCount++, 0, k) : m.push(k), _.event.global[n] = !0)
            },
            remove: function(a, b, c, d, e) {
                var f, g, h, i, j, k, l, m, n, o, p, q = ra.hasData(a) && ra.get(a);
                if (q && (i = q.events)) {
                    for (b = (b || "").match(na) || [""], j = b.length; j--;)
                        if (h = Da.exec(b[j]) || [], n = p = h[1], o = (h[2] || "").split(".").sort(), n) {
                            for (l = _.event.special[n] || {}, n = (d ? l.delegateType : l.bindType) || n, m = i[n] || [], h = h[2] && new RegExp("(^|\\.)" + o.join("\\.(?:.*\\.|)") + "(\\.|$)"), g = f = m.length; f--;) k = m[f], !e && p !== k.origType || c && c.guid !== k.guid || h && !h.test(k.namespace) || d && d !== k.selector && ("**" !== d || !k.selector) || (m.splice(f, 1), k.selector && m.delegateCount--, l.remove && l.remove.call(a, k));
                            g && !m.length && (l.teardown && l.teardown.call(a, o, q.handle) !== !1 || _.removeEvent(a, n, q.handle), delete i[n])
                        } else
                            for (n in i) _.event.remove(a, n + b[j], c, d, !0);
                    _.isEmptyObject(i) && (delete q.handle, ra.remove(a, "events"))
                }
            },
            trigger: function(b, c, d, e) {
                var f, g, h, i, j, k, l, m = [d || Z],
                    n = X.call(b, "type") ? b.type : b,
                    o = X.call(b, "namespace") ? b.namespace.split(".") : [];
                if (g = h = d = d || Z, 3 !== d.nodeType && 8 !== d.nodeType && !Ca.test(n + _.event.triggered) && (n.indexOf(".") >= 0 && (o = n.split("."), n = o.shift(), o.sort()), j = n.indexOf(":") < 0 && "on" + n, b = b[_.expando] ? b : new _.Event(n, "object" == typeof b && b), b.isTrigger = e ? 2 : 3, b.namespace = o.join("."), b.namespace_re = b.namespace ? new RegExp("(^|\\.)" + o.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, b.result = void 0, b.target || (b.target = d), c = null == c ? [b] : _.makeArray(c, [b]), l = _.event.special[n] || {}, e || !l.trigger || l.trigger.apply(d, c) !== !1)) {
                    if (!e && !l.noBubble && !_.isWindow(d)) {
                        for (i = l.delegateType || n, Ca.test(i + n) || (g = g.parentNode); g; g = g.parentNode) m.push(g), h = g;
                        h === (d.ownerDocument || Z) && m.push(h.defaultView || h.parentWindow || a)
                    }
                    for (f = 0;
                        (g = m[f++]) && !b.isPropagationStopped();) b.type = f > 1 ? i : l.bindType || n, k = (ra.get(g, "events") || {})[b.type] && ra.get(g, "handle"), k && k.apply(g, c), k = j && g[j], k && k.apply && _.acceptData(g) && (b.result = k.apply(g, c), b.result === !1 && b.preventDefault());
                    return b.type = n, e || b.isDefaultPrevented() || l._default && l._default.apply(m.pop(), c) !== !1 || !_.acceptData(d) || j && _.isFunction(d[n]) && !_.isWindow(d) && (h = d[j], h && (d[j] = null), _.event.triggered = n, d[n](), _.event.triggered = void 0, h && (d[j] = h)), b.result
                }
            },
            dispatch: function(a) {
                a = _.event.fix(a);
                var b, c, d, e, f, g = [],
                    h = R.call(arguments),
                    i = (ra.get(this, "events") || {})[a.type] || [],
                    j = _.event.special[a.type] || {};
                if (h[0] = a, a.delegateTarget = this, !j.preDispatch || j.preDispatch.call(this, a) !== !1) {
                    for (g = _.event.handlers.call(this, a, i), b = 0;
                        (e = g[b++]) && !a.isPropagationStopped();)
                        for (a.currentTarget = e.elem, c = 0;
                            (f = e.handlers[c++]) && !a.isImmediatePropagationStopped();)(!a.namespace_re || a.namespace_re.test(f.namespace)) && (a.handleObj = f, a.data = f.data, d = ((_.event.special[f.origType] || {}).handle || f.handler).apply(e.elem, h), void 0 !== d && (a.result = d) === !1 && (a.preventDefault(), a.stopPropagation()));
                    return j.postDispatch && j.postDispatch.call(this, a), a.result
                }
            },
            handlers: function(a, b) {
                var c, d, e, f, g = [],
                    h = b.delegateCount,
                    i = a.target;
                if (h && i.nodeType && (!a.button || "click" !== a.type))
                    for (; i !== this; i = i.parentNode || this)
                        if (i.disabled !== !0 || "click" !== a.type) {
                            for (d = [], c = 0; h > c; c++) f = b[c], e = f.selector + " ", void 0 === d[e] && (d[e] = f.needsContext ? _(e, this).index(i) >= 0 : _.find(e, this, null, [i]).length), d[e] && d.push(f);
                            d.length && g.push({
                                elem: i,
                                handlers: d
                            })
                        }
                return h < b.length && g.push({
                    elem: this,
                    handlers: b.slice(h)
                }), g
            },
            props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
            fixHooks: {},
            keyHooks: {
                props: "char charCode key keyCode".split(" "),
                filter: function(a, b) {
                    return null == a.which && (a.which = null != b.charCode ? b.charCode : b.keyCode), a
                }
            },
            mouseHooks: {
                props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
                filter: function(a, b) {
                    var c, d, e, f = b.button;
                    return null == a.pageX && null != b.clientX && (c = a.target.ownerDocument || Z, d = c.documentElement, e = c.body, a.pageX = b.clientX + (d && d.scrollLeft || e && e.scrollLeft || 0) - (d && d.clientLeft || e && e.clientLeft || 0), a.pageY = b.clientY + (d && d.scrollTop || e && e.scrollTop || 0) - (d && d.clientTop || e && e.clientTop || 0)), a.which || void 0 === f || (a.which = 1 & f ? 1 : 2 & f ? 3 : 4 & f ? 2 : 0), a
                }
            },
            fix: function(a) {
                if (a[_.expando]) return a;
                var b, c, d, e = a.type,
                    f = a,
                    g = this.fixHooks[e];
                for (g || (this.fixHooks[e] = g = Ba.test(e) ? this.mouseHooks : Aa.test(e) ? this.keyHooks : {}), d = g.props ? this.props.concat(g.props) : this.props, a = new _.Event(f), b = d.length; b--;) c = d[b], a[c] = f[c];
                return a.target || (a.target = Z), 3 === a.target.nodeType && (a.target = a.target.parentNode), g.filter ? g.filter(a, f) : a
            },
            special: {
                load: {
                    noBubble: !0
                },
                focus: {
                    trigger: function() {
                        return this !== l() && this.focus ? (this.focus(), !1) : void 0
                    },
                    delegateType: "focusin"
                },
                blur: {
                    trigger: function() {
                        return this === l() && this.blur ? (this.blur(), !1) : void 0
                    },
                    delegateType: "focusout"
                },
                click: {
                    trigger: function() {
                        return "checkbox" === this.type && this.click && _.nodeName(this, "input") ? (this.click(), !1) : void 0
                    },
                    _default: function(a) {
                        return _.nodeName(a.target, "a")
                    }
                },
                beforeunload: {
                    postDispatch: function(a) {
                        void 0 !== a.result && a.originalEvent && (a.originalEvent.returnValue = a.result)
                    }
                }
            },
            simulate: function(a, b, c, d) {
                var e = _.extend(new _.Event, c, {
                    type: a,
                    isSimulated: !0,
                    originalEvent: {}
                });
                d ? _.event.trigger(e, null, b) : _.event.dispatch.call(b, e), e.isDefaultPrevented() && c.preventDefault()
            }
        }, _.removeEvent = function(a, b, c) {
            a.removeEventListener && a.removeEventListener(b, c, !1)
        }, _.Event = function(a, b) {
            return this instanceof _.Event ? (a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || void 0 === a.defaultPrevented && a.returnValue === !1 ? j : k) : this.type = a, b && _.extend(this, b), this.timeStamp = a && a.timeStamp || _.now(), void(this[_.expando] = !0)) : new _.Event(a, b)
        }, _.Event.prototype = {
            isDefaultPrevented: k,
            isPropagationStopped: k,
            isImmediatePropagationStopped: k,
            preventDefault: function() {
                var a = this.originalEvent;
                this.isDefaultPrevented = j, a && a.preventDefault && a.preventDefault()
            },
            stopPropagation: function() {
                var a = this.originalEvent;
                this.isPropagationStopped = j, a && a.stopPropagation && a.stopPropagation()
            },
            stopImmediatePropagation: function() {
                var a = this.originalEvent;
                this.isImmediatePropagationStopped = j, a && a.stopImmediatePropagation && a.stopImmediatePropagation(), this.stopPropagation()
            }
        }, _.each({
            mouseenter: "mouseover",
            mouseleave: "mouseout",
            pointerenter: "pointerover",
            pointerleave: "pointerout"
        }, function(a, b) {
            _.event.special[a] = {
                delegateType: b,
                bindType: b,
                handle: function(a) {
                    var c, d = this,
                        e = a.relatedTarget,
                        f = a.handleObj;
                    return (!e || e !== d && !_.contains(d, e)) && (a.type = f.origType, c = f.handler.apply(this, arguments), a.type = b), c
                }
            }
        }), Y.focusinBubbles || _.each({
            focus: "focusin",
            blur: "focusout"
        }, function(a, b) {
            var c = function(a) {
                _.event.simulate(b, a.target, _.event.fix(a), !0)
            };
            _.event.special[b] = {
                setup: function() {
                    var d = this.ownerDocument || this,
                        e = ra.access(d, b);
                    e || d.addEventListener(a, c, !0), ra.access(d, b, (e || 0) + 1)
                },
                teardown: function() {
                    var d = this.ownerDocument || this,
                        e = ra.access(d, b) - 1;
                    e ? ra.access(d, b, e) : (d.removeEventListener(a, c, !0), ra.remove(d, b))
                }
            }
        }), _.fn.extend({
            on: function(a, b, c, d, e) {
                var f, g;
                if ("object" == typeof a) {
                    "string" != typeof b && (c = c || b, b = void 0);
                    for (g in a) this.on(g, b, c, a[g], e);
                    return this
                }
                if (null == c && null == d ? (d = b, c = b = void 0) : null == d && ("string" == typeof b ? (d = c, c = void 0) : (d = c, c = b, b = void 0)), d === !1) d = k;
                else if (!d) return this;
                return 1 === e && (f = d, d = function(a) {
                    return _().off(a), f.apply(this, arguments)
                }, d.guid = f.guid || (f.guid = _.guid++)), this.each(function() {
                    _.event.add(this, a, d, c, b)
                })
            },
            one: function(a, b, c, d) {
                return this.on(a, b, c, d, 1)
            },
            off: function(a, b, c) {
                var d, e;
                if (a && a.preventDefault && a.handleObj) return d = a.handleObj, _(a.delegateTarget).off(d.namespace ? d.origType + "." + d.namespace : d.origType, d.selector, d.handler), this;
                if ("object" == typeof a) {
                    for (e in a) this.off(e, b, a[e]);
                    return this
                }
                return (b === !1 || "function" == typeof b) && (c = b, b = void 0), c === !1 && (c = k), this.each(function() {
                    _.event.remove(this, a, c, b)
                })
            },
            trigger: function(a, b) {
                return this.each(function() {
                    _.event.trigger(a, b, this)
                })
            },
            triggerHandler: function(a, b) {
                var c = this[0];
                return c ? _.event.trigger(a, b, c, !0) : void 0
            }
        });
        var Ea = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
            Fa = /<([\w:]+)/,
            Ga = /<|&#?\w+;/,
            Ha = /<(?:script|style|link)/i,
            Ia = /checked\s*(?:[^=]|=\s*.checked.)/i,
            Ja = /^$|\/(?:java|ecma)script/i,
            Ka = /^true\/(.*)/,
            La = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
            Ma = {
                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, "", ""]
            };
        Ma.optgroup = Ma.option, Ma.tbody = Ma.tfoot = Ma.colgroup = Ma.caption = Ma.thead, Ma.th = Ma.td, _.extend({
            clone: function(a, b, c) {
                var d, e, f, g, h = a.cloneNode(!0),
                    i = _.contains(a.ownerDocument, a);
                if (!(Y.noCloneChecked || 1 !== a.nodeType && 11 !== a.nodeType || _.isXMLDoc(a)))
                    for (g = r(h), f = r(a), d = 0, e = f.length; e > d; d++) s(f[d], g[d]);
                if (b)
                    if (c)
                        for (f = f || r(a), g = g || r(h), d = 0, e = f.length; e > d; d++) q(f[d], g[d]);
                    else q(a, h);
                return g = r(h, "script"), g.length > 0 && p(g, !i && r(a, "script")), h
            },
            buildFragment: function(a, b, c, d) {
                for (var e, f, g, h, i, j, k = b.createDocumentFragment(), l = [], m = 0, n = a.length; n > m; m++)
                    if (e = a[m], e || 0 === e)
                        if ("object" === _.type(e)) _.merge(l, e.nodeType ? [e] : e);
                        else if (Ga.test(e)) {
                    for (f = f || k.appendChild(b.createElement("div")), g = (Fa.exec(e) || ["", ""])[1].toLowerCase(), h = Ma[g] || Ma._default, f.innerHTML = h[1] + e.replace(Ea, "<$1></$2>") + h[2], j = h[0]; j--;) f = f.lastChild;
                    _.merge(l, f.childNodes), f = k.firstChild, f.textContent = ""
                } else l.push(b.createTextNode(e));
                for (k.textContent = "", m = 0; e = l[m++];)
                    if ((!d || -1 === _.inArray(e, d)) && (i = _.contains(e.ownerDocument, e), f = r(k.appendChild(e), "script"), i && p(f), c))
                        for (j = 0; e = f[j++];) Ja.test(e.type || "") && c.push(e);
                return k
            },
            cleanData: function(a) {
                for (var b, c, d, e, f = _.event.special, g = 0; void 0 !== (c = a[g]); g++) {
                    if (_.acceptData(c) && (e = c[ra.expando], e && (b = ra.cache[e]))) {
                        if (b.events)
                            for (d in b.events) f[d] ? _.event.remove(c, d) : _.removeEvent(c, d, b.handle);
                        ra.cache[e] && delete ra.cache[e]
                    }
                    delete sa.cache[c[sa.expando]]
                }
            }
        }), _.fn.extend({
            text: function(a) {
                return qa(this, function(a) {
                    return void 0 === a ? _.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 this.domManip(arguments, function(a) {
                    if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                        var b = m(this, a);
                        b.appendChild(a)
                    }
                })
            },
            prepend: function() {
                return this.domManip(arguments, function(a) {
                    if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                        var b = m(this, a);
                        b.insertBefore(a, b.firstChild)
                    }
                })
            },
            before: function() {
                return this.domManip(arguments, function(a) {
                    this.parentNode && this.parentNode.insertBefore(a, this)
                })
            },
            after: function() {
                return this.domManip(arguments, function(a) {
                    this.parentNode && this.parentNode.insertBefore(a, this.nextSibling)
                })
            },
            remove: function(a, b) {
                for (var c, d = a ? _.filter(a, this) : this, e = 0; null != (c = d[e]); e++) b || 1 !== c.nodeType || _.cleanData(r(c)), c.parentNode && (b && _.contains(c.ownerDocument, c) && p(r(c, "script")), c.parentNode.removeChild(c));
                return this
            },
            empty: function() {
                for (var a, b = 0; null != (a = this[b]); b++) 1 === a.nodeType && (_.cleanData(r(a, !1)), a.textContent = "");
                return this
            },
            clone: function(a, b) {
                return a = null == a ? !1 : a, b = null == b ? a : b, this.map(function() {
                    return _.clone(this, a, b)
                })
            },
            html: function(a) {
                return qa(this, function(a) {
                    var b = this[0] || {},
                        c = 0,
                        d = this.length;
                    if (void 0 === a && 1 === b.nodeType) return b.innerHTML;
                    if ("string" == typeof a && !Ha.test(a) && !Ma[(Fa.exec(a) || ["", ""])[1].toLowerCase()]) {
                        a = a.replace(Ea, "<$1></$2>");
                        try {
                            for (; d > c; c++) b = this[c] || {}, 1 === b.nodeType && (_.cleanData(r(b, !1)), b.innerHTML = a);
                            b = 0
                        } catch (e) {}
                    }
                    b && this.empty().append(a)
                }, null, a, arguments.length)
            },
            replaceWith: function() {
                var a = arguments[0];
                return this.domManip(arguments, function(b) {
                    a = this.parentNode, _.cleanData(r(this)), a && a.replaceChild(b, this)
                }), a && (a.length || a.nodeType) ? this : this.remove()
            },
            detach: function(a) {
                return this.remove(a, !0)
            },
            domManip: function(a, b) {
                a = S.apply([], a);
                var c, d, e, f, g, h, i = 0,
                    j = this.length,
                    k = this,
                    l = j - 1,
                    m = a[0],
                    p = _.isFunction(m);
                if (p || j > 1 && "string" == typeof m && !Y.checkClone && Ia.test(m)) return this.each(function(c) {
                    var d = k.eq(c);
                    p && (a[0] = m.call(this, c, d.html())), d.domManip(a, b)
                });
                if (j && (c = _.buildFragment(a, this[0].ownerDocument, !1, this), d = c.firstChild, 1 === c.childNodes.length && (c = d), d)) {
                    for (e = _.map(r(c, "script"), n), f = e.length; j > i; i++) g = c, i !== l && (g = _.clone(g, !0, !0), f && _.merge(e, r(g, "script"))), b.call(this[i], g, i);
                    if (f)
                        for (h = e[e.length - 1].ownerDocument, _.map(e, o), i = 0; f > i; i++) g = e[i], Ja.test(g.type || "") && !ra.access(g, "globalEval") && _.contains(h, g) && (g.src ? _._evalUrl && _._evalUrl(g.src) : _.globalEval(g.textContent.replace(La, "")))
                }
                return this
            }
        }), _.each({
            appendTo: "append",
            prependTo: "prepend",
            insertBefore: "before",
            insertAfter: "after",
            replaceAll: "replaceWith"
        }, function(a, b) {
            _.fn[a] = function(a) {
                for (var c, d = [], e = _(a), f = e.length - 1, g = 0; f >= g; g++) c = g === f ? this : this.clone(!0), _(e[g])[b](c), T.apply(d, c.get());
                return this.pushStack(d)
            }
        });
        var Na, Oa = {},
            Pa = /^margin/,
            Qa = new RegExp("^(" + va + ")(?!px)[a-z%]+$", "i"),
            Ra = function(b) {
                return b.ownerDocument.defaultView.opener ? b.ownerDocument.defaultView.getComputedStyle(b, null) : a.getComputedStyle(b, null)
            };
        ! function() {
            function b() {
                g.style.cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute", g.innerHTML = "", e.appendChild(f);
                var b = a.getComputedStyle(g, null);
                c = "1%" !== b.top, d = "4px" === b.width, e.removeChild(f)
            }
            var c, d, e = Z.documentElement,
                f = Z.createElement("div"),
                g = Z.createElement("div");
            g.style && (g.style.backgroundClip = "content-box", g.cloneNode(!0).style.backgroundClip = "", Y.clearCloneStyle = "content-box" === g.style.backgroundClip, f.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute", f.appendChild(g), a.getComputedStyle && _.extend(Y, {
                pixelPosition: function() {
                    return b(), c
                },
                boxSizingReliable: function() {
                    return null == d && b(), d
                },
                reliableMarginRight: function() {
                    var b, c = g.appendChild(Z.createElement("div"));
                    return c.style.cssText = g.style.cssText = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0", c.style.marginRight = c.style.width = "0", g.style.width = "1px", e.appendChild(f), b = !parseFloat(a.getComputedStyle(c, null).marginRight), e.removeChild(f), g.removeChild(c), b
                }
            }))
        }(), _.swap = function(a, b, c, d) {
            var e, f, g = {};
            for (f in b) g[f] = a.style[f], a.style[f] = b[f];
            e = c.apply(a, d || []);
            for (f in b) a.style[f] = g[f];
            return e
        };
        var Sa = /^(none|table(?!-c[ea]).+)/,
            Ta = new RegExp("^(" + va + ")(.*)$", "i"),
            Ua = new RegExp("^([+-])=(" + va + ")", "i"),
            Va = {
                position: "absolute",
                visibility: "hidden",
                display: "block"
            },
            Wa = {
                letterSpacing: "0",
                fontWeight: "400"
            },
            Xa = ["Webkit", "O", "Moz", "ms"];
        _.extend({
            cssHooks: {
                opacity: {
                    get: function(a, b) {
                        if (b) {
                            var c = v(a, "opacity");
                            return "" === c ? "1" : c
                        }
                    }
                }
            },
            cssNumber: {
                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, b, c, d) {
                if (a && 3 !== a.nodeType && 8 !== a.nodeType && a.style) {
                    var e, f, g, h = _.camelCase(b),
                        i = a.style;
                    return b = _.cssProps[h] || (_.cssProps[h] = x(i, h)), g = _.cssHooks[b] || _.cssHooks[h], void 0 === c ? g && "get" in g && void 0 !== (e = g.get(a, !1, d)) ? e : i[b] : (f = typeof c, "string" === f && (e = Ua.exec(c)) && (c = (e[1] + 1) * e[2] + parseFloat(_.css(a, b)), f = "number"), null != c && c === c && ("number" !== f || _.cssNumber[h] || (c += "px"), Y.clearCloneStyle || "" !== c || 0 !== b.indexOf("background") || (i[b] = "inherit"), g && "set" in g && void 0 === (c = g.set(a, c, d)) || (i[b] = c)), void 0)
                }
            },
            css: function(a, b, c, d) {
                var e, f, g, h = _.camelCase(b);
                return b = _.cssProps[h] || (_.cssProps[h] = x(a.style, h)), g = _.cssHooks[b] || _.cssHooks[h], g && "get" in g && (e = g.get(a, !0, c)), void 0 === e && (e = v(a, b, d)), "normal" === e && b in Wa && (e = Wa[b]), "" === c || c ? (f = parseFloat(e), c === !0 || _.isNumeric(f) ? f || 0 : e) : e
            }
        }), _.each(["height", "width"], function(a, b) {
            _.cssHooks[b] = {
                get: function(a, c, d) {
                    return c ? Sa.test(_.css(a, "display")) && 0 === a.offsetWidth ? _.swap(a, Va, function() {
                        return A(a, b, d)
                    }) : A(a, b, d) : void 0
                },
                set: function(a, c, d) {
                    var e = d && Ra(a);
                    return y(a, c, d ? z(a, b, d, "border-box" === _.css(a, "boxSizing", !1, e), e) : 0)
                }
            }
        }), _.cssHooks.marginRight = w(Y.reliableMarginRight, function(a, b) {
            return b ? _.swap(a, {
                display: "inline-block"
            }, v, [a, "marginRight"]) : void 0
        }), _.each({
            margin: "",
            padding: "",
            border: "Width"
        }, function(a, b) {
            _.cssHooks[a + b] = {
                expand: function(c) {
                    for (var d = 0, e = {}, f = "string" == typeof c ? c.split(" ") : [c]; 4 > d; d++) e[a + wa[d] + b] = f[d] || f[d - 2] || f[0];
                    return e
                }
            }, Pa.test(a) || (_.cssHooks[a + b].set = y)
        }), _.fn.extend({
            css: function(a, b) {
                return qa(this, function(a, b, c) {
                    var d, e, f = {},
                        g = 0;
                    if (_.isArray(b)) {
                        for (d = Ra(a), e = b.length; e > g; g++) f[b[g]] = _.css(a, b[g], !1, d);
                        return f
                    }
                    return void 0 !== c ? _.style(a, b, c) : _.css(a, b)
                }, a, b, arguments.length > 1)
            },
            show: function() {
                return B(this, !0)
            },
            hide: function() {
                return B(this)
            },
            toggle: function(a) {
                return "boolean" == typeof a ? a ? this.show() : this.hide() : this.each(function() {
                    xa(this) ? _(this).show() : _(this).hide()
                })
            }
        }), _.Tween = C, C.prototype = {
            constructor: C,
            init: function(a, b, c, d, e, f) {
                this.elem = a, this.prop = c, this.easing = e || "swing", this.options = b, this.start = this.now = this.cur(), this.end = d, this.unit = f || (_.cssNumber[c] ? "" : "px")
            },
            cur: function() {
                var a = C.propHooks[this.prop];
                return a && a.get ? a.get(this) : C.propHooks._default.get(this)
            },
            run: function(a) {
                var b, c = C.propHooks[this.prop];
                return this.options.duration ? this.pos = b = _.easing[this.easing](a, this.options.duration * a, 0, 1, this.options.duration) : this.pos = b = a, this.now = (this.end - this.start) * b + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), c && c.set ? c.set(this) : C.propHooks._default.set(this), this
            }
        }, C.prototype.init.prototype = C.prototype, C.propHooks = {
            _default: {
                get: function(a) {
                    var b;
                    return null == a.elem[a.prop] || a.elem.style && null != a.elem.style[a.prop] ? (b = _.css(a.elem, a.prop, ""), b && "auto" !== b ? b : 0) : a.elem[a.prop]
                },
                set: function(a) {
                    _.fx.step[a.prop] ? _.fx.step[a.prop](a) : a.elem.style && (null != a.elem.style[_.cssProps[a.prop]] || _.cssHooks[a.prop]) ? _.style(a.elem, a.prop, a.now + a.unit) : a.elem[a.prop] = a.now
                }
            }
        }, C.propHooks.scrollTop = C.propHooks.scrollLeft = {
            set: function(a) {
                a.elem.nodeType && a.elem.parentNode && (a.elem[a.prop] = a.now)
            }
        }, _.easing = {
            linear: function(a) {
                return a
            },
            swing: function(a) {
                return .5 - Math.cos(a * Math.PI) / 2
            }
        }, _.fx = C.prototype.init, _.fx.step = {};
        var Ya, Za, $a = /^(?:toggle|show|hide)$/,
            _a = new RegExp("^(?:([+-])=|)(" + va + ")([a-z%]*)$", "i"),
            ab = /queueHooks$/,
            bb = [G],
            cb = {
                "*": [function(a, b) {
                    var c = this.createTween(a, b),
                        d = c.cur(),
                        e = _a.exec(b),
                        f = e && e[3] || (_.cssNumber[a] ? "" : "px"),
                        g = (_.cssNumber[a] || "px" !== f && +d) && _a.exec(_.css(c.elem, a)),
                        h = 1,
                        i = 20;
                    if (g && g[3] !== f) {
                        f = f || g[3], e = e || [], g = +d || 1;
                        do h = h || ".5", g /= h, _.style(c.elem, a, g + f); while (h !== (h = c.cur() / d) && 1 !== h && --i)
                    }
                    return e && (g = c.start = +g || +d || 0, c.unit = f, c.end = e[1] ? g + (e[1] + 1) * e[2] : +e[2]), c
                }]
            };
        _.Animation = _.extend(I, {
                tweener: function(a, b) {
                    _.isFunction(a) ? (b = a, a = ["*"]) : a = a.split(" ");
                    for (var c, d = 0, e = a.length; e > d; d++) c = a[d], cb[c] = cb[c] || [], cb[c].unshift(b)
                },
                prefilter: function(a, b) {
                    b ? bb.unshift(a) : bb.push(a)
                }
            }), _.speed = function(a, b, c) {
                var d = a && "object" == typeof a ? _.extend({}, a) : {
                    complete: c || !c && b || _.isFunction(a) && a,
                    duration: a,
                    easing: c && b || b && !_.isFunction(b) && b
                };
                return d.duration = _.fx.off ? 0 : "number" == typeof d.duration ? d.duration : d.duration in _.fx.speeds ? _.fx.speeds[d.duration] : _.fx.speeds._default, (null == d.queue || d.queue === !0) && (d.queue = "fx"), d.old = d.complete, d.complete = function() {
                    _.isFunction(d.old) && d.old.call(this), d.queue && _.dequeue(this, d.queue)
                }, d
            }, _.fn.extend({
                fadeTo: function(a, b, c, d) {
                    return this.filter(xa).css("opacity", 0).show().end().animate({
                        opacity: b
                    }, a, c, d)
                },
                animate: function(a, b, c, d) {
                    var e = _.isEmptyObject(a),
                        f = _.speed(b, c, d),
                        g = function() {
                            var b = I(this, _.extend({}, a), f);
                            (e || ra.get(this, "finish")) && b.stop(!0)
                        };
                    return g.finish = g, e || f.queue === !1 ? this.each(g) : this.queue(f.queue, g)
                },
                stop: function(a, b, c) {
                    var d = function(a) {
                        var b = a.stop;
                        delete a.stop, b(c)
                    };
                    return "string" != typeof a && (c = b, b = a, a = void 0), b && a !== !1 && this.queue(a || "fx", []), this.each(function() {
                        var b = !0,
                            e = null != a && a + "queueHooks",
                            f = _.timers,
                            g = ra.get(this);
                        if (e) g[e] && g[e].stop && d(g[e]);
                        else
                            for (e in g) g[e] && g[e].stop && ab.test(e) && d(g[e]);
                        for (e = f.length; e--;) f[e].elem !== this || null != a && f[e].queue !== a || (f[e].anim.stop(c), b = !1, f.splice(e, 1));
                        (b || !c) && _.dequeue(this, a)
                    })
                },
                finish: function(a) {
                    return a !== !1 && (a = a || "fx"), this.each(function() {
                        var b, c = ra.get(this),
                            d = c[a + "queue"],
                            e = c[a + "queueHooks"],
                            f = _.timers,
                            g = d ? d.length : 0;
                        for (c.finish = !0, _.queue(this, a, []),
                            e && e.stop && e.stop.call(this, !0), b = f.length; b--;) f[b].elem === this && f[b].queue === a && (f[b].anim.stop(!0), f.splice(b, 1));
                        for (b = 0; g > b; b++) d[b] && d[b].finish && d[b].finish.call(this);
                        delete c.finish
                    })
                }
            }), _.each(["toggle", "show", "hide"], function(a, b) {
                var c = _.fn[b];
                _.fn[b] = function(a, d, e) {
                    return null == a || "boolean" == typeof a ? c.apply(this, arguments) : this.animate(E(b, !0), a, d, e)
                }
            }), _.each({
                slideDown: E("show"),
                slideUp: E("hide"),
                slideToggle: E("toggle"),
                fadeIn: {
                    opacity: "show"
                },
                fadeOut: {
                    opacity: "hide"
                },
                fadeToggle: {
                    opacity: "toggle"
                }
            }, function(a, b) {
                _.fn[a] = function(a, c, d) {
                    return this.animate(b, a, c, d)
                }
            }), _.timers = [], _.fx.tick = function() {
                var a, b = 0,
                    c = _.timers;
                for (Ya = _.now(); b < c.length; b++) a = c[b], a() || c[b] !== a || c.splice(b--, 1);
                c.length || _.fx.stop(), Ya = void 0
            }, _.fx.timer = function(a) {
                _.timers.push(a), a() ? _.fx.start() : _.timers.pop()
            }, _.fx.interval = 13, _.fx.start = function() {
                Za || (Za = setInterval(_.fx.tick, _.fx.interval))
            }, _.fx.stop = function() {
                clearInterval(Za), Za = null
            }, _.fx.speeds = {
                slow: 600,
                fast: 200,
                _default: 400
            }, _.fn.delay = function(a, b) {
                return a = _.fx ? _.fx.speeds[a] || a : a, b = b || "fx", this.queue(b, function(b, c) {
                    var d = setTimeout(b, a);
                    c.stop = function() {
                        clearTimeout(d)
                    }
                })
            },
            function() {
                var a = Z.createElement("input"),
                    b = Z.createElement("select"),
                    c = b.appendChild(Z.createElement("option"));
                a.type = "checkbox", Y.checkOn = "" !== a.value, Y.optSelected = c.selected, b.disabled = !0, Y.optDisabled = !c.disabled, a = Z.createElement("input"), a.value = "t", a.type = "radio", Y.radioValue = "t" === a.value
            }();
        var db, eb, fb = _.expr.attrHandle;
        _.fn.extend({
            attr: function(a, b) {
                return qa(this, _.attr, a, b, arguments.length > 1)
            },
            removeAttr: function(a) {
                return this.each(function() {
                    _.removeAttr(this, a)
                })
            }
        }), _.extend({
            attr: function(a, b, c) {
                var d, e, f = a.nodeType;
                if (a && 3 !== f && 8 !== f && 2 !== f) return typeof a.getAttribute === za ? _.prop(a, b, c) : (1 === f && _.isXMLDoc(a) || (b = b.toLowerCase(), d = _.attrHooks[b] || (_.expr.match.bool.test(b) ? eb : db)), void 0 === c ? d && "get" in d && null !== (e = d.get(a, b)) ? e : (e = _.find.attr(a, b), null == e ? void 0 : e) : null !== c ? d && "set" in d && void 0 !== (e = d.set(a, c, b)) ? e : (a.setAttribute(b, c + ""), c) : void _.removeAttr(a, b))
            },
            removeAttr: function(a, b) {
                var c, d, e = 0,
                    f = b && b.match(na);
                if (f && 1 === a.nodeType)
                    for (; c = f[e++];) d = _.propFix[c] || c, _.expr.match.bool.test(c) && (a[d] = !1), a.removeAttribute(c)
            },
            attrHooks: {
                type: {
                    set: function(a, b) {
                        if (!Y.radioValue && "radio" === b && _.nodeName(a, "input")) {
                            var c = a.value;
                            return a.setAttribute("type", b), c && (a.value = c), b
                        }
                    }
                }
            }
        }), eb = {
            set: function(a, b, c) {
                return b === !1 ? _.removeAttr(a, c) : a.setAttribute(c, c), c
            }
        }, _.each(_.expr.match.bool.source.match(/\w+/g), function(a, b) {
            var c = fb[b] || _.find.attr;
            fb[b] = function(a, b, d) {
                var e, f;
                return d || (f = fb[b], fb[b] = e, e = null != c(a, b, d) ? b.toLowerCase() : null, fb[b] = f), e
            }
        });
        var gb = /^(?:input|select|textarea|button)$/i;
        _.fn.extend({
            prop: function(a, b) {
                return qa(this, _.prop, a, b, arguments.length > 1)
            },
            removeProp: function(a) {
                return this.each(function() {
                    delete this[_.propFix[a] || a]
                })
            }
        }), _.extend({
            propFix: {
                "for": "htmlFor",
                "class": "className"
            },
            prop: function(a, b, c) {
                var d, e, f, g = a.nodeType;
                if (a && 3 !== g && 8 !== g && 2 !== g) return f = 1 !== g || !_.isXMLDoc(a), f && (b = _.propFix[b] || b, e = _.propHooks[b]), void 0 !== c ? e && "set" in e && void 0 !== (d = e.set(a, c, b)) ? d : a[b] = c : e && "get" in e && null !== (d = e.get(a, b)) ? d : a[b]
            },
            propHooks: {
                tabIndex: {
                    get: function(a) {
                        return a.hasAttribute("tabindex") || gb.test(a.nodeName) || a.href ? a.tabIndex : -1
                    }
                }
            }
        }), Y.optSelected || (_.propHooks.selected = {
            get: function(a) {
                var b = a.parentNode;
                return b && b.parentNode && b.parentNode.selectedIndex, null
            }
        }), _.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function() {
            _.propFix[this.toLowerCase()] = this
        });
        var hb = /[\t\r\n\f]/g;
        _.fn.extend({
            addClass: function(a) {
                var b, c, d, e, f, g, h = "string" == typeof a && a,
                    i = 0,
                    j = this.length;
                if (_.isFunction(a)) return this.each(function(b) {
                    _(this).addClass(a.call(this, b, this.className))
                });
                if (h)
                    for (b = (a || "").match(na) || []; j > i; i++)
                        if (c = this[i], d = 1 === c.nodeType && (c.className ? (" " + c.className + " ").replace(hb, " ") : " ")) {
                            for (f = 0; e = b[f++];) d.indexOf(" " + e + " ") < 0 && (d += e + " ");
                            g = _.trim(d), c.className !== g && (c.className = g)
                        }
                return this
            },
            removeClass: function(a) {
                var b, c, d, e, f, g, h = 0 === arguments.length || "string" == typeof a && a,
                    i = 0,
                    j = this.length;
                if (_.isFunction(a)) return this.each(function(b) {
                    _(this).removeClass(a.call(this, b, this.className))
                });
                if (h)
                    for (b = (a || "").match(na) || []; j > i; i++)
                        if (c = this[i], d = 1 === c.nodeType && (c.className ? (" " + c.className + " ").replace(hb, " ") : "")) {
                            for (f = 0; e = b[f++];)
                                for (; d.indexOf(" " + e + " ") >= 0;) d = d.replace(" " + e + " ", " ");
                            g = a ? _.trim(d) : "", c.className !== g && (c.className = g)
                        }
                return this
            },
            toggleClass: function(a, b) {
                var c = typeof a;
                return "boolean" == typeof b && "string" === c ? b ? this.addClass(a) : this.removeClass(a) : _.isFunction(a) ? this.each(function(c) {
                    _(this).toggleClass(a.call(this, c, this.className, b), b)
                }) : this.each(function() {
                    if ("string" === c)
                        for (var b, d = 0, e = _(this), f = a.match(na) || []; b = f[d++];) e.hasClass(b) ? e.removeClass(b) : e.addClass(b);
                    else(c === za || "boolean" === c) && (this.className && ra.set(this, "__className__", this.className), this.className = this.className || a === !1 ? "" : ra.get(this, "__className__") || "")
                })
            },
            hasClass: function(a) {
                for (var b = " " + a + " ", c = 0, d = this.length; d > c; c++)
                    if (1 === this[c].nodeType && (" " + this[c].className + " ").replace(hb, " ").indexOf(b) >= 0) return !0;
                return !1
            }
        });
        var ib = /\r/g;
        _.fn.extend({
            val: function(a) {
                var b, c, d, e = this[0]; {
                    if (arguments.length) return d = _.isFunction(a), this.each(function(c) {
                        var e;
                        1 === this.nodeType && (e = d ? a.call(this, c, _(this).val()) : a, null == e ? e = "" : "number" == typeof e ? e += "" : _.isArray(e) && (e = _.map(e, function(a) {
                            return null == a ? "" : a + ""
                        })), b = _.valHooks[this.type] || _.valHooks[this.nodeName.toLowerCase()], b && "set" in b && void 0 !== b.set(this, e, "value") || (this.value = e))
                    });
                    if (e) return b = _.valHooks[e.type] || _.valHooks[e.nodeName.toLowerCase()], b && "get" in b && void 0 !== (c = b.get(e, "value")) ? c : (c = e.value, "string" == typeof c ? c.replace(ib, "") : null == c ? "" : c)
                }
            }
        }), _.extend({
            valHooks: {
                option: {
                    get: function(a) {
                        var b = _.find.attr(a, "value");
                        return null != b ? b : _.trim(_.text(a))
                    }
                },
                select: {
                    get: function(a) {
                        for (var b, c, d = a.options, e = a.selectedIndex, f = "select-one" === a.type || 0 > e, g = f ? null : [], h = f ? e + 1 : d.length, i = 0 > e ? h : f ? e : 0; h > i; i++)
                            if (c = d[i], (c.selected || i === e) && (Y.optDisabled ? !c.disabled : null === c.getAttribute("disabled")) && (!c.parentNode.disabled || !_.nodeName(c.parentNode, "optgroup"))) {
                                if (b = _(c).val(), f) return b;
                                g.push(b)
                            }
                        return g
                    },
                    set: function(a, b) {
                        for (var c, d, e = a.options, f = _.makeArray(b), g = e.length; g--;) d = e[g], (d.selected = _.inArray(d.value, f) >= 0) && (c = !0);
                        return c || (a.selectedIndex = -1), f
                    }
                }
            }
        }), _.each(["radio", "checkbox"], function() {
            _.valHooks[this] = {
                set: function(a, b) {
                    return _.isArray(b) ? a.checked = _.inArray(_(a).val(), b) >= 0 : void 0
                }
            }, Y.checkOn || (_.valHooks[this].get = function(a) {
                return null === a.getAttribute("value") ? "on" : a.value
            })
        }), _.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, b) {
            _.fn[b] = function(a, c) {
                return arguments.length > 0 ? this.on(b, null, a, c) : this.trigger(b)
            }
        }), _.fn.extend({
            hover: function(a, b) {
                return this.mouseenter(a).mouseleave(b || a)
            },
            bind: function(a, b, c) {
                return this.on(a, null, b, c)
            },
            unbind: function(a, b) {
                return this.off(a, null, b)
            },
            delegate: function(a, b, c, d) {
                return this.on(b, a, c, d)
            },
            undelegate: function(a, b, c) {
                return 1 === arguments.length ? this.off(a, "**") : this.off(b, a || "**", c)
            }
        });
        var jb = _.now(),
            kb = /\?/;
        _.parseJSON = function(a) {
            return JSON.parse(a + "")
        }, _.parseXML = function(a) {
            var b, c;
            if (!a || "string" != typeof a) return null;
            try {
                c = new DOMParser, b = c.parseFromString(a, "text/xml")
            } catch (d) {
                b = void 0
            }
            return (!b || b.getElementsByTagName("parsererror").length) && _.error("Invalid XML: " + a), b
        };
        var lb = /#.*$/,
            mb = /([?&])_=[^&]*/,
            nb = /^(.*?):[ \t]*([^\r\n]*)$/gm,
            ob = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
            pb = /^(?:GET|HEAD)$/,
            qb = /^\/\//,
            rb = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
            sb = {},
            tb = {},
            ub = "*/".concat("*"),
            vb = a.location.href,
            wb = rb.exec(vb.toLowerCase()) || [];
        _.extend({
            active: 0,
            lastModified: {},
            etag: {},
            ajaxSettings: {
                url: vb,
                type: "GET",
                isLocal: ob.test(wb[1]),
                global: !0,
                processData: !0,
                async: !0,
                contentType: "application/x-www-form-urlencoded; charset=UTF-8",
                accepts: {
                    "*": ub,
                    text: "text/plain",
                    html: "text/html",
                    xml: "application/xml, text/xml",
                    json: "application/json, text/javascript"
                },
                contents: {
                    xml: /xml/,
                    html: /html/,
                    json: /json/
                },
                responseFields: {
                    xml: "responseXML",
                    text: "responseText",
                    json: "responseJSON"
                },
                converters: {
                    "* text": String,
                    "text html": !0,
                    "text json": _.parseJSON,
                    "text xml": _.parseXML
                },
                flatOptions: {
                    url: !0,
                    context: !0
                }
            },
            ajaxSetup: function(a, b) {
                return b ? L(L(a, _.ajaxSettings), b) : L(_.ajaxSettings, a)
            },
            ajaxPrefilter: J(sb),
            ajaxTransport: J(tb),
            ajax: function(a, b) {
                function c(a, b, c, g) {
                    var i, k, r, s, u, w = b;
                    2 !== t && (t = 2, h && clearTimeout(h), d = void 0, f = g || "", v.readyState = a > 0 ? 4 : 0, i = a >= 200 && 300 > a || 304 === a, c && (s = M(l, v, c)), s = N(l, s, v, i), i ? (l.ifModified && (u = v.getResponseHeader("Last-Modified"), u && (_.lastModified[e] = u), u = v.getResponseHeader("etag"), u && (_.etag[e] = u)), 204 === a || "HEAD" === l.type ? w = "nocontent" : 304 === a ? w = "notmodified" : (w = s.state, k = s.data, r = s.error, i = !r)) : (r = w, (a || !w) && (w = "error", 0 > a && (a = 0))), v.status = a, v.statusText = (b || w) + "", i ? o.resolveWith(m, [k, w, v]) : o.rejectWith(m, [v, w, r]), v.statusCode(q), q = void 0, j && n.trigger(i ? "ajaxSuccess" : "ajaxError", [v, l, i ? k : r]), p.fireWith(m, [v, w]), j && (n.trigger("ajaxComplete", [v, l]), --_.active || _.event.trigger("ajaxStop")))
                }
                "object" == typeof a && (b = a, a = void 0), b = b || {};
                var d, e, f, g, h, i, j, k, l = _.ajaxSetup({}, b),
                    m = l.context || l,
                    n = l.context && (m.nodeType || m.jquery) ? _(m) : _.event,
                    o = _.Deferred(),
                    p = _.Callbacks("once memory"),
                    q = l.statusCode || {},
                    r = {},
                    s = {},
                    t = 0,
                    u = "canceled",
                    v = {
                        readyState: 0,
                        getResponseHeader: function(a) {
                            var b;
                            if (2 === t) {
                                if (!g)
                                    for (g = {}; b = nb.exec(f);) g[b[1].toLowerCase()] = b[2];
                                b = g[a.toLowerCase()]
                            }
                            return null == b ? null : b
                        },
                        getAllResponseHeaders: function() {
                            return 2 === t ? f : null
                        },
                        setRequestHeader: function(a, b) {
                            var c = a.toLowerCase();
                            return t || (a = s[c] = s[c] || a, r[a] = b), this
                        },
                        overrideMimeType: function(a) {
                            return t || (l.mimeType = a), this
                        },
                        statusCode: function(a) {
                            var b;
                            if (a)
                                if (2 > t)
                                    for (b in a) q[b] = [q[b], a[b]];
                                else v.always(a[v.status]);
                            return this
                        },
                        abort: function(a) {
                            var b = a || u;
                            return d && d.abort(b), c(0, b), this
                        }
                    };
                if (o.promise(v).complete = p.add, v.success = v.done, v.error = v.fail, l.url = ((a || l.url || vb) + "").replace(lb, "").replace(qb, wb[1] + "//"), l.type = b.method || b.type || l.method || l.type, l.dataTypes = _.trim(l.dataType || "*").toLowerCase().match(na) || [""], null == l.crossDomain && (i = rb.exec(l.url.toLowerCase()), l.crossDomain = !(!i || i[1] === wb[1] && i[2] === wb[2] && (i[3] || ("http:" === i[1] ? "80" : "443")) === (wb[3] || ("http:" === wb[1] ? "80" : "443")))), l.data && l.processData && "string" != typeof l.data && (l.data = _.param(l.data, l.traditional)), K(sb, l, b, v), 2 === t) return v;
                j = _.event && l.global, j && 0 === _.active++ && _.event.trigger("ajaxStart"), l.type = l.type.toUpperCase(), l.hasContent = !pb.test(l.type), e = l.url, l.hasContent || (l.data && (e = l.url += (kb.test(e) ? "&" : "?") + l.data, delete l.data), l.cache === !1 && (l.url = mb.test(e) ? e.replace(mb, "$1_=" + jb++) : e + (kb.test(e) ? "&" : "?") + "_=" + jb++)), l.ifModified && (_.lastModified[e] && v.setRequestHeader("If-Modified-Since", _.lastModified[e]), _.etag[e] && v.setRequestHeader("If-None-Match", _.etag[e])), (l.data && l.hasContent && l.contentType !== !1 || b.contentType) && v.setRequestHeader("Content-Type", l.contentType), v.setRequestHeader("Accept", l.dataTypes[0] && l.accepts[l.dataTypes[0]] ? l.accepts[l.dataTypes[0]] + ("*" !== l.dataTypes[0] ? ", " + ub + "; q=0.01" : "") : l.accepts["*"]);
                for (k in l.headers) v.setRequestHeader(k, l.headers[k]);
                if (l.beforeSend && (l.beforeSend.call(m, v, l) === !1 || 2 === t)) return v.abort();
                u = "abort";
                for (k in {
                        success: 1,
                        error: 1,
                        complete: 1
                    }) v[k](l[k]);
                if (d = K(tb, l, b, v)) {
                    v.readyState = 1, j && n.trigger("ajaxSend", [v, l]), l.async && l.timeout > 0 && (h = setTimeout(function() {
                        v.abort("timeout")
                    }, l.timeout));
                    try {
                        t = 1, d.send(r, c)
                    } catch (w) {
                        if (!(2 > t)) throw w;
                        c(-1, w)
                    }
                } else c(-1, "No Transport");
                return v
            },
            getJSON: function(a, b, c) {
                return _.get(a, b, c, "json")
            },
            getScript: function(a, b) {
                return _.get(a, void 0, b, "script")
            }
        }), _.each(["get", "post"], function(a, b) {
            _[b] = function(a, c, d, e) {
                return _.isFunction(c) && (e = e || d, d = c, c = void 0), _.ajax({
                    url: a,
                    type: b,
                    dataType: e,
                    data: c,
                    success: d
                })
            }
        }), _._evalUrl = function(a) {
            return _.ajax({
                url: a,
                type: "GET",
                dataType: "script",
                async: !1,
                global: !1,
                "throws": !0
            })
        }, _.fn.extend({
            wrapAll: function(a) {
                var b;
                return _.isFunction(a) ? this.each(function(b) {
                    _(this).wrapAll(a.call(this, b))
                }) : (this[0] && (b = _(a, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && b.insertBefore(this[0]), b.map(function() {
                    for (var a = this; a.firstElementChild;) a = a.firstElementChild;
                    return a
                }).append(this)), this)
            },
            wrapInner: function(a) {
                return _.isFunction(a) ? this.each(function(b) {
                    _(this).wrapInner(a.call(this, b))
                }) : this.each(function() {
                    var b = _(this),
                        c = b.contents();
                    c.length ? c.wrapAll(a) : b.append(a)
                })
            },
            wrap: function(a) {
                var b = _.isFunction(a);
                return this.each(function(c) {
                    _(this).wrapAll(b ? a.call(this, c) : a)
                })
            },
            unwrap: function() {
                return this.parent().each(function() {
                    _.nodeName(this, "body") || _(this).replaceWith(this.childNodes)
                }).end()
            }
        }), _.expr.filters.hidden = function(a) {
            return a.offsetWidth <= 0 && a.offsetHeight <= 0
        }, _.expr.filters.visible = function(a) {
            return !_.expr.filters.hidden(a)
        };
        var xb = /%20/g,
            yb = /\[\]$/,
            zb = /\r?\n/g,
            Ab = /^(?:submit|button|image|reset|file)$/i,
            Bb = /^(?:input|select|textarea|keygen)/i;
        _.param = function(a, b) {
            var c, d = [],
                e = function(a, b) {
                    b = _.isFunction(b) ? b() : null == b ? "" : b, d[d.length] = encodeURIComponent(a) + "=" + encodeURIComponent(b)
                };
            if (void 0 === b && (b = _.ajaxSettings && _.ajaxSettings.traditional), _.isArray(a) || a.jquery && !_.isPlainObject(a)) _.each(a, function() {
                e(this.name, this.value)
            });
            else
                for (c in a) O(c, a[c], b, e);
            return d.join("&").replace(xb, "+")
        }, _.fn.extend({
            serialize: function() {
                return _.param(this.serializeArray())
            },
            serializeArray: function() {
                return this.map(function() {
                    var a = _.prop(this, "elements");
                    return a ? _.makeArray(a) : this
                }).filter(function() {
                    var a = this.type;
                    return this.name && !_(this).is(":disabled") && Bb.test(this.nodeName) && !Ab.test(a) && (this.checked || !ya.test(a))
                }).map(function(a, b) {
                    var c = _(this).val();
                    return null == c ? null : _.isArray(c) ? _.map(c, function(a) {
                        return {
                            name: b.name,
                            value: a.replace(zb, "\r\n")
                        }
                    }) : {
                        name: b.name,
                        value: c.replace(zb, "\r\n")
                    }
                }).get()
            }
        }), _.ajaxSettings.xhr = function() {
            try {
                return new XMLHttpRequest
            } catch (a) {}
        };
        var Cb = 0,
            Db = {},
            Eb = {
                0: 200,
                1223: 204
            },
            Fb = _.ajaxSettings.xhr();
        a.attachEvent && a.attachEvent("onunload", function() {
            for (var a in Db) Db[a]()
        }), Y.cors = !!Fb && "withCredentials" in Fb, Y.ajax = Fb = !!Fb, _.ajaxTransport(function(a) {
            var b;
            return Y.cors || Fb && !a.crossDomain ? {
                send: function(c, d) {
                    var e, f = a.xhr(),
                        g = ++Cb;
                    if (f.open(a.type, a.url, a.async, a.username, a.password), a.xhrFields)
                        for (e in a.xhrFields) f[e] = a.xhrFields[e];
                    a.mimeType && f.overrideMimeType && f.overrideMimeType(a.mimeType), a.crossDomain || c["X-Requested-With"] || (c["X-Requested-With"] = "XMLHttpRequest");
                    for (e in c) f.setRequestHeader(e, c[e]);
                    b = function(a) {
                        return function() {
                            b && (delete Db[g], b = f.onload = f.onerror = null, "abort" === a ? f.abort() : "error" === a ? d(f.status, f.statusText) : d(Eb[f.status] || f.status, f.statusText, "string" == typeof f.responseText ? {
                                text: f.responseText
                            } : void 0, f.getAllResponseHeaders()))
                        }
                    }, f.onload = b(), f.onerror = b("error"), b = Db[g] = b("abort");
                    try {
                        f.send(a.hasContent && a.data || null)
                    } catch (h) {
                        if (b) throw h
                    }
                },
                abort: function() {
                    b && b()
                }
            } : void 0
        }), _.ajaxSetup({
            accepts: {
                script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
            },
            contents: {
                script: /(?:java|ecma)script/
            },
            converters: {
                "text script": function(a) {
                    return _.globalEval(a), a
                }
            }
        }), _.ajaxPrefilter("script", function(a) {
            void 0 === a.cache && (a.cache = !1), a.crossDomain && (a.type = "GET")
        }), _.ajaxTransport("script", function(a) {
            if (a.crossDomain) {
                var b, c;
                return {
                    send: function(d, e) {
                        b = _("<script>").prop({
                            async: !0,
                            charset: a.scriptCharset,
                            src: a.url
                        }).on("load error", c = function(a) {
                            b.remove(), c = null, a && e("error" === a.type ? 404 : 200, a.type)
                        }), Z.head.appendChild(b[0])
                    },
                    abort: function() {
                        c && c()
                    }
                }
            }
        });
        var Gb = [],
            Hb = /(=)\?(?=&|$)|\?\?/;
        _.ajaxSetup({
            jsonp: "callback",
            jsonpCallback: function() {
                var a = Gb.pop() || _.expando + "_" + jb++;
                return this[a] = !0, a
            }
        }), _.ajaxPrefilter("json jsonp", function(b, c, d) {
            var e, f, g, h = b.jsonp !== !1 && (Hb.test(b.url) ? "url" : "string" == typeof b.data && !(b.contentType || "").indexOf("application/x-www-form-urlencoded") && Hb.test(b.data) && "data");
            return h || "jsonp" === b.dataTypes[0] ? (e = b.jsonpCallback = _.isFunction(b.jsonpCallback) ? b.jsonpCallback() : b.jsonpCallback, h ? b[h] = b[h].replace(Hb, "$1" + e) : b.jsonp !== !1 && (b.url += (kb.test(b.url) ? "&" : "?") + b.jsonp + "=" + e), b.converters["script json"] = function() {
                return g || _.error(e + " was not called"), g[0]
            }, b.dataTypes[0] = "json", f = a[e], a[e] = function() {
                g = arguments
            }, d.always(function() {
                a[e] = f, b[e] && (b.jsonpCallback = c.jsonpCallback, Gb.push(e)), g && _.isFunction(f) && f(g[0]), g = f = void 0
            }), "script") : void 0
        }), _.parseHTML = function(a, b, c) {
            if (!a || "string" != typeof a) return null;
            "boolean" == typeof b && (c = b, b = !1), b = b || Z;
            var d = ga.exec(a),
                e = !c && [];
            return d ? [b.createElement(d[1])] : (d = _.buildFragment([a], b, e), e && e.length && _(e).remove(), _.merge([], d.childNodes))
        };
        var Ib = _.fn.load;
        _.fn.load = function(a, b, c) {
            if ("string" != typeof a && Ib) return Ib.apply(this, arguments);
            var d, e, f, g = this,
                h = a.indexOf(" ");
            return h >= 0 && (d = _.trim(a.slice(h)), a = a.slice(0, h)), _.isFunction(b) ? (c = b, b = void 0) : b && "object" == typeof b && (e = "POST"), g.length > 0 && _.ajax({
                url: a,
                type: e,
                dataType: "html",
                data: b
            }).done(function(a) {
                f = arguments, g.html(d ? _("<div>").append(_.parseHTML(a)).find(d) : a)
            }).complete(c && function(a, b) {
                g.each(c, f || [a.responseText, b, a])
            }), this
        }, _.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(a, b) {
            _.fn[b] = function(a) {
                return this.on(b, a)
            }
        }), _.expr.filters.animated = function(a) {
            return _.grep(_.timers, function(b) {
                return a === b.elem
            }).length
        };
        var Jb = a.document.documentElement;
        _.offset = {
            setOffset: function(a, b, c) {
                var d, e, f, g, h, i, j, k = _.css(a, "position"),
                    l = _(a),
                    m = {};
                "static" === k && (a.style.position = "relative"), h = l.offset(), f = _.css(a, "top"), i = _.css(a, "left"), j = ("absolute" === k || "fixed" === k) && (f + i).indexOf("auto") > -1, j ? (d = l.position(), g = d.top, e = d.left) : (g = parseFloat(f) || 0, e = parseFloat(i) || 0), _.isFunction(b) && (b = b.call(a, c, h)), null != b.top && (m.top = b.top - h.top + g), null != b.left && (m.left = b.left - h.left + e), "using" in b ? b.using.call(a, m) : l.css(m)
            }
        }, _.fn.extend({
            offset: function(a) {
                if (arguments.length) return void 0 === a ? this : this.each(function(b) {
                    _.offset.setOffset(this, a, b)
                });
                var b, c, d = this[0],
                    e = {
                        top: 0,
                        left: 0
                    },
                    f = d && d.ownerDocument;
                if (f) return b = f.documentElement, _.contains(b, d) ? (typeof d.getBoundingClientRect !== za && (e = d.getBoundingClientRect()), c = P(f), {
                    top: e.top + c.pageYOffset - b.clientTop,
                    left: e.left + c.pageXOffset - b.clientLeft
                }) : e
            },
            position: function() {
                if (this[0]) {
                    var a, b, c = this[0],
                        d = {
                            top: 0,
                            left: 0
                        };
                    return "fixed" === _.css(c, "position") ? b = c.getBoundingClientRect() : (a = this.offsetParent(), b = this.offset(), _.nodeName(a[0], "html") || (d = a.offset()), d.top += _.css(a[0], "borderTopWidth", !0), d.left += _.css(a[0], "borderLeftWidth", !0)), {
                        top: b.top - d.top - _.css(c, "marginTop", !0),
                        left: b.left - d.left - _.css(c, "marginLeft", !0)
                    }
                }
            },
            offsetParent: function() {
                return this.map(function() {
                    for (var a = this.offsetParent || Jb; a && !_.nodeName(a, "html") && "static" === _.css(a, "position");) a = a.offsetParent;
                    return a || Jb
                })
            }
        }), _.each({
            scrollLeft: "pageXOffset",
            scrollTop: "pageYOffset"
        }, function(b, c) {
            var d = "pageYOffset" === c;
            _.fn[b] = function(e) {
                return qa(this, function(b, e, f) {
                    var g = P(b);
                    return void 0 === f ? g ? g[c] : b[e] : void(g ? g.scrollTo(d ? a.pageXOffset : f, d ? f : a.pageYOffset) : b[e] = f)
                }, b, e, arguments.length, null)
            }
        }), _.each(["top", "left"], function(a, b) {
            _.cssHooks[b] = w(Y.pixelPosition, function(a, c) {
                return c ? (c = v(a, b), Qa.test(c) ? _(a).position()[b] + "px" : c) : void 0
            })
        }), _.each({
            Height: "height",
            Width: "width"
        }, function(a, b) {
            _.each({
                padding: "inner" + a,
                content: b,
                "": "outer" + a
            }, function(c, d) {
                _.fn[d] = function(d, e) {
                    var f = arguments.length && (c || "boolean" != typeof d),
                        g = c || (d === !0 || e === !0 ? "margin" : "border");
                    return qa(this, function(b, c, d) {
                        var e;
                        return _.isWindow(b) ? b.document.documentElement["client" + a] : 9 === b.nodeType ? (e = b.documentElement, Math.max(b.body["scroll" + a], e["scroll" + a], b.body["offset" + a], e["offset" + a], e["client" + a])) : void 0 === d ? _.css(b, c, g) : _.style(b, c, d, g)
                    }, b, f ? d : void 0, f, null)
                }
            })
        }), _.fn.size = function() {
            return this.length
        }, _.fn.andSelf = _.fn.addBack, "function" == typeof define && define.amd && define("jquery", [], function() {
            return _
        });
        var Kb = a.jQuery,
            Lb = a.$;
        return _.noConflict = function(b) {
            return a.$ === _ && (a.$ = Lb), b && a.jQuery === _ && (a.jQuery = Kb), _
        }, typeof b === za && (a.jQuery = a.$ = _), _
    }), function() {
        function a(a) {
            function b(b, c, d, e, f, g) {
                for (; f >= 0 && g > f; f += a) {
                    var h = e ? e[f] : f;
                    d = c(d, b[h], h, b)
                }
                return d
            }
            return function(c, d, e, f) {
                d = t(d, f, 4);
                var g = !A(c) && s.keys(c),
                    h = (g || c).length,
                    i = a > 0 ? 0 : h - 1;
                return arguments.length < 3 && (e = c[g ? g[i] : i], i += a), b(c, d, e, g, i, h)
            }
        }

        function b(a) {
            return function(b, c, d) {
                c = u(c, d);
                for (var e = z(b), f = a > 0 ? 0 : e - 1; f >= 0 && e > f; f += a)
                    if (c(b[f], f, b)) return f;
                return -1
            }
        }

        function c(a, b, c) {
            return function(d, e, f) {
                var g = 0,
                    h = z(d);
                if ("number" == typeof f) a > 0 ? g = f >= 0 ? f : Math.max(f + h, g) : h = f >= 0 ? Math.min(f + 1, h) : f + h + 1;
                else if (c && f && h) return f = c(d, e), d[f] === e ? f : -1;
                if (e !== e) return f = b(k.call(d, g, h), s.isNaN), f >= 0 ? f + g : -1;
                for (f = a > 0 ? g : h - 1; f >= 0 && h > f; f += a)
                    if (d[f] === e) return f;
                return -1
            }
        }

        function d(a, b) {
            var c = F.length,
                d = a.constructor,
                e = s.isFunction(d) && d.prototype || h,
                f = "constructor";
            for (s.has(a, f) && !s.contains(b, f) && b.push(f); c--;) f = F[c], f in a && a[f] !== e[f] && !s.contains(b, f) && b.push(f)
        }
        var e = this,
            f = e._,
            g = Array.prototype,
            h = Object.prototype,
            i = Function.prototype,
            j = g.push,
            k = g.slice,
            l = h.toString,
            m = h.hasOwnProperty,
            n = Array.isArray,
            o = Object.keys,
            p = i.bind,
            q = Object.create,
            r = function() {},
            s = function(a) {
                return a instanceof s ? a : this instanceof s ? void(this._wrapped = a) : new s(a)
            };
        "undefined" != typeof exports ? ("undefined" != typeof module && module.exports && (exports = module.exports = s), exports._ = s) : e._ = s, s.VERSION = "1.8.3";
        var t = function(a, b, c) {
                if (void 0 === b) return a;
                switch (null == c ? 3 : c) {
                    case 1:
                        return function(c) {
                            return a.call(b, c)
                        };
                    case 2:
                        return function(c, d) {
                            return a.call(b, c, d)
                        };
                    case 3:
                        return function(c, d, e) {
                            return a.call(b, c, d, e)
                        };
                    case 4:
                        return function(c, d, e, f) {
                            return a.call(b, c, d, e, f)
                        }
                }
                return function() {
                    return a.apply(b, arguments)
                }
            },
            u = function(a, b, c) {
                return null == a ? s.identity : s.isFunction(a) ? t(a, b, c) : s.isObject(a) ? s.matcher(a) : s.property(a)
            };
        s.iteratee = function(a, b) {
            return u(a, b, 1 / 0)
        };
        var v = function(a, b) {
                return function(c) {
                    var d = arguments.length;
                    if (2 > d || null == c) return c;
                    for (var e = 1; d > e; e++)
                        for (var f = arguments[e], g = a(f), h = g.length, i = 0; h > i; i++) {
                            var j = g[i];
                            b && void 0 !== c[j] || (c[j] = f[j])
                        }
                    return c
                }
            },
            w = function(a) {
                if (!s.isObject(a)) return {};
                if (q) return q(a);
                r.prototype = a;
                var b = new r;
                return r.prototype = null, b
            },
            x = function(a) {
                return function(b) {
                    return null == b ? void 0 : b[a]
                }
            },
            y = Math.pow(2, 53) - 1,
            z = x("length"),
            A = function(a) {
                var b = z(a);
                return "number" == typeof b && b >= 0 && y >= b
            };
        s.each = s.forEach = function(a, b, c) {
            b = t(b, c);
            var d, e;
            if (A(a))
                for (d = 0, e = a.length; e > d; d++) b(a[d], d, a);
            else {
                var f = s.keys(a);
                for (d = 0, e = f.length; e > d; d++) b(a[f[d]], f[d], a)
            }
            return a
        }, s.map = s.collect = function(a, b, c) {
            b = u(b, c);
            for (var d = !A(a) && s.keys(a), e = (d || a).length, f = Array(e), g = 0; e > g; g++) {
                var h = d ? d[g] : g;
                f[g] = b(a[h], h, a)
            }
            return f
        }, s.reduce = s.foldl = s.inject = a(1), s.reduceRight = s.foldr = a(-1), s.find = s.detect = function(a, b, c) {
            var d;
            return d = A(a) ? s.findIndex(a, b, c) : s.findKey(a, b, c), void 0 !== d && -1 !== d ? a[d] : void 0
        }, s.filter = s.select = function(a, b, c) {
            var d = [];
            return b = u(b, c), s.each(a, function(a, c, e) {
                b(a, c, e) && d.push(a)
            }), d
        }, s.reject = function(a, b, c) {
            return s.filter(a, s.negate(u(b)), c)
        }, s.every = s.all = function(a, b, c) {
            b = u(b, c);
            for (var d = !A(a) && s.keys(a), e = (d || a).length, f = 0; e > f; f++) {
                var g = d ? d[f] : f;
                if (!b(a[g], g, a)) return !1
            }
            return !0
        }, s.some = s.any = function(a, b, c) {
            b = u(b, c);
            for (var d = !A(a) && s.keys(a), e = (d || a).length, f = 0; e > f; f++) {
                var g = d ? d[f] : f;
                if (b(a[g], g, a)) return !0
            }
            return !1
        }, s.contains = s.includes = s.include = function(a, b, c, d) {
            return A(a) || (a = s.values(a)), ("number" != typeof c || d) && (c = 0), s.indexOf(a, b, c) >= 0
        }, s.invoke = function(a, b) {
            var c = k.call(arguments, 2),
                d = s.isFunction(b);
            return s.map(a, function(a) {
                var e = d ? b : a[b];
                return null == e ? e : e.apply(a, c)
            })
        }, s.pluck = function(a, b) {
            return s.map(a, s.property(b))
        }, s.where = function(a, b) {
            return s.filter(a, s.matcher(b))
        }, s.findWhere = function(a, b) {
            return s.find(a, s.matcher(b))
        }, s.max = function(a, b, c) {
            var d, e, f = -(1 / 0),
                g = -(1 / 0);
            if (null == b && null != a) {
                a = A(a) ? a : s.values(a);
                for (var h = 0, i = a.length; i > h; h++) d = a[h], d > f && (f = d)
            } else b = u(b, c), s.each(a, function(a, c, d) {
                e = b(a, c, d), (e > g || e === -(1 / 0) && f === -(1 / 0)) && (f = a, g = e)
            });
            return f
        }, s.min = function(a, b, c) {
            var d, e, f = 1 / 0,
                g = 1 / 0;
            if (null == b && null != a) {
                a = A(a) ? a : s.values(a);
                for (var h = 0, i = a.length; i > h; h++) d = a[h], f > d && (f = d)
            } else b = u(b, c), s.each(a, function(a, c, d) {
                e = b(a, c, d), (g > e || e === 1 / 0 && f === 1 / 0) && (f = a, g = e)
            });
            return f
        }, s.shuffle = function(a) {
            for (var b, c = A(a) ? a : s.values(a), d = c.length, e = Array(d), f = 0; d > f; f++) b = s.random(0, f), b !== f && (e[f] = e[b]), e[b] = c[f];
            return e
        }, s.sample = function(a, b, c) {
            return null == b || c ? (A(a) || (a = s.values(a)), a[s.random(a.length - 1)]) : s.shuffle(a).slice(0, Math.max(0, b))
        }, s.sortBy = function(a, b, c) {
            return b = u(b, c), s.pluck(s.map(a, function(a, c, d) {
                return {
                    value: a,
                    index: c,
                    criteria: b(a, c, d)
                }
            }).sort(function(a, b) {
                var c = a.criteria,
                    d = b.criteria;
                if (c !== d) {
                    if (c > d || void 0 === c) return 1;
                    if (d > c || void 0 === d) return -1
                }
                return a.index - b.index
            }), "value")
        };
        var B = function(a) {
            return function(b, c, d) {
                var e = {};
                return c = u(c, d), s.each(b, function(d, f) {
                    var g = c(d, f, b);
                    a(e, d, g)
                }), e
            }
        };
        s.groupBy = B(function(a, b, c) {
            s.has(a, c) ? a[c].push(b) : a[c] = [b]
        }), s.indexBy = B(function(a, b, c) {
            a[c] = b
        }), s.countBy = B(function(a, b, c) {
            s.has(a, c) ? a[c]++ : a[c] = 1
        }), s.toArray = function(a) {
            return a ? s.isArray(a) ? k.call(a) : A(a) ? s.map(a, s.identity) : s.values(a) : []
        }, s.size = function(a) {
            return null == a ? 0 : A(a) ? a.length : s.keys(a).length
        }, s.partition = function(a, b, c) {
            b = u(b, c);
            var d = [],
                e = [];
            return s.each(a, function(a, c, f) {
                (b(a, c, f) ? d : e).push(a)
            }), [d, e]
        }, s.first = s.head = s.take = function(a, b, c) {
            return null == a ? void 0 : null == b || c ? a[0] : s.initial(a, a.length - b)
        }, s.initial = function(a, b, c) {
            return k.call(a, 0, Math.max(0, a.length - (null == b || c ? 1 : b)))
        }, s.last = function(a, b, c) {
            return null == a ? void 0 : null == b || c ? a[a.length - 1] : s.rest(a, Math.max(0, a.length - b))
        }, s.rest = s.tail = s.drop = function(a, b, c) {
            return k.call(a, null == b || c ? 1 : b)
        }, s.compact = function(a) {
            return s.filter(a, s.identity)
        };
        var C = function(a, b, c, d) {
            for (var e = [], f = 0, g = d || 0, h = z(a); h > g; g++) {
                var i = a[g];
                if (A(i) && (s.isArray(i) || s.isArguments(i))) {
                    b || (i = C(i, b, c));
                    var j = 0,
                        k = i.length;
                    for (e.length += k; k > j;) e[f++] = i[j++]
                } else c || (e[f++] = i)
            }
            return e
        };
        s.flatten = function(a, b) {
            return C(a, b, !1)
        }, s.without = function(a) {
            return s.difference(a, k.call(arguments, 1))
        }, s.uniq = s.unique = function(a, b, c, d) {
            s.isBoolean(b) || (d = c, c = b, b = !1), null != c && (c = u(c, d));
            for (var e = [], f = [], g = 0, h = z(a); h > g; g++) {
                var i = a[g],
                    j = c ? c(i, g, a) : i;
                b ? (g && f === j || e.push(i), f = j) : c ? s.contains(f, j) || (f.push(j), e.push(i)) : s.contains(e, i) || e.push(i)
            }
            return e
        }, s.union = function() {
            return s.uniq(C(arguments, !0, !0))
        }, s.intersection = function(a) {
            for (var b = [], c = arguments.length, d = 0, e = z(a); e > d; d++) {
                var f = a[d];
                if (!s.contains(b, f)) {
                    for (var g = 1; c > g && s.contains(arguments[g], f); g++);
                    g === c && b.push(f)
                }
            }
            return b
        }, s.difference = function(a) {
            var b = C(arguments, !0, !0, 1);
            return s.filter(a, function(a) {
                return !s.contains(b, a)
            })
        }, s.zip = function() {
            return s.unzip(arguments)
        }, s.unzip = function(a) {
            for (var b = a && s.max(a, z).length || 0, c = Array(b), d = 0; b > d; d++) c[d] = s.pluck(a, d);
            return c
        }, s.object = function(a, b) {
            for (var c = {}, d = 0, e = z(a); e > d; d++) b ? c[a[d]] = b[d] : c[a[d][0]] = a[d][1];
            return c
        }, s.findIndex = b(1), s.findLastIndex = b(-1), s.sortedIndex = function(a, b, c, d) {
            c = u(c, d, 1);
            for (var e = c(b), f = 0, g = z(a); g > f;) {
                var h = Math.floor((f + g) / 2);
                c(a[h]) < e ? f = h + 1 : g = h
            }
            return f
        }, s.indexOf = c(1, s.findIndex, s.sortedIndex), s.lastIndexOf = c(-1, s.findLastIndex), s.range = function(a, b, c) {
            null == b && (b = a || 0, a = 0), c = c || 1;
            for (var d = Math.max(Math.ceil((b - a) / c), 0), e = Array(d), f = 0; d > f; f++, a += c) e[f] = a;
            return e
        };
        var D = function(a, b, c, d, e) {
            if (!(d instanceof b)) return a.apply(c, e);
            var f = w(a.prototype),
                g = a.apply(f, e);
            return s.isObject(g) ? g : f
        };
        s.bind = function(a, b) {
            if (p && a.bind === p) return p.apply(a, k.call(arguments, 1));
            if (!s.isFunction(a)) throw new TypeError("Bind must be called on a function");
            var c = k.call(arguments, 2),
                d = function() {
                    return D(a, d, b, this, c.concat(k.call(arguments)))
                };
            return d
        }, s.partial = function(a) {
            var b = k.call(arguments, 1),
                c = function() {
                    for (var d = 0, e = b.length, f = Array(e), g = 0; e > g; g++) f[g] = b[g] === s ? arguments[d++] : b[g];
                    for (; d < arguments.length;) f.push(arguments[d++]);
                    return D(a, c, this, this, f)
                };
            return c
        }, s.bindAll = function(a) {
            var b, c, d = arguments.length;
            if (1 >= d) throw new Error("bindAll must be passed function names");
            for (b = 1; d > b; b++) c = arguments[b], a[c] = s.bind(a[c], a);
            return a
        }, s.memoize = function(a, b) {
            var c = function(d) {
                var e = c.cache,
                    f = "" + (b ? b.apply(this, arguments) : d);
                return s.has(e, f) || (e[f] = a.apply(this, arguments)), e[f]
            };
            return c.cache = {}, c
        }, s.delay = function(a, b) {
            var c = k.call(arguments, 2);
            return setTimeout(function() {
                return a.apply(null, c)
            }, b)
        }, s.defer = s.partial(s.delay, s, 1), s.throttle = function(a, b, c) {
            var d, e, f, g = null,
                h = 0;
            c || (c = {});
            var i = function() {
                h = c.leading === !1 ? 0 : s.now(), g = null, f = a.apply(d, e), g || (d = e = null)
            };
            return function() {
                var j = s.now();
                h || c.leading !== !1 || (h = j);
                var k = b - (j - h);
                return d = this, e = arguments, 0 >= k || k > b ? (g && (clearTimeout(g), g = null), h = j, f = a.apply(d, e), g || (d = e = null)) : g || c.trailing === !1 || (g = setTimeout(i, k)), f
            }
        }, s.debounce = function(a, b, c) {
            var d, e, f, g, h, i = function() {
                var j = s.now() - g;
                b > j && j >= 0 ? d = setTimeout(i, b - j) : (d = null, c || (h = a.apply(f, e), d || (f = e = null)))
            };
            return function() {
                f = this, e = arguments, g = s.now();
                var j = c && !d;
                return d || (d = setTimeout(i, b)), j && (h = a.apply(f, e), f = e = null), h
            }
        }, s.wrap = function(a, b) {
            return s.partial(b, a)
        }, s.negate = function(a) {
            return function() {
                return !a.apply(this, arguments)
            }
        }, s.compose = function() {
            var a = arguments,
                b = a.length - 1;
            return function() {
                for (var c = b, d = a[b].apply(this, arguments); c--;) d = a[c].call(this, d);
                return d
            }
        }, s.after = function(a, b) {
            return function() {
                return --a < 1 ? b.apply(this, arguments) : void 0
            }
        }, s.before = function(a, b) {
            var c;
            return function() {
                return --a > 0 && (c = b.apply(this, arguments)), 1 >= a && (b = null), c
            }
        }, s.once = s.partial(s.before, 2);
        var E = !{
                toString: null
            }.propertyIsEnumerable("toString"),
            F = ["valueOf", "isPrototypeOf", "toString", "propertyIsEnumerable", "hasOwnProperty", "toLocaleString"];
        s.keys = function(a) {
            if (!s.isObject(a)) return [];
            if (o) return o(a);
            var b = [];
            for (var c in a) s.has(a, c) && b.push(c);
            return E && d(a, b), b
        }, s.allKeys = function(a) {
            if (!s.isObject(a)) return [];
            var b = [];
            for (var c in a) b.push(c);
            return E && d(a, b), b
        }, s.values = function(a) {
            for (var b = s.keys(a), c = b.length, d = Array(c), e = 0; c > e; e++) d[e] = a[b[e]];
            return d
        }, s.mapObject = function(a, b, c) {
            b = u(b, c);
            for (var d, e = s.keys(a), f = e.length, g = {}, h = 0; f > h; h++) d = e[h], g[d] = b(a[d], d, a);
            return g
        }, s.pairs = function(a) {
            for (var b = s.keys(a), c = b.length, d = Array(c), e = 0; c > e; e++) d[e] = [b[e], a[b[e]]];
            return d
        }, s.invert = function(a) {
            for (var b = {}, c = s.keys(a), d = 0, e = c.length; e > d; d++) b[a[c[d]]] = c[d];
            return b
        }, s.functions = s.methods = function(a) {
            var b = [];
            for (var c in a) s.isFunction(a[c]) && b.push(c);
            return b.sort()
        }, s.extend = v(s.allKeys), s.extendOwn = s.assign = v(s.keys), s.findKey = function(a, b, c) {
            b = u(b, c);
            for (var d, e = s.keys(a), f = 0, g = e.length; g > f; f++)
                if (d = e[f], b(a[d], d, a)) return d
        }, s.pick = function(a, b, c) {
            var d, e, f = {},
                g = a;
            if (null == g) return f;
            s.isFunction(b) ? (e = s.allKeys(g), d = t(b, c)) : (e = C(arguments, !1, !1, 1), d = function(a, b, c) {
                return b in c
            }, g = Object(g));
            for (var h = 0, i = e.length; i > h; h++) {
                var j = e[h],
                    k = g[j];
                d(k, j, g) && (f[j] = k)
            }
            return f
        }, s.omit = function(a, b, c) {
            if (s.isFunction(b)) b = s.negate(b);
            else {
                var d = s.map(C(arguments, !1, !1, 1), String);
                b = function(a, b) {
                    return !s.contains(d, b)
                }
            }
            return s.pick(a, b, c)
        }, s.defaults = v(s.allKeys, !0), s.create = function(a, b) {
            var c = w(a);
            return b && s.extendOwn(c, b), c
        }, s.clone = function(a) {
            return s.isObject(a) ? s.isArray(a) ? a.slice() : s.extend({}, a) : a
        }, s.tap = function(a, b) {
            return b(a), a
        }, s.isMatch = function(a, b) {
            var c = s.keys(b),
                d = c.length;
            if (null == a) return !d;
            for (var e = Object(a), f = 0; d > f; f++) {
                var g = c[f];
                if (b[g] !== e[g] || !(g in e)) return !1
            }
            return !0
        };
        var G = function(a, b, c, d) {
            if (a === b) return 0 !== a || 1 / a === 1 / b;
            if (null == a || null == b) return a === b;
            a instanceof s && (a = a._wrapped), b instanceof s && (b = b._wrapped);
            var e = l.call(a);
            if (e !== l.call(b)) return !1;
            switch (e) {
                case "[object RegExp]":
                case "[object String]":
                    return "" + a == "" + b;
                case "[object Number]":
                    return +a !== +a ? +b !== +b : 0 === +a ? 1 / +a === 1 / b : +a === +b;
                case "[object Date]":
                case "[object Boolean]":
                    return +a === +b
            }
            var f = "[object Array]" === e;
            if (!f) {
                if ("object" != typeof a || "object" != typeof b) return !1;
                var g = a.constructor,
                    h = b.constructor;
                if (g !== h && !(s.isFunction(g) && g instanceof g && s.isFunction(h) && h instanceof h) && "constructor" in a && "constructor" in b) return !1;
            }
            c = c || [], d = d || [];
            for (var i = c.length; i--;)
                if (c[i] === a) return d[i] === b;
            if (c.push(a), d.push(b), f) {
                if (i = a.length, i !== b.length) return !1;
                for (; i--;)
                    if (!G(a[i], b[i], c, d)) return !1
            } else {
                var j, k = s.keys(a);
                if (i = k.length, s.keys(b).length !== i) return !1;
                for (; i--;)
                    if (j = k[i], !s.has(b, j) || !G(a[j], b[j], c, d)) return !1
            }
            return c.pop(), d.pop(), !0
        };
        s.isEqual = function(a, b) {
            return G(a, b)
        }, s.isEmpty = function(a) {
            return null == a ? !0 : A(a) && (s.isArray(a) || s.isString(a) || s.isArguments(a)) ? 0 === a.length : 0 === s.keys(a).length
        }, s.isElement = function(a) {
            return !(!a || 1 !== a.nodeType)
        }, s.isArray = n || function(a) {
            return "[object Array]" === l.call(a)
        }, s.isObject = function(a) {
            var b = typeof a;
            return "function" === b || "object" === b && !!a
        }, s.each(["Arguments", "Function", "String", "Number", "Date", "RegExp", "Error"], function(a) {
            s["is" + a] = function(b) {
                return l.call(b) === "[object " + a + "]"
            }
        }), s.isArguments(arguments) || (s.isArguments = function(a) {
            return s.has(a, "callee")
        }), "function" != typeof /./ && "object" != typeof Int8Array && (s.isFunction = function(a) {
            return "function" == typeof a || !1
        }), s.isFinite = function(a) {
            return isFinite(a) && !isNaN(parseFloat(a))
        }, s.isNaN = function(a) {
            return s.isNumber(a) && a !== +a
        }, s.isBoolean = function(a) {
            return a === !0 || a === !1 || "[object Boolean]" === l.call(a)
        }, s.isNull = function(a) {
            return null === a
        }, s.isUndefined = function(a) {
            return void 0 === a
        }, s.has = function(a, b) {
            return null != a && m.call(a, b)
        }, s.noConflict = function() {
            return e._ = f, this
        }, s.identity = function(a) {
            return a
        }, s.constant = function(a) {
            return function() {
                return a
            }
        }, s.noop = function() {}, s.property = x, s.propertyOf = function(a) {
            return null == a ? function() {} : function(b) {
                return a[b]
            }
        }, s.matcher = s.matches = function(a) {
            return a = s.extendOwn({}, a),
                function(b) {
                    return s.isMatch(b, a)
                }
        }, s.times = function(a, b, c) {
            var d = Array(Math.max(0, a));
            b = t(b, c, 1);
            for (var e = 0; a > e; e++) d[e] = b(e);
            return d
        }, s.random = function(a, b) {
            return null == b && (b = a, a = 0), a + Math.floor(Math.random() * (b - a + 1))
        }, s.now = Date.now || function() {
            return (new Date).getTime()
        };
        var H = {
                "&": "&amp;",
                "<": "&lt;",
                ">": "&gt;",
                '"': "&quot;",
                "'": "&#x27;",
                "`": "&#x60;"
            },
            I = s.invert(H),
            J = function(a) {
                var b = function(b) {
                        return a[b]
                    },
                    c = "(?:" + s.keys(a).join("|") + ")",
                    d = RegExp(c),
                    e = RegExp(c, "g");
                return function(a) {
                    return a = null == a ? "" : "" + a, d.test(a) ? a.replace(e, b) : a
                }
            };
        s.escape = J(H), s.unescape = J(I), s.result = function(a, b, c) {
            var d = null == a ? void 0 : a[b];
            return void 0 === d && (d = c), s.isFunction(d) ? d.call(a) : d
        };
        var K = 0;
        s.uniqueId = function(a) {
            var b = ++K + "";
            return a ? a + b : b
        }, s.templateSettings = {
            evaluate: /<%([\s\S]+?)%>/g,
            interpolate: /<%=([\s\S]+?)%>/g,
            escape: /<%-([\s\S]+?)%>/g
        };
        var L = /(.)^/,
            M = {
                "'": "'",
                "\\": "\\",
                "\r": "r",
                "\n": "n",
                "\u2028": "u2028",
                "\u2029": "u2029"
            },
            N = /\\|'|\r|\n|\u2028|\u2029/g,
            O = function(a) {
                return "\\" + M[a]
            };
        s.template = function(a, b, c) {
            !b && c && (b = c), b = s.defaults({}, b, s.templateSettings);
            var d = RegExp([(b.escape || L).source, (b.interpolate || L).source, (b.evaluate || L).source].join("|") + "|$", "g"),
                e = 0,
                f = "__p+='";
            a.replace(d, function(b, c, d, g, h) {
                return f += a.slice(e, h).replace(N, O), e = h + b.length, c ? f += "'+\n((__t=(" + c + "))==null?'':_.escape(__t))+\n'" : d ? f += "'+\n((__t=(" + d + "))==null?'':__t)+\n'" : g && (f += "';\n" + g + "\n__p+='"), b
            }), f += "';\n", b.variable || (f = "with(obj||{}){\n" + f + "}\n"), f = "var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n" + f + "return __p;\n";
            try {
                var g = new Function(b.variable || "obj", "_", f)
            } catch (h) {
                throw h.source = f, h
            }
            var i = function(a) {
                    return g.call(this, a, s)
                },
                j = b.variable || "obj";
            return i.source = "function(" + j + "){\n" + f + "}", i
        }, s.chain = function(a) {
            var b = s(a);
            return b._chain = !0, b
        };
        var P = function(a, b) {
            return a._chain ? s(b).chain() : b
        };
        s.mixin = function(a) {
            s.each(s.functions(a), function(b) {
                var c = s[b] = a[b];
                s.prototype[b] = function() {
                    var a = [this._wrapped];
                    return j.apply(a, arguments), P(this, c.apply(s, a))
                }
            })
        }, s.mixin(s), s.each(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function(a) {
            var b = g[a];
            s.prototype[a] = function() {
                var c = this._wrapped;
                return b.apply(c, arguments), "shift" !== a && "splice" !== a || 0 !== c.length || delete c[0], P(this, c)
            }
        }), s.each(["concat", "join", "slice"], function(a) {
            var b = g[a];
            s.prototype[a] = function() {
                return P(this, b.apply(this._wrapped, arguments))
            }
        }), s.prototype.value = function() {
            return this._wrapped
        }, s.prototype.valueOf = s.prototype.toJSON = s.prototype.value, s.prototype.toString = function() {
            return "" + this._wrapped
        }, "function" == typeof define && define.amd && define("underscore", [], function() {
            return s
        })
    }.call(this), function(a, b, c) {
        "use strict";

        function d(a) {
            return function() {
                var b, c, d = arguments[0],
                    e = "[" + (a ? a + ":" : "") + d + "] ",
                    f = arguments[1],
                    g = arguments,
                    h = function(a) {
                        return "function" == typeof a ? a.toString().replace(/ \{[\s\S]*$/, "") : "undefined" == typeof a ? "undefined" : "string" != typeof a ? JSON.stringify(a) : a
                    };
                for (b = e + f.replace(/\{\d+\}/g, function(a) {
                        var b, c = +a.slice(1, -1);
                        return c + 2 < g.length ? (b = g[c + 2], "function" == typeof b ? b.toString().replace(/ ?\{[\s\S]*$/, "") : "undefined" == typeof b ? "undefined" : "string" != typeof b ? Q(b) : b) : a
                    }), b = b + "\nhttp://errors.angularjs.org/1.2.28/" + (a ? a + "/" : "") + d, c = 2; c < arguments.length; c++) b = b + (2 == c ? "?" : "&") + "p" + (c - 2) + "=" + encodeURIComponent(h(arguments[c]));
                return new Error(b)
            }
        }

        function e(a) {
            if (null == a || z(a)) return !1;
            var b = a.length;
            return 1 === a.nodeType && b ? !0 : u(a) || Ec(a) || 0 === b || "number" == typeof b && b > 0 && b - 1 in a
        }

        function f(a, b, c) {
            var d;
            if (a)
                if (x(a))
                    for (d in a) "prototype" == d || "length" == d || "name" == d || a.hasOwnProperty && !a.hasOwnProperty(d) || b.call(c, a[d], d);
                else if (Ec(a) || e(a))
                for (d = 0; d < a.length; d++) b.call(c, a[d], d);
            else if (a.forEach && a.forEach !== f) a.forEach(b, c);
            else
                for (d in a) a.hasOwnProperty(d) && b.call(c, a[d], d);
            return a
        }

        function g(a) {
            var b = [];
            for (var c in a) a.hasOwnProperty(c) && b.push(c);
            return b.sort()
        }

        function h(a, b, c) {
            for (var d = g(a), e = 0; e < d.length; e++) b.call(c, a[d[e]], d[e]);
            return d
        }

        function i(a) {
            return function(b, c) {
                a(c, b)
            }
        }

        function j() {
            for (var a, b = Dc.length; b;) {
                if (b--, a = Dc[b].charCodeAt(0), 57 == a) return Dc[b] = "A", Dc.join("");
                if (90 != a) return Dc[b] = String.fromCharCode(a + 1), Dc.join("");
                Dc[b] = "0"
            }
            return Dc.unshift("0"), Dc.join("")
        }

        function k(a, b) {
            b ? a.$$hashKey = b : delete a.$$hashKey
        }

        function l(a) {
            var b = a.$$hashKey;
            return f(arguments, function(b) {
                b !== a && f(b, function(b, c) {
                    a[c] = b
                })
            }), k(a, b), a
        }

        function m(a) {
            return parseInt(a, 10)
        }

        function n(a, b) {
            return l(new(l(function() {}, {
                prototype: a
            })), b)
        }

        function o() {}

        function p(a) {
            return a
        }

        function q(a) {
            return function() {
                return a
            }
        }

        function r(a) {
            return "undefined" == typeof a
        }

        function s(a) {
            return "undefined" != typeof a
        }

        function t(a) {
            return null != a && "object" == typeof a
        }

        function u(a) {
            return "string" == typeof a
        }

        function v(a) {
            return "number" == typeof a
        }

        function w(a) {
            return "[object Date]" === Ac.call(a)
        }

        function x(a) {
            return "function" == typeof a
        }

        function y(a) {
            return "[object RegExp]" === Ac.call(a)
        }

        function z(a) {
            return a && a.document && a.location && a.alert && a.setInterval
        }

        function A(a) {
            return a && a.$evalAsync && a.$watch
        }

        function B(a) {
            return "[object File]" === Ac.call(a)
        }

        function C(a) {
            return "[object Blob]" === Ac.call(a)
        }

        function D(a) {
            return a && x(a.then)
        }

        function E(a) {
            return !(!a || !(a.nodeName || a.prop && a.attr && a.find))
        }

        function F(a, b, c) {
            var d = [];
            return f(a, function(a, e, f) {
                d.push(b.call(c, a, e, f))
            }), d
        }

        function G(a, b) {
            return -1 != H(a, b)
        }

        function H(a, b) {
            if (a.indexOf) return a.indexOf(b);
            for (var c = 0; c < a.length; c++)
                if (b === a[c]) return c;
            return -1
        }

        function I(a, b) {
            var c = H(a, b);
            return c >= 0 && a.splice(c, 1), b
        }

        function J(a, b, c, d) {
            if (z(a) || A(a)) throw Bc("cpws", "Can't copy! Making copies of Window or Scope instances is not supported.");
            if (b) {
                if (a === b) throw Bc("cpi", "Can't copy! Source and destination are identical.");
                if (c = c || [], d = d || [], t(a)) {
                    var e = H(c, a);
                    if (-1 !== e) return d[e];
                    c.push(a), d.push(b)
                }
                var g;
                if (Ec(a)) {
                    b.length = 0;
                    for (var h = 0; h < a.length; h++) g = J(a[h], null, c, d), t(a[h]) && (c.push(a[h]), d.push(g)), b.push(g)
                } else {
                    var i = b.$$hashKey;
                    Ec(b) ? b.length = 0 : f(b, function(a, c) {
                        delete b[c]
                    });
                    for (var j in a) g = J(a[j], null, c, d), t(a[j]) && (c.push(a[j]), d.push(g)), b[j] = g;
                    k(b, i)
                }
            } else b = a, a && (Ec(a) ? b = J(a, [], c, d) : w(a) ? b = new Date(a.getTime()) : y(a) ? (b = new RegExp(a.source, a.toString().match(/[^\/]*$/)[0]), b.lastIndex = a.lastIndex) : t(a) && (b = J(a, {}, c, d)));
            return b
        }

        function K(a, b) {
            if (Ec(a)) {
                b = b || [];
                for (var c = 0; c < a.length; c++) b[c] = a[c]
            } else if (t(a)) {
                b = b || {};
                for (var d in a) !pc.call(a, d) || "$" === d.charAt(0) && "$" === d.charAt(1) || (b[d] = a[d])
            }
            return b || a
        }

        function L(a, b) {
            if (a === b) return !0;
            if (null === a || null === b) return !1;
            if (a !== a && b !== b) return !0;
            var d, e, f, g = typeof a,
                h = typeof b;
            if (g == h && "object" == g) {
                if (!Ec(a)) {
                    if (w(a)) return w(b) ? isNaN(a.getTime()) && isNaN(b.getTime()) || a.getTime() === b.getTime() : !1;
                    if (y(a) && y(b)) return a.toString() == b.toString();
                    if (A(a) || A(b) || z(a) || z(b) || Ec(b)) return !1;
                    f = {};
                    for (e in a)
                        if ("$" !== e.charAt(0) && !x(a[e])) {
                            if (!L(a[e], b[e])) return !1;
                            f[e] = !0
                        }
                    for (e in b)
                        if (!f.hasOwnProperty(e) && "$" !== e.charAt(0) && b[e] !== c && !x(b[e])) return !1;
                    return !0
                }
                if (!Ec(b)) return !1;
                if ((d = a.length) == b.length) {
                    for (e = 0; d > e; e++)
                        if (!L(a[e], b[e])) return !1;
                    return !0
                }
            }
            return !1
        }

        function M(a, b, c) {
            return a.concat(yc.call(b, c))
        }

        function N(a, b) {
            return yc.call(a, b || 0)
        }

        function O(a, b) {
            var c = arguments.length > 2 ? N(arguments, 2) : [];
            return !x(b) || b instanceof RegExp ? b : c.length ? function() {
                return arguments.length ? b.apply(a, c.concat(yc.call(arguments, 0))) : b.apply(a, c)
            } : function() {
                return arguments.length ? b.apply(a, arguments) : b.call(a)
            }
        }

        function P(a, d) {
            var e = d;
            return "string" == typeof a && "$" === a.charAt(0) ? e = c : z(d) ? e = "$WINDOW" : d && b === d ? e = "$DOCUMENT" : A(d) && (e = "$SCOPE"), e
        }

        function Q(a, b) {
            return "undefined" == typeof a ? c : JSON.stringify(a, P, b ? "  " : null)
        }

        function R(a) {
            return u(a) ? JSON.parse(a) : a
        }

        function S(a) {
            if ("function" == typeof a) a = !0;
            else if (a && 0 !== a.length) {
                var b = oc("" + a);
                a = !("f" == b || "0" == b || "false" == b || "no" == b || "n" == b || "[]" == b)
            } else a = !1;
            return a
        }

        function T(a) {
            a = uc(a).clone();
            try {
                a.empty()
            } catch (b) {}
            var c = 3,
                d = uc("<div>").append(a).html();
            try {
                return a[0].nodeType === c ? oc(d) : d.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/, function(a, b) {
                    return "<" + oc(b)
                })
            } catch (b) {
                return oc(d)
            }
        }

        function U(a) {
            try {
                return decodeURIComponent(a)
            } catch (b) {}
        }

        function V(a) {
            var b, c, d = {};
            return f((a || "").split("&"), function(a) {
                if (a && (b = a.replace(/\+/g, "%20").split("="), c = U(b[0]), s(c))) {
                    var e = s(b[1]) ? U(b[1]) : !0;
                    pc.call(d, c) ? Ec(d[c]) ? d[c].push(e) : d[c] = [d[c], e] : d[c] = e
                }
            }), d
        }

        function W(a) {
            var b = [];
            return f(a, function(a, c) {
                Ec(a) ? f(a, function(a) {
                    b.push(Y(c, !0) + (a === !0 ? "" : "=" + Y(a, !0)))
                }) : b.push(Y(c, !0) + (a === !0 ? "" : "=" + Y(a, !0)))
            }), b.length ? b.join("&") : ""
        }

        function X(a) {
            return Y(a, !0).replace(/%26/gi, "&").replace(/%3D/gi, "=").replace(/%2B/gi, "+")
        }

        function Y(a, b) {
            return encodeURIComponent(a).replace(/%40/gi, "@").replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, b ? "%20" : "+")
        }

        function Z(a, c) {
            function d(a) {
                a && h.push(a)
            }
            var e, g, h = [a],
                i = ["ng:app", "ng-app", "x-ng-app", "data-ng-app"],
                j = /\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;
            f(i, function(c) {
                i[c] = !0, d(b.getElementById(c)), c = c.replace(":", "\\:"), a.querySelectorAll && (f(a.querySelectorAll("." + c), d), f(a.querySelectorAll("." + c + "\\:"), d), f(a.querySelectorAll("[" + c + "]"), d))
            }), f(h, function(a) {
                if (!e) {
                    var b = " " + a.className + " ",
                        c = j.exec(b);
                    c ? (e = a, g = (c[2] || "").replace(/\s+/g, ",")) : f(a.attributes, function(b) {
                        !e && i[b.name] && (e = a, g = b.value)
                    })
                }
            }), e && c(e, g ? [g] : [])
        }

        function $(c, d) {
            var e = function() {
                    if (c = uc(c), c.injector()) {
                        var a = c[0] === b ? "document" : T(c);
                        throw Bc("btstrpd", "App Already Bootstrapped with this Element '{0}'", a.replace(/</, "&lt;").replace(/>/, "&gt;"))
                    }
                    d = d || [], d.unshift(["$provide", function(a) {
                        a.value("$rootElement", c)
                    }]), d.unshift("ng");
                    var e = Ha(d);
                    return e.invoke(["$rootScope", "$rootElement", "$compile", "$injector", "$animate", function(a, b, c, d, e) {
                        a.$apply(function() {
                            b.data("$injector", d), c(b)(a)
                        })
                    }]), e
                },
                g = /^NG_DEFER_BOOTSTRAP!/;
            return a && !g.test(a.name) ? e() : (a.name = a.name.replace(g, ""), void(Cc.resumeBootstrap = function(a) {
                f(a, function(a) {
                    d.push(a)
                }), e()
            }))
        }

        function _(a, b) {
            return b = b || "_", a.replace(Hc, function(a, c) {
                return (c ? b : "") + a.toLowerCase()
            })
        }

        function aa() {
            vc = a.jQuery, vc && vc.fn.on ? (uc = vc, l(vc.fn, {
                scope: Vc.scope,
                isolateScope: Vc.isolateScope,
                controller: Vc.controller,
                injector: Vc.injector,
                inheritedData: Vc.inheritedData
            }), ka("remove", !0, !0, !1), ka("empty", !1, !1, !1), ka("html", !1, !1, !0)) : uc = oa, Cc.element = uc
        }

        function ba(a, b, c) {
            if (!a) throw Bc("areq", "Argument '{0}' is {1}", b || "?", c || "required");
            return a
        }

        function ca(a, b, c) {
            return c && Ec(a) && (a = a[a.length - 1]), ba(x(a), b, "not a function, got " + (a && "object" == typeof a ? a.constructor.name || "Object" : typeof a)), a
        }

        function da(a, b) {
            if ("hasOwnProperty" === a) throw Bc("badname", "hasOwnProperty is not a valid {0} name", b)
        }

        function ea(a, b, c) {
            if (!b) return a;
            for (var d, e = b.split("."), f = a, g = e.length, h = 0; g > h; h++) d = e[h], a && (a = (f = a)[d]);
            return !c && x(a) ? O(f, a) : a
        }

        function fa(a) {
            var b = a[0],
                c = a[a.length - 1];
            if (b === c) return uc(b);
            var d = b,
                e = [d];
            do {
                if (d = d.nextSibling, !d) break;
                e.push(d)
            } while (d !== c);
            return uc(e)
        }

        function ga(a) {
            function b(a, b, c) {
                return a[b] || (a[b] = c())
            }
            var c = d("$injector"),
                e = d("ng"),
                f = b(a, "angular", Object);
            return f.$$minErr = f.$$minErr || d, b(f, "module", function() {
                var a = {};
                return function(d, f, g) {
                    var h = function(a, b) {
                        if ("hasOwnProperty" === a) throw e("badname", "hasOwnProperty is not a valid {0} name", b)
                    };
                    return h(d, "module"), f && a.hasOwnProperty(d) && (a[d] = null), b(a, d, function() {
                        function a(a, c, d) {
                            return function() {
                                return b[d || "push"]([a, c, arguments]), i
                            }
                        }
                        if (!f) throw c("nomod", "Module '{0}' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.", d);
                        var b = [],
                            e = [],
                            h = a("$injector", "invoke"),
                            i = {
                                _invokeQueue: b,
                                _runBlocks: e,
                                requires: f,
                                name: d,
                                provider: a("$provide", "provider"),
                                factory: a("$provide", "factory"),
                                service: a("$provide", "service"),
                                value: a("$provide", "value"),
                                constant: a("$provide", "constant", "unshift"),
                                animation: a("$animateProvider", "register"),
                                filter: a("$filterProvider", "register"),
                                controller: a("$controllerProvider", "register"),
                                directive: a("$compileProvider", "directive"),
                                config: h,
                                run: function(a) {
                                    return e.push(a), this
                                }
                            };
                        return g && h(g), i
                    })
                }
            })
        }

        function ha(b) {
            l(b, {
                bootstrap: $,
                copy: J,
                extend: l,
                equals: L,
                element: uc,
                forEach: f,
                injector: Ha,
                noop: o,
                bind: O,
                toJson: Q,
                fromJson: R,
                identity: p,
                isUndefined: r,
                isDefined: s,
                isString: u,
                isFunction: x,
                isObject: t,
                isNumber: v,
                isElement: E,
                isArray: Ec,
                version: Ic,
                isDate: w,
                lowercase: oc,
                uppercase: qc,
                callbacks: {
                    counter: 0
                },
                $$minErr: d,
                $$csp: Gc
            }), wc = ga(a);
            try {
                wc("ngLocale")
            } catch (c) {
                wc("ngLocale", []).provider("$locale", cb)
            }
            wc("ng", ["ngLocale"], ["$provide", function(a) {
                a.provider({
                    $$sanitizeUri: Eb
                }), a.provider("$compile", Oa).directive({
                    a: Fd,
                    input: Qd,
                    textarea: Qd,
                    form: Jd,
                    script: ye,
                    select: Be,
                    style: De,
                    option: Ce,
                    ngBind: ae,
                    ngBindHtml: ce,
                    ngBindTemplate: be,
                    ngClass: de,
                    ngClassEven: fe,
                    ngClassOdd: ee,
                    ngCloak: ge,
                    ngController: he,
                    ngForm: Kd,
                    ngHide: se,
                    ngIf: ke,
                    ngInclude: le,
                    ngInit: ne,
                    ngNonBindable: oe,
                    ngPluralize: pe,
                    ngRepeat: qe,
                    ngShow: re,
                    ngStyle: te,
                    ngSwitch: ue,
                    ngSwitchWhen: ve,
                    ngSwitchDefault: we,
                    ngOptions: Ae,
                    ngTransclude: xe,
                    ngModel: Wd,
                    ngList: Zd,
                    ngChange: Xd,
                    required: Yd,
                    ngRequired: Yd,
                    ngValue: _d
                }).directive({
                    ngInclude: me
                }).directive(Gd).directive(ie), a.provider({
                    $anchorScroll: Ia,
                    $animate: cd,
                    $browser: La,
                    $cacheFactory: Ma,
                    $controller: Ra,
                    $document: Sa,
                    $exceptionHandler: Ta,
                    $filter: Pb,
                    $interpolate: ab,
                    $interval: bb,
                    $http: Ya,
                    $httpBackend: $a,
                    $location: pb,
                    $log: qb,
                    $parse: zb,
                    $rootScope: Db,
                    $q: Ab,
                    $sce: Jb,
                    $sceDelegate: Ib,
                    $sniffer: Kb,
                    $templateCache: Na,
                    $timeout: Lb,
                    $window: Ob,
                    $$rAF: Cb,
                    $$asyncCallback: Ja
                })
            }])
        }

        function ia() {
            return ++Kc
        }

        function ja(a) {
            return a.replace(Nc, function(a, b, c, d) {
                return d ? c.toUpperCase() : c
            }).replace(Oc, "Moz$1")
        }

        function ka(a, b, c, d) {
            function e(a) {
                var e, g, h, i, j, k, l, m = c && a ? [this.filter(a)] : [this],
                    n = b;
                if (!d || null != a)
                    for (; m.length;)
                        for (e = m.shift(), g = 0, h = e.length; h > g; g++)
                            for (i = uc(e[g]), n ? i.triggerHandler("$destroy") : n = !n, j = 0, k = (l = i.children()).length; k > j; j++) m.push(vc(l[j]));
                return f.apply(this, arguments)
            }
            var f = vc.fn[a];
            f = f.$original || f, e.$original = f, vc.fn[a] = e
        }

        function la(a) {
            return !Rc.test(a)
        }

        function ma(a, b) {
            var c, d, e, f, g, h, i = b.createDocumentFragment(),
                j = [];
            if (la(a)) j.push(b.createTextNode(a));
            else {
                for (c = i.appendChild(b.createElement("div")), d = (Sc.exec(a) || ["", ""])[1].toLowerCase(), e = Uc[d] || Uc._default, c.innerHTML = "<div>&#160;</div>" + e[1] + a.replace(Tc, "<$1></$2>") + e[2], c.removeChild(c.firstChild), f = e[0]; f--;) c = c.lastChild;
                for (g = 0, h = c.childNodes.length; h > g; ++g) j.push(c.childNodes[g]);
                c = i.firstChild, c.textContent = ""
            }
            return i.textContent = "", i.innerHTML = "", j
        }

        function na(a, c) {
            c = c || b;
            var d;
            return (d = Qc.exec(a)) ? [c.createElement(d[1])] : ma(a, c)
        }

        function oa(a) {
            if (a instanceof oa) return a;
            if (u(a) && (a = Fc(a)), !(this instanceof oa)) {
                if (u(a) && "<" != a.charAt(0)) throw Pc("nosel", "Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element");
                return new oa(a)
            }
            if (u(a)) {
                ya(this, na(a));
                var c = uc(b.createDocumentFragment());
                c.append(this)
            } else ya(this, a)
        }

        function pa(a) {
            return a.cloneNode(!0)
        }

        function qa(a) {
            sa(a);
            for (var b = 0, c = a.childNodes || []; b < c.length; b++) qa(c[b])
        }

        function ra(a, b, c, d) {
            if (s(d)) throw Pc("offargs", "jqLite#off() does not support the `selector` argument");
            var e = ta(a, "events"),
                g = ta(a, "handle");
            g && (r(b) ? f(e, function(b, c) {
                Mc(a, c, b), delete e[c]
            }) : f(b.split(" "), function(b) {
                r(c) ? (Mc(a, b, e[b]), delete e[b]) : I(e[b] || [], c)
            }))
        }

        function sa(a, b) {
            var d = a.ng339,
                e = Jc[d];
            if (e) {
                if (b) return void delete Jc[d].data[b];
                e.handle && (e.events.$destroy && e.handle({}, "$destroy"), ra(a)), delete Jc[d], a.ng339 = c
            }
        }

        function ta(a, b, c) {
            var d = a.ng339,
                e = Jc[d || -1];
            return s(c) ? (e || (a.ng339 = d = ia(), e = Jc[d] = {}), void(e[b] = c)) : e && e[b]
        }

        function ua(a, b, c) {
            var d = ta(a, "data"),
                e = s(c),
                f = !e && s(b),
                g = f && !t(b);
            if (d || g || ta(a, "data", d = {}), e) d[b] = c;
            else {
                if (!f) return d;
                if (g) return d && d[b];
                l(d, b)
            }
        }

        function va(a, b) {
            return a.getAttribute ? (" " + (a.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").indexOf(" " + b + " ") > -1 : !1
        }

        function wa(a, b) {
            b && a.setAttribute && f(b.split(" "), function(b) {
                a.setAttribute("class", Fc((" " + (a.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").replace(" " + Fc(b) + " ", " ")))
            })
        }

        function xa(a, b) {
            if (b && a.setAttribute) {
                var c = (" " + (a.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ");
                f(b.split(" "), function(a) {
                    a = Fc(a), -1 === c.indexOf(" " + a + " ") && (c += a + " ")
                }), a.setAttribute("class", Fc(c))
            }
        }

        function ya(a, b) {
            if (b) {
                b = b.nodeName || !s(b.length) || z(b) ? [b] : b;
                for (var c = 0; c < b.length; c++) a.push(b[c])
            }
        }

        function za(a, b) {
            return Aa(a, "$" + (b || "ngController") + "Controller")
        }

        function Aa(a, b, d) {
            9 == a.nodeType && (a = a.documentElement);
            for (var e = Ec(b) ? b : [b]; a;) {
                for (var f = 0, g = e.length; g > f; f++)
                    if ((d = uc.data(a, e[f])) !== c) return d;
                a = a.parentNode || 11 === a.nodeType && a.host
            }
        }

        function Ba(a) {
            for (var b = 0, c = a.childNodes; b < c.length; b++) qa(c[b]);
            for (; a.firstChild;) a.removeChild(a.firstChild)
        }

        function Ca(a, b) {
            var c = Wc[b.toLowerCase()];
            return c && Xc[a.nodeName] && c
        }

        function Da(a, c) {
            var d = function(d, e) {
                if (d.preventDefault || (d.preventDefault = function() {
                        d.returnValue = !1
                    }), d.stopPropagation || (d.stopPropagation = function() {
                        d.cancelBubble = !0
                    }), d.target || (d.target = d.srcElement || b), r(d.defaultPrevented)) {
                    var g = d.preventDefault;
                    d.preventDefault = function() {
                        d.defaultPrevented = !0, g.call(d)
                    }, d.defaultPrevented = !1
                }
                d.isDefaultPrevented = function() {
                    return d.defaultPrevented || d.returnValue === !1
                };
                var h = K(c[e || d.type] || []);
                f(h, function(b) {
                    b.call(a, d)
                }), 8 >= tc ? (d.preventDefault = null, d.stopPropagation = null, d.isDefaultPrevented = null) : (delete d.preventDefault, delete d.stopPropagation, delete d.isDefaultPrevented)
            };
            return d.elem = a, d
        }

        function Ea(a, b) {
            var d, e = typeof a;
            return "function" == e || "object" == e && null !== a ? "function" == typeof(d = a.$$hashKey) ? d = a.$$hashKey() : d === c && (d = a.$$hashKey = (b || j)()) : d = a, e + ":" + d
        }

        function Fa(a, b) {
            if (b) {
                var c = 0;
                this.nextUid = function() {
                    return ++c
                }
            }
            f(a, this.put, this)
        }

        function Ga(a) {
            var b, c, d, e;
            return "function" == typeof a ? (b = a.$inject) || (b = [], a.length && (c = a.toString().replace(_c, ""), d = c.match(Yc), f(d[1].split(Zc), function(a) {
                a.replace($c, function(a, c, d) {
                    b.push(d)
                })
            })), a.$inject = b) : Ec(a) ? (e = a.length - 1, ca(a[e], "fn"), b = a.slice(0, e)) : ca(a, "fn", !0), b
        }

        function Ha(a) {
            function b(a) {
                return function(b, c) {
                    return t(b) ? void f(b, i(a)) : a(b, c)
                }
            }

            function c(a, b) {
                if (da(a, "service"), (x(b) || Ec(b)) && (b = v.instantiate(b)), !b.$get) throw ad("pget", "Provider '{0}' must define $get factory method.", a);
                return s[a + n] = b
            }

            function d(a, b) {
                return c(a, {
                    $get: b
                })
            }

            function e(a, b) {
                return d(a, ["$injector", function(a) {
                    return a.instantiate(b)
                }])
            }

            function g(a, b) {
                return d(a, q(b))
            }

            function h(a, b) {
                da(a, "constant"), s[a] = b, w[a] = b
            }

            function j(a, b) {
                var c = v.get(a + n),
                    d = c.$get;
                c.$get = function() {
                    var a = y.invoke(d, c);
                    return y.invoke(b, null, {
                        $delegate: a
                    })
                }
            }

            function k(a) {
                var b, c, d, e, g = [];
                return f(a, function(a) {
                    if (!r.get(a)) {
                        r.put(a, !0);
                        try {
                            if (u(a))
                                for (b = wc(a), g = g.concat(k(b.requires)).concat(b._runBlocks), c = b._invokeQueue, d = 0, e = c.length; e > d; d++) {
                                    var f = c[d],
                                        h = v.get(f[0]);
                                    h[f[1]].apply(h, f[2])
                                } else x(a) ? g.push(v.invoke(a)) : Ec(a) ? g.push(v.invoke(a)) : ca(a, "module")
                        } catch (i) {
                            throw Ec(a) && (a = a[a.length - 1]), i.message && i.stack && -1 == i.stack.indexOf(i.message) && (i = i.message + "\n" + i.stack), ad("modulerr", "Failed to instantiate module {0} due to:\n{1}", a, i.stack || i.message || i)
                        }
                    }
                }), g
            }

            function l(a, b) {
                function c(c) {
                    if (a.hasOwnProperty(c)) {
                        if (a[c] === m) throw ad("cdep", "Circular dependency found: {0}", c + " <- " + p.join(" <- "));
                        return a[c]
                    }
                    try {
                        return p.unshift(c), a[c] = m, a[c] = b(c)
                    } catch (d) {
                        throw a[c] === m && delete a[c], d
                    } finally {
                        p.shift()
                    }
                }

                function d(a, b, d) {
                    var e, f, g, h = [],
                        i = Ga(a);
                    for (f = 0, e = i.length; e > f; f++) {
                        if (g = i[f], "string" != typeof g) throw ad("itkn", "Incorrect injection token! Expected service name as string, got {0}", g);
                        h.push(d && d.hasOwnProperty(g) ? d[g] : c(g))
                    }
                    return Ec(a) && (a = a[e]), a.apply(b, h)
                }

                function e(a, b) {
                    var c, e, f = function() {};
                    return f.prototype = (Ec(a) ? a[a.length - 1] : a).prototype, c = new f, e = d(a, c, b), t(e) || x(e) ? e : c
                }
                return {
                    invoke: d,
                    instantiate: e,
                    get: c,
                    annotate: Ga,
                    has: function(b) {
                        return s.hasOwnProperty(b + n) || a.hasOwnProperty(b)
                    }
                }
            }
            var m = {},
                n = "Provider",
                p = [],
                r = new Fa([], !0),
                s = {
                    $provide: {
                        provider: b(c),
                        factory: b(d),
                        service: b(e),
                        value: b(g),
                        constant: b(h),
                        decorator: j
                    }
                },
                v = s.$injector = l(s, function() {
                    throw ad("unpr", "Unknown provider: {0}", p.join(" <- "))
                }),
                w = {},
                y = w.$injector = l(w, function(a) {
                    var b = v.get(a + n);
                    return y.invoke(b.$get, b)
                });
            return f(k(a), function(a) {
                y.invoke(a || o)
            }), y
        }

        function Ia() {
            var a = !0;
            this.disableAutoScrolling = function() {
                a = !1
            }, this.$get = ["$window", "$location", "$rootScope", function(b, c, d) {
                function e(a) {
                    var b = null;
                    return f(a, function(a) {
                        b || "a" !== oc(a.nodeName) || (b = a)
                    }), b
                }

                function g() {
                    var a, d = c.hash();
                    d ? (a = h.getElementById(d)) ? a.scrollIntoView() : (a = e(h.getElementsByName(d))) ? a.scrollIntoView() : "top" === d && b.scrollTo(0, 0) : b.scrollTo(0, 0)
                }
                var h = b.document;
                return a && d.$watch(function() {
                    return c.hash()
                }, function() {
                    d.$evalAsync(g)
                }), g
            }]
        }

        function Ja() {
            this.$get = ["$$rAF", "$timeout", function(a, b) {
                return a.supported ? function(b) {
                    return a(b)
                } : function(a) {
                    return b(a, 0, !1)
                }
            }]
        }

        function Ka(a, b, d, e) {
            function g(a) {
                try {
                    a.apply(null, N(arguments, 1))
                } finally {
                    if (s--, 0 === s)
                        for (; t.length;) try {
                            t.pop()()
                        } catch (b) {
                            d.error(b)
                        }
                }
            }

            function h(a, b) {
                ! function c() {
                    f(w, function(a) {
                        a()
                    }), v = b(c, a)
                }()
            }

            function i() {
                x != j.url() && (x = j.url(), f(A, function(a) {
                    a(j.url())
                }))
            }
            var j = this,
                k = b[0],
                l = a.location,
                m = a.history,
                n = a.setTimeout,
                p = a.clearTimeout,
                q = {};
            j.isMock = !1;
            var s = 0,
                t = [];
            j.$$completeOutstandingRequest = g, j.$$incOutstandingRequestCount = function() {
                s++
            }, j.notifyWhenNoOutstandingRequests = function(a) {
                f(w, function(a) {
                    a()
                }), 0 === s ? a() : t.push(a)
            };
            var v, w = [];
            j.addPollFn = function(a) {
                return r(v) && h(100, n), w.push(a), a
            };
            var x = l.href,
                y = b.find("base"),
                z = null;
            j.url = function(b, c) {
                if (l !== a.location && (l = a.location), m !== a.history && (m = a.history), b) {
                    if (x == b) return;
                    var d = x && hb(x) === hb(b);
                    return x = b, !d && e.history ? c ? m.replaceState(null, "", b) : (m.pushState(null, "", b), y.attr("href", y.attr("href"))) : (d || (z = b), c ? l.replace(b) : l.href = b), j
                }
                return z || l.href.replace(/%27/g, "'")
            };
            var A = [],
                B = !1;
            j.onUrlChange = function(b) {
                return B || (e.history && uc(a).on("popstate", i), e.hashchange ? uc(a).on("hashchange", i) : j.addPollFn(i), B = !0), A.push(b), b
            }, j.$$checkUrlChange = i, j.baseHref = function() {
                var a = y.attr("href");
                return a ? a.replace(/^(https?\:)?\/\/[^\/]*/, "") : ""
            };
            var C = {},
                D = "",
                E = j.baseHref();
            j.cookies = function(a, b) {
                var e, f, g, h, i;
                if (!a) {
                    if (k.cookie !== D)
                        for (D = k.cookie, f = D.split("; "), C = {}, h = 0; h < f.length; h++) g = f[h], i = g.indexOf("="), i > 0 && (a = unescape(g.substring(0, i)), C[a] === c && (C[a] = unescape(g.substring(i + 1))));
                    return C
                }
                b === c ? k.cookie = escape(a) + "=;path=" + E + ";expires=Thu, 01 Jan 1970 00:00:00 GMT" : u(b) && (e = (k.cookie = escape(a) + "=" + escape(b) + ";path=" + E).length + 1, e > 4096 && d.warn("Cookie '" + a + "' possibly not set or overflowed because it was too large (" + e + " > 4096 bytes)!"))
            }, j.defer = function(a, b) {
                var c;
                return s++, c = n(function() {
                    delete q[c], g(a)
                }, b || 0), q[c] = !0, c
            }, j.defer.cancel = function(a) {
                return q[a] ? (delete q[a], p(a), g(o), !0) : !1
            }
        }

        function La() {
            this.$get = ["$window", "$log", "$sniffer", "$document", function(a, b, c, d) {
                return new Ka(a, d, b, c)
            }]
        }

        function Ma() {
            this.$get = function() {
                function a(a, c) {
                    function e(a) {
                        a != m && (n ? n == a && (n = a.n) : n = a, f(a.n, a.p), f(a, m), m = a, m.n = null)
                    }

                    function f(a, b) {
                        a != b && (a && (a.p = b), b && (b.n = a))
                    }
                    if (a in b) throw d("$cacheFactory")("iid", "CacheId '{0}' is already taken!", a);
                    var g = 0,
                        h = l({}, c, {
                            id: a
                        }),
                        i = {},
                        j = c && c.capacity || Number.MAX_VALUE,
                        k = {},
                        m = null,
                        n = null;
                    return b[a] = {
                        put: function(a, b) {
                            if (j < Number.MAX_VALUE) {
                                var c = k[a] || (k[a] = {
                                    key: a
                                });
                                e(c)
                            }
                            if (!r(b)) return a in i || g++, i[a] = b, g > j && this.remove(n.key), b
                        },
                        get: function(a) {
                            if (j < Number.MAX_VALUE) {
                                var b = k[a];
                                if (!b) return;
                                e(b)
                            }
                            return i[a]
                        },
                        remove: function(a) {
                            if (j < Number.MAX_VALUE) {
                                var b = k[a];
                                if (!b) return;
                                b == m && (m = b.p), b == n && (n = b.n), f(b.n, b.p), delete k[a]
                            }
                            delete i[a], g--
                        },
                        removeAll: function() {
                            i = {}, g = 0, k = {}, m = n = null
                        },
                        destroy: function() {
                            i = null, h = null, k = null, delete b[a]
                        },
                        info: function() {
                            return l({}, h, {
                                size: g
                            })
                        }
                    }
                }
                var b = {};
                return a.info = function() {
                    var a = {};
                    return f(b, function(b, c) {
                        a[c] = b.info()
                    }), a
                }, a.get = function(a) {
                    return b[a]
                }, a
            }
        }

        function Na() {
            this.$get = ["$cacheFactory", function(a) {
                return a("templates")
            }]
        }

        function Oa(a, d) {
            var e = {},
                g = "Directive",
                h = /^\s*directive\:\s*([\d\w_\-]+)\s+(.*)$/,
                j = /(([\d\w_\-]+)(?:\:([^;]+))?;?)/,
                k = /^(on[a-z]+|formaction)$/;
            this.directive = function m(b, c) {
                return da(b, "directive"), u(b) ? (ba(c, "directiveFactory"), e.hasOwnProperty(b) || (e[b] = [], a.factory(b + g, ["$injector", "$exceptionHandler", function(a, c) {
                    var d = [];
                    return f(e[b], function(e, f) {
                        try {
                            var g = a.invoke(e);
                            x(g) ? g = {
                                compile: q(g)
                            } : !g.compile && g.link && (g.compile = q(g.link)), g.priority = g.priority || 0, g.index = f, g.name = g.name || b, g.require = g.require || g.controller && g.name, g.restrict = g.restrict || "A", d.push(g)
                        } catch (h) {
                            c(h)
                        }
                    }), d
                }])), e[b].push(c)) : f(b, i(m)), this
            }, this.aHrefSanitizationWhitelist = function(a) {
                return s(a) ? (d.aHrefSanitizationWhitelist(a), this) : d.aHrefSanitizationWhitelist()
            }, this.imgSrcSanitizationWhitelist = function(a) {
                return s(a) ? (d.imgSrcSanitizationWhitelist(a), this) : d.imgSrcSanitizationWhitelist()
            }, this.$get = ["$injector", "$interpolate", "$exceptionHandler", "$http", "$templateCache", "$parse", "$controller", "$rootScope", "$document", "$sce", "$animate", "$$sanitizeUri", function(a, d, i, m, o, q, r, s, v, w, y, z) {
                function A(a, b, c, d, e) {
                    a instanceof uc || (a = uc(a)), f(a, function(b, c) {
                        3 == b.nodeType && b.nodeValue.match(/\S+/) && (a[c] = b = uc(b).wrap("<span></span>").parent()[0])
                    });
                    var g = C(a, b, a, c, d, e);
                    return B(a, "ng-scope"),
                        function(b, c, d, e) {
                            ba(b, "scope");
                            var h = c ? Vc.clone.call(a) : a;
                            f(d, function(a, b) {
                                h.data("$" + b + "Controller", a)
                            });
                            for (var i = 0, j = h.length; j > i; i++) {
                                var k = h[i],
                                    l = k.nodeType;
                                (1 === l || 9 === l) && h.eq(i).data("$scope", b)
                            }
                            return c && c(h, b), g && g(b, h, h, e), h
                        }
                }

                function B(a, b) {
                    try {
                        a.addClass(b)
                    } catch (c) {}
                }

                function C(a, b, d, e, f, g) {
                    function h(a, d, e, f) {
                        var g, h, i, j, k, l, m, n, p = d.length,
                            q = new Array(p);
                        for (k = 0; p > k; k++) q[k] = d[k];
                        for (k = 0, m = 0, l = o.length; l > k; m++) i = q[m], g = o[k++], h = o[k++], g ? (g.scope ? (j = a.$new(), uc.data(i, "$scope", j)) : j = a, n = g.transcludeOnThisElement ? D(a, g.transclude, f) : !g.templateOnThisElement && f ? f : !f && b ? D(a, b) : null, g(h, j, i, e, n)) : h && h(a, i.childNodes, c, f)
                    }
                    for (var i, j, k, l, m, n, o = [], p = 0; p < a.length; p++) i = new X, j = E(a[p], [], i, 0 === p ? e : c, f), k = j.length ? H(j, a[p], i, b, d, null, [], [], g) : null, k && k.scope && B(i.$$element, "ng-scope"), m = k && k.terminal || !(l = a[p].childNodes) || !l.length ? null : C(l, k ? (k.transcludeOnThisElement || !k.templateOnThisElement) && k.transclude : b), o.push(k, m), n = n || k || m, g = null;
                    return n ? h : null
                }

                function D(a, b, c) {
                    var d = function(d, e, f) {
                        var g = !1;
                        d || (d = a.$new(), d.$$transcluded = !0, g = !0);
                        var h = b(d, e, f, c);
                        return g && h.on("$destroy", function() {
                            d.$destroy()
                        }), h
                    };
                    return d
                }

                function E(a, b, c, d, e) {
                    var f, g, i = a.nodeType,
                        k = c.$attr;
                    switch (i) {
                        case 1:
                            J(b, Pa(xc(a).toLowerCase()), "E", d, e);
                            for (var l, m, n, o, p, q, r = a.attributes, s = 0, t = r && r.length; t > s; s++) {
                                var v = !1,
                                    w = !1;
                                if (l = r[s], !tc || tc >= 8 || l.specified) {
                                    m = l.name, p = Fc(l.value), o = Pa(m), (q = aa.test(o)) && (m = _(o.substr(6), "-"));
                                    var x = o.replace(/(Start|End)$/, "");
                                    o === x + "Start" && (v = m, w = m.substr(0, m.length - 5) + "end", m = m.substr(0, m.length - 6)), n = Pa(m.toLowerCase()), k[n] = m, (q || !c.hasOwnProperty(n)) && (c[n] = p, Ca(a, n) && (c[n] = !0)), U(a, b, p, n), J(b, n, "A", d, e, v, w)
                                }
                            }
                            if (g = a.className, u(g) && "" !== g)
                                for (; f = j.exec(g);) n = Pa(f[2]), J(b, n, "C", d, e) && (c[n] = Fc(f[3])), g = g.substr(f.index + f[0].length);
                            break;
                        case 3:
                            R(b, a.nodeValue);
                            break;
                        case 8:
                            try {
                                f = h.exec(a.nodeValue), f && (n = Pa(f[1]), J(b, n, "M", d, e) && (c[n] = Fc(f[2])))
                            } catch (y) {}
                    }
                    return b.sort(P), b
                }

                function F(a, b, c) {
                    var d = [],
                        e = 0;
                    if (b && a.hasAttribute && a.hasAttribute(b)) {
                        do {
                            if (!a) throw dd("uterdir", "Unterminated attribute, found '{0}' but no matching '{1}' found.", b, c);
                            1 == a.nodeType && (a.hasAttribute(b) && e++, a.hasAttribute(c) && e--), d.push(a), a = a.nextSibling
                        } while (e > 0)
                    } else d.push(a);
                    return uc(d)
                }

                function G(a, b, c) {
                    return function(d, e, f, g, h) {
                        return e = F(e[0], b, c), a(d, e, f, g, h)
                    }
                }

                function H(a, e, g, h, j, k, l, m, n) {
                    function o(a, b, c, d) {
                        a && (c && (a = G(a, c, d)), a.require = w.require, a.directiveName = y, (P === w || w.$$isolateScope) && (a = W(a, {
                            isolateScope: !0
                        })), l.push(a)), b && (c && (b = G(b, c, d)), b.require = w.require, b.directiveName = y, (P === w || w.$$isolateScope) && (b = W(b, {
                            isolateScope: !0
                        })), m.push(b))
                    }

                    function p(a, b, c, d) {
                        var e, g = "data",
                            h = !1;
                        if (u(b)) {
                            for (;
                                "^" == (e = b.charAt(0)) || "?" == e;) b = b.substr(1), "^" == e && (g = "inheritedData"), h = h || "?" == e;
                            if (e = null, d && "data" === g && (e = d[b]), e = e || c[g]("$" + b + "Controller"), !e && !h) throw dd("ctreq", "Controller '{0}', required by directive '{1}', can't be found!", b, a);
                            return e
                        }
                        return Ec(b) && (e = [], f(b, function(b) {
                            e.push(p(a, b, c, d))
                        })), e
                    }

                    function s(a, b, h, j, k) {
                        function n(a, b) {
                            var d;
                            return arguments.length < 2 && (b = a, a = c), Z && (d = z), k(a, b, d)
                        }
                        var o, s, t, u, v, w, x, y, z = {};
                        if (o = e === h ? g : K(g, new X(uc(h), g.$attr)), s = o.$$element, P) {
                            var A = /^\s*([@=&])(\??)\s*(\w*)\s*$/;
                            x = b.$new(!0), !R || R !== P && R !== P.$$originalDirective ? s.data("$isolateScopeNoTemplate", x) : s.data("$isolateScope", x), B(s, "ng-isolate-scope"), f(P.scope, function(a, c) {
                                var e, f, g, h, i = a.match(A) || [],
                                    j = i[3] || c,
                                    k = "?" == i[2],
                                    l = i[1];
                                switch (x.$$isolateBindings[c] = l + j, l) {
                                    case "@":
                                        o.$observe(j, function(a) {
                                            x[c] = a
                                        }), o.$$observers[j].$$scope = b, o[j] && (x[c] = d(o[j])(b));
                                        break;
                                    case "=":
                                        if (k && !o[j]) return;
                                        f = q(o[j]), h = f.literal ? L : function(a, b) {
                                            return a === b || a !== a && b !== b
                                        }, g = f.assign || function() {
                                            throw e = x[c] = f(b), dd("nonassign", "Expression '{0}' used with directive '{1}' is non-assignable!", o[j], P.name)
                                        }, e = x[c] = f(b), x.$watch(function() {
                                            var a = f(b);
                                            return h(a, x[c]) || (h(a, e) ? g(b, a = x[c]) : x[c] = a), e = a
                                        }, null, f.literal);
                                        break;
                                    case "&":
                                        f = q(o[j]), x[c] = function(a) {
                                            return f(b, a)
                                        };
                                        break;
                                    default:
                                        throw dd("iscp", "Invalid isolate scope definition for directive '{0}'. Definition: {... {1}: '{2}' ...}", P.name, c, a)
                                }
                            })
                        }
                        for (y = k && n, J && f(J, function(a) {
                                var c, d = {
                                    $scope: a === P || a.$$isolateScope ? x : b,
                                    $element: s,
                                    $attrs: o,
                                    $transclude: y
                                };
                                w = a.controller, "@" == w && (w = o[a.name]), c = r(w, d), z[a.name] = c, Z || s.data("$" + a.name + "Controller", c), a.controllerAs && (d.$scope[a.controllerAs] = c)
                            }), t = 0, u = l.length; u > t; t++) try {
                            v = l[t], v(v.isolateScope ? x : b, s, o, v.require && p(v.directiveName, v.require, s, z), y)
                        } catch (C) {
                            i(C, T(s))
                        }
                        var D = b;
                        for (P && (P.template || null === P.templateUrl) && (D = x), a && a(D, h.childNodes, c, k), t = m.length - 1; t >= 0; t--) try {
                            v = m[t], v(v.isolateScope ? x : b, s, o, v.require && p(v.directiveName, v.require, s, z), y)
                        } catch (C) {
                            i(C, T(s))
                        }
                    }
                    n = n || {};
                    for (var v, w, y, z, C, D, H = -Number.MAX_VALUE, J = n.controllerDirectives, P = n.newIsolateScopeDirective, R = n.templateDirective, S = n.nonTlbTranscludeDirective, U = !1, Y = !1, Z = n.hasElementTranscludeDirective, _ = g.$$element = uc(e), aa = k, ba = h, ca = 0, da = a.length; da > ca; ca++) {
                        w = a[ca];
                        var ea = w.$$start,
                            fa = w.$$end;
                        if (ea && (_ = F(e, ea, fa)), z = c, H > w.priority) break;
                        if ((D = w.scope) && (v = v || w, w.templateUrl || (Q("new/isolated scope", P, w, _), t(D) && (P = w))), y = w.name, !w.templateUrl && w.controller && (D = w.controller, J = J || {}, Q("'" + y + "' controller", J[y], w, _), J[y] = w), (D = w.transclude) && (U = !0, w.$$tlb || (Q("transclusion", S, w, _), S = w), "element" == D ? (Z = !0, H = w.priority, z = _, _ = g.$$element = uc(b.createComment(" " + y + ": " + g[y] + " ")), e = _[0], V(j, N(z), e),
                                ba = A(z, h, H, aa && aa.name, {
                                    nonTlbTranscludeDirective: S
                                })) : (z = uc(pa(e)).contents(), _.empty(), ba = A(z, h))), w.template)
                            if (Y = !0, Q("template", R, w, _), R = w, D = x(w.template) ? w.template(_, g) : w.template, D = $(D), w.replace) {
                                if (aa = w, z = la(D) ? [] : uc(Fc(D)), e = z[0], 1 != z.length || 1 !== e.nodeType) throw dd("tplrt", "Template for directive '{0}' must have exactly one root element. {1}", y, "");
                                V(j, _, e);
                                var ga = {
                                        $attr: {}
                                    },
                                    ha = E(e, [], ga),
                                    ia = a.splice(ca + 1, a.length - (ca + 1));
                                P && I(ha), a = a.concat(ha).concat(ia), M(g, ga), da = a.length
                            } else _.html(D);
                        if (w.templateUrl) Y = !0, Q("template", R, w, _), R = w, w.replace && (aa = w), s = O(a.splice(ca, a.length - ca), _, g, j, U && ba, l, m, {
                            controllerDirectives: J,
                            newIsolateScopeDirective: P,
                            templateDirective: R,
                            nonTlbTranscludeDirective: S
                        }), da = a.length;
                        else if (w.compile) try {
                            C = w.compile(_, g, ba), x(C) ? o(null, C, ea, fa) : C && o(C.pre, C.post, ea, fa)
                        } catch (ja) {
                            i(ja, T(_))
                        }
                        w.terminal && (s.terminal = !0, H = Math.max(H, w.priority))
                    }
                    return s.scope = v && v.scope === !0, s.transcludeOnThisElement = U, s.templateOnThisElement = Y, s.transclude = ba, n.hasElementTranscludeDirective = Z, s
                }

                function I(a) {
                    for (var b = 0, c = a.length; c > b; b++) a[b] = n(a[b], {
                        $$isolateScope: !0
                    })
                }

                function J(b, d, f, h, j, k, l) {
                    if (d === j) return null;
                    var m = null;
                    if (e.hasOwnProperty(d))
                        for (var o, p = a.get(d + g), q = 0, r = p.length; r > q; q++) try {
                            o = p[q], (h === c || h > o.priority) && -1 != o.restrict.indexOf(f) && (k && (o = n(o, {
                                $$start: k,
                                $$end: l
                            })), b.push(o), m = o)
                        } catch (s) {
                            i(s)
                        }
                    return m
                }

                function M(a, b) {
                    var c = b.$attr,
                        d = a.$attr,
                        e = a.$$element;
                    f(a, function(d, e) {
                        "$" != e.charAt(0) && (b[e] && b[e] !== d && (d += ("style" === e ? ";" : " ") + b[e]), a.$set(e, d, !0, c[e]))
                    }), f(b, function(b, f) {
                        "class" == f ? (B(e, b), a["class"] = (a["class"] ? a["class"] + " " : "") + b) : "style" == f ? (e.attr("style", e.attr("style") + ";" + b), a.style = (a.style ? a.style + ";" : "") + b) : "$" == f.charAt(0) || a.hasOwnProperty(f) || (a[f] = b, d[f] = c[f])
                    })
                }

                function O(a, b, c, d, e, g, h, i) {
                    var j, k, n = [],
                        p = b[0],
                        q = a.shift(),
                        r = l({}, q, {
                            templateUrl: null,
                            transclude: null,
                            replace: null,
                            $$originalDirective: q
                        }),
                        s = x(q.templateUrl) ? q.templateUrl(b, c) : q.templateUrl;
                    return b.empty(), m.get(w.getTrustedResourceUrl(s), {
                            cache: o
                        }).success(function(l) {
                            var m, o, u, v;
                            if (l = $(l), q.replace) {
                                if (u = la(l) ? [] : uc(Fc(l)), m = u[0], 1 != u.length || 1 !== m.nodeType) throw dd("tplrt", "Template for directive '{0}' must have exactly one root element. {1}", q.name, s);
                                o = {
                                    $attr: {}
                                }, V(d, b, m);
                                var w = E(m, [], o);
                                t(q.scope) && I(w), a = w.concat(a), M(c, o)
                            } else m = p, b.html(l);
                            for (a.unshift(r), j = H(a, m, c, e, b, q, g, h, i), f(d, function(a, c) {
                                    a == m && (d[c] = b[0])
                                }), k = C(b[0].childNodes, e); n.length;) {
                                var x = n.shift(),
                                    y = n.shift(),
                                    z = n.shift(),
                                    A = n.shift(),
                                    F = b[0];
                                if (y !== p) {
                                    var G = y.className;
                                    i.hasElementTranscludeDirective && q.replace || (F = pa(m)), V(z, uc(y), F), B(uc(F), G)
                                }
                                v = j.transcludeOnThisElement ? D(x, j.transclude, A) : A, j(k, x, F, d, v)
                            }
                            n = null
                        }).error(function(a, b, c, d) {
                            throw dd("tpload", "Failed to load template: {0}", d.url)
                        }),
                        function(a, b, c, d, e) {
                            var f = e;
                            n ? (n.push(b), n.push(c), n.push(d), n.push(f)) : (j.transcludeOnThisElement && (f = D(b, j.transclude, e)), j(k, b, c, d, f))
                        }
                }

                function P(a, b) {
                    var c = b.priority - a.priority;
                    return 0 !== c ? c : a.name !== b.name ? a.name < b.name ? -1 : 1 : a.index - b.index
                }

                function Q(a, b, c, d) {
                    if (b) throw dd("multidir", "Multiple directives [{0}, {1}] asking for {2} on: {3}", b.name, c.name, a, T(d))
                }

                function R(a, b) {
                    var c = d(b, !0);
                    c && a.push({
                        priority: 0,
                        compile: function(a) {
                            var b = a.parent(),
                                d = b.length;
                            return d && B(a.parent(), "ng-binding"),
                                function(a, b) {
                                    var e = b.parent(),
                                        f = e.data("$binding") || [];
                                    f.push(c), e.data("$binding", f), d || B(e, "ng-binding"), a.$watch(c, function(a) {
                                        b[0].nodeValue = a
                                    })
                                }
                        }
                    })
                }

                function S(a, b) {
                    if ("srcdoc" == b) return w.HTML;
                    var c = xc(a);
                    return "xlinkHref" == b || "FORM" == c && "action" == b || "IMG" != c && ("src" == b || "ngSrc" == b) ? w.RESOURCE_URL : void 0
                }

                function U(a, b, c, e) {
                    var f = d(c, !0);
                    if (f) {
                        if ("multiple" === e && "SELECT" === xc(a)) throw dd("selmulti", "Binding to the 'multiple' attribute is not supported. Element: {0}", T(a));
                        b.push({
                            priority: 100,
                            compile: function() {
                                return {
                                    pre: function(b, c, g) {
                                        var h = g.$$observers || (g.$$observers = {});
                                        if (k.test(e)) throw dd("nodomevents", "Interpolations for HTML DOM event attributes are disallowed.  Please use the ng- versions (such as ng-click instead of onclick) instead.");
                                        f = d(g[e], !0, S(a, e)), f && (g[e] = f(b), (h[e] || (h[e] = [])).$$inter = !0, (g.$$observers && g.$$observers[e].$$scope || b).$watch(f, function(a, b) {
                                            "class" === e && a != b ? g.$updateClass(a, b) : g.$set(e, a)
                                        }))
                                    }
                                }
                            }
                        })
                    }
                }

                function V(a, c, d) {
                    var e, f, g = c[0],
                        h = c.length,
                        i = g.parentNode;
                    if (a)
                        for (e = 0, f = a.length; f > e; e++)
                            if (a[e] == g) {
                                a[e++] = d;
                                for (var j = e, k = j + h - 1, l = a.length; l > j; j++, k++) l > k ? a[j] = a[k] : delete a[j];
                                a.length -= h - 1;
                                break
                            }
                    i && i.replaceChild(d, g);
                    var m = b.createDocumentFragment();
                    m.appendChild(g), d[uc.expando] = g[uc.expando];
                    for (var n = 1, o = c.length; o > n; n++) {
                        var p = c[n];
                        uc(p).remove(), m.appendChild(p), delete c[n]
                    }
                    c[0] = d, c.length = 1
                }

                function W(a, b) {
                    return l(function() {
                        return a.apply(null, arguments)
                    }, a, b)
                }
                var X = function(a, b) {
                    this.$$element = a, this.$attr = b || {}
                };
                X.prototype = {
                    $normalize: Pa,
                    $addClass: function(a) {
                        a && a.length > 0 && y.addClass(this.$$element, a)
                    },
                    $removeClass: function(a) {
                        a && a.length > 0 && y.removeClass(this.$$element, a)
                    },
                    $updateClass: function(a, b) {
                        var c = Qa(a, b),
                            d = Qa(b, a);
                        0 === c.length ? y.removeClass(this.$$element, d) : 0 === d.length ? y.addClass(this.$$element, c) : y.setClass(this.$$element, c, d)
                    },
                    $set: function(a, b, d, e) {
                        var g, h = Ca(this.$$element[0], a);
                        h && (this.$$element.prop(a, b), e = h), this[a] = b, e ? this.$attr[a] = e : (e = this.$attr[a], e || (this.$attr[a] = e = _(a, "-"))), g = xc(this.$$element), ("A" === g && "href" === a || "IMG" === g && "src" === a) && (this[a] = b = z(b, "src" === a)), d !== !1 && (null === b || b === c ? this.$$element.removeAttr(e) : this.$$element.attr(e, b));
                        var j = this.$$observers;
                        j && f(j[a], function(a) {
                            try {
                                a(b)
                            } catch (c) {
                                i(c)
                            }
                        })
                    },
                    $observe: function(a, b) {
                        var c = this,
                            d = c.$$observers || (c.$$observers = {}),
                            e = d[a] || (d[a] = []);
                        return e.push(b), s.$evalAsync(function() {
                            e.$$inter || b(c[a])
                        }), b
                    }
                };
                var Y = d.startSymbol(),
                    Z = d.endSymbol(),
                    $ = "{{" == Y || "}}" == Z ? p : function(a) {
                        return a.replace(/\{\{/g, Y).replace(/}}/g, Z)
                    },
                    aa = /^ngAttr[A-Z]/;
                return A
            }]
        }

        function Pa(a) {
            return ja(a.replace(ed, ""))
        }

        function Qa(a, b) {
            var c = "",
                d = a.split(/\s+/),
                e = b.split(/\s+/);
            a: for (var f = 0; f < d.length; f++) {
                for (var g = d[f], h = 0; h < e.length; h++)
                    if (g == e[h]) continue a;
                c += (c.length > 0 ? " " : "") + g
            }
            return c
        }

        function Ra() {
            var a = {},
                b = /^(\S+)(\s+as\s+(\w+))?$/;
            this.register = function(b, c) {
                da(b, "controller"), t(b) ? l(a, b) : a[b] = c
            }, this.$get = ["$injector", "$window", function(c, e) {
                return function(f, g) {
                    var h, i, j, k;
                    if (u(f) && (i = f.match(b), j = i[1], k = i[3], f = a.hasOwnProperty(j) ? a[j] : ea(g.$scope, j, !0) || ea(e, j, !0), ca(f, j, !0)), h = c.instantiate(f, g), k) {
                        if (!g || "object" != typeof g.$scope) throw d("$controller")("noscp", "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.", j || f.name, k);
                        g.$scope[k] = h
                    }
                    return h
                }
            }]
        }

        function Sa() {
            this.$get = ["$window", function(a) {
                return uc(a.document)
            }]
        }

        function Ta() {
            this.$get = ["$log", function(a) {
                return function(b, c) {
                    a.error.apply(a, arguments)
                }
            }]
        }

        function Ua(a) {
            var b, c, d, e = {};
            return a ? (f(a.split("\n"), function(a) {
                d = a.indexOf(":"), b = oc(Fc(a.substr(0, d))), c = Fc(a.substr(d + 1)), b && (e[b] = e[b] ? e[b] + ", " + c : c)
            }), e) : e
        }

        function Va(a) {
            var b = t(a) ? a : c;
            return function(c) {
                return b || (b = Ua(a)), c ? b[oc(c)] || null : b
            }
        }

        function Wa(a, b, c) {
            return x(c) ? c(a, b) : (f(c, function(c) {
                a = c(a, b)
            }), a)
        }

        function Xa(a) {
            return a >= 200 && 300 > a
        }

        function Ya() {
            var a = /^\s*(\[|\{[^\{])/,
                b = /[\}\]]\s*$/,
                d = /^\)\]\}',?\n/,
                e = {
                    "Content-Type": "application/json;charset=utf-8"
                },
                g = this.defaults = {
                    transformResponse: [function(c) {
                        return u(c) && (c = c.replace(d, ""), a.test(c) && b.test(c) && (c = R(c))), c
                    }],
                    transformRequest: [function(a) {
                        return !t(a) || B(a) || C(a) ? a : Q(a)
                    }],
                    headers: {
                        common: {
                            Accept: "application/json, text/plain, */*"
                        },
                        post: K(e),
                        put: K(e),
                        patch: K(e)
                    },
                    xsrfCookieName: "XSRF-TOKEN",
                    xsrfHeaderName: "X-XSRF-TOKEN"
                },
                i = this.interceptors = [],
                j = this.responseInterceptors = [];
            this.$get = ["$httpBackend", "$browser", "$cacheFactory", "$rootScope", "$q", "$injector", function(a, b, d, e, k, m) {
                function n(a) {
                    function b(a) {
                        var b = l({}, a, {
                            data: Wa(a.data, a.headers, e.transformResponse)
                        });
                        return Xa(a.status) ? b : k.reject(b)
                    }

                    function d(a) {
                        function b(a) {
                            var b;
                            f(a, function(c, d) {
                                x(c) && (b = c(), null != b ? a[d] = b : delete a[d])
                            })
                        }
                        var c, d, e, h = g.headers,
                            i = l({}, a.headers);
                        h = l({}, h.common, h[oc(a.method)]);
                        a: for (c in h) {
                            d = oc(c);
                            for (e in i)
                                if (oc(e) === d) continue a;
                            i[c] = h[c]
                        }
                        return b(i), i
                    }
                    var e = {
                            method: "get",
                            transformRequest: g.transformRequest,
                            transformResponse: g.transformResponse
                        },
                        h = d(a);
                    l(e, a), e.headers = h, e.method = qc(e.method);
                    var i = function(a) {
                            h = a.headers;
                            var c = Wa(a.data, Va(h), a.transformRequest);
                            return r(c) && f(h, function(a, b) {
                                "content-type" === oc(b) && delete h[b]
                            }), r(a.withCredentials) && !r(g.withCredentials) && (a.withCredentials = g.withCredentials), q(a, c, h).then(b, b)
                        },
                        j = [i, c],
                        m = k.when(e);
                    for (f(z, function(a) {
                            (a.request || a.requestError) && j.unshift(a.request, a.requestError), (a.response || a.responseError) && j.push(a.response, a.responseError)
                        }); j.length;) {
                        var n = j.shift(),
                            o = j.shift();
                        m = m.then(n, o)
                    }
                    return m.success = function(a) {
                        return m.then(function(b) {
                            a(b.data, b.status, b.headers, e)
                        }), m
                    }, m.error = function(a) {
                        return m.then(null, function(b) {
                            a(b.data, b.status, b.headers, e)
                        }), m
                    }, m
                }

                function o(a) {
                    f(arguments, function(a) {
                        n[a] = function(b, c) {
                            return n(l(c || {}, {
                                method: a,
                                url: b
                            }))
                        }
                    })
                }

                function p(a) {
                    f(arguments, function(a) {
                        n[a] = function(b, c, d) {
                            return n(l(d || {}, {
                                method: a,
                                url: b,
                                data: c
                            }))
                        }
                    })
                }

                function q(d, f, h) {
                    function i(a, b, c, d) {
                        m && (Xa(a) ? m.put(u, [a, b, Ua(c), d]) : m.remove(u)), j(b, a, c, d), e.$$phase || e.$apply()
                    }

                    function j(a, b, c, e) {
                        b = Math.max(b, 0), (Xa(b) ? p.resolve : p.reject)({
                            data: a,
                            status: b,
                            headers: Va(c),
                            config: d,
                            statusText: e
                        })
                    }

                    function l() {
                        var a = H(n.pendingRequests, d); - 1 !== a && n.pendingRequests.splice(a, 1)
                    }
                    var m, o, p = k.defer(),
                        q = p.promise,
                        u = v(d.url, d.params);
                    if (n.pendingRequests.push(d), q.then(l, l), !d.cache && !g.cache || d.cache === !1 || "GET" !== d.method && "JSONP" !== d.method || (m = t(d.cache) ? d.cache : t(g.cache) ? g.cache : y), m)
                        if (o = m.get(u), s(o)) {
                            if (D(o)) return o.then(l, l), o;
                            Ec(o) ? j(o[1], o[0], K(o[2]), o[3]) : j(o, 200, {}, "OK")
                        } else m.put(u, q);
                    if (r(o)) {
                        var w = Nb(d.url) ? b.cookies()[d.xsrfCookieName || g.xsrfCookieName] : c;
                        w && (h[d.xsrfHeaderName || g.xsrfHeaderName] = w), a(d.method, u, f, i, h, d.timeout, d.withCredentials, d.responseType)
                    }
                    return q
                }

                function v(a, b) {
                    if (!b) return a;
                    var c = [];
                    return h(b, function(a, b) {
                        null === a || r(a) || (Ec(a) || (a = [a]), f(a, function(a) {
                            t(a) && (a = w(a) ? a.toISOString() : Q(a)), c.push(Y(b) + "=" + Y(a))
                        }))
                    }), c.length > 0 && (a += (-1 == a.indexOf("?") ? "?" : "&") + c.join("&")), a
                }
                var y = d("$http"),
                    z = [];
                return f(i, function(a) {
                    z.unshift(u(a) ? m.get(a) : m.invoke(a))
                }), f(j, function(a, b) {
                    var c = u(a) ? m.get(a) : m.invoke(a);
                    z.splice(b, 0, {
                        response: function(a) {
                            return c(k.when(a))
                        },
                        responseError: function(a) {
                            return c(k.reject(a))
                        }
                    })
                }), n.pendingRequests = [], o("get", "delete", "head", "jsonp"), p("post", "put", "patch"), n.defaults = g, n
            }]
        }

        function Za(b) {
            if (8 >= tc && (!b.match(/^(get|post|head|put|delete|options)$/i) || !a.XMLHttpRequest)) return new a.ActiveXObject("Microsoft.XMLHTTP");
            if (a.XMLHttpRequest) return new a.XMLHttpRequest;
            throw d("$httpBackend")("noxhr", "This browser does not support XMLHttpRequest.")
        }

        function $a() {
            this.$get = ["$browser", "$window", "$document", function(a, b, c) {
                return _a(a, Za, a.defer, b.angular.callbacks, c[0])
            }]
        }

        function _a(a, b, c, d, e) {
            function g(a, b, c) {
                var f = e.createElement("script"),
                    g = null;
                return f.type = "text/javascript", f.src = a, f.async = !0, g = function(a) {
                    Mc(f, "load", g), Mc(f, "error", g), e.body.removeChild(f), f = null;
                    var h = -1,
                        i = "unknown";
                    a && ("load" !== a.type || d[b].called || (a = {
                        type: "error"
                    }), i = a.type, h = "error" === a.type ? 404 : 200), c && c(h, i)
                }, Lc(f, "load", g), Lc(f, "error", g), 8 >= tc && (f.onreadystatechange = function() {
                    u(f.readyState) && /loaded|complete/.test(f.readyState) && (f.onreadystatechange = null, g({
                        type: "load"
                    }))
                }), e.body.appendChild(f), g
            }
            var h = -1;
            return function(e, i, j, k, l, m, n, p) {
                function q() {
                    t = h, v && v(), w && w.abort()
                }

                function r(b, d, e, f, g) {
                    y && c.cancel(y), v = w = null, 0 === d && (d = e ? 200 : "file" == Mb(i).protocol ? 404 : 0), d = 1223 === d ? 204 : d, g = g || "", b(d, e, f, g), a.$$completeOutstandingRequest(o)
                }
                var t;
                if (a.$$incOutstandingRequestCount(), i = i || a.url(), "jsonp" == oc(e)) {
                    var u = "_" + (d.counter++).toString(36);
                    d[u] = function(a) {
                        d[u].data = a, d[u].called = !0
                    };
                    var v = g(i.replace("JSON_CALLBACK", "angular.callbacks." + u), u, function(a, b) {
                        r(k, a, d[u].data, "", b), d[u] = o
                    })
                } else {
                    var w = b(e);
                    if (w.open(e, i, !0), f(l, function(a, b) {
                            s(a) && w.setRequestHeader(b, a)
                        }), w.onreadystatechange = function() {
                            if (w && 4 == w.readyState) {
                                var a = null,
                                    b = null,
                                    c = "";
                                t !== h && (a = w.getAllResponseHeaders(), b = "response" in w ? w.response : w.responseText), t === h && 10 > tc || (c = w.statusText), r(k, t || w.status, b, a, c)
                            }
                        }, n && (w.withCredentials = !0), p) try {
                        w.responseType = p
                    } catch (x) {
                        if ("json" !== p) throw x
                    }
                    w.send(j || null)
                }
                if (m > 0) var y = c(q, m);
                else D(m) && m.then(q)
            }
        }

        function ab() {
            var a = "{{",
                b = "}}";
            this.startSymbol = function(b) {
                return b ? (a = b, this) : a
            }, this.endSymbol = function(a) {
                return a ? (b = a, this) : b
            }, this.$get = ["$parse", "$exceptionHandler", "$sce", function(c, d, e) {
                function f(f, i, j) {
                    for (var k, l, m, n, o = 0, p = [], q = f.length, r = !1, s = []; q > o;) - 1 != (k = f.indexOf(a, o)) && -1 != (l = f.indexOf(b, k + g)) ? (o != k && p.push(f.substring(o, k)), p.push(m = c(n = f.substring(k + g, l))), m.exp = n, o = l + h, r = !0) : (o != q && p.push(f.substring(o)), o = q);
                    if ((q = p.length) || (p.push(""), q = 1), j && p.length > 1) throw fd("noconcat", "Error while interpolating: {0}\nStrict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required.  See http://docs.angularjs.org/api/ng.$sce", f);
                    return !i || r ? (s.length = q, m = function(a) {
                        try {
                            for (var b, c = 0, g = q; g > c; c++) {
                                if ("function" == typeof(b = p[c]))
                                    if (b = b(a), b = j ? e.getTrusted(j, b) : e.valueOf(b), null == b) b = "";
                                    else switch (typeof b) {
                                        case "string":
                                            break;
                                        case "number":
                                            b = "" + b;
                                            break;
                                        default:
                                            b = Q(b)
                                    }
                                s[c] = b
                            }
                            return s.join("")
                        } catch (h) {
                            var i = fd("interr", "Can't interpolate: {0}\n{1}", f, h.toString());
                            d(i)
                        }
                    }, m.exp = f, m.parts = p, m) : void 0
                }
                var g = a.length,
                    h = b.length;
                return f.startSymbol = function() {
                    return a
                }, f.endSymbol = function() {
                    return b
                }, f
            }]
        }

        function bb() {
            this.$get = ["$rootScope", "$window", "$q", function(a, b, c) {
                function d(d, f, g, h) {
                    var i = b.setInterval,
                        j = b.clearInterval,
                        k = c.defer(),
                        l = k.promise,
                        m = 0,
                        n = s(h) && !h;
                    return g = s(g) ? g : 0, l.then(null, null, d), l.$$intervalId = i(function() {
                        k.notify(m++), g > 0 && m >= g && (k.resolve(m), j(l.$$intervalId), delete e[l.$$intervalId]), n || a.$apply()
                    }, f), e[l.$$intervalId] = k, l
                }
                var e = {};
                return d.cancel = function(a) {
                    return a && a.$$intervalId in e ? (e[a.$$intervalId].reject("canceled"), b.clearInterval(a.$$intervalId), delete e[a.$$intervalId], !0) : !1
                }, d
            }]
        }

        function cb() {
            this.$get = function() {
                return {
                    id: "en-us",
                    NUMBER_FORMATS: {
                        DECIMAL_SEP: ".",
                        GROUP_SEP: ",",
                        PATTERNS: [{
                            minInt: 1,
                            minFrac: 0,
                            maxFrac: 3,
                            posPre: "",
                            posSuf: "",
                            negPre: "-",
                            negSuf: "",
                            gSize: 3,
                            lgSize: 3
                        }, {
                            minInt: 1,
                            minFrac: 2,
                            maxFrac: 2,
                            posPre: "¤",
                            posSuf: "",
                            negPre: "(¤",
                            negSuf: ")",
                            gSize: 3,
                            lgSize: 3
                        }],
                        CURRENCY_SYM: "$"
                    },
                    DATETIME_FORMATS: {
                        MONTH: "January,February,March,April,May,June,July,August,September,October,November,December".split(","),
                        SHORTMONTH: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),
                        DAY: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),
                        SHORTDAY: "Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","),
                        AMPMS: ["AM", "PM"],
                        medium: "MMM d, y h:mm:ss a",
                        "short": "M/d/yy h:mm a",
                        fullDate: "EEEE, MMMM d, y",
                        longDate: "MMMM d, y",
                        mediumDate: "MMM d, y",
                        shortDate: "M/d/yy",
                        mediumTime: "h:mm:ss a",
                        shortTime: "h:mm a"
                    },
                    pluralCat: function(a) {
                        return 1 === a ? "one" : "other"
                    }
                }
            }
        }

        function db(a) {
            for (var b = a.split("/"), c = b.length; c--;) b[c] = X(b[c]);
            return b.join("/")
        }

        function eb(a, b, c) {
            var d = Mb(a, c);
            b.$$protocol = d.protocol, b.$$host = d.hostname, b.$$port = m(d.port) || hd[d.protocol] || null
        }

        function fb(a, b, c) {
            var d = "/" !== a.charAt(0);
            d && (a = "/" + a);
            var e = Mb(a, c);
            b.$$path = decodeURIComponent(d && "/" === e.pathname.charAt(0) ? e.pathname.substring(1) : e.pathname), b.$$search = V(e.search), b.$$hash = decodeURIComponent(e.hash), b.$$path && "/" != b.$$path.charAt(0) && (b.$$path = "/" + b.$$path)
        }

        function gb(a, b) {
            return 0 === b.indexOf(a) ? b.substr(a.length) : void 0
        }

        function hb(a) {
            var b = a.indexOf("#");
            return -1 == b ? a : a.substr(0, b)
        }

        function ib(a) {
            return a.substr(0, hb(a).lastIndexOf("/") + 1)
        }

        function jb(a) {
            return a.substring(0, a.indexOf("/", a.indexOf("//") + 2))
        }

        function kb(a, b) {
            this.$$html5 = !0, b = b || "";
            var d = ib(a);
            eb(a, this, a), this.$$parse = function(b) {
                var c = gb(d, b);
                if (!u(c)) throw id("ipthprfx", 'Invalid url "{0}", missing path prefix "{1}".', b, d);
                fb(c, this, a), this.$$path || (this.$$path = "/"), this.$$compose()
            }, this.$$compose = function() {
                var a = W(this.$$search),
                    b = this.$$hash ? "#" + X(this.$$hash) : "";
                this.$$url = db(this.$$path) + (a ? "?" + a : "") + b, this.$$absUrl = d + this.$$url.substr(1)
            }, this.$$parseLinkUrl = function(e, f) {
                var g, h, i;
                return (g = gb(a, e)) !== c ? (h = g, i = (g = gb(b, g)) !== c ? d + (gb("/", g) || g) : a + h) : (g = gb(d, e)) !== c ? i = d + g : d == e + "/" && (i = d), i && this.$$parse(i), !!i
            }
        }

        function lb(a, b) {
            var c = ib(a);
            eb(a, this, a), this.$$parse = function(d) {
                function e(a, b, c) {
                    var d, e = /^\/[A-Z]:(\/.*)/;
                    return 0 === b.indexOf(c) && (b = b.replace(c, "")), e.exec(b) ? a : (d = e.exec(a), d ? d[1] : a)
                }
                var f = gb(a, d) || gb(c, d),
                    g = "#" == f.charAt(0) ? gb(b, f) : this.$$html5 ? f : "";
                if (!u(g)) throw id("ihshprfx", 'Invalid url "{0}", missing hash prefix "{1}".', d, b);
                fb(g, this, a), this.$$path = e(this.$$path, g, a), this.$$compose()
            }, this.$$compose = function() {
                var c = W(this.$$search),
                    d = this.$$hash ? "#" + X(this.$$hash) : "";
                this.$$url = db(this.$$path) + (c ? "?" + c : "") + d, this.$$absUrl = a + (this.$$url ? b + this.$$url : "")
            }, this.$$parseLinkUrl = function(b, c) {
                return hb(a) == hb(b) ? (this.$$parse(b), !0) : !1
            }
        }

        function mb(a, b) {
            this.$$html5 = !0, lb.apply(this, arguments);
            var c = ib(a);
            this.$$parseLinkUrl = function(d, e) {
                var f, g;
                return a == hb(d) ? f = d : (g = gb(c, d)) ? f = a + b + g : c === d + "/" && (f = c), f && this.$$parse(f), !!f
            }, this.$$compose = function() {
                var c = W(this.$$search),
                    d = this.$$hash ? "#" + X(this.$$hash) : "";
                this.$$url = db(this.$$path) + (c ? "?" + c : "") + d, this.$$absUrl = a + b + this.$$url
            }
        }

        function nb(a) {
            return function() {
                return this[a]
            }
        }

        function ob(a, b) {
            return function(c) {
                return r(c) ? this[a] : (this[a] = b(c), this.$$compose(), this)
            }
        }

        function pb() {
            var b = "",
                c = !1;
            this.hashPrefix = function(a) {
                return s(a) ? (b = a, this) : b
            }, this.html5Mode = function(a) {
                return s(a) ? (c = a, this) : c
            }, this.$get = ["$rootScope", "$browser", "$sniffer", "$rootElement", function(d, e, f, g) {
                function h(a) {
                    d.$broadcast("$locationChangeSuccess", i.absUrl(), a)
                }
                var i, j, k, l = e.baseHref(),
                    m = e.url();
                c ? (k = jb(m) + (l || "/"), j = f.history ? kb : mb) : (k = hb(m), j = lb), i = new j(k, "#" + b), i.$$parseLinkUrl(m, m);
                var n = /^\s*(javascript|mailto):/i;
                g.on("click", function(b) {
                    if (!b.ctrlKey && !b.metaKey && 2 != b.which) {
                        for (var c = uc(b.target);
                            "a" !== oc(c[0].nodeName);)
                            if (c[0] === g[0] || !(c = c.parent())[0]) return;
                        var f = c.prop("href"),
                            h = c.attr("href") || c.attr("xlink:href");
                        t(f) && "[object SVGAnimatedString]" === f.toString() && (f = Mb(f.animVal).href), n.test(f) || !f || c.attr("target") || b.isDefaultPrevented() || i.$$parseLinkUrl(f, h) && (b.preventDefault(), i.absUrl() != e.url() && (d.$apply(), a.angular["ff-684208-preventDefault"] = !0))
                    }
                }), i.absUrl() != m && e.url(i.absUrl(), !0), e.onUrlChange(function(a) {
                    i.absUrl() != a && (d.$evalAsync(function() {
                        var b = i.absUrl();
                        i.$$parse(a), d.$broadcast("$locationChangeStart", a, b).defaultPrevented ? (i.$$parse(b), e.url(b)) : h(b)
                    }), d.$$phase || d.$digest())
                });
                var o = 0;
                return d.$watch(function() {
                    var a = e.url(),
                        b = i.$$replace;
                    return o && a == i.absUrl() || (o++, d.$evalAsync(function() {
                        d.$broadcast("$locationChangeStart", i.absUrl(), a).defaultPrevented ? i.$$parse(a) : (e.url(i.absUrl(), b), h(a))
                    })), i.$$replace = !1, o
                }), i
            }]
        }

        function qb() {
            var a = !0,
                b = this;
            this.debugEnabled = function(b) {
                return s(b) ? (a = b, this) : a
            }, this.$get = ["$window", function(c) {
                function d(a) {
                    return a instanceof Error && (a.stack ? a = a.message && -1 === a.stack.indexOf(a.message) ? "Error: " + a.message + "\n" + a.stack : a.stack : a.sourceURL && (a = a.message + "\n" + a.sourceURL + ":" + a.line)), a
                }

                function e(a) {
                    var b = c.console || {},
                        e = b[a] || b.log || o,
                        g = !1;
                    try {
                        g = !!e.apply
                    } catch (h) {}
                    return g ? function() {
                        var a = [];
                        return f(arguments, function(b) {
                            a.push(d(b))
                        }), e.apply(b, a)
                    } : function(a, b) {
                        e(a, null == b ? "" : b)
                    }
                }
                return {
                    log: e("log"),
                    info: e("info"),
                    warn: e("warn"),
                    error: e("error"),
                    debug: function() {
                        var c = e("debug");
                        return function() {
                            a && c.apply(b, arguments)
                        }
                    }()
                }
            }]
        }

        function rb(a, b) {
            if ("__defineGetter__" === a || "__defineSetter__" === a || "__lookupGetter__" === a || "__lookupSetter__" === a || "__proto__" === a) throw kd("isecfld", "Attempting to access a disallowed field in Angular expressions! Expression: {0}", b);
            return a
        }

        function sb(a, b) {
            if (a) {
                if (a.constructor === a) throw kd("isecfn", "Referencing Function in Angular expressions is disallowed! Expression: {0}", b);
                if (a.document && a.location && a.alert && a.setInterval) throw kd("isecwindow", "Referencing the Window in Angular expressions is disallowed! Expression: {0}", b);
                if (a.children && (a.nodeName || a.prop && a.attr && a.find)) throw kd("isecdom", "Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}", b);
                if (a === Object) throw kd("isecobj", "Referencing Object in Angular expressions is disallowed! Expression: {0}", b)
            }
            return a
        }

        function tb(a, b) {
            if (a) {
                if (a.constructor === a) throw kd("isecfn", "Referencing Function in Angular expressions is disallowed! Expression: {0}", b);
                if (a === md || a === nd || od && a === od) throw kd("isecff", "Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}", b)
            }
        }

        function ub(a, b, d, e, f) {
            sb(a, e), f = f || {};
            for (var g, h = b.split("."), i = 0; h.length > 1; i++) {
                g = rb(h.shift(), e);
                var j = sb(a[g], e);
                j || (j = {}, a[g] = j), a = j, a.then && f.unwrapPromises && (jd(e), "$$v" in a || ! function(a) {
                    a.then(function(b) {
                        a.$$v = b
                    })
                }(a), a.$$v === c && (a.$$v = {}), a = a.$$v)
            }
            return g = rb(h.shift(), e), sb(a[g], e), a[g] = d, d
        }

        function vb(a) {
            return "constructor" == a
        }

        function wb(a, b, d, e, f, g, h) {
            rb(a, g), rb(b, g), rb(d, g), rb(e, g), rb(f, g);
            var i = function(a) {
                    return sb(a, g)
                },
                j = h.expensiveChecks,
                k = j || vb(a) ? i : p,
                l = j || vb(b) ? i : p,
                m = j || vb(d) ? i : p,
                n = j || vb(e) ? i : p,
                o = j || vb(f) ? i : p;
            return h.unwrapPromises ? function(h, i) {
                var j, p = i && i.hasOwnProperty(a) ? i : h;
                return null == p ? p : (p = k(p[a]), p && p.then && (jd(g), "$$v" in p || (j = p, j.$$v = c, j.then(function(a) {
                    j.$$v = k(a)
                })), p = k(p.$$v)), b ? null == p ? c : (p = l(p[b]), p && p.then && (jd(g), "$$v" in p || (j = p, j.$$v = c, j.then(function(a) {
                    j.$$v = l(a)
                })), p = l(p.$$v)), d ? null == p ? c : (p = m(p[d]), p && p.then && (jd(g), "$$v" in p || (j = p, j.$$v = c, j.then(function(a) {
                    j.$$v = m(a)
                })), p = m(p.$$v)), e ? null == p ? c : (p = n(p[e]), p && p.then && (jd(g), "$$v" in p || (j = p, j.$$v = c, j.then(function(a) {
                    j.$$v = n(a)
                })), p = n(p.$$v)), f ? null == p ? c : (p = o(p[f]), p && p.then && (jd(g), "$$v" in p || (j = p, j.$$v = c, j.then(function(a) {
                    j.$$v = o(a)
                })), p = o(p.$$v)), p) : p) : p) : p) : p)
            } : function(g, h) {
                var i = h && h.hasOwnProperty(a) ? h : g;
                return null == i ? i : (i = k(i[a]), b ? null == i ? c : (i = l(i[b]), d ? null == i ? c : (i = m(i[d]), e ? null == i ? c : (i = n(i[e]), f ? null == i ? c : i = o(i[f]) : i) : i) : i) : i)
            }
        }

        function xb(a, b) {
            return function(c, d) {
                return a(c, d, jd, sb, b)
            }
        }

        function yb(a, b, d) {
            var e = b.expensiveChecks,
                g = e ? ud : td;
            if (g.hasOwnProperty(a)) return g[a];
            var h, i = a.split("."),
                j = i.length;
            if (b.csp) h = 6 > j ? wb(i[0], i[1], i[2], i[3], i[4], d, b) : function(a, e) {
                var f, g = 0;
                do f = wb(i[g++], i[g++], i[g++], i[g++], i[g++], d, b)(a, e), e = c, a = f; while (j > g);
                return f
            };
            else {
                var k = "var p;\n";
                e && (k += "s = eso(s, fe);\nl = eso(l, fe);\n");
                var l = e;
                f(i, function(a, c) {
                    rb(a, d);
                    var f = (c ? "s" : '((l&&l.hasOwnProperty("' + a + '"))?l:s)') + '["' + a + '"]',
                        g = e || vb(a);
                    g && (f = "eso(" + f + ", fe)", l = !0), k += "if(s == null) return undefined;\ns=" + f + ";\n", b.unwrapPromises && (k += 'if (s && s.then) {\n pw("' + d.replace(/(["\r\n])/g, "\\$1") + '");\n if (!("$$v" in s)) {\n p=s;\n p.$$v = undefined;\n p.then(function(v) {p.$$v=' + (g ? "eso(v)" : "v") + ";});\n}\n s=" + (g ? "eso(s.$$v)" : "s.$$v") + "\n}\n")
                }), k += "return s;";
                var m = new Function("s", "l", "pw", "eso", "fe", k);
                m.toString = q(k), (l || b.unwrapPromises) && (m = xb(m, d)), h = m
            }
            return "hasOwnProperty" !== a && (g[a] = h), h
        }

        function zb() {
            var a = {},
                b = {},
                c = {
                    csp: !1,
                    unwrapPromises: !1,
                    logPromiseWarnings: !0,
                    expensiveChecks: !1
                };
            this.unwrapPromises = function(a) {
                return s(a) ? (c.unwrapPromises = !!a, this) : c.unwrapPromises
            }, this.logPromiseWarnings = function(a) {
                return s(a) ? (c.logPromiseWarnings = a, this) : c.logPromiseWarnings
            }, this.$get = ["$filter", "$sniffer", "$log", function(d, e, f) {
                c.csp = e.csp;
                var g = {
                    csp: c.csp,
                    unwrapPromises: c.unwrapPromises,
                    logPromiseWarnings: c.logPromiseWarnings,
                    expensiveChecks: !0
                };
                return jd = function(a) {
                        c.logPromiseWarnings && !ld.hasOwnProperty(a) && (ld[a] = !0, f.warn("[$parse] Promise found in the expression `" + a + "`. Automatic unwrapping of promises in Angular expressions is deprecated."))
                    },
                    function(e, f) {
                        var h;
                        switch (typeof e) {
                            case "string":
                                var i = f ? b : a;
                                if (i.hasOwnProperty(e)) return i[e];
                                var j = f ? g : c,
                                    k = new rd(j),
                                    l = new sd(k, d, j);
                                return h = l.parse(e), "hasOwnProperty" !== e && (i[e] = h), h;
                            case "function":
                                return e;
                            default:
                                return o
                        }
                    }
            }]
        }

        function Ab() {
            this.$get = ["$rootScope", "$exceptionHandler", function(a, b) {
                return Bb(function(b) {
                    a.$evalAsync(b)
                }, b)
            }]
        }

        function Bb(a, b) {
            function d(a) {
                return a
            }

            function e(a) {
                return j(a)
            }

            function g(a) {
                var b = h(),
                    c = 0,
                    d = Ec(a) ? [] : {};
                return f(a, function(a, e) {
                    c++, i(a).then(function(a) {
                        d.hasOwnProperty(e) || (d[e] = a, --c || b.resolve(d))
                    }, function(a) {
                        d.hasOwnProperty(e) || b.reject(a)
                    })
                }), 0 === c && b.resolve(d), b.promise
            }
            var h = function() {
                    var f, g, j = [];
                    return g = {
                        resolve: function(b) {
                            if (j) {
                                var d = j;
                                j = c, f = i(b), d.length && a(function() {
                                    for (var a, b = 0, c = d.length; c > b; b++) a = d[b], f.then(a[0], a[1], a[2])
                                })
                            }
                        },
                        reject: function(a) {
                            g.resolve(k(a))
                        },
                        notify: function(b) {
                            if (j) {
                                var c = j;
                                j.length && a(function() {
                                    for (var a, d = 0, e = c.length; e > d; d++) a = c[d], a[2](b)
                                })
                            }
                        },
                        promise: {
                            then: function(a, c, g) {
                                var i = h(),
                                    k = function(c) {
                                        try {
                                            i.resolve((x(a) ? a : d)(c))
                                        } catch (e) {
                                            i.reject(e), b(e)
                                        }
                                    },
                                    l = function(a) {
                                        try {
                                            i.resolve((x(c) ? c : e)(a))
                                        } catch (d) {
                                            i.reject(d), b(d)
                                        }
                                    },
                                    m = function(a) {
                                        try {
                                            i.notify((x(g) ? g : d)(a))
                                        } catch (c) {
                                            b(c)
                                        }
                                    };
                                return j ? j.push([k, l, m]) : f.then(k, l, m), i.promise
                            },
                            "catch": function(a) {
                                return this.then(null, a)
                            },
                            "finally": function(a) {
                                function b(a, b) {
                                    var c = h();
                                    return b ? c.resolve(a) : c.reject(a), c.promise
                                }

                                function c(c, e) {
                                    var f = null;
                                    try {
                                        f = (a || d)()
                                    } catch (g) {
                                        return b(g, !1)
                                    }
                                    return D(f) ? f.then(function() {
                                        return b(c, e)
                                    }, function(a) {
                                        return b(a, !1)
                                    }) : b(c, e)
                                }
                                return this.then(function(a) {
                                    return c(a, !0)
                                }, function(a) {
                                    return c(a, !1)
                                })
                            }
                        }
                    }
                },
                i = function(b) {
                    return D(b) ? b : {
                        then: function(c) {
                            var d = h();
                            return a(function() {
                                d.resolve(c(b))
                            }), d.promise
                        }
                    }
                },
                j = function(a) {
                    var b = h();
                    return b.reject(a), b.promise
                },
                k = function(c) {
                    return {
                        then: function(d, f) {
                            var g = h();
                            return a(function() {
                                try {
                                    g.resolve((x(f) ? f : e)(c))
                                } catch (a) {
                                    g.reject(a), b(a)
                                }
                            }), g.promise
                        }
                    }
                },
                l = function(c, f, g, k) {
                    var l, m = h(),
                        n = function(a) {
                            try {
                                return (x(f) ? f : d)(a)
                            } catch (c) {
                                return b(c), j(c)
                            }
                        },
                        o = function(a) {
                            try {
                                return (x(g) ? g : e)(a)
                            } catch (c) {
                                return b(c), j(c)
                            }
                        },
                        p = function(a) {
                            try {
                                return (x(k) ? k : d)(a)
                            } catch (c) {
                                b(c)
                            }
                        };
                    return a(function() {
                        i(c).then(function(a) {
                            l || (l = !0, m.resolve(i(a).then(n, o, p)))
                        }, function(a) {
                            l || (l = !0, m.resolve(o(a)))
                        }, function(a) {
                            l || m.notify(p(a))
                        })
                    }), m.promise
                };
            return {
                defer: h,
                reject: j,
                when: l,
                all: g
            }
        }

        function Cb() {
            this.$get = ["$window", "$timeout", function(a, b) {
                var c = a.requestAnimationFrame || a.webkitRequestAnimationFrame || a.mozRequestAnimationFrame,
                    d = a.cancelAnimationFrame || a.webkitCancelAnimationFrame || a.mozCancelAnimationFrame || a.webkitCancelRequestAnimationFrame,
                    e = !!c,
                    f = e ? function(a) {
                        var b = c(a);
                        return function() {
                            d(b)
                        }
                    } : function(a) {
                        var c = b(a, 16.66, !1);
                        return function() {
                            b.cancel(c)
                        }
                    };
                return f.supported = e, f
            }]
        }

        function Db() {
            var a = 10,
                b = d("$rootScope"),
                c = null;
            this.digestTtl = function(b) {
                return arguments.length && (a = b), a
            }, this.$get = ["$injector", "$exceptionHandler", "$parse", "$browser", function(d, g, h, i) {
                function k() {
                    this.$id = j(), this.$$phase = this.$parent = this.$$watchers = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = null, this["this"] = this.$root = this, this.$$destroyed = !1, this.$$asyncQueue = [], this.$$postDigestQueue = [], this.$$listeners = {}, this.$$listenerCount = {}, this.$$isolateBindings = {}
                }

                function l(a) {
                    if (r.$$phase) throw b("inprog", "{0} already in progress", r.$$phase);
                    r.$$phase = a
                }

                function m() {
                    r.$$phase = null
                }

                function n(a, b) {
                    var c = h(a);
                    return ca(c, b), c
                }

                function p(a, b, c) {
                    do a.$$listenerCount[c] -= b, 0 === a.$$listenerCount[c] && delete a.$$listenerCount[c]; while (a = a.$parent)
                }

                function q() {}
                k.prototype = {
                    constructor: k,
                    $new: function(a) {
                        var b;
                        return a ? (b = new k, b.$root = this.$root, b.$$asyncQueue = this.$$asyncQueue, b.$$postDigestQueue = this.$$postDigestQueue) : (this.$$childScopeClass || (this.$$childScopeClass = function() {
                            this.$$watchers = this.$$nextSibling = this.$$childHead = this.$$childTail = null, this.$$listeners = {}, this.$$listenerCount = {}, this.$id = j(), this.$$childScopeClass = null
                        }, this.$$childScopeClass.prototype = this), b = new this.$$childScopeClass), b["this"] = b, b.$parent = this, b.$$prevSibling = this.$$childTail, this.$$childHead ? (this.$$childTail.$$nextSibling = b, this.$$childTail = b) : this.$$childHead = this.$$childTail = b, b
                    },
                    $watch: function(a, b, d) {
                        var e = this,
                            f = n(a, "watch"),
                            g = e.$$watchers,
                            h = {
                                fn: b,
                                last: q,
                                get: f,
                                exp: a,
                                eq: !!d
                            };
                        if (c = null, !x(b)) {
                            var i = n(b || o, "listener");
                            h.fn = function(a, b, c) {
                                i(c)
                            }
                        }
                        if ("string" == typeof a && f.constant) {
                            var j = h.fn;
                            h.fn = function(a, b, c) {
                                j.call(this, a, b, c), I(g, h)
                            }
                        }
                        return g || (g = e.$$watchers = []), g.unshift(h),
                            function() {
                                I(g, h), c = null
                            }
                    },
                    $watchCollection: function(a, b) {
                        function c() {
                            f = m(j);
                            var a, b, c;
                            if (t(f))
                                if (e(f)) {
                                    g !== n && (g = n, q = g.length = 0, l++), a = f.length, q !== a && (l++, g.length = q = a);
                                    for (var d = 0; a > d; d++) c = g[d] !== g[d] && f[d] !== f[d], c || g[d] === f[d] || (l++, g[d] = f[d])
                                } else {
                                    g !== o && (g = o = {}, q = 0, l++), a = 0;
                                    for (b in f) f.hasOwnProperty(b) && (a++, g.hasOwnProperty(b) ? (c = g[b] !== g[b] && f[b] !== f[b], c || g[b] === f[b] || (l++, g[b] = f[b])) : (q++, g[b] = f[b], l++));
                                    if (q > a) {
                                        l++;
                                        for (b in g) g.hasOwnProperty(b) && !f.hasOwnProperty(b) && (q--, delete g[b])
                                    }
                                }
                            else g !== f && (g = f, l++);
                            return l
                        }

                        function d() {
                            if (p ? (p = !1, b(f, f, j)) : b(f, i, j), k)
                                if (t(f))
                                    if (e(f)) {
                                        i = new Array(f.length);
                                        for (var a = 0; a < f.length; a++) i[a] = f[a]
                                    } else {
                                        i = {};
                                        for (var c in f) pc.call(f, c) && (i[c] = f[c])
                                    }
                            else i = f
                        }
                        var f, g, i, j = this,
                            k = b.length > 1,
                            l = 0,
                            m = h(a),
                            n = [],
                            o = {},
                            p = !0,
                            q = 0;
                        return this.$watch(c, d)
                    },
                    $digest: function() {
                        var d, e, f, h, j, k, n, o, p, r, s, t = this.$$asyncQueue,
                            u = this.$$postDigestQueue,
                            v = a,
                            w = this,
                            y = [];
                        l("$digest"), i.$$checkUrlChange(), c = null;
                        do {
                            for (k = !1, o = w; t.length;) {
                                try {
                                    s = t.shift(), s.scope.$eval(s.expression)
                                } catch (z) {
                                    m(), g(z)
                                }
                                c = null
                            }
                            a: do {
                                if (h = o.$$watchers)
                                    for (j = h.length; j--;) try {
                                        if (d = h[j])
                                            if ((e = d.get(o)) === (f = d.last) || (d.eq ? L(e, f) : "number" == typeof e && "number" == typeof f && isNaN(e) && isNaN(f))) {
                                                if (d === c) {
                                                    k = !1;
                                                    break a
                                                }
                                            } else k = !0, c = d, d.last = d.eq ? J(e, null) : e, d.fn(e, f === q ? e : f, o), 5 > v && (p = 4 - v, y[p] || (y[p] = []), r = x(d.exp) ? "fn: " + (d.exp.name || d.exp.toString()) : d.exp, r += "; newVal: " + Q(e) + "; oldVal: " + Q(f), y[p].push(r))
                                    } catch (z) {
                                        m(), g(z)
                                    }
                                if (!(n = o.$$childHead || o !== w && o.$$nextSibling))
                                    for (; o !== w && !(n = o.$$nextSibling);) o = o.$parent
                            } while (o = n);
                            if ((k || t.length) && !v--) throw m(), b("infdig", "{0} $digest() iterations reached. Aborting!\nWatchers fired in the last 5 iterations: {1}", a, Q(y))
                        } while (k || t.length);
                        for (m(); u.length;) try {
                            u.shift()()
                        } catch (z) {
                            g(z)
                        }
                    },
                    $destroy: function() {
                        if (!this.$$destroyed) {
                            var a = this.$parent;
                            this.$broadcast("$destroy"), this.$$destroyed = !0, this !== r && (f(this.$$listenerCount, O(null, p, this)), a.$$childHead == this && (a.$$childHead = this.$$nextSibling), a.$$childTail == this && (a.$$childTail = this.$$prevSibling), this.$$prevSibling && (this.$$prevSibling.$$nextSibling = this.$$nextSibling), this.$$nextSibling && (this.$$nextSibling.$$prevSibling = this.$$prevSibling), this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = this.$root = null, this.$$listeners = {}, this.$$watchers = this.$$asyncQueue = this.$$postDigestQueue = [], this.$destroy = this.$digest = this.$apply = o, this.$on = this.$watch = function() {
                                return o
                            })
                        }
                    },
                    $eval: function(a, b) {
                        return h(a)(this, b)
                    },
                    $evalAsync: function(a) {
                        r.$$phase || r.$$asyncQueue.length || i.defer(function() {
                            r.$$asyncQueue.length && r.$digest()
                        }), this.$$asyncQueue.push({
                            scope: this,
                            expression: a
                        })
                    },
                    $$postDigest: function(a) {
                        this.$$postDigestQueue.push(a)
                    },
                    $apply: function(a) {
                        try {
                            return l("$apply"), this.$eval(a)
                        } catch (b) {
                            g(b)
                        } finally {
                            m();
                            try {
                                r.$digest()
                            } catch (b) {
                                throw g(b), b
                            }
                        }
                    },
                    $on: function(a, b) {
                        var c = this.$$listeners[a];
                        c || (this.$$listeners[a] = c = []), c.push(b);
                        var d = this;
                        do d.$$listenerCount[a] || (d.$$listenerCount[a] = 0), d.$$listenerCount[a]++; while (d = d.$parent);
                        var e = this;
                        return function() {
                            var d = H(c, b); - 1 !== d && (c[d] = null, p(e, 1, a))
                        }
                    },
                    $emit: function(a, b) {
                        var c, d, e, f = [],
                            h = this,
                            i = !1,
                            j = {
                                name: a,
                                targetScope: h,
                                stopPropagation: function() {
                                    i = !0
                                },
                                preventDefault: function() {
                                    j.defaultPrevented = !0
                                },
                                defaultPrevented: !1
                            },
                            k = M([j], arguments, 1);
                        do {
                            for (c = h.$$listeners[a] || f, j.currentScope = h, d = 0, e = c.length; e > d; d++)
                                if (c[d]) try {
                                    c[d].apply(null, k)
                                } catch (l) {
                                    g(l)
                                } else c.splice(d, 1), d--, e--;
                            if (i) return j;
                            h = h.$parent
                        } while (h);
                        return j
                    },
                    $broadcast: function(a, b) {
                        for (var c, d, e, f = this, h = f, i = f, j = {
                                name: a,
                                targetScope: f,
                                preventDefault: function() {
                                    j.defaultPrevented = !0
                                },
                                defaultPrevented: !1
                            }, k = M([j], arguments, 1); h = i;) {
                            for (j.currentScope = h, c = h.$$listeners[a] || [], d = 0, e = c.length; e > d; d++)
                                if (c[d]) try {
                                    c[d].apply(null, k)
                                } catch (l) {
                                    g(l)
                                } else c.splice(d, 1), d--, e--;
                            if (!(i = h.$$listenerCount[a] && h.$$childHead || h !== f && h.$$nextSibling))
                                for (; h !== f && !(i = h.$$nextSibling);) h = h.$parent
                        }
                        return j
                    }
                };
                var r = new k;
                return r
            }]
        }

        function Eb() {
            var a = /^\s*(https?|ftp|mailto|tel|file):/,
                b = /^\s*((https?|ftp|file):|data:image\/)/;
            this.aHrefSanitizationWhitelist = function(b) {
                return s(b) ? (a = b, this) : a
            }, this.imgSrcSanitizationWhitelist = function(a) {
                return s(a) ? (b = a, this) : b
            }, this.$get = function() {
                return function(c, d) {
                    var e, f = d ? b : a;
                    return tc && !(tc >= 8) || (e = Mb(c).href, "" === e || e.match(f)) ? c : "unsafe:" + e
                }
            }
        }

        function Fb(a) {
            return a.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08")
        }

        function Gb(a) {
            if ("self" === a) return a;
            if (u(a)) {
                if (a.indexOf("***") > -1) throw vd("iwcard", "Illegal sequence *** in string matcher.  String: {0}", a);
                return a = Fb(a).replace("\\*\\*", ".*").replace("\\*", "[^:/.?&;]*"), new RegExp("^" + a + "$")
            }
            if (y(a)) return new RegExp("^" + a.source + "$");
            throw vd("imatcher", 'Matchers may only be "self", string patterns or RegExp objects')
        }

        function Hb(a) {
            var b = [];
            return s(a) && f(a, function(a) {
                b.push(Gb(a))
            }), b
        }

        function Ib() {
            this.SCE_CONTEXTS = wd;
            var a = ["self"],
                b = [];
            this.resourceUrlWhitelist = function(b) {
                return arguments.length && (a = Hb(b)), a
            }, this.resourceUrlBlacklist = function(a) {
                return arguments.length && (b = Hb(a)), b
            }, this.$get = ["$injector", function(d) {
                function e(a, b) {
                    return "self" === a ? Nb(b) : !!a.exec(b.href)
                }

                function f(c) {
                    var d, f, g = Mb(c.toString()),
                        h = !1;
                    for (d = 0, f = a.length; f > d; d++)
                        if (e(a[d], g)) {
                            h = !0;
                            break
                        }
                    if (h)
                        for (d = 0, f = b.length; f > d; d++)
                            if (e(b[d], g)) {
                                h = !1;
                                break
                            }
                    return h
                }

                function g(a) {
                    var b = function(a) {
                        this.$$unwrapTrustedValue = function() {
                            return a
                        }
                    };
                    return a && (b.prototype = new a), b.prototype.valueOf = function() {
                        return this.$$unwrapTrustedValue()
                    }, b.prototype.toString = function() {
                        return this.$$unwrapTrustedValue().toString()
                    }, b
                }

                function h(a, b) {
                    var d = m.hasOwnProperty(a) ? m[a] : null;
                    if (!d) throw vd("icontext", "Attempted to trust a value in invalid context. Context: {0}; Value: {1}", a, b);
                    if (null === b || b === c || "" === b) return b;
                    if ("string" != typeof b) throw vd("itype", "Attempted to trust a non-string value in a content requiring a string: Context: {0}", a);
                    return new d(b)
                }

                function i(a) {
                    return a instanceof l ? a.$$unwrapTrustedValue() : a
                }

                function j(a, b) {
                    if (null === b || b === c || "" === b) return b;
                    var d = m.hasOwnProperty(a) ? m[a] : null;
                    if (d && b instanceof d) return b.$$unwrapTrustedValue();
                    if (a === wd.RESOURCE_URL) {
                        if (f(b)) return b;
                        throw vd("insecurl", "Blocked loading resource from url not allowed by $sceDelegate policy.  URL: {0}", b.toString())
                    }
                    if (a === wd.HTML) return k(b);
                    throw vd("unsafe", "Attempting to use an unsafe value in a safe context.")
                }
                var k = function(a) {
                    throw vd("unsafe", "Attempting to use an unsafe value in a safe context.")
                };
                d.has("$sanitize") && (k = d.get("$sanitize"));
                var l = g(),
                    m = {};
                return m[wd.HTML] = g(l), m[wd.CSS] = g(l), m[wd.URL] = g(l), m[wd.JS] = g(l), m[wd.RESOURCE_URL] = g(m[wd.URL]), {
                    trustAs: h,
                    getTrusted: j,
                    valueOf: i
                }
            }]
        }

        function Jb() {
            var a = !0;
            this.enabled = function(b) {
                return arguments.length && (a = !!b), a
            }, this.$get = ["$parse", "$sniffer", "$sceDelegate", function(b, c, d) {
                if (a && c.msie && c.msieDocumentMode < 8) throw vd("iequirks", "Strict Contextual Escaping does not support Internet Explorer version < 9 in quirks mode.  You can fix this by adding the text <!doctype html> to the top of your HTML document.  See http://docs.angularjs.org/api/ng.$sce for more information.");
                var e = K(wd);
                e.isEnabled = function() {
                    return a
                }, e.trustAs = d.trustAs, e.getTrusted = d.getTrusted, e.valueOf = d.valueOf, a || (e.trustAs = e.getTrusted = function(a, b) {
                    return b
                }, e.valueOf = p), e.parseAs = function(a, c) {
                    var d = b(c);
                    return d.literal && d.constant ? d : function(b, c) {
                        return e.getTrusted(a, d(b, c))
                    }
                };
                var g = e.parseAs,
                    h = e.getTrusted,
                    i = e.trustAs;
                return f(wd, function(a, b) {
                    var c = oc(b);
                    e[ja("parse_as_" + c)] = function(b) {
                        return g(a, b)
                    }, e[ja("get_trusted_" + c)] = function(b) {
                        return h(a, b)
                    }, e[ja("trust_as_" + c)] = function(b) {
                        return i(a, b)
                    }
                }), e
            }]
        }

        function Kb() {
            this.$get = ["$window", "$document", function(a, b) {
                var c, d, e = {},
                    f = m((/android (\d+)/.exec(oc((a.navigator || {}).userAgent)) || [])[1]),
                    g = /Boxee/i.test((a.navigator || {}).userAgent),
                    h = b[0] || {},
                    i = h.documentMode,
                    j = /^(Moz|webkit|O|ms)(?=[A-Z])/,
                    k = h.body && h.body.style,
                    l = !1,
                    n = !1;
                if (k) {
                    for (var o in k)
                        if (d = j.exec(o)) {
                            c = d[0], c = c.substr(0, 1).toUpperCase() + c.substr(1);
                            break
                        }
                    c || (c = "WebkitOpacity" in k && "webkit"), l = !!("transition" in k || c + "Transition" in k), n = !!("animation" in k || c + "Animation" in k), !f || l && n || (l = u(h.body.style.webkitTransition), n = u(h.body.style.webkitAnimation))
                }
                return {
                    history: !(!a.history || !a.history.pushState || 4 > f || g),
                    hashchange: "onhashchange" in a && (!i || i > 7),
                    hasEvent: function(a) {
                        if ("input" == a && 9 == tc) return !1;
                        if (r(e[a])) {
                            var b = h.createElement("div");
                            e[a] = "on" + a in b
                        }
                        return e[a]
                    },
                    csp: Gc(),
                    vendorPrefix: c,
                    transitions: l,
                    animations: n,
                    android: f,
                    msie: tc,
                    msieDocumentMode: i
                }
            }]
        }

        function Lb() {
            this.$get = ["$rootScope", "$browser", "$q", "$exceptionHandler", function(a, b, c, d) {
                function e(e, g, h) {
                    var i, j = c.defer(),
                        k = j.promise,
                        l = s(h) && !h;
                    return i = b.defer(function() {
                        try {
                            j.resolve(e())
                        } catch (b) {
                            j.reject(b), d(b)
                        } finally {
                            delete f[k.$$timeoutId]
                        }
                        l || a.$apply()
                    }, g), k.$$timeoutId = i, f[i] = j, k
                }
                var f = {};
                return e.cancel = function(a) {
                    return a && a.$$timeoutId in f ? (f[a.$$timeoutId].reject("canceled"), delete f[a.$$timeoutId], b.defer.cancel(a.$$timeoutId)) : !1
                }, e
            }]
        }

        function Mb(a, b) {
            var c = a;
            return tc && (xd.setAttribute("href", c), c = xd.href), xd.setAttribute("href", c), {
                href: xd.href,
                protocol: xd.protocol ? xd.protocol.replace(/:$/, "") : "",
                host: xd.host,
                search: xd.search ? xd.search.replace(/^\?/, "") : "",
                hash: xd.hash ? xd.hash.replace(/^#/, "") : "",
                hostname: xd.hostname,
                port: xd.port,
                pathname: "/" === xd.pathname.charAt(0) ? xd.pathname : "/" + xd.pathname
            }
        }

        function Nb(a) {
            var b = u(a) ? Mb(a) : a;
            return b.protocol === yd.protocol && b.host === yd.host
        }

        function Ob() {
            this.$get = q(a)
        }

        function Pb(a) {
            function b(d, e) {
                if (t(d)) {
                    var g = {};
                    return f(d, function(a, c) {
                        g[c] = b(c, a)
                    }), g
                }
                return a.factory(d + c, e)
            }
            var c = "Filter";
            this.register = b, this.$get = ["$injector", function(a) {
                return function(b) {
                    return a.get(b + c)
                }
            }], b("currency", Rb), b("date", Zb), b("filter", Qb), b("json", $b), b("limitTo", _b), b("lowercase", Dd), b("number", Sb), b("orderBy", ac), b("uppercase", Ed)
        }

        function Qb() {
            return function(a, b, c) {
                if (!Ec(a)) return a;
                var d = typeof c,
                    e = [];
                e.check = function(a) {
                    for (var b = 0; b < e.length; b++)
                        if (!e[b](a)) return !1;
                    return !0
                }, "function" !== d && (c = "boolean" === d && c ? function(a, b) {
                    return Cc.equals(a, b)
                } : function(a, b) {
                    if (a && b && "object" == typeof a && "object" == typeof b) {
                        for (var d in a)
                            if ("$" !== d.charAt(0) && pc.call(a, d) && c(a[d], b[d])) return !0;
                        return !1
                    }
                    return b = ("" + b).toLowerCase(), ("" + a).toLowerCase().indexOf(b) > -1
                });
                var f = function(a, b) {
                    if ("string" == typeof b && "!" === b.charAt(0)) return !f(a, b.substr(1));
                    switch (typeof a) {
                        case "boolean":
                        case "number":
                        case "string":
                            return c(a, b);
                        case "object":
                            switch (typeof b) {
                                case "object":
                                    return c(a, b);
                                default:
                                    for (var d in a)
                                        if ("$" !== d.charAt(0) && f(a[d], b)) return !0
                            }
                            return !1;
                        case "array":
                            for (var e = 0; e < a.length; e++)
                                if (f(a[e], b)) return !0;
                            return !1;
                        default:
                            return !1
                    }
                };
                switch (typeof b) {
                    case "boolean":
                    case "number":
                    case "string":
                        b = {
                            $: b
                        };
                    case "object":
                        for (var g in b) ! function(a) {
                            "undefined" != typeof b[a] && e.push(function(c) {
                                return f("$" == a ? c : c && c[a], b[a])
                            })
                        }(g);
                        break;
                    case "function":
                        e.push(b);
                        break;
                    default:
                        return a
                }
                for (var h = [], i = 0; i < a.length; i++) {
                    var j = a[i];
                    e.check(j) && h.push(j)
                }
                return h
            }
        }

        function Rb(a) {
            var b = a.NUMBER_FORMATS;
            return function(a, c) {
                return r(c) && (c = b.CURRENCY_SYM), Tb(a, b.PATTERNS[1], b.GROUP_SEP, b.DECIMAL_SEP, 2).replace(/\u00A4/g, c)
            }
        }

        function Sb(a) {
            var b = a.NUMBER_FORMATS;
            return function(a, c) {
                return Tb(a, b.PATTERNS[0], b.GROUP_SEP, b.DECIMAL_SEP, c)
            }
        }

        function Tb(a, b, c, d, e) {
            if (null == a || !isFinite(a) || t(a)) return "";
            var f = 0 > a;
            a = Math.abs(a);
            var g = a + "",
                h = "",
                i = [],
                j = !1;
            if (-1 !== g.indexOf("e")) {
                var k = g.match(/([\d\.]+)e(-?)(\d+)/);
                k && "-" == k[2] && k[3] > e + 1 ? (g = "0", a = 0) : (h = g, j = !0)
            }
            if (j) e > 0 && a > -1 && 1 > a && (h = a.toFixed(e));
            else {
                var l = (g.split(zd)[1] || "").length;
                r(e) && (e = Math.min(Math.max(b.minFrac, l), b.maxFrac)), a = +(Math.round(+(a.toString() + "e" + e)).toString() + "e" + -e), 0 === a && (f = !1);
                var m = ("" + a).split(zd),
                    n = m[0];
                m = m[1] || "";
                var o, p = 0,
                    q = b.lgSize,
                    s = b.gSize;
                if (n.length >= q + s)
                    for (p = n.length - q, o = 0; p > o; o++)(p - o) % s === 0 && 0 !== o && (h += c), h += n.charAt(o);
                for (o = p; o < n.length; o++)(n.length - o) % q === 0 && 0 !== o && (h += c), h += n.charAt(o);
                for (; m.length < e;) m += "0";
                e && "0" !== e && (h += d + m.substr(0, e))
            }
            return i.push(f ? b.negPre : b.posPre), i.push(h), i.push(f ? b.negSuf : b.posSuf), i.join("")
        }

        function Ub(a, b, c) {
            var d = "";
            for (0 > a && (d = "-", a = -a), a = "" + a; a.length < b;) a = "0" + a;
            return c && (a = a.substr(a.length - b)), d + a
        }

        function Vb(a, b, c, d) {
            return c = c || 0,
                function(e) {
                    var f = e["get" + a]();
                    return (c > 0 || f > -c) && (f += c), 0 === f && -12 == c && (f = 12), Ub(f, b, d)
                }
        }

        function Wb(a, b) {
            return function(c, d) {
                var e = c["get" + a](),
                    f = qc(b ? "SHORT" + a : a);
                return d[f][e]
            }
        }

        function Xb(a) {
            var b = -1 * a.getTimezoneOffset(),
                c = b >= 0 ? "+" : "";
            return c += Ub(Math[b > 0 ? "floor" : "ceil"](b / 60), 2) + Ub(Math.abs(b % 60), 2)
        }

        function Yb(a, b) {
            return a.getHours() < 12 ? b.AMPMS[0] : b.AMPMS[1]
        }

        function Zb(a) {
            function b(a) {
                var b;
                if (b = a.match(c)) {
                    var d = new Date(0),
                        e = 0,
                        f = 0,
                        g = b[8] ? d.setUTCFullYear : d.setFullYear,
                        h = b[8] ? d.setUTCHours : d.setHours;
                    b[9] && (e = m(b[9] + b[10]), f = m(b[9] + b[11])), g.call(d, m(b[1]), m(b[2]) - 1, m(b[3]));
                    var i = m(b[4] || 0) - e,
                        j = m(b[5] || 0) - f,
                        k = m(b[6] || 0),
                        l = Math.round(1e3 * parseFloat("0." + (b[7] || 0)));
                    return h.call(d, i, j, k, l), d
                }
                return a
            }
            var c = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
            return function(c, d) {
                var e, g, h = "",
                    i = [];
                if (d = d || "mediumDate", d = a.DATETIME_FORMATS[d] || d, u(c) && (c = Cd.test(c) ? m(c) : b(c)), v(c) && (c = new Date(c)), !w(c)) return c;
                for (; d;) g = Bd.exec(d), g ? (i = M(i, g, 1), d = i.pop()) : (i.push(d), d = null);
                return f(i, function(b) {
                    e = Ad[b], h += e ? e(c, a.DATETIME_FORMATS) : b.replace(/(^'|'$)/g, "").replace(/''/g, "'")
                }), h
            }
        }

        function $b() {
            return function(a) {
                return Q(a, !0)
            }
        }

        function _b() {
            return function(a, b) {
                if (!Ec(a) && !u(a)) return a;
                if (b = Math.abs(Number(b)) === 1 / 0 ? Number(b) : m(b), u(a)) return b ? b >= 0 ? a.slice(0, b) : a.slice(b, a.length) : "";
                var c, d, e = [];
                for (b > a.length ? b = a.length : b < -a.length && (b = -a.length), b > 0 ? (c = 0, d = b) : (c = a.length + b, d = a.length); d > c; c++) e.push(a[c]);
                return e
            }
        }

        function ac(a) {
            return function(b, c, d) {
                function f(a, b) {
                    for (var d = 0; d < c.length; d++) {
                        var e = c[d](a, b);
                        if (0 !== e) return e
                    }
                    return 0
                }

                function g(a, b) {
                    return S(b) ? function(b, c) {
                        return a(c, b)
                    } : a
                }

                function h(a, b) {
                    var c = typeof a,
                        d = typeof b;
                    return c == d ? (w(a) && w(b) && (a = a.valueOf(), b = b.valueOf()), "string" == c && (a = a.toLowerCase(), b = b.toLowerCase()), a === b ? 0 : b > a ? -1 : 1) : d > c ? -1 : 1
                }
                return e(b) ? (c = Ec(c) ? c : [c], 0 === c.length && (c = ["+"]), c = F(c, function(b) {
                    var c = !1,
                        d = b || p;
                    if (u(b)) {
                        if (("+" == b.charAt(0) || "-" == b.charAt(0)) && (c = "-" == b.charAt(0), b = b.substring(1)), "" === b) return g(function(a, b) {
                            return h(a, b)
                        }, c);
                        if (d = a(b), d.constant) {
                            var e = d();
                            return g(function(a, b) {
                                return h(a[e], b[e])
                            }, c)
                        }
                    }
                    return g(function(a, b) {
                        return h(d(a), d(b))
                    }, c)
                }), yc.call(b).sort(g(f, d))) : b
            }
        }

        function bc(a) {
            return x(a) && (a = {
                link: a
            }), a.restrict = a.restrict || "AC", q(a)
        }

        function cc(a, b, c, d) {
            function e(b, c) {
                c = c ? "-" + _(c, "-") : "", d.setClass(a, (b ? Rd : Sd) + c, (b ? Sd : Rd) + c)
            }
            var g = this,
                h = a.parent().controller("form") || Hd,
                i = 0,
                j = g.$error = {},
                k = [];
            g.$name = b.name || b.ngForm, g.$dirty = !1, g.$pristine = !0, g.$valid = !0, g.$invalid = !1, h.$addControl(g), a.addClass(Td), e(!0), g.$addControl = function(a) {
                da(a.$name, "input"), k.push(a), a.$name && (g[a.$name] = a)
            }, g.$removeControl = function(a) {
                a.$name && g[a.$name] === a && delete g[a.$name], f(j, function(b, c) {
                    g.$setValidity(c, !0, a)
                }), I(k, a)
            }, g.$setValidity = function(a, b, c) {
                var d = j[a];
                if (b) d && (I(d, c), d.length || (i--, i || (e(b), g.$valid = !0, g.$invalid = !1), j[a] = !1, e(!0, a), h.$setValidity(a, !0, g)));
                else {
                    if (i || e(b), d) {
                        if (G(d, c)) return
                    } else j[a] = d = [], i++, e(!1, a), h.$setValidity(a, !1, g);
                    d.push(c), g.$valid = !1, g.$invalid = !0
                }
            }, g.$setDirty = function() {
                d.removeClass(a, Td), d.addClass(a, Ud), g.$dirty = !0, g.$pristine = !1, h.$setDirty()
            }, g.$setPristine = function() {
                d.removeClass(a, Ud), d.addClass(a, Td), g.$dirty = !1, g.$pristine = !0, f(k, function(a) {
                    a.$setPristine()
                })
            }
        }

        function dc(a, b, d, e) {
            return a.$setValidity(b, d), d ? e : c
        }

        function ec(a, b) {
            var c, d;
            if (b)
                for (c = 0; c < b.length; ++c)
                    if (d = b[c], a[d]) return !0;
            return !1
        }

        function fc(a, b, c, d, e) {
            if (t(e)) {
                a.$$hasNativeValidators = !0;
                var f = function(f) {
                    return a.$error[b] || ec(e, d) || !ec(e, c) ? f : void a.$setValidity(b, !1)
                };
                a.$parsers.push(f)
            }
        }

        function gc(a, b, c, e, f, g) {
            var h = b.prop(nc),
                i = b[0].placeholder,
                j = {},
                k = oc(b[0].type);
            if (e.$$validityState = h, !f.android) {
                var l = !1;
                b.on("compositionstart", function(a) {
                    l = !0
                }), b.on("compositionend", function() {
                    l = !1, n()
                })
            }
            var n = function(d) {
                if (!l) {
                    var f = b.val();
                    if (tc && "input" === (d || j).type && b[0].placeholder !== i) return void(i = b[0].placeholder);
                    "password" !== k && S(c.ngTrim || "T") && (f = Fc(f));
                    var g = h && e.$$hasNativeValidators;
                    (e.$viewValue !== f || "" === f && g) && (a.$root.$$phase ? e.$setViewValue(f) : a.$apply(function() {
                        e.$setViewValue(f)
                    }))
                }
            };
            if (f.hasEvent("input")) b.on("input", n);
            else {
                var o, p = function() {
                    o || (o = g.defer(function() {
                        n(), o = null
                    }))
                };
                b.on("keydown", function(a) {
                    var b = a.keyCode;
                    91 === b || b > 15 && 19 > b || b >= 37 && 40 >= b || p()
                }), f.hasEvent("paste") && b.on("paste cut", p)
            }
            b.on("change", n), e.$render = function() {
                b.val(e.$isEmpty(e.$viewValue) ? "" : e.$viewValue)
            };
            var q, r, s = c.ngPattern;
            if (s) {
                var t = function(a, b) {
                    return dc(e, "pattern", e.$isEmpty(b) || a.test(b), b)
                };
                r = s.match(/^\/(.*)\/([gim]*)$/), r ? (s = new RegExp(r[1], r[2]), q = function(a) {
                    return t(s, a)
                }) : q = function(c) {
                    var e = a.$eval(s);
                    if (!e || !e.test) throw d("ngPattern")("noregexp", "Expected {0} to be a RegExp but was {1}. Element: {2}", s, e, T(b));
                    return t(e, c)
                }, e.$formatters.push(q), e.$parsers.push(q)
            }
            if (c.ngMinlength) {
                var u = m(c.ngMinlength),
                    v = function(a) {
                        return dc(e, "minlength", e.$isEmpty(a) || a.length >= u, a)
                    };
                e.$parsers.push(v), e.$formatters.push(v)
            }
            if (c.ngMaxlength) {
                var w = m(c.ngMaxlength),
                    x = function(a) {
                        return dc(e, "maxlength", e.$isEmpty(a) || a.length <= w, a)
                    };
                e.$parsers.push(x), e.$formatters.push(x)
            }
        }

        function hc(a, b, d, e, f, g) {
            if (gc(a, b, d, e, f, g), e.$parsers.push(function(a) {
                    var b = e.$isEmpty(a);
                    return b || Nd.test(a) ? (e.$setValidity("number", !0), "" === a ? null : b ? a : parseFloat(a)) : (e.$setValidity("number", !1), c)
                }), fc(e, "number", Pd, null, e.$$validityState), e.$formatters.push(function(a) {
                    return e.$isEmpty(a) ? "" : "" + a
                }), d.min) {
                var h = function(a) {
                    var b = parseFloat(d.min);
                    return dc(e, "min", e.$isEmpty(a) || a >= b, a)
                };
                e.$parsers.push(h), e.$formatters.push(h)
            }
            if (d.max) {
                var i = function(a) {
                    var b = parseFloat(d.max);
                    return dc(e, "max", e.$isEmpty(a) || b >= a, a)
                };
                e.$parsers.push(i), e.$formatters.push(i)
            }
            e.$formatters.push(function(a) {
                return dc(e, "number", e.$isEmpty(a) || v(a), a)
            })
        }

        function ic(a, b, c, d, e, f) {
            gc(a, b, c, d, e, f);
            var g = function(a) {
                return dc(d, "url", d.$isEmpty(a) || Ld.test(a), a)
            };
            d.$formatters.push(g), d.$parsers.push(g)
        }

        function jc(a, b, c, d, e, f) {
            gc(a, b, c, d, e, f);
            var g = function(a) {
                return dc(d, "email", d.$isEmpty(a) || Md.test(a), a)
            };
            d.$formatters.push(g), d.$parsers.push(g)
        }

        function kc(a, b, c, d) {
            r(c.name) && b.attr("name", j()), b.on("click", function() {
                b[0].checked && a.$apply(function() {
                    d.$setViewValue(c.value)
                })
            }), d.$render = function() {
                var a = c.value;
                b[0].checked = a == d.$viewValue
            }, c.$observe("value", d.$render)
        }

        function lc(a, b, c, d) {
            var e = c.ngTrueValue,
                f = c.ngFalseValue;
            u(e) || (e = !0), u(f) || (f = !1), b.on("click", function() {
                a.$apply(function() {
                    d.$setViewValue(b[0].checked)
                })
            }), d.$render = function() {
                b[0].checked = d.$viewValue
            }, d.$isEmpty = function(a) {
                return a !== e
            }, d.$formatters.push(function(a) {
                return a === e
            }), d.$parsers.push(function(a) {
                return a ? e : f
            })
        }

        function mc(a, b) {
            return a = "ngClass" + a, ["$animate", function(c) {
                function d(a, b) {
                    var c = [];
                    a: for (var d = 0; d < a.length; d++) {
                        for (var e = a[d], f = 0; f < b.length; f++)
                            if (e == b[f]) continue a;
                        c.push(e)
                    }
                    return c
                }

                function e(a) {
                    if (Ec(a)) return a;
                    if (u(a)) return a.split(" ");
                    if (t(a)) {
                        var b = [];
                        return f(a, function(a, c) {
                            a && (b = b.concat(c.split(" ")))
                        }), b
                    }
                    return a
                }
                return {
                    restrict: "AC",
                    link: function(g, h, i) {
                        function j(a) {
                            var b = l(a, 1);
                            i.$addClass(b)
                        }

                        function k(a) {
                            var b = l(a, -1);
                            i.$removeClass(b)
                        }

                        function l(a, b) {
                            var c = h.data("$classCounts") || {},
                                d = [];
                            return f(a, function(a) {
                                (b > 0 || c[a]) && (c[a] = (c[a] || 0) + b, c[a] === +(b > 0) && d.push(a))
                            }), h.data("$classCounts", c), d.join(" ")
                        }

                        function m(a, b) {
                            var e = d(b, a),
                                f = d(a, b);
                            f = l(f, -1), e = l(e, 1), 0 === e.length ? c.removeClass(h, f) : 0 === f.length ? c.addClass(h, e) : c.setClass(h, e, f)
                        }

                        function n(a) {
                            if (b === !0 || g.$index % 2 === b) {
                                var c = e(a || []);
                                if (o) {
                                    if (!L(a, o)) {
                                        var d = e(o);
                                        m(d, c)
                                    }
                                } else j(c)
                            }
                            o = K(a)
                        }
                        var o;
                        g.$watch(i[a], n, !0), i.$observe("class", function(b) {
                            n(g.$eval(i[a]))
                        }), "ngClass" !== a && g.$watch("$index", function(c, d) {
                            var f = 1 & c;
                            if (f !== (1 & d)) {
                                var h = e(g.$eval(i[a]));
                                f === b ? j(h) : k(h)
                            }
                        })
                    }
                }
            }]
        }
        var nc = "validity",
            oc = function(a) {
                return u(a) ? a.toLowerCase() : a
            },
            pc = Object.prototype.hasOwnProperty,
            qc = function(a) {
                return u(a) ? a.toUpperCase() : a
            },
            rc = function(a) {
                return u(a) ? a.replace(/[A-Z]/g, function(a) {
                    return String.fromCharCode(32 | a.charCodeAt(0))
                }) : a
            },
            sc = function(a) {
                return u(a) ? a.replace(/[a-z]/g, function(a) {
                    return String.fromCharCode(-33 & a.charCodeAt(0))
                }) : a
            };
        "i" !== "I".toLowerCase() && (oc = rc, qc = sc);
        var tc, uc, vc, wc, xc, yc = [].slice,
            zc = [].push,
            Ac = Object.prototype.toString,
            Bc = d("ng"),
            Cc = a.angular || (a.angular = {}),
            Dc = ["0", "0", "0"];
        tc = m((/msie (\d+)/.exec(oc(navigator.userAgent)) || [])[1]), isNaN(tc) && (tc = m((/trident\/.*; rv:(\d+)/.exec(oc(navigator.userAgent)) || [])[1])), o.$inject = [], p.$inject = [];
        var Ec = function() {
                return x(Array.isArray) ? Array.isArray : function(a) {
                    return "[object Array]" === Ac.call(a)
                }
            }(),
            Fc = function() {
                return String.prototype.trim ? function(a) {
                    return u(a) ? a.trim() : a
                } : function(a) {
                    return u(a) ? a.replace(/^\s\s*/, "").replace(/\s\s*$/, "") : a
                }
            }();
        xc = 9 > tc ? function(a) {
            return a = a.nodeName ? a : a[0], a.scopeName && "HTML" != a.scopeName ? qc(a.scopeName + ":" + a.nodeName) : a.nodeName
        } : function(a) {
            return a.nodeName ? a.nodeName : a[0].nodeName
        };
        var Gc = function() {
                if (s(Gc.isActive_)) return Gc.isActive_;
                var a = !(!b.querySelector("[ng-csp]") && !b.querySelector("[data-ng-csp]"));
                if (!a) try {
                    new Function("")
                } catch (c) {
                    a = !0
                }
                return Gc.isActive_ = a
            },
            Hc = /[A-Z]/g,
            Ic = {
                full: "1.2.28",
                major: 1,
                minor: 2,
                dot: 28,
                codeName: "finnish-disembarkation"
            };
        oa.expando = "ng339";
        var Jc = oa.cache = {},
            Kc = 1,
            Lc = a.document.addEventListener ? function(a, b, c) {
                a.addEventListener(b, c, !1)
            } : function(a, b, c) {
                a.attachEvent("on" + b, c)
            },
            Mc = a.document.removeEventListener ? function(a, b, c) {
                a.removeEventListener(b, c, !1)
            } : function(a, b, c) {
                a.detachEvent("on" + b, c)
            },
            Nc = (oa._data = function(a) {
                return this.cache[a[this.expando]] || {}
            }, /([\:\-\_]+(.))/g),
            Oc = /^moz([A-Z])/,
            Pc = d("jqLite"),
            Qc = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
            Rc = /<|&#?\w+;/,
            Sc = /<([\w:]+)/,
            Tc = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
            Uc = {
                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, "", ""]
            };
        Uc.optgroup = Uc.option, Uc.tbody = Uc.tfoot = Uc.colgroup = Uc.caption = Uc.thead, Uc.th = Uc.td;
        var Vc = oa.prototype = {
                ready: function(c) {
                    function d() {
                        e || (e = !0, c())
                    }
                    var e = !1;
                    "complete" === b.readyState ? setTimeout(d) : (this.on("DOMContentLoaded", d), oa(a).on("load", d))
                },
                toString: function() {
                    var a = [];
                    return f(this, function(b) {
                        a.push("" + b)
                    }), "[" + a.join(", ") + "]"
                },
                eq: function(a) {
                    return uc(a >= 0 ? this[a] : this[this.length + a])
                },
                length: 0,
                push: zc,
                sort: [].sort,
                splice: [].splice
            },
            Wc = {};
        f("multiple,selected,checked,disabled,readOnly,required,open".split(","), function(a) {
            Wc[oc(a)] = a
        });
        var Xc = {};
        f("input,select,option,textarea,button,form,details".split(","), function(a) {
            Xc[qc(a)] = !0
        }), f({
            data: ua,
            removeData: sa
        }, function(a, b) {
            oa[b] = a
        }), f({
            data: ua,
            inheritedData: Aa,
            scope: function(a) {
                return uc.data(a, "$scope") || Aa(a.parentNode || a, ["$isolateScope", "$scope"])
            },
            isolateScope: function(a) {
                return uc.data(a, "$isolateScope") || uc.data(a, "$isolateScopeNoTemplate")
            },
            controller: za,
            injector: function(a) {
                return Aa(a, "$injector")
            },
            removeAttr: function(a, b) {
                a.removeAttribute(b)
            },
            hasClass: va,
            css: function(a, b, d) {
                if (b = ja(b), !s(d)) {
                    var e;
                    return 8 >= tc && (e = a.currentStyle && a.currentStyle[b], "" === e && (e = "auto")), e = e || a.style[b], 8 >= tc && (e = "" === e ? c : e), e
                }
                a.style[b] = d
            },
            attr: function(a, b, d) {
                var e = oc(b);
                if (Wc[e]) {
                    if (!s(d)) return a[b] || (a.attributes.getNamedItem(b) || o).specified ? e : c;
                    d ? (a[b] = !0, a.setAttribute(b, e)) : (a[b] = !1, a.removeAttribute(e))
                } else if (s(d)) a.setAttribute(b, d);
                else if (a.getAttribute) {
                    var f = a.getAttribute(b, 2);
                    return null === f ? c : f
                }
            },
            prop: function(a, b, c) {
                return s(c) ? void(a[b] = c) : a[b]
            },
            text: function() {
                function a(a, c) {
                    var d = b[a.nodeType];
                    return r(c) ? d ? a[d] : "" : void(a[d] = c)
                }
                var b = [];
                return 9 > tc ? (b[1] = "innerText", b[3] = "nodeValue") : b[1] = b[3] = "textContent", a.$dv = "", a
            }(),
            val: function(a, b) {
                if (r(b)) {
                    if ("SELECT" === xc(a) && a.multiple) {
                        var c = [];
                        return f(a.options, function(a) {
                            a.selected && c.push(a.value || a.text)
                        }), 0 === c.length ? null : c
                    }
                    return a.value
                }
                a.value = b
            },
            html: function(a, b) {
                if (r(b)) return a.innerHTML;
                for (var c = 0, d = a.childNodes; c < d.length; c++) qa(d[c]);
                a.innerHTML = b
            },
            empty: Ba
        }, function(a, b) {
            oa.prototype[b] = function(b, d) {
                var e, f, g = this.length;
                if (a !== Ba && (2 == a.length && a !== va && a !== za ? b : d) === c) {
                    if (t(b)) {
                        for (e = 0; g > e; e++)
                            if (a === ua) a(this[e], b);
                            else
                                for (f in b) a(this[e], f, b[f]);
                        return this
                    }
                    for (var h = a.$dv, i = h === c ? Math.min(g, 1) : g, j = 0; i > j; j++) {
                        var k = a(this[j], b, d);
                        h = h ? h + k : k
                    }
                    return h
                }
                for (e = 0; g > e; e++) a(this[e], b, d);
                return this
            }
        }), f({
            removeData: sa,
            dealoc: qa,
            on: function Ee(a, c, d, e) {
                if (s(e)) throw Pc("onargs", "jqLite#on() does not support the `selector` or `eventData` parameters");
                var g = ta(a, "events"),
                    h = ta(a, "handle");
                g || ta(a, "events", g = {}), h || ta(a, "handle", h = Da(a, g)), f(c.split(" "), function(c) {
                    var e = g[c];
                    if (!e) {
                        if ("mouseenter" == c || "mouseleave" == c) {
                            var f = b.body.contains || b.body.compareDocumentPosition ? function(a, b) {
                                var c = 9 === a.nodeType ? a.documentElement : a,
                                    d = b && b.parentNode;
                                return a === d || !(!d || 1 !== d.nodeType || !(c.contains ? c.contains(d) : a.compareDocumentPosition && 16 & a.compareDocumentPosition(d)))
                            } : function(a, b) {
                                if (b)
                                    for (; b = b.parentNode;)
                                        if (b === a) return !0;
                                return !1
                            };
                            g[c] = [];
                            var i = {
                                mouseleave: "mouseout",
                                mouseenter: "mouseover"
                            };
                            Ee(a, i[c], function(a) {
                                var b = this,
                                    d = a.relatedTarget;
                                (!d || d !== b && !f(b, d)) && h(a, c)
                            })
                        } else Lc(a, c, h), g[c] = [];
                        e = g[c]
                    }
                    e.push(d)
                })
            },
            off: ra,
            one: function(a, b, c) {
                a = uc(a), a.on(b, function d() {
                    a.off(b, c), a.off(b, d)
                }), a.on(b, c)
            },
            replaceWith: function(a, b) {
                var c, d = a.parentNode;
                qa(a), f(new oa(b), function(b) {
                    c ? d.insertBefore(b, c.nextSibling) : d.replaceChild(b, a), c = b
                })
            },
            children: function(a) {
                var b = [];
                return f(a.childNodes, function(a) {
                    1 === a.nodeType && b.push(a)
                }), b
            },
            contents: function(a) {
                return a.contentDocument || a.childNodes || []
            },
            append: function(a, b) {
                f(new oa(b), function(b) {
                    (1 === a.nodeType || 11 === a.nodeType) && a.appendChild(b)
                })
            },
            prepend: function(a, b) {
                if (1 === a.nodeType) {
                    var c = a.firstChild;
                    f(new oa(b), function(b) {
                        a.insertBefore(b, c)
                    })
                }
            },
            wrap: function(a, b) {
                b = uc(b)[0];
                var c = a.parentNode;
                c && c.replaceChild(b, a), b.appendChild(a)
            },
            remove: function(a) {
                qa(a);
                var b = a.parentNode;
                b && b.removeChild(a)
            },
            after: function(a, b) {
                var c = a,
                    d = a.parentNode;
                f(new oa(b), function(a) {
                    d.insertBefore(a, c.nextSibling), c = a
                })
            },
            addClass: xa,
            removeClass: wa,
            toggleClass: function(a, b, c) {
                b && f(b.split(" "), function(b) {
                    var d = c;
                    r(d) && (d = !va(a, b)), (d ? xa : wa)(a, b)
                })
            },
            parent: function(a) {
                var b = a.parentNode;
                return b && 11 !== b.nodeType ? b : null
            },
            next: function(a) {
                if (a.nextElementSibling) return a.nextElementSibling;
                for (var b = a.nextSibling; null != b && 1 !== b.nodeType;) b = b.nextSibling;
                return b
            },
            find: function(a, b) {
                return a.getElementsByTagName ? a.getElementsByTagName(b) : []
            },
            clone: pa,
            triggerHandler: function(a, b, c) {
                var d, e, g, h = b.type || b,
                    i = (ta(a, "events") || {})[h];
                i && (d = {
                    preventDefault: function() {
                        this.defaultPrevented = !0
                    },
                    isDefaultPrevented: function() {
                        return this.defaultPrevented === !0
                    },
                    stopPropagation: o,
                    type: h,
                    target: a
                }, b.type && (d = l(d, b)), e = K(i), g = c ? [d].concat(c) : [d], f(e, function(b) {
                    b.apply(a, g)
                }))
            }
        }, function(a, b) {
            oa.prototype[b] = function(b, c, d) {
                for (var e, f = 0; f < this.length; f++) r(e) ? (e = a(this[f], b, c, d), s(e) && (e = uc(e))) : ya(e, a(this[f], b, c, d));
                return s(e) ? e : this
            }, oa.prototype.bind = oa.prototype.on, oa.prototype.unbind = oa.prototype.off
        }), Fa.prototype = {
            put: function(a, b) {
                this[Ea(a, this.nextUid)] = b
            },
            get: function(a) {
                return this[Ea(a, this.nextUid)]
            },
            remove: function(a) {
                var b = this[a = Ea(a, this.nextUid)];
                return delete this[a], b
            }
        };
        var Yc = /^function\s*[^\(]*\(\s*([^\)]*)\)/m,
            Zc = /,/,
            $c = /^\s*(_?)(\S+?)\1\s*$/,
            _c = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,
            ad = d("$injector"),
            bd = d("$animate"),
            cd = ["$provide", function(a) {
                this.$$selectors = {}, this.register = function(b, c) {
                    var d = b + "-animation";
                    if (b && "." != b.charAt(0)) throw bd("notcsel", "Expecting class selector starting with '.' got '{0}'.", b);
                    this.$$selectors[b.substr(1)] = d, a.factory(d, c)
                }, this.classNameFilter = function(a) {
                    return 1 === arguments.length && (this.$$classNameFilter = a instanceof RegExp ? a : null), this.$$classNameFilter
                }, this.$get = ["$timeout", "$$asyncCallback", function(a, b) {
                    function c(a) {
                        a && b(a)
                    }
                    return {
                        enter: function(a, b, d, e) {
                            d ? d.after(a) : (b && b[0] || (b = d.parent()), b.append(a)), c(e)
                        },
                        leave: function(a, b) {
                            a.remove(), c(b)
                        },
                        move: function(a, b, c, d) {
                            this.enter(a, b, c, d)
                        },
                        addClass: function(a, b, d) {
                            b = u(b) ? b : Ec(b) ? b.join(" ") : "", f(a, function(a) {
                                xa(a, b)
                            }), c(d)
                        },
                        removeClass: function(a, b, d) {
                            b = u(b) ? b : Ec(b) ? b.join(" ") : "", f(a, function(a) {
                                wa(a, b)
                            }), c(d)
                        },
                        setClass: function(a, b, d, e) {
                            f(a, function(a) {
                                xa(a, b), wa(a, d)
                            }), c(e)
                        },
                        enabled: o
                    }
                }]
            }],
            dd = d("$compile");
        Oa.$inject = ["$provide", "$$sanitizeUriProvider"];
        var ed = /^(x[\:\-_]|data[\:\-_])/i,
            fd = d("$interpolate"),
            gd = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/,
            hd = {
                http: 80,
                https: 443,
                ftp: 21
            },
            id = d("$location");
        mb.prototype = lb.prototype = kb.prototype = {
            $$html5: !1,
            $$replace: !1,
            absUrl: nb("$$absUrl"),
            url: function(a) {
                if (r(a)) return this.$$url;
                var b = gd.exec(a);
                return b[1] && this.path(decodeURIComponent(b[1])), (b[2] || b[1]) && this.search(b[3] || ""), this.hash(b[5] || ""), this
            },
            protocol: nb("$$protocol"),
            host: nb("$$host"),
            port: nb("$$port"),
            path: ob("$$path", function(a) {
                return a = null !== a ? a.toString() : "", "/" == a.charAt(0) ? a : "/" + a
            }),
            search: function(a, b) {
                switch (arguments.length) {
                    case 0:
                        return this.$$search;
                    case 1:
                        if (u(a) || v(a)) a = a.toString(), this.$$search = V(a);
                        else {
                            if (!t(a)) throw id("isrcharg", "The first argument of the `$location#search()` call must be a string or an object.");
                            f(a, function(b, c) {
                                null == b && delete a[c]
                            }), this.$$search = a
                        }
                        break;
                    default:
                        r(b) || null === b ? delete this.$$search[a] : this.$$search[a] = b
                }
                return this.$$compose(), this
            },
            hash: ob("$$hash", function(a) {
                return null !== a ? a.toString() : ""
            }),
            replace: function() {
                return this.$$replace = !0, this
            }
        };
        var jd, kd = d("$parse"),
            ld = {},
            md = Function.prototype.call,
            nd = Function.prototype.apply,
            od = Function.prototype.bind,
            pd = {
                "null": function() {
                    return null
                },
                "true": function() {
                    return !0
                },
                "false": function() {
                    return !1
                },
                undefined: o,
                "+": function(a, b, d, e) {
                    return d = d(a, b), e = e(a, b), s(d) ? s(e) ? d + e : d : s(e) ? e : c
                },
                "-": function(a, b, c, d) {
                    return c = c(a, b), d = d(a, b), (s(c) ? c : 0) - (s(d) ? d : 0)
                },
                "*": function(a, b, c, d) {
                    return c(a, b) * d(a, b)
                },
                "/": function(a, b, c, d) {
                    return c(a, b) / d(a, b)
                },
                "%": function(a, b, c, d) {
                    return c(a, b) % d(a, b)
                },
                "^": function(a, b, c, d) {
                    return c(a, b) ^ d(a, b)
                },
                "=": o,
                "===": function(a, b, c, d) {
                    return c(a, b) === d(a, b)
                },
                "!==": function(a, b, c, d) {
                    return c(a, b) !== d(a, b)
                },
                "==": function(a, b, c, d) {
                    return c(a, b) == d(a, b)
                },
                "!=": function(a, b, c, d) {
                    return c(a, b) != d(a, b)
                },
                "<": function(a, b, c, d) {
                    return c(a, b) < d(a, b)
                },
                ">": function(a, b, c, d) {
                    return c(a, b) > d(a, b)
                },
                "<=": function(a, b, c, d) {
                    return c(a, b) <= d(a, b)
                },
                ">=": function(a, b, c, d) {
                    return c(a, b) >= d(a, b)
                },
                "&&": function(a, b, c, d) {
                    return c(a, b) && d(a, b)
                },
                "||": function(a, b, c, d) {
                    return c(a, b) || d(a, b)
                },
                "&": function(a, b, c, d) {
                    return c(a, b) & d(a, b)
                },
                "|": function(a, b, c, d) {
                    return d(a, b)(a, b, c(a, b))
                },
                "!": function(a, b, c) {
                    return !c(a, b)
                }
            },
            qd = {
                n: "\n",
                f: "\f",
                r: "\r",
                t: "	",
                v: "",
                "'": "'",
                '"': '"'
            },
            rd = function(a) {
                this.options = a
            };
        rd.prototype = {
            constructor: rd,
            lex: function(a) {
                for (this.text = a, this.index = 0, this.ch = c, this.lastCh = ":", this.tokens = []; this.index < this.text.length;) {
                    if (this.ch = this.text.charAt(this.index), this.is("\"'")) this.readString(this.ch);
                    else if (this.isNumber(this.ch) || this.is(".") && this.isNumber(this.peek())) this.readNumber();
                    else if (this.isIdent(this.ch)) this.readIdent();
                    else if (this.is("(){}[].,;:?")) this.tokens.push({
                        index: this.index,
                        text: this.ch
                    }), this.index++;
                    else {
                        if (this.isWhitespace(this.ch)) {
                            this.index++;
                            continue
                        }
                        var b = this.ch + this.peek(),
                            d = b + this.peek(2),
                            e = pd[this.ch],
                            f = pd[b],
                            g = pd[d];
                        g ? (this.tokens.push({
                            index: this.index,
                            text: d,
                            fn: g
                        }), this.index += 3) : f ? (this.tokens.push({
                            index: this.index,
                            text: b,
                            fn: f
                        }), this.index += 2) : e ? (this.tokens.push({
                            index: this.index,
                            text: this.ch,
                            fn: e
                        }), this.index += 1) : this.throwError("Unexpected next character ", this.index, this.index + 1)
                    }
                    this.lastCh = this.ch
                }
                return this.tokens
            },
            is: function(a) {
                return -1 !== a.indexOf(this.ch)
            },
            was: function(a) {
                return -1 !== a.indexOf(this.lastCh)
            },
            peek: function(a) {
                var b = a || 1;
                return this.index + b < this.text.length ? this.text.charAt(this.index + b) : !1
            },
            isNumber: function(a) {
                return a >= "0" && "9" >= a
            },
            isWhitespace: function(a) {
                return " " === a || "\r" === a || "	" === a || "\n" === a || "" === a || " " === a
            },
            isIdent: function(a) {
                return a >= "a" && "z" >= a || a >= "A" && "Z" >= a || "_" === a || "$" === a
            },
            isExpOperator: function(a) {
                return "-" === a || "+" === a || this.isNumber(a)
            },
            throwError: function(a, b, c) {
                c = c || this.index;
                var d = s(b) ? "s " + b + "-" + this.index + " [" + this.text.substring(b, c) + "]" : " " + c;
                throw kd("lexerr", "Lexer Error: {0} at column{1} in expression [{2}].", a, d, this.text)
            },
            readNumber: function() {
                for (var a = "", b = this.index; this.index < this.text.length;) {
                    var c = oc(this.text.charAt(this.index));
                    if ("." == c || this.isNumber(c)) a += c;
                    else {
                        var d = this.peek();
                        if ("e" == c && this.isExpOperator(d)) a += c;
                        else if (this.isExpOperator(c) && d && this.isNumber(d) && "e" == a.charAt(a.length - 1)) a += c;
                        else {
                            if (!this.isExpOperator(c) || d && this.isNumber(d) || "e" != a.charAt(a.length - 1)) break;
                            this.throwError("Invalid exponent")
                        }
                    }
                    this.index++
                }
                a = 1 * a, this.tokens.push({
                    index: b,
                    text: a,
                    literal: !0,
                    constant: !0,
                    fn: function() {
                        return a
                    }
                })
            },
            readIdent: function() {
                for (var a, b, c, d, e = this, f = "", g = this.index; this.index < this.text.length && (d = this.text.charAt(this.index), "." === d || this.isIdent(d) || this.isNumber(d));) "." === d && (a = this.index), f += d, this.index++;
                if (a)
                    for (b = this.index; b < this.text.length;) {
                        if (d = this.text.charAt(b), "(" === d) {
                            c = f.substr(a - g + 1), f = f.substr(0, a - g), this.index = b;
                            break
                        }
                        if (!this.isWhitespace(d)) break;
                        b++
                    }
                var h = {
                    index: g,
                    text: f
                };
                if (pd.hasOwnProperty(f)) h.fn = pd[f], h.literal = !0, h.constant = !0;
                else {
                    var i = yb(f, this.options, this.text);
                    h.fn = l(function(a, b) {
                        return i(a, b)
                    }, {
                        assign: function(a, b) {
                            return ub(a, f, b, e.text, e.options)
                        }
                    })
                }
                this.tokens.push(h), c && (this.tokens.push({
                    index: a,
                    text: "."
                }), this.tokens.push({
                    index: a + 1,
                    text: c
                }))
            },
            readString: function(a) {
                var b = this.index;
                this.index++;
                for (var c = "", d = a, e = !1; this.index < this.text.length;) {
                    var f = this.text.charAt(this.index);
                    if (d += f, e) {
                        if ("u" === f) {
                            var g = this.text.substring(this.index + 1, this.index + 5);
                            g.match(/[\da-f]{4}/i) || this.throwError("Invalid unicode escape [\\u" + g + "]"), this.index += 4, c += String.fromCharCode(parseInt(g, 16))
                        } else {
                            var h = qd[f];
                            c += h || f
                        }
                        e = !1
                    } else if ("\\" === f) e = !0;
                    else {
                        if (f === a) return this.index++, void this.tokens.push({
                            index: b,
                            text: d,
                            string: c,
                            literal: !0,
                            constant: !0,
                            fn: function() {
                                return c
                            }
                        });
                        c += f
                    }
                    this.index++
                }
                this.throwError("Unterminated quote", b)
            }
        };
        var sd = function(a, b, c) {
            this.lexer = a, this.$filter = b, this.options = c
        };
        sd.ZERO = l(function() {
            return 0
        }, {
            constant: !0
        }), sd.prototype = {
            constructor: sd,
            parse: function(a) {
                this.text = a, this.tokens = this.lexer.lex(a);
                var b = this.statements();
                return 0 !== this.tokens.length && this.throwError("is an unexpected token", this.tokens[0]), b.literal = !!b.literal, b.constant = !!b.constant, b
            },
            primary: function() {
                var a;
                if (this.expect("(")) a = this.filterChain(), this.consume(")");
                else if (this.expect("[")) a = this.arrayDeclaration();
                else if (this.expect("{")) a = this.object();
                else {
                    var b = this.expect();
                    a = b.fn, a || this.throwError("not a primary expression", b), a.literal = !!b.literal, a.constant = !!b.constant
                }
                for (var c, d; c = this.expect("(", "[", ".");) "(" === c.text ? (a = this.functionCall(a, d), d = null) : "[" === c.text ? (d = a, a = this.objectIndex(a)) : "." === c.text ? (d = a, a = this.fieldAccess(a)) : this.throwError("IMPOSSIBLE");
                return a
            },
            throwError: function(a, b) {
                throw kd("syntax", "Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].", b.text, a, b.index + 1, this.text, this.text.substring(b.index))
            },
            peekToken: function() {
                if (0 === this.tokens.length) throw kd("ueoe", "Unexpected end of expression: {0}", this.text);
                return this.tokens[0]
            },
            peek: function(a, b, c, d) {
                if (this.tokens.length > 0) {
                    var e = this.tokens[0],
                        f = e.text;
                    if (f === a || f === b || f === c || f === d || !a && !b && !c && !d) return e
                }
                return !1
            },
            expect: function(a, b, c, d) {
                var e = this.peek(a, b, c, d);
                return e ? (this.tokens.shift(), e) : !1
            },
            consume: function(a) {
                this.expect(a) || this.throwError("is unexpected, expecting [" + a + "]", this.peek())
            },
            unaryFn: function(a, b) {
                return l(function(c, d) {
                    return a(c, d, b)
                }, {
                    constant: b.constant
                })
            },
            ternaryFn: function(a, b, c) {
                return l(function(d, e) {
                    return a(d, e) ? b(d, e) : c(d, e)
                }, {
                    constant: a.constant && b.constant && c.constant
                })
            },
            binaryFn: function(a, b, c) {
                return l(function(d, e) {
                    return b(d, e, a, c)
                }, {
                    constant: a.constant && c.constant
                })
            },
            statements: function() {
                for (var a = [];;)
                    if (this.tokens.length > 0 && !this.peek("}", ")", ";", "]") && a.push(this.filterChain()), !this.expect(";")) return 1 === a.length ? a[0] : function(b, c) {
                        for (var d, e = 0; e < a.length; e++) {
                            var f = a[e];
                            f && (d = f(b, c))
                        }
                        return d
                    }
            },
            filterChain: function() {
                for (var a, b = this.expression();;) {
                    if (!(a = this.expect("|"))) return b;
                    b = this.binaryFn(b, a.fn, this.filter())
                }
            },
            filter: function() {
                for (var a = this.expect(), b = this.$filter(a.text), c = [];;) {
                    if (!(a = this.expect(":"))) {
                        var d = function(a, d, e) {
                            for (var f = [e], g = 0; g < c.length; g++) f.push(c[g](a, d));
                            return b.apply(a, f)
                        };
                        return function() {
                            return d
                        }
                    }
                    c.push(this.expression())
                }
            },
            expression: function() {
                return this.assignment()
            },
            assignment: function() {
                var a, b, c = this.ternary();
                return (b = this.expect("=")) ? (c.assign || this.throwError("implies assignment but [" + this.text.substring(0, b.index) + "] can not be assigned to", b), a = this.ternary(), function(b, d) {
                    return c.assign(b, a(b, d), d)
                }) : c
            },
            ternary: function() {
                var a, b, c = this.logicalOR();
                return (b = this.expect("?")) ? (a = this.assignment(), (b = this.expect(":")) ? this.ternaryFn(c, a, this.assignment()) : void this.throwError("expected :", b)) : c
            },
            logicalOR: function() {
                for (var a, b = this.logicalAND();;) {
                    if (!(a = this.expect("||"))) return b;
                    b = this.binaryFn(b, a.fn, this.logicalAND())
                }
            },
            logicalAND: function() {
                var a, b = this.equality();
                return (a = this.expect("&&")) && (b = this.binaryFn(b, a.fn, this.logicalAND())), b
            },
            equality: function() {
                var a, b = this.relational();
                return (a = this.expect("==", "!=", "===", "!==")) && (b = this.binaryFn(b, a.fn, this.equality())), b
            },
            relational: function() {
                var a, b = this.additive();
                return (a = this.expect("<", ">", "<=", ">=")) && (b = this.binaryFn(b, a.fn, this.relational())), b
            },
            additive: function() {
                for (var a, b = this.multiplicative(); a = this.expect("+", "-");) b = this.binaryFn(b, a.fn, this.multiplicative());
                return b
            },
            multiplicative: function() {
                for (var a, b = this.unary(); a = this.expect("*", "/", "%");) b = this.binaryFn(b, a.fn, this.unary());
                return b
            },
            unary: function() {
                var a;
                return this.expect("+") ? this.primary() : (a = this.expect("-")) ? this.binaryFn(sd.ZERO, a.fn, this.unary()) : (a = this.expect("!")) ? this.unaryFn(a.fn, this.unary()) : this.primary()
            },
            fieldAccess: function(a) {
                var b = this,
                    c = this.expect().text,
                    d = yb(c, this.options, this.text);
                return l(function(b, c, e) {
                    return d(e || a(b, c))
                }, {
                    assign: function(d, e, f) {
                        var g = a(d, f);
                        return g || a.assign(d, g = {}), ub(g, c, e, b.text, b.options)
                    }
                })
            },
            objectIndex: function(a) {
                var b = this,
                    d = this.expression();
                return this.consume("]"), l(function(e, f) {
                    var g, h, i = a(e, f),
                        j = d(e, f);
                    return rb(j, b.text), i ? (g = sb(i[j], b.text), g && g.then && b.options.unwrapPromises && (h = g, "$$v" in g || (h.$$v = c, h.then(function(a) {
                        h.$$v = a
                    })), g = g.$$v), g) : c
                }, {
                    assign: function(c, e, f) {
                        var g = rb(d(c, f), b.text),
                            h = sb(a(c, f), b.text);
                        return h || a.assign(c, h = {}), h[g] = e
                    }
                })
            },
            functionCall: function(a, b) {
                var c = [];
                if (")" !== this.peekToken().text)
                    do c.push(this.expression()); while (this.expect(","));
                this.consume(")");
                var d = this;
                return function(e, f) {
                    for (var g = [], h = b ? b(e, f) : e, i = 0; i < c.length; i++) g.push(sb(c[i](e, f), d.text));
                    var j = a(e, f, h) || o;
                    sb(h, d.text), tb(j, d.text);
                    var k = j.apply ? j.apply(h, g) : j(g[0], g[1], g[2], g[3], g[4]);
                    return sb(k, d.text)
                }
            },
            arrayDeclaration: function() {
                var a = [],
                    b = !0;
                if ("]" !== this.peekToken().text)
                    do {
                        if (this.peek("]")) break;
                        var c = this.expression();
                        a.push(c), c.constant || (b = !1)
                    } while (this.expect(","));
                return this.consume("]"), l(function(b, c) {
                    for (var d = [], e = 0; e < a.length; e++) d.push(a[e](b, c));
                    return d
                }, {
                    literal: !0,
                    constant: b
                })
            },
            object: function() {
                var a = [],
                    b = !0;
                if ("}" !== this.peekToken().text)
                    do {
                        if (this.peek("}")) break;
                        var c = this.expect(),
                            d = c.string || c.text;
                        this.consume(":");
                        var e = this.expression();
                        a.push({
                            key: d,
                            value: e
                        }), e.constant || (b = !1)
                    } while (this.expect(","));
                return this.consume("}"), l(function(b, c) {
                    for (var d = {}, e = 0; e < a.length; e++) {
                        var f = a[e];
                        d[f.key] = f.value(b, c)
                    }
                    return d
                }, {
                    literal: !0,
                    constant: b
                })
            }
        };
        var td = {},
            ud = {},
            vd = d("$sce"),
            wd = {
                HTML: "html",
                CSS: "css",
                URL: "url",
                RESOURCE_URL: "resourceUrl",
                JS: "js"
            },
            xd = b.createElement("a"),
            yd = Mb(a.location.href, !0);
        Pb.$inject = ["$provide"], Rb.$inject = ["$locale"], Sb.$inject = ["$locale"];
        var zd = ".",
            Ad = {
                yyyy: Vb("FullYear", 4),
                yy: Vb("FullYear", 2, 0, !0),
                y: Vb("FullYear", 1),
                MMMM: Wb("Month"),
                MMM: Wb("Month", !0),
                MM: Vb("Month", 2, 1),
                M: Vb("Month", 1, 1),
                dd: Vb("Date", 2),
                d: Vb("Date", 1),
                HH: Vb("Hours", 2),
                H: Vb("Hours", 1),
                hh: Vb("Hours", 2, -12),
                h: Vb("Hours", 1, -12),
                mm: Vb("Minutes", 2),
                m: Vb("Minutes", 1),
                ss: Vb("Seconds", 2),
                s: Vb("Seconds", 1),
                sss: Vb("Milliseconds", 3),
                EEEE: Wb("Day"),
                EEE: Wb("Day", !0),
                a: Yb,
                Z: Xb
            },
            Bd = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,
            Cd = /^\-?\d+$/;
        Zb.$inject = ["$locale"];
        var Dd = q(oc),
            Ed = q(qc);
        ac.$inject = ["$parse"];
        var Fd = q({
                restrict: "E",
                compile: function(a, c) {
                    return 8 >= tc && (c.href || c.name || c.$set("href", ""), a.append(b.createComment("IE fix"))), c.href || c.xlinkHref || c.name ? void 0 : function(a, b) {
                        var c = "[object SVGAnimatedString]" === Ac.call(b.prop("href")) ? "xlink:href" : "href";
                        b.on("click", function(a) {
                            b.attr(c) || a.preventDefault()
                        })
                    }
                }
            }),
            Gd = {};
        f(Wc, function(a, b) {
            if ("multiple" != a) {
                var c = Pa("ng-" + b);
                Gd[c] = function() {
                    return {
                        priority: 100,
                        link: function(a, d, e) {
                            a.$watch(e[c], function(a) {
                                e.$set(b, !!a)
                            })
                        }
                    }
                }
            }
        }), f(["src", "srcset", "href"], function(a) {
            var b = Pa("ng-" + a);
            Gd[b] = function() {
                return {
                    priority: 99,
                    link: function(c, d, e) {
                        var f = a,
                            g = a;
                        "href" === a && "[object SVGAnimatedString]" === Ac.call(d.prop("href")) && (g = "xlinkHref", e.$attr[g] = "xlink:href", f = null), e.$observe(b, function(b) {
                            return b ? (e.$set(g, b), void(tc && f && d.prop(f, e[g]))) : void("href" === a && e.$set(g, null))
                        })
                    }
                }
            }
        });
        var Hd = {
            $addControl: o,
            $removeControl: o,
            $setValidity: o,
            $setDirty: o,
            $setPristine: o
        };
        cc.$inject = ["$element", "$attrs", "$scope", "$animate"];
        var Id = function(a) {
                return ["$timeout", function(b) {
                    var d = {
                        name: "form",
                        restrict: a ? "EAC" : "E",
                        controller: cc,
                        compile: function() {
                            return {
                                pre: function(a, d, e, f) {
                                    if (!e.action) {
                                        var g = function(a) {
                                            a.preventDefault ? a.preventDefault() : a.returnValue = !1
                                        };
                                        Lc(d[0], "submit", g), d.on("$destroy", function() {
                                            b(function() {
                                                Mc(d[0], "submit", g)
                                            }, 0, !1)
                                        })
                                    }
                                    var h = d.parent().controller("form"),
                                        i = e.name || e.ngForm;
                                    i && ub(a, i, f, i), h && d.on("$destroy", function() {
                                        h.$removeControl(f), i && ub(a, i, c, i), l(f, Hd)
                                    })
                                }
                            }
                        }
                    };
                    return d
                }]
            },
            Jd = Id(),
            Kd = Id(!0),
            Ld = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,
            Md = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,
            Nd = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,
            Od = {
                text: gc,
                number: hc,
                url: ic,
                email: jc,
                radio: kc,
                checkbox: lc,
                hidden: o,
                button: o,
                submit: o,
                reset: o,
                file: o
            },
            Pd = ["badInput"],
            Qd = ["$browser", "$sniffer", function(a, b) {
                return {
                    restrict: "E",
                    require: "?ngModel",
                    link: function(c, d, e, f) {
                        f && (Od[oc(e.type)] || Od.text)(c, d, e, f, b, a)
                    }
                }
            }],
            Rd = "ng-valid",
            Sd = "ng-invalid",
            Td = "ng-pristine",
            Ud = "ng-dirty",
            Vd = ["$scope", "$exceptionHandler", "$attrs", "$element", "$parse", "$animate", function(a, b, c, e, g, h) {
                function i(a, b) {
                    b = b ? "-" + _(b, "-") : "", h.removeClass(e, (a ? Sd : Rd) + b), h.addClass(e, (a ? Rd : Sd) + b)
                }
                this.$viewValue = Number.NaN, this.$modelValue = Number.NaN, this.$parsers = [], this.$formatters = [], this.$viewChangeListeners = [], this.$pristine = !0, this.$dirty = !1, this.$valid = !0, this.$invalid = !1, this.$name = c.name;
                var j = g(c.ngModel),
                    k = j.assign;
                if (!k) throw d("ngModel")("nonassign", "Expression '{0}' is non-assignable. Element: {1}", c.ngModel, T(e));
                this.$render = o, this.$isEmpty = function(a) {
                    return r(a) || "" === a || null === a || a !== a
                };
                var l = e.inheritedData("$formController") || Hd,
                    m = 0,
                    n = this.$error = {};
                e.addClass(Td), i(!0), this.$setValidity = function(a, b) {
                    n[a] !== !b && (b ? (n[a] && m--, m || (i(!0), this.$valid = !0, this.$invalid = !1)) : (i(!1), this.$invalid = !0, this.$valid = !1, m++), n[a] = !b, i(b, a), l.$setValidity(a, b, this))
                }, this.$setPristine = function() {
                    this.$dirty = !1, this.$pristine = !0, h.removeClass(e, Ud), h.addClass(e, Td)
                }, this.$setViewValue = function(c) {
                    this.$viewValue = c, this.$pristine && (this.$dirty = !0, this.$pristine = !1, h.removeClass(e, Td), h.addClass(e, Ud), l.$setDirty()), f(this.$parsers, function(a) {
                        c = a(c)
                    }), this.$modelValue !== c && (this.$modelValue = c, k(a, c), f(this.$viewChangeListeners, function(a) {
                        try {
                            a()
                        } catch (c) {
                            b(c)
                        }
                    }))
                };
                var p = this;
                a.$watch(function() {
                    var b = j(a);
                    if (p.$modelValue !== b) {
                        var c = p.$formatters,
                            d = c.length;
                        for (p.$modelValue = b; d--;) b = c[d](b);
                        p.$viewValue !== b && (p.$viewValue = b, p.$render())
                    }
                    return b
                })
            }],
            Wd = function() {
                return {
                    require: ["ngModel", "^?form"],
                    controller: Vd,
                    link: function(a, b, c, d) {
                        var e = d[0],
                            f = d[1] || Hd;
                        f.$addControl(e), a.$on("$destroy", function() {
                            f.$removeControl(e)
                        })
                    }
                }
            },
            Xd = q({
                require: "ngModel",
                link: function(a, b, c, d) {
                    d.$viewChangeListeners.push(function() {
                        a.$eval(c.ngChange)
                    })
                }
            }),
            Yd = function() {
                return {
                    require: "?ngModel",
                    link: function(a, b, c, d) {
                        if (d) {
                            c.required = !0;
                            var e = function(a) {
                                return c.required && d.$isEmpty(a) ? void d.$setValidity("required", !1) : (d.$setValidity("required", !0), a)
                            };
                            d.$formatters.push(e), d.$parsers.unshift(e), c.$observe("required", function() {
                                e(d.$viewValue)
                            })
                        }
                    }
                }
            },
            Zd = function() {
                return {
                    require: "ngModel",
                    link: function(a, b, d, e) {
                        var g = /\/(.*)\//.exec(d.ngList),
                            h = g && new RegExp(g[1]) || d.ngList || ",",
                            i = function(a) {
                                if (!r(a)) {
                                    var b = [];
                                    return a && f(a.split(h), function(a) {
                                        a && b.push(Fc(a))
                                    }), b
                                }
                            };
                        e.$parsers.push(i), e.$formatters.push(function(a) {
                            return Ec(a) ? a.join(", ") : c
                        }), e.$isEmpty = function(a) {
                            return !a || !a.length
                        }
                    }
                }
            },
            $d = /^(true|false|\d+)$/,
            _d = function() {
                return {
                    priority: 100,
                    compile: function(a, b) {
                        return $d.test(b.ngValue) ? function(a, b, c) {
                            c.$set("value", a.$eval(c.ngValue))
                        } : function(a, b, c) {
                            a.$watch(c.ngValue, function(a) {
                                c.$set("value", a)
                            })
                        }
                    }
                }
            },
            ae = bc({
                compile: function(a) {
                    return a.addClass("ng-binding"),
                        function(a, b, d) {
                            b.data("$binding", d.ngBind), a.$watch(d.ngBind, function(a) {
                                b.text(a == c ? "" : a)
                            })
                        }
                }
            }),
            be = ["$interpolate", function(a) {
                return function(b, c, d) {
                    var e = a(c.attr(d.$attr.ngBindTemplate));
                    c.addClass("ng-binding").data("$binding", e), d.$observe("ngBindTemplate", function(a) {
                        c.text(a)
                    })
                }
            }],
            ce = ["$sce", "$parse", function(a, b) {
                return {
                    compile: function(c) {
                        return c.addClass("ng-binding"),
                            function(c, d, e) {
                                function f() {
                                    return (g(c) || "").toString()
                                }
                                d.data("$binding", e.ngBindHtml);
                                var g = b(e.ngBindHtml);
                                c.$watch(f, function(b) {
                                    d.html(a.getTrustedHtml(g(c)) || "")
                                })
                            }
                    }
                }
            }],
            de = mc("", !0),
            ee = mc("Odd", 0),
            fe = mc("Even", 1),
            ge = bc({
                compile: function(a, b) {
                    b.$set("ngCloak", c), a.removeClass("ng-cloak")
                }
            }),
            he = [function() {
                return {
                    scope: !0,
                    controller: "@",
                    priority: 500
                }
            }],
            ie = {},
            je = {
                blur: !0,
                focus: !0
            };
        f("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "), function(a) {
            var b = Pa("ng-" + a);
            ie[b] = ["$parse", "$rootScope", function(c, d) {
                return {
                    compile: function(e, f) {
                        var g = c(f[b], !0);
                        return function(b, c) {
                            c.on(a, function(c) {
                                var e = function() {
                                    g(b, {
                                        $event: c
                                    })
                                };
                                je[a] && d.$$phase ? b.$evalAsync(e) : b.$apply(e)
                            })
                        }
                    }
                }
            }]
        });
        var ke = ["$animate", function(a) {
                return {
                    transclude: "element",
                    priority: 600,
                    terminal: !0,
                    restrict: "A",
                    $$tlb: !0,
                    link: function(c, d, e, f, g) {
                        var h, i, j;
                        c.$watch(e.ngIf, function(f) {
                            S(f) ? i || (i = c.$new(), g(i, function(c) {
                                c[c.length++] = b.createComment(" end ngIf: " + e.ngIf + " "), h = {
                                    clone: c
                                }, a.enter(c, d.parent(), d)
                            })) : (j && (j.remove(), j = null), i && (i.$destroy(), i = null), h && (j = fa(h.clone), a.leave(j, function() {
                                j = null
                            }), h = null))
                        })
                    }
                }
            }],
            le = ["$http", "$templateCache", "$anchorScroll", "$animate", "$sce", function(a, b, c, d, e) {
                return {
                    restrict: "ECA",
                    priority: 400,
                    terminal: !0,
                    transclude: "element",
                    controller: Cc.noop,
                    compile: function(f, g) {
                        var h = g.ngInclude || g.src,
                            i = g.onload || "",
                            j = g.autoscroll;
                        return function(f, g, k, l, m) {
                            var n, o, p, q = 0,
                                r = function() {
                                    o && (o.remove(), o = null), n && (n.$destroy(), n = null), p && (d.leave(p, function() {
                                        o = null
                                    }), o = p, p = null)
                                };
                            f.$watch(e.parseAsResourceUrl(h), function(e) {
                                var h = function() {
                                        !s(j) || j && !f.$eval(j) || c()
                                    },
                                    k = ++q;
                                e ? (a.get(e, {
                                    cache: b
                                }).success(function(a) {
                                    if (k === q) {
                                        var b = f.$new();
                                        l.template = a;
                                        var c = m(b, function(a) {
                                            r(), d.enter(a, null, g, h)
                                        });
                                        n = b, p = c, n.$emit("$includeContentLoaded"), f.$eval(i)
                                    }
                                }).error(function() {
                                    k === q && r()
                                }), f.$emit("$includeContentRequested")) : (r(), l.template = null)
                            })
                        }
                    }
                }
            }],
            me = ["$compile", function(a) {
                return {
                    restrict: "ECA",
                    priority: -400,
                    require: "ngInclude",
                    link: function(b, c, d, e) {
                        c.html(e.template), a(c.contents())(b)
                    }
                }
            }],
            ne = bc({
                priority: 450,
                compile: function() {
                    return {
                        pre: function(a, b, c) {
                            a.$eval(c.ngInit)
                        }
                    }
                }
            }),
            oe = bc({
                terminal: !0,
                priority: 1e3
            }),
            pe = ["$locale", "$interpolate", function(a, b) {
                var c = /{}/g;
                return {
                    restrict: "EA",
                    link: function(d, e, g) {
                        var h = g.count,
                            i = g.$attr.when && e.attr(g.$attr.when),
                            j = g.offset || 0,
                            k = d.$eval(i) || {},
                            l = {},
                            m = b.startSymbol(),
                            n = b.endSymbol(),
                            o = /^when(Minus)?(.+)$/;
                        f(g, function(a, b) {
                            o.test(b) && (k[oc(b.replace("when", "").replace("Minus", "-"))] = e.attr(g.$attr[b]))
                        }), f(k, function(a, d) {
                            l[d] = b(a.replace(c, m + h + "-" + j + n))
                        }), d.$watch(function() {
                            var b = parseFloat(d.$eval(h));
                            return isNaN(b) ? "" : (b in k || (b = a.pluralCat(b - j)), l[b](d, e, !0))
                        }, function(a) {
                            e.text(a)
                        })
                    }
                }
            }],
            qe = ["$parse", "$animate", function(a, c) {
                function g(a) {
                    return a.clone[0]
                }

                function h(a) {
                    return a.clone[a.clone.length - 1]
                }
                var i = "$$NG_REMOVED",
                    j = d("ngRepeat");
                return {
                    transclude: "element",
                    priority: 1e3,
                    terminal: !0,
                    $$tlb: !0,
                    link: function(d, k, l, m, n) {
                        var o, p, q, r, s, t, u, v, w, x = l.ngRepeat,
                            y = x.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),
                            z = {
                                $id: Ea
                            };
                        if (!y) throw j("iexp", "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.", x);
                        if (t = y[1], u = y[2], o = y[3], o ? (p = a(o), q = function(a, b, c) {
                                return w && (z[w] = a), z[v] = b, z.$index = c, p(d, z)
                            }) : (r = function(a, b) {
                                return Ea(b)
                            }, s = function(a) {
                                return a
                            }), y = t.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/), !y) throw j("iidexp", "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.", t);
                        v = y[3] || y[1], w = y[2];
                        var A = {};
                        d.$watchCollection(u, function(a) {
                            var l, m, o, p, t, u, y, z, B, C, D, E, F = k[0],
                                G = {},
                                H = [];
                            if (e(a)) C = a, B = q || r;
                            else {
                                B = q || s, C = [];
                                for (u in a) a.hasOwnProperty(u) && "$" != u.charAt(0) && C.push(u);
                                C.sort()
                            }
                            for (p = C.length, m = H.length = C.length, l = 0; m > l; l++)
                                if (u = a === C ? l : C[l], y = a[u], z = B(u, y, l), da(z, "`track by` id"), A.hasOwnProperty(z)) D = A[z], delete A[z], G[z] = D, H[l] = D;
                                else {
                                    if (G.hasOwnProperty(z)) throw f(H, function(a) {
                                        a && a.scope && (A[a.id] = a)
                                    }), j("dupes", "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}", x, z, Q(y));
                                    H[l] = {
                                        id: z
                                    }, G[z] = !1
                                }
                            for (u in A) A.hasOwnProperty(u) && (D = A[u], E = fa(D.clone), c.leave(E), f(E, function(a) {
                                a[i] = !0
                            }), D.scope.$destroy());
                            for (l = 0, m = C.length; m > l; l++) {
                                if (u = a === C ? l : C[l], y = a[u], D = H[l], H[l - 1] && (F = h(H[l - 1])), D.scope) {
                                    t = D.scope, o = F;
                                    do o = o.nextSibling; while (o && o[i]);
                                    g(D) != o && c.move(fa(D.clone), null, uc(F)), F = h(D)
                                } else t = d.$new();
                                t[v] = y, w && (t[w] = u), t.$index = l, t.$first = 0 === l, t.$last = l === p - 1, t.$middle = !(t.$first || t.$last), t.$odd = !(t.$even = 0 === (1 & l)), D.scope || n(t, function(a) {
                                    a[a.length++] = b.createComment(" end ngRepeat: " + x + " "), c.enter(a, null, uc(F)), F = a, D.scope = t, D.clone = a, G[D.id] = D
                                })
                            }
                            A = G
                        })
                    }
                }
            }],
            re = ["$animate", function(a) {
                return function(b, c, d) {
                    b.$watch(d.ngShow, function(b) {
                        a[S(b) ? "removeClass" : "addClass"](c, "ng-hide")
                    })
                }
            }],
            se = ["$animate", function(a) {
                return function(b, c, d) {
                    b.$watch(d.ngHide, function(b) {
                        a[S(b) ? "addClass" : "removeClass"](c, "ng-hide")
                    })
                }
            }],
            te = bc(function(a, b, c) {
                a.$watch(c.ngStyle, function(a, c) {
                    c && a !== c && f(c, function(a, c) {
                        b.css(c, "")
                    }), a && b.css(a)
                }, !0)
            }),
            ue = ["$animate", function(a) {
                return {
                    restrict: "EA",
                    require: "ngSwitch",
                    controller: ["$scope", function() {
                        this.cases = {}
                    }],
                    link: function(b, c, d, e) {
                        var g = d.ngSwitch || d.on,
                            h = [],
                            i = [],
                            j = [],
                            k = [];
                        b.$watch(g, function(c) {
                            var g, l;
                            for (g = 0, l = j.length; l > g; ++g) j[g].remove();
                            for (j.length = 0, g = 0, l = k.length; l > g; ++g) {
                                var m = i[g];
                                k[g].$destroy(), j[g] = m, a.leave(m, function() {
                                    j.splice(g, 1)
                                })
                            }
                            i.length = 0, k.length = 0, (h = e.cases["!" + c] || e.cases["?"]) && (b.$eval(d.change), f(h, function(c) {
                                var d = b.$new();
                                k.push(d), c.transclude(d, function(b) {
                                    var d = c.element;
                                    i.push(b), a.enter(b, d.parent(), d)
                                })
                            }))
                        })
                    }
                }
            }],
            ve = bc({
                transclude: "element",
                priority: 800,
                require: "^ngSwitch",
                link: function(a, b, c, d, e) {
                    d.cases["!" + c.ngSwitchWhen] = d.cases["!" + c.ngSwitchWhen] || [], d.cases["!" + c.ngSwitchWhen].push({
                        transclude: e,
                        element: b
                    })
                }
            }),
            we = bc({
                transclude: "element",
                priority: 800,
                require: "^ngSwitch",
                link: function(a, b, c, d, e) {
                    d.cases["?"] = d.cases["?"] || [], d.cases["?"].push({
                        transclude: e,
                        element: b
                    })
                }
            }),
            xe = bc({
                link: function(a, b, c, e, f) {
                    if (!f) throw d("ngTransclude")("orphan", "Illegal use of ngTransclude directive in the template! No parent directive that requires a transclusion found. Element: {0}", T(b));
                    f(function(a) {
                        b.empty(), b.append(a)
                    })
                }
            }),
            ye = ["$templateCache", function(a) {
                return {
                    restrict: "E",
                    terminal: !0,
                    compile: function(b, c) {
                        if ("text/ng-template" == c.type) {
                            var d = c.id,
                                e = b[0].text;
                            a.put(d, e)
                        }
                    }
                }
            }],
            ze = d("ngOptions"),
            Ae = q({
                terminal: !0
            }),
            Be = ["$compile", "$parse", function(a, d) {
                var e = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
                    h = {
                        $setViewValue: o
                    };
                return {
                    restrict: "E",
                    require: ["select", "?ngModel"],
                    controller: ["$element", "$scope", "$attrs", function(a, b, c) {
                        var d, e, f = this,
                            g = {},
                            i = h;
                        f.databound = c.ngModel, f.init = function(a, b, c) {
                            i = a, d = b, e = c
                        }, f.addOption = function(b) {
                            da(b, '"option value"'), g[b] = !0, i.$viewValue == b && (a.val(b), e.parent() && e.remove())
                        }, f.removeOption = function(a) {
                            this.hasOption(a) && (delete g[a], i.$viewValue == a && this.renderUnknownOption(a))
                        }, f.renderUnknownOption = function(b) {
                            var c = "? " + Ea(b) + " ?";
                            e.val(c), a.prepend(e), a.val(c), e.prop("selected", !0)
                        }, f.hasOption = function(a) {
                            return g.hasOwnProperty(a)
                        }, b.$on("$destroy", function() {
                            f.renderUnknownOption = o
                        })
                    }],
                    link: function(h, i, j, k) {
                        function l(a, b, c, d) {
                            c.$render = function() {
                                var a = c.$viewValue;
                                d.hasOption(a) ? (y.parent() && y.remove(), b.val(a), "" === a && o.prop("selected", !0)) : r(a) && o ? b.val("") : d.renderUnknownOption(a)
                            }, b.on("change", function() {
                                a.$apply(function() {
                                    y.parent() && y.remove(), c.$setViewValue(b.val())
                                })
                            })
                        }

                        function m(a, b, c) {
                            var d;
                            c.$render = function() {
                                var a = new Fa(c.$viewValue);
                                f(b.find("option"), function(b) {
                                    b.selected = s(a.get(b.value))
                                })
                            }, a.$watch(function() {
                                L(d, c.$viewValue) || (d = K(c.$viewValue), c.$render())
                            }), b.on("change", function() {
                                a.$apply(function() {
                                    var a = [];
                                    f(b.find("option"), function(b) {
                                        b.selected && a.push(b.value)
                                    }), c.$setViewValue(a)
                                })
                            })
                        }

                        function n(b, f, h) {
                            function i() {
                                var a = !1;
                                if (t) {
                                    var c = h.$modelValue;
                                    if (z && Ec(c)) {
                                        a = new Fa([]);
                                        for (var d = {}, e = 0; e < c.length; e++) d[m] = c[e], a.put(z(b, d), c[e])
                                    } else a = new Fa(c)
                                }
                                return a
                            }

                            function j() {
                                var a, c, d, e, j, k, u, y, B, C, D, E, F, G, H, I = {
                                        "": []
                                    },
                                    J = [""],
                                    K = h.$modelValue,
                                    L = r(b) || [],
                                    M = n ? g(L) : L,
                                    N = {},
                                    O = i();
                                for (D = 0; B = M.length, B > D; D++) {
                                    if (u = D, n) {
                                        if (u = M[D], "$" === u.charAt(0)) continue;
                                        N[n] = u
                                    }
                                    if (N[m] = L[u], a = o(b, N) || "", (c = I[a]) || (c = I[a] = [], J.push(a)), t) E = s(O.remove(z ? z(b, N) : q(b, N)));
                                    else {
                                        if (z) {
                                            var P = {};
                                            P[m] = K, E = z(b, P) === z(b, N)
                                        } else E = K === q(b, N);
                                        O = O || E
                                    }
                                    H = l(b, N), H = s(H) ? H : "", c.push({
                                        id: z ? z(b, N) : n ? M[D] : D,
                                        label: H,
                                        selected: E
                                    })
                                }
                                for (t || (v || null === K ? I[""].unshift({
                                        id: "",
                                        label: "",
                                        selected: !O
                                    }) : O || I[""].unshift({
                                        id: "?",
                                        label: "",
                                        selected: !0
                                    })), C = 0, y = J.length; y > C; C++) {
                                    for (a = J[C], c = I[a], A.length <= C ? (e = {
                                            element: x.clone().attr("label", a),
                                            label: c.label
                                        }, j = [e], A.push(j), f.append(e.element)) : (j = A[C], e = j[0], e.label != a && e.element.attr("label", e.label = a)), F = null, D = 0, B = c.length; B > D; D++) d = c[D], (k = j[D + 1]) ? (F = k.element, k.label !== d.label && (F.text(k.label = d.label), F.prop("label", k.label)), k.id !== d.id && F.val(k.id = d.id), F[0].selected !== d.selected && (F.prop("selected", k.selected = d.selected), tc && F.prop("selected", k.selected))) : ("" === d.id && v ? G = v : (G = w.clone()).val(d.id).prop("selected", d.selected).attr("selected", d.selected).prop("label", d.label).text(d.label), j.push(k = {
                                        element: G,
                                        label: d.label,
                                        id: d.id,
                                        selected: d.selected
                                    }), p.addOption(d.label, G), F ? F.after(G) : e.element.append(G), F = G);
                                    for (D++; j.length > D;) d = j.pop(), p.removeOption(d.label), d.element.remove()
                                }
                                for (; A.length > C;) A.pop()[0].element.remove()
                            }
                            var k;
                            if (!(k = u.match(e))) throw ze("iexp", "Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}", u, T(f));
                            var l = d(k[2] || k[1]),
                                m = k[4] || k[6],
                                n = k[5],
                                o = d(k[3] || ""),
                                q = d(k[2] ? k[1] : m),
                                r = d(k[7]),
                                y = k[8],
                                z = y ? d(k[8]) : null,
                                A = [
                                    [{
                                        element: f,
                                        label: ""
                                    }]
                                ];
                            v && (a(v)(b), v.removeClass("ng-scope"), v.remove()), f.empty(), f.on("change", function() {
                                b.$apply(function() {
                                    var a, d, e, g, i, k, l, o, p, s = r(b) || [],
                                        u = {};
                                    if (t) {
                                        for (e = [], k = 0, o = A.length; o > k; k++)
                                            for (a = A[k], i = 1, l = a.length; l > i; i++)
                                                if ((g = a[i].element)[0].selected) {
                                                    if (d = g.val(), n && (u[n] = d), z)
                                                        for (p = 0; p < s.length && (u[m] = s[p], z(b, u) != d); p++);
                                                    else u[m] = s[d];
                                                    e.push(q(b, u))
                                                }
                                    } else if (d = f.val(), "?" == d) e = c;
                                    else if ("" === d) e = null;
                                    else if (z) {
                                        for (p = 0; p < s.length; p++)
                                            if (u[m] = s[p], z(b, u) == d) {
                                                e = q(b, u);
                                                break
                                            }
                                    } else u[m] = s[d], n && (u[n] = d), e = q(b, u);
                                    h.$setViewValue(e), j()
                                })
                            }), h.$render = j, b.$watchCollection(r, j), b.$watchCollection(function() {
                                var a = {},
                                    c = r(b);
                                if (c) {
                                    for (var d = new Array(c.length), e = 0, f = c.length; f > e; e++) a[m] = c[e], d[e] = l(b, a);
                                    return d
                                }
                            }, j), t && b.$watchCollection(function() {
                                return h.$modelValue
                            }, j)
                        }
                        if (k[1]) {
                            for (var o, p = k[0], q = k[1], t = j.multiple, u = j.ngOptions, v = !1, w = uc(b.createElement("option")), x = uc(b.createElement("optgroup")), y = w.clone(), z = 0, A = i.children(), B = A.length; B > z; z++)
                                if ("" === A[z].value) {
                                    o = v = A.eq(z);
                                    break
                                }
                            p.init(q, v, y), t && (q.$isEmpty = function(a) {
                                return !a || 0 === a.length
                            }), u ? n(h, i, q) : t ? m(h, i, q) : l(h, i, q, p)
                        }
                    }
                }
            }],
            Ce = ["$interpolate", function(a) {
                var b = {
                    addOption: o,
                    removeOption: o
                };
                return {
                    restrict: "E",
                    priority: 100,
                    compile: function(c, d) {
                        if (r(d.value)) {
                            var e = a(c.text(), !0);
                            e || d.$set("value", c.text())
                        }
                        return function(a, c, d) {
                            var f = "$selectController",
                                g = c.parent(),
                                h = g.data(f) || g.parent().data(f);
                            h && h.databound ? c.prop("selected", !1) : h = b, e ? a.$watch(e, function(a, b) {
                                d.$set("value", a), a !== b && h.removeOption(b), h.addOption(a)
                            }) : h.addOption(d.value), c.on("$destroy", function() {
                                h.removeOption(d.value)
                            })
                        }
                    }
                }
            }],
            De = q({
                restrict: "E",
                terminal: !0
            });
        return a.angular.bootstrap ? void console.log("WARNING: Tried to load angular more than once.") : (aa(), ha(Cc), void uc(b).ready(function() {
            Z(b, $)
        }))
    }(window, document), !window.angular.$$csp() && window.angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}.ng-hide-add-active,.ng-hide-remove{display:block!important;}</style>'), function(a, b, c) {
        "use strict";
        b.module("ngAnimate", ["ng"]).directive("ngAnimateChildren", function() {
            var a = "$$ngAnimateChildren";
            return function(c, d, e) {
                var f = e.ngAnimateChildren;
                b.isString(f) && 0 === f.length ? d.data(a, !0) : c.$watch(f, function(b) {
                    d.data(a, !!b)
                })
            }
        }).factory("$$animateReflow", ["$$rAF", "$document", function(a, b) {
            var c = b[0].body;
            return function(b) {
                return a(function() {
                    c.offsetWidth + 1;
                    b()
                })
            }
        }]).config(["$provide", "$animateProvider", function(d, e) {
            function f(a) {
                for (var b = 0; b < a.length; b++) {
                    var c = a[b];
                    if (c.nodeType == m) return c
                }
            }

            function g(a) {
                return a && b.element(a)
            }

            function h(a) {
                return b.element(f(a))
            }

            function i(a, b) {
                return f(a) == f(b)
            }
            var j = b.noop,
                k = b.forEach,
                l = e.$$selectors,
                m = 1,
                n = "$$ngAnimateState",
                o = "$$ngAnimateChildren",
                p = "ng-animate",
                q = {
                    running: !0
                };
            d.decorator("$animate", ["$delegate", "$injector", "$sniffer", "$rootElement", "$$asyncCallback", "$rootScope", "$document", function(a, c, d, m, r, s, t) {
                function u(a) {
                    var b = a.data(n) || {};
                    b.running = !0, a.data(n, b)
                }

                function v(a) {
                    if (a) {
                        var b = [],
                            e = {},
                            f = a.substr(1).split(".");
                        (d.transitions || d.animations) && b.push(c.get(l[""]));
                        for (var g = 0; g < f.length; g++) {
                            var h = f[g],
                                i = l[h];
                            i && !e[h] && (b.push(c.get(i)), e[h] = !0)
                        }
                        return b
                    }
                }

                function w(a, c, d) {
                    function e(a, b) {
                        var c = a[b],
                            d = a["before" + b.charAt(0).toUpperCase() + b.substr(1)];
                        return c || d ? ("leave" == b && (d = c, c = null), u.push({
                            event: b,
                            fn: c
                        }), r.push({
                            event: b,
                            fn: d
                        }), !0) : void 0
                    }

                    function f(b, c, e) {
                        function f(a) {
                            if (c) {
                                if ((c[a] || j)(), ++l < g.length) return;
                                c = null
                            }
                            e()
                        }
                        var g = [];
                        k(b, function(a) {
                            a.fn && g.push(a)
                        });
                        var l = 0;
                        k(g, function(b, e) {
                            var g = function() {
                                f(e)
                            };
                            switch (b.event) {
                                case "setClass":
                                    c.push(b.fn(a, h, i, g));
                                    break;
                                case "addClass":
                                    c.push(b.fn(a, h || d, g));
                                    break;
                                case "removeClass":
                                    c.push(b.fn(a, i || d, g));
                                    break;
                                default:
                                    c.push(b.fn(a, g))
                            }
                        }), c && 0 === c.length && e()
                    }
                    var g = a[0];
                    if (g) {
                        var h, i, l = "setClass" == c,
                            m = l || "addClass" == c || "removeClass" == c;
                        b.isArray(d) && (h = d[0], i = d[1], d = h + " " + i);
                        var n = a.attr("class"),
                            o = n + " " + d;
                        if (D(o)) {
                            var p = j,
                                q = [],
                                r = [],
                                s = j,
                                t = [],
                                u = [],
                                w = (" " + o).replace(/\s+/g, ".");
                            return k(v(w), function(a) {
                                var b = e(a, c);
                                !b && l && (e(a, "addClass"), e(a, "removeClass"))
                            }), {
                                node: g,
                                event: c,
                                className: d,
                                isClassBased: m,
                                isSetClassOperation: l,
                                before: function(a) {
                                    p = a, f(r, q, function() {
                                        p = j, a()
                                    })
                                },
                                after: function(a) {
                                    s = a, f(u, t, function() {
                                        s = j, a()
                                    })
                                },
                                cancel: function() {
                                    q && (k(q, function(a) {
                                        (a || j)(!0)
                                    }), p(!0)), t && (k(t, function(a) {
                                        (a || j)(!0)
                                    }), s(!0))
                                }
                            }
                        }
                    }
                }

                function x(a, c, d, e, f, g, h) {
                    function i(b) {
                        var e = "$animate:" + b;
                        t && t[e] && t[e].length > 0 && r(function() {
                            d.triggerHandler(e, {
                                event: a,
                                className: c
                            })
                        })
                    }

                    function j() {
                        i("before")
                    }

                    function l() {
                        i("after")
                    }

                    function m() {
                        i("close"), h && r(function() {
                            h()
                        })
                    }

                    function o() {
                        o.hasBeenRun || (o.hasBeenRun = !0, g())
                    }

                    function q() {
                        if (!q.hasBeenRun) {
                            q.hasBeenRun = !0;
                            var b = d.data(n);
                            b && (s && s.isClassBased ? z(d, c) : (r(function() {
                                var b = d.data(n) || {};
                                H == b.index && z(d, c, a)
                            }), d.data(n, b))), m()
                        }
                    }
                    var s = w(d, a, c);
                    if (!s) return o(), j(), l(), void q();
                    c = s.className;
                    var t = b.element._data(s.node);
                    t = t && t.events, e || (e = f ? f.parent() : d.parent());
                    var u, v = d.data(n) || {},
                        x = v.active || {},
                        y = v.totalActive || 0,
                        C = v.last;
                    if (s.isClassBased && (u = v.running || v.disabled || C && !C.isClassBased), u || A(d, e)) return o(), j(), l(), void q();
                    var D = !1;
                    if (y > 0) {
                        var E = [];
                        if (s.isClassBased) {
                            if ("setClass" == C.event) E.push(C), z(d, c);
                            else if (x[c]) {
                                var F = x[c];
                                F.event == a ? D = !0 : (E.push(F), z(d, c))
                            }
                        } else if ("leave" == a && x["ng-leave"]) D = !0;
                        else {
                            for (var G in x) E.push(x[G]), z(d, G);
                            x = {}, y = 0
                        }
                        E.length > 0 && k(E, function(a) {
                            a.cancel()
                        })
                    }
                    if (!s.isClassBased || s.isSetClassOperation || D || (D = "addClass" == a == d.hasClass(c)), D) return o(), j(), l(), void m();
                    "leave" == a && d.one("$destroy", function(a) {
                        var c = b.element(this),
                            d = c.data(n);
                        if (d) {
                            var e = d.active["ng-leave"];
                            e && (e.cancel(), z(c, "ng-leave"))
                        }
                    }), d.addClass(p);
                    var H = B++;
                    y++, x[c] = s, d.data(n, {
                        last: s,
                        active: x,
                        index: H,
                        totalActive: y
                    }), j(), s.before(function(b) {
                        var e = d.data(n);
                        b = b || !e || !e.active[c] || s.isClassBased && e.active[c].event != a, o(), b === !0 ? q() : (l(), s.after(q))
                    })
                }

                function y(a) {
                    var c = f(a);
                    if (c) {
                        var d = b.isFunction(c.getElementsByClassName) ? c.getElementsByClassName(p) : c.querySelectorAll("." + p);
                        k(d, function(a) {
                            a = b.element(a);
                            var c = a.data(n);
                            c && c.active && k(c.active, function(a) {
                                a.cancel()
                            })
                        })
                    }
                }

                function z(a, b) {
                    if (i(a, m)) q.disabled || (q.running = !1, q.structural = !1);
                    else if (b) {
                        var c = a.data(n) || {},
                            d = b === !0;
                        !d && c.active && c.active[b] && (c.totalActive--, delete c.active[b]), (d || !c.totalActive) && (a.removeClass(p), a.removeData(n))
                    }
                }

                function A(a, c) {
                    if (q.disabled) return !0;
                    if (i(a, m)) return q.running;
                    var d, e, f;
                    do {
                        if (0 === c.length) break;
                        var g = i(c, m),
                            h = g ? q : c.data(n) || {};
                        if (h.disabled) return !0;
                        if (g && (f = !0), d !== !1) {
                            var j = c.data(o);
                            b.isDefined(j) && (d = j)
                        }
                        e = e || h.running || h.last && !h.last.isClassBased
                    } while (c = c.parent());
                    return !f || !d && e
                }
                var B = 0;
                m.data(n, q), s.$$postDigest(function() {
                    s.$$postDigest(function() {
                        q.running = !1
                    })
                });
                var C = e.classNameFilter(),
                    D = C ? function(a) {
                        return C.test(a)
                    } : function() {
                        return !0
                    };
                return {
                    enter: function(c, d, e, f) {
                        c = b.element(c), d = g(d), e = g(e), u(c), a.enter(c, d, e), s.$$postDigest(function() {
                            c = h(c), x("enter", "ng-enter", c, d, e, j, f)
                        })
                    },
                    leave: function(c, d) {
                        c = b.element(c), y(c), u(c), s.$$postDigest(function() {
                            x("leave", "ng-leave", h(c), null, null, function() {
                                a.leave(c)
                            }, d)
                        })
                    },
                    move: function(c, d, e, f) {
                        c = b.element(c), d = g(d), e = g(e), y(c), u(c), a.move(c, d, e), s.$$postDigest(function() {
                            c = h(c), x("move", "ng-move", c, d, e, j, f)
                        })
                    },
                    addClass: function(c, d, e) {
                        c = b.element(c), c = h(c), x("addClass", d, c, null, null, function() {
                            a.addClass(c, d)
                        }, e)
                    },
                    removeClass: function(c, d, e) {
                        c = b.element(c), c = h(c), x("removeClass", d, c, null, null, function() {
                            a.removeClass(c, d)
                        }, e)
                    },
                    setClass: function(c, d, e, f) {
                        c = b.element(c), c = h(c), x("setClass", [d, e], c, null, null, function() {
                            a.setClass(c, d, e)
                        }, f)
                    },
                    enabled: function(a, b) {
                        switch (arguments.length) {
                            case 2:
                                if (a) z(b);
                                else {
                                    var c = b.data(n) || {};
                                    c.disabled = !0, b.data(n, c)
                                }
                                break;
                            case 1:
                                q.disabled = !a;
                                break;
                            default:
                                a = !q.disabled
                        }
                        return !!a
                    }
                }
            }]), e.register("", ["$window", "$sniffer", "$timeout", "$$animateReflow", function(d, e, g, h) {
                function i() {
                    K || (K = h(function() {
                        X = [], K = null, V = {}
                    }))
                }

                function l(a, b) {
                    K && K(), X.push(b), K = h(function() {
                        k(X, function(a) {
                            a()
                        }), X = [], K = null, V = {}
                    })
                }

                function n(a, c) {
                    var d = f(a);
                    a = b.element(d), $.push(a);
                    var e = Date.now() + c;
                    Z >= e || (g.cancel(Y), Z = e, Y = g(function() {
                        o($), $ = []
                    }, c, !1))
                }

                function o(a) {
                    k(a, function(a) {
                        var b = a.data(Q);
                        b && (b.closeAnimationFn || j)()
                    })
                }

                function p(a, b) {
                    var c = b ? V[b] : null;
                    if (!c) {
                        var e, f, g, h, i = 0,
                            j = 0,
                            l = 0,
                            n = 0;
                        k(a, function(a) {
                            if (a.nodeType == m) {
                                var b = d.getComputedStyle(a) || {};
                                g = b[F + L], i = Math.max(q(g), i), h = b[F + M], e = b[F + N], j = Math.max(q(e), j), f = b[H + N], n = Math.max(q(f), n);
                                var c = q(b[H + L]);
                                c > 0 && (c *= parseInt(b[H + O], 10) || 1), l = Math.max(c, l)
                            }
                        }), c = {
                            total: 0,
                            transitionPropertyStyle: h,
                            transitionDurationStyle: g,
                            transitionDelayStyle: e,
                            transitionDelay: j,
                            transitionDuration: i,
                            animationDelayStyle: f,
                            animationDelay: n,
                            animationDuration: l
                        }, b && (V[b] = c)
                    }
                    return c
                }

                function q(a) {
                    var c = 0,
                        d = b.isString(a) ? a.split(/\s*,\s*/) : [];
                    return k(d, function(a) {
                        c = Math.max(parseFloat(a) || 0, c)
                    }), c
                }

                function r(a) {
                    var b = a.parent(),
                        c = b.data(P);
                    return c || (b.data(P, ++W), c = W), c + "-" + f(a).getAttribute("class")
                }

                function s(a, b, c, d) {
                    var e = r(b),
                        f = e + " " + c,
                        g = V[f] ? ++V[f].total : 0,
                        h = {};
                    if (g > 0) {
                        var i = c + "-stagger",
                            k = e + " " + i,
                            l = !V[k];
                        l && b.addClass(i), h = p(b, k), l && b.removeClass(i)
                    }
                    d = d || function(a) {
                        return a()
                    }, b.addClass(c);
                    var m = b.data(Q) || {},
                        n = d(function() {
                            return p(b, f)
                        }),
                        o = n.transitionDuration,
                        q = n.animationDuration;
                    if (0 === o && 0 === q) return b.removeClass(c), !1;
                    b.data(Q, {
                        running: m.running || 0,
                        itemIndex: g,
                        stagger: h,
                        timings: n,
                        closeAnimationFn: j
                    });
                    var s = m.running > 0 || "setClass" == a;
                    return o > 0 && u(b, c, s), q > 0 && h.animationDelay > 0 && 0 === h.animationDuration && v(b), !0
                }

                function t(a) {
                    return "ng-enter" == a || "ng-move" == a || "ng-leave" == a
                }

                function u(a, b, c) {
                    t(b) || !c ? f(a).style[F + M] = "none" : a.addClass(R)
                }

                function v(a) {
                    f(a).style[H] = "none 0s"
                }

                function w(a, b) {
                    var c = F + M,
                        d = f(a);
                    d.style[c] && d.style[c].length > 0 && (d.style[c] = ""), a.removeClass(R)
                }

                function x(a) {
                    var b = H,
                        c = f(a);
                    c.style[b] && c.style[b].length > 0 && (c.style[b] = "")
                }

                function y(a, b, c, d) {
                    function e(a) {
                        b.off(t, g), b.removeClass(j), D(b, c);
                        var d = f(b);
                        for (var e in v) d.style.removeProperty(v[e])
                    }

                    function g(a) {
                        a.stopPropagation();
                        var b = a.originalEvent || a,
                            c = b.$manualTimeStamp || b.timeStamp || Date.now(),
                            e = parseFloat(b.elapsedTime.toFixed(S));
                        Math.max(c - s, 0) >= r && e >= p && d()
                    }
                    var h = f(b),
                        i = b.data(Q);
                    if (-1 == h.getAttribute("class").indexOf(c) || !i) return void d();
                    var j = "";
                    k(c.split(" "), function(a, b) {
                        j += (b > 0 ? " " : "") + a + "-active"
                    });
                    var l = i.stagger,
                        m = i.timings,
                        o = i.itemIndex,
                        p = Math.max(m.transitionDuration, m.animationDuration),
                        q = Math.max(m.transitionDelay, m.animationDelay),
                        r = q * U,
                        s = Date.now(),
                        t = I + " " + G,
                        u = "",
                        v = [];
                    if (m.transitionDuration > 0) {
                        var w = m.transitionPropertyStyle; - 1 == w.indexOf("all") && (u += J + "transition-property: " + w + ";", u += J + "transition-duration: " + m.transitionDurationStyle + ";", v.push(J + "transition-property"), v.push(J + "transition-duration"))
                    }
                    if (o > 0) {
                        if (l.transitionDelay > 0 && 0 === l.transitionDuration) {
                            var x = m.transitionDelayStyle;
                            u += J + "transition-delay: " + z(x, l.transitionDelay, o) + "; ", v.push(J + "transition-delay")
                        }
                        l.animationDelay > 0 && 0 === l.animationDuration && (u += J + "animation-delay: " + z(m.animationDelayStyle, l.animationDelay, o) + "; ", v.push(J + "animation-delay"))
                    }
                    if (v.length > 0) {
                        var y = h.getAttribute("style") || "";
                        h.setAttribute("style", y + "; " + u)
                    }
                    b.on(t, g), b.addClass(j), i.closeAnimationFn = function() {
                        e(), d()
                    };
                    var A = o * (Math.max(l.animationDelay, l.transitionDelay) || 0),
                        B = (q + p) * T,
                        C = (A + B) * U;
                    return i.running++, n(b, C), e
                }

                function z(a, b, c) {
                    var d = "";
                    return k(a.split(","), function(a, e) {
                        d += (e > 0 ? "," : "") + (c * b + parseInt(a, 10)) + "s"
                    }), d
                }

                function A(a, b, c, d) {
                    return s(a, b, c, d) ? function(a) {
                        a && D(b, c)
                    } : void 0
                }

                function B(a, b, c, d) {
                    return b.data(Q) ? y(a, b, c, d) : (D(b, c), void d())
                }

                function C(a, b, c, d) {
                    var e = A(a, b, c);
                    if (!e) return i(), void d();
                    var f = e;
                    return l(b, function() {
                            w(b, c), x(b), f = B(a, b, c, d)
                        }),
                        function(a) {
                            (f || j)(a)
                        }
                }

                function D(a, b) {
                    a.removeClass(b);
                    var c = a.data(Q);
                    c && (c.running && c.running--, c.running && 0 !== c.running || a.removeData(Q))
                }

                function E(a, c) {
                    var d = "";
                    return a = b.isArray(a) ? a : a.split(/\s+/), k(a, function(a, b) {
                        a && a.length > 0 && (d += (b > 0 ? " " : "") + a + c)
                    }), d
                }
                var F, G, H, I, J = "";
                a.ontransitionend === c && a.onwebkittransitionend !== c ? (J = "-webkit-", F = "WebkitTransition", G = "webkitTransitionEnd transitionend") : (F = "transition", G = "transitionend"), a.onanimationend === c && a.onwebkitanimationend !== c ? (J = "-webkit-", H = "WebkitAnimation", I = "webkitAnimationEnd animationend") : (H = "animation", I = "animationend");
                var K, L = "Duration",
                    M = "Property",
                    N = "Delay",
                    O = "IterationCount",
                    P = "$$ngAnimateKey",
                    Q = "$$ngAnimateCSS3Data",
                    R = "ng-animate-block-transitions",
                    S = 3,
                    T = 1.5,
                    U = 1e3,
                    V = {},
                    W = 0,
                    X = [],
                    Y = null,
                    Z = 0,
                    $ = [];
                return {
                    enter: function(a, b) {
                        return C("enter", a, "ng-enter", b)
                    },
                    leave: function(a, b) {
                        return C("leave", a, "ng-leave", b)
                    },
                    move: function(a, b) {
                        return C("move", a, "ng-move", b)
                    },
                    beforeSetClass: function(a, b, c, d) {
                        var e = E(c, "-remove") + " " + E(b, "-add"),
                            f = A("setClass", a, e, function(d) {
                                var e = a.attr("class");
                                a.removeClass(c), a.addClass(b);
                                var f = d();
                                return a.attr("class", e), f
                            });
                        return f ? (l(a, function() {
                            w(a, e), x(a), d()
                        }), f) : (i(), void d())
                    },
                    beforeAddClass: function(a, b, c) {
                        var d = A("addClass", a, E(b, "-add"), function(c) {
                            a.addClass(b);
                            var d = c();
                            return a.removeClass(b), d
                        });
                        return d ? (l(a, function() {
                            w(a, b), x(a), c()
                        }), d) : (i(), void c())
                    },
                    setClass: function(a, b, c, d) {
                        c = E(c, "-remove"), b = E(b, "-add");
                        var e = c + " " + b;
                        return B("setClass", a, e, d)
                    },
                    addClass: function(a, b, c) {
                        return B("addClass", a, E(b, "-add"), c)
                    },
                    beforeRemoveClass: function(a, b, c) {
                        var d = A("removeClass", a, E(b, "-remove"), function(c) {
                            var d = a.attr("class");
                            a.removeClass(b);
                            var e = c();
                            return a.attr("class", d), e
                        });
                        return d ? (l(a, function() {
                            w(a, b), x(a), c()
                        }), d) : void c()
                    },
                    removeClass: function(a, b, c) {
                        return B("removeClass", a, E(b, "-remove"), c)
                    }
                }
            }])
        }])
    }(window, window.angular), angular.module("ui.bootstrap", ["ui.bootstrap.tpls", "ui.bootstrap.transition", "ui.bootstrap.collapse", "ui.bootstrap.accordion", "ui.bootstrap.alert", "ui.bootstrap.bindHtml", "ui.bootstrap.buttons", "ui.bootstrap.carousel", "ui.bootstrap.dateparser", "ui.bootstrap.position", "ui.bootstrap.datepicker", "ui.bootstrap.dropdown", "ui.bootstrap.modal", "ui.bootstrap.pagination", "ui.bootstrap.tooltip", "ui.bootstrap.popover", "ui.bootstrap.progressbar", "ui.bootstrap.rating", "ui.bootstrap.tabs", "ui.bootstrap.timepicker", "ui.bootstrap.typeahead"]), angular.module("ui.bootstrap.tpls", ["template/accordion/accordion-group.html", "template/accordion/accordion.html", "template/alert/alert.html", "template/carousel/carousel.html", "template/carousel/slide.html", "template/datepicker/datepicker.html", "template/datepicker/day.html", "template/datepicker/month.html", "template/datepicker/popup.html", "template/datepicker/year.html", "template/modal/backdrop.html", "template/modal/window.html", "template/pagination/pager.html", "template/pagination/pagination.html", "template/tooltip/tooltip-html-unsafe-popup.html", "template/tooltip/tooltip-popup.html", "template/popover/popover.html", "template/progressbar/bar.html", "template/progressbar/progress.html", "template/progressbar/progressbar.html", "template/rating/rating.html", "template/tabs/tab.html", "template/tabs/tabset.html", "template/timepicker/timepicker.html", "template/typeahead/typeahead-match.html", "template/typeahead/typeahead-popup.html"]), angular.module("ui.bootstrap.transition", []).factory("$transition", ["$q", "$timeout", "$rootScope", function(a, b, c) {
        function d(a) {
            for (var b in a)
                if (void 0 !== f.style[b]) return a[b]
        }
        var e = function(d, f, g) {
                g = g || {};
                var h = a.defer(),
                    i = e[g.animation ? "animationEndEventName" : "transitionEndEventName"],
                    j = function(a) {
                        c.$apply(function() {
                            d.unbind(i, j), h.resolve(d)
                        })
                    };
                return i && d.bind(i, j), b(function() {
                    angular.isString(f) ? d.addClass(f) : angular.isFunction(f) ? f(d) : angular.isObject(f) && d.css(f), i || h.resolve(d)
                }), h.promise.cancel = function() {
                    i && d.unbind(i, j), h.reject("Transition cancelled")
                }, h.promise
            },
            f = document.createElement("trans"),
            g = {
                WebkitTransition: "webkitTransitionEnd",
                MozTransition: "transitionend",
                OTransition: "oTransitionEnd",
                transition: "transitionend"
            },
            h = {
                WebkitTransition: "webkitAnimationEnd",
                MozTransition: "animationend",
                OTransition: "oAnimationEnd",
                transition: "animationend"
            };
        return e.transitionEndEventName = d(g), e.animationEndEventName = d(h), e
    }]), angular.module("ui.bootstrap.collapse", ["ui.bootstrap.transition"]).directive("collapse", ["$transition", function(a) {
        return {
            link: function(b, c, d) {
                function e(b) {
                    function d() {
                        j === e && (j = void 0)
                    }
                    var e = a(c, b);
                    return j && j.cancel(), j = e, e.then(d, d), e
                }

                function f() {
                    k ? (k = !1, g()) : (c.removeClass("collapse").addClass("collapsing"), e({
                        height: c[0].scrollHeight + "px"
                    }).then(g))
                }

                function g() {
                    c.removeClass("collapsing"), c.addClass("collapse in"), c.css({
                        height: "auto"
                    })
                }

                function h() {
                    if (k) k = !1, i(), c.css({
                        height: 0
                    });
                    else {
                        c.css({
                            height: c[0].scrollHeight + "px"
                        });
                        c[0].offsetWidth;
                        c.removeClass("collapse in").addClass("collapsing"), e({
                            height: 0
                        }).then(i)
                    }
                }

                function i() {
                    c.removeClass("collapsing"), c.addClass("collapse")
                }
                var j, k = !0;
                b.$watch(d.collapse, function(a) {
                    a ? h() : f()
                })
            }
        }
    }]), angular.module("ui.bootstrap.accordion", ["ui.bootstrap.collapse"]).constant("accordionConfig", {
        closeOthers: !0
    }).controller("AccordionController", ["$scope", "$attrs", "accordionConfig", function(a, b, c) {
        this.groups = [], this.closeOthers = function(d) {
            var e = angular.isDefined(b.closeOthers) ? a.$eval(b.closeOthers) : c.closeOthers;
            e && angular.forEach(this.groups, function(a) {
                a !== d && (a.isOpen = !1)
            })
        }, this.addGroup = function(a) {
            var b = this;
            this.groups.push(a), a.$on("$destroy", function(c) {
                b.removeGroup(a)
            })
        }, this.removeGroup = function(a) {
            var b = this.groups.indexOf(a); - 1 !== b && this.groups.splice(b, 1)
        }
    }]).directive("accordion", function() {
        return {
            restrict: "EA",
            controller: "AccordionController",
            transclude: !0,
            replace: !1,
            templateUrl: "template/accordion/accordion.html"
        }
    }).directive("accordionGroup", function() {
        return {
            require: "^accordion",
            restrict: "EA",
            transclude: !0,
            replace: !0,
            templateUrl: "template/accordion/accordion-group.html",
            scope: {
                heading: "@",
                isOpen: "=?",
                isDisabled: "=?"
            },
            controller: function() {
                this.setHeading = function(a) {
                    this.heading = a
                }
            },
            link: function(a, b, c, d) {
                d.addGroup(a), a.$watch("isOpen", function(b) {
                    b && d.closeOthers(a)
                }), a.toggleOpen = function() {
                    a.isDisabled || (a.isOpen = !a.isOpen)
                }
            }
        }
    }).directive("accordionHeading", function() {
        return {
            restrict: "EA",
            transclude: !0,
            template: "",
            replace: !0,
            require: "^accordionGroup",
            link: function(a, b, c, d, e) {
                d.setHeading(e(a, function() {}))
            }
        }
    }).directive("accordionTransclude", function() {
        return {
            require: "^accordionGroup",
            link: function(a, b, c, d) {
                a.$watch(function() {
                    return d[c.accordionTransclude]
                }, function(a) {
                    a && (b.html(""), b.append(a))
                })
            }
        }
    }), angular.module("ui.bootstrap.alert", []).controller("AlertController", ["$scope", "$attrs", function(a, b) {
        a.closeable = "close" in b, this.close = a.close
    }]).directive("alert", function() {
        return {
            restrict: "EA",
            controller: "AlertController",
            templateUrl: "template/alert/alert.html",
            transclude: !0,
            replace: !0,
            scope: {
                type: "@",
                close: "&"
            }
        }
    }).directive("dismissOnTimeout", ["$timeout", function(a) {
        return {
            require: "alert",
            link: function(b, c, d, e) {
                a(function() {
                    e.close()
                }, parseInt(d.dismissOnTimeout, 10))
            }
        }
    }]), angular.module("ui.bootstrap.bindHtml", []).directive("bindHtmlUnsafe", function() {
        return function(a, b, c) {
            b.addClass("ng-binding").data("$binding", c.bindHtmlUnsafe), a.$watch(c.bindHtmlUnsafe, function(a) {
                b.html(a || "")
            })
        }
    }), angular.module("ui.bootstrap.buttons", []).constant("buttonConfig", {
        activeClass: "active",
        toggleEvent: "click"
    }).controller("ButtonsController", ["buttonConfig", function(a) {
        this.activeClass = a.activeClass || "active", this.toggleEvent = a.toggleEvent || "click"
    }]).directive("btnRadio", function() {
        return {
            require: ["btnRadio", "ngModel"],
            controller: "ButtonsController",
            link: function(a, b, c, d) {
                var e = d[0],
                    f = d[1];
                f.$render = function() {
                    b.toggleClass(e.activeClass, angular.equals(f.$modelValue, a.$eval(c.btnRadio)))
                }, b.bind(e.toggleEvent, function() {
                    var d = b.hasClass(e.activeClass);
                    (!d || angular.isDefined(c.uncheckable)) && a.$apply(function() {
                        f.$setViewValue(d ? null : a.$eval(c.btnRadio)), f.$render()
                    })
                })
            }
        }
    }).directive("btnCheckbox", function() {
        return {
            require: ["btnCheckbox", "ngModel"],
            controller: "ButtonsController",
            link: function(a, b, c, d) {
                function e() {
                    return g(c.btnCheckboxTrue, !0)
                }

                function f() {
                    return g(c.btnCheckboxFalse, !1)
                }

                function g(b, c) {
                    var d = a.$eval(b);
                    return angular.isDefined(d) ? d : c
                }
                var h = d[0],
                    i = d[1];
                i.$render = function() {
                    b.toggleClass(h.activeClass, angular.equals(i.$modelValue, e()))
                }, b.bind(h.toggleEvent, function() {
                    a.$apply(function() {
                        i.$setViewValue(b.hasClass(h.activeClass) ? f() : e()), i.$render()
                    })
                })
            }
        }
    }), angular.module("ui.bootstrap.carousel", ["ui.bootstrap.transition"]).controller("CarouselController", ["$scope", "$timeout", "$interval", "$transition", function(a, b, c, d) {
        function e() {
            f();
            var b = +a.interval;
            !isNaN(b) && b > 0 && (h = c(g, b))
        }

        function f() {
            h && (c.cancel(h), h = null)
        }

        function g() {
            var b = +a.interval;
            i && !isNaN(b) && b > 0 ? a.next() : a.pause()
        }
        var h, i, j = this,
            k = j.slides = a.slides = [],
            l = -1;
        j.currentSlide = null;
        var m = !1;
        j.select = a.select = function(c, f) {
            function g() {
                if (!m) {
                    if (j.currentSlide && angular.isString(f) && !a.noTransition && c.$element) {
                        c.$element.addClass(f);
                        c.$element[0].offsetWidth;
                        angular.forEach(k, function(a) {
                                angular.extend(a, {
                                    direction: "",
                                    entering: !1,
                                    leaving: !1,
                                    active: !1
                                })
                            }), angular.extend(c, {
                                direction: f,
                                active: !0,
                                entering: !0
                            }), angular.extend(j.currentSlide || {}, {
                                direction: f,
                                leaving: !0
                            }), a.$currentTransition = d(c.$element, {}),
                            function(b, c) {
                                a.$currentTransition.then(function() {
                                    h(b, c)
                                }, function() {
                                    h(b, c)
                                })
                            }(c, j.currentSlide)
                    } else h(c, j.currentSlide);
                    j.currentSlide = c, l = i, e()
                }
            }

            function h(b, c) {
                angular.extend(b, {
                    direction: "",
                    active: !0,
                    leaving: !1,
                    entering: !1
                }), angular.extend(c || {}, {
                    direction: "",
                    active: !1,
                    leaving: !1,
                    entering: !1
                }), a.$currentTransition = null
            }
            var i = k.indexOf(c);
            void 0 === f && (f = i > l ? "next" : "prev"), c && c !== j.currentSlide && (a.$currentTransition ? (a.$currentTransition.cancel(), b(g)) : g())
        }, a.$on("$destroy", function() {
            m = !0
        }), j.indexOfSlide = function(a) {
            return k.indexOf(a)
        }, a.next = function() {
            var b = (l + 1) % k.length;
            return a.$currentTransition ? void 0 : j.select(k[b], "next")
        }, a.prev = function() {
            var b = 0 > l - 1 ? k.length - 1 : l - 1;
            return a.$currentTransition ? void 0 : j.select(k[b], "prev")
        }, a.isActive = function(a) {
            return j.currentSlide === a
        }, a.$watch("interval", e), a.$on("$destroy", f), a.play = function() {
            i || (i = !0, e())
        }, a.pause = function() {
            a.noPause || (i = !1, f())
        }, j.addSlide = function(b, c) {
            b.$element = c, k.push(b), 1 === k.length || b.active ? (j.select(k[k.length - 1]), 1 == k.length && a.play()) : b.active = !1
        }, j.removeSlide = function(a) {
            var b = k.indexOf(a);
            k.splice(b, 1), k.length > 0 && a.active ? b >= k.length ? j.select(k[b - 1]) : j.select(k[b]) : l > b && l--
        }
    }]).directive("carousel", [function() {
        return {
            restrict: "EA",
            transclude: !0,
            replace: !0,
            controller: "CarouselController",
            require: "carousel",
            templateUrl: "template/carousel/carousel.html",
            scope: {
                interval: "=",
                noTransition: "=",
                noPause: "="
            }
        }
    }]).directive("slide", function() {
        return {
            require: "^carousel",
            restrict: "EA",
            transclude: !0,
            replace: !0,
            templateUrl: "template/carousel/slide.html",
            scope: {
                active: "=?"
            },
            link: function(a, b, c, d) {
                d.addSlide(a, b), a.$on("$destroy", function() {
                    d.removeSlide(a)
                }), a.$watch("active", function(b) {
                    b && d.select(a)
                })
            }
        }
    }), angular.module("ui.bootstrap.dateparser", []).service("dateParser", ["$locale", "orderByFilter", function(a, b) {
        function c(a) {
            var c = [],
                d = a.split("");
            return angular.forEach(e, function(b, e) {
                var f = a.indexOf(e);
                if (f > -1) {
                    a = a.split(""), d[f] = "(" + b.regex + ")", a[f] = "$";
                    for (var g = f + 1, h = f + e.length; h > g; g++) d[g] = "", a[g] = "$";
                    a = a.join(""), c.push({
                        index: f,
                        apply: b.apply
                    })
                }
            }), {
                regex: new RegExp("^" + d.join("") + "$"),
                map: b(c, "index")
            }
        }

        function d(a, b, c) {
            return 1 === b && c > 28 ? 29 === c && (a % 4 === 0 && a % 100 !== 0 || a % 400 === 0) : 3 === b || 5 === b || 8 === b || 10 === b ? 31 > c : !0
        }
        this.parsers = {};
        var e = {
            yyyy: {
                regex: "\\d{4}",
                apply: function(a) {
                    this.year = +a
                }
            },
            yy: {
                regex: "\\d{2}",
                apply: function(a) {
                    this.year = +a + 2e3
                }
            },
            y: {
                regex: "\\d{1,4}",
                apply: function(a) {
                    this.year = +a
                }
            },
            MMMM: {
                regex: a.DATETIME_FORMATS.MONTH.join("|"),
                apply: function(b) {
                    this.month = a.DATETIME_FORMATS.MONTH.indexOf(b)
                }
            },
            MMM: {
                regex: a.DATETIME_FORMATS.SHORTMONTH.join("|"),
                apply: function(b) {
                    this.month = a.DATETIME_FORMATS.SHORTMONTH.indexOf(b)
                }
            },
            MM: {
                regex: "0[1-9]|1[0-2]",
                apply: function(a) {
                    this.month = a - 1
                }
            },
            M: {
                regex: "[1-9]|1[0-2]",
                apply: function(a) {
                    this.month = a - 1
                }
            },
            dd: {
                regex: "[0-2][0-9]{1}|3[0-1]{1}",
                apply: function(a) {
                    this.date = +a
                }
            },
            d: {
                regex: "[1-2]?[0-9]{1}|3[0-1]{1}",
                apply: function(a) {
                    this.date = +a
                }
            },
            EEEE: {
                regex: a.DATETIME_FORMATS.DAY.join("|")
            },
            EEE: {
                regex: a.DATETIME_FORMATS.SHORTDAY.join("|")
            }
        };
        this.parse = function(b, e) {
            if (!angular.isString(b) || !e) return b;
            e = a.DATETIME_FORMATS[e] || e, this.parsers[e] || (this.parsers[e] = c(e));
            var f = this.parsers[e],
                g = f.regex,
                h = f.map,
                i = b.match(g);
            if (i && i.length) {
                for (var j, k = {
                        year: 1900,
                        month: 0,
                        date: 1,
                        hours: 0
                    }, l = 1, m = i.length; m > l; l++) {
                    var n = h[l - 1];
                    n.apply && n.apply.call(k, i[l])
                }
                return d(k.year, k.month, k.date) && (j = new Date(k.year, k.month, k.date, k.hours)), j
            }
        }
    }]), angular.module("ui.bootstrap.position", []).factory("$position", ["$document", "$window", function(a, b) {
        function c(a, c) {
            return a.currentStyle ? a.currentStyle[c] : b.getComputedStyle ? b.getComputedStyle(a)[c] : a.style[c]
        }

        function d(a) {
            return "static" === (c(a, "position") || "static")
        }
        var e = function(b) {
            for (var c = a[0], e = b.offsetParent || c; e && e !== c && d(e);) e = e.offsetParent;
            return e || c
        };
        return {
            position: function(b) {
                var c = this.offset(b),
                    d = {
                        top: 0,
                        left: 0
                    },
                    f = e(b[0]);
                f != a[0] && (d = this.offset(angular.element(f)), d.top += f.clientTop - f.scrollTop, d.left += f.clientLeft - f.scrollLeft);
                var g = b[0].getBoundingClientRect();
                return {
                    width: g.width || b.prop("offsetWidth"),
                    height: g.height || b.prop("offsetHeight"),
                    top: c.top - d.top,
                    left: c.left - d.left
                }
            },
            offset: function(c) {
                var d = c[0].getBoundingClientRect();
                return {
                    width: d.width || c.prop("offsetWidth"),
                    height: d.height || c.prop("offsetHeight"),
                    top: d.top + (b.pageYOffset || a[0].documentElement.scrollTop),
                    left: d.left + (b.pageXOffset || a[0].documentElement.scrollLeft)
                }
            },
            positionElements: function(a, b, c, d) {
                var e, f, g, h, i = c.split("-"),
                    j = i[0],
                    k = i[1] || "center";
                e = d ? this.offset(a) : this.position(a), f = b.prop("offsetWidth"), g = b.prop("offsetHeight");
                var l = {
                        center: function() {
                            return e.left + e.width / 2 - f / 2
                        },
                        left: function() {
                            return e.left
                        },
                        right: function() {
                            return e.left + e.width
                        }
                    },
                    m = {
                        center: function() {
                            return e.top + e.height / 2 - g / 2
                        },
                        top: function() {
                            return e.top
                        },
                        bottom: function() {
                            return e.top + e.height
                        }
                    };
                switch (j) {
                    case "right":
                        h = {
                            top: m[k](),
                            left: l[j]()
                        };
                        break;
                    case "left":
                        h = {
                            top: m[k](),
                            left: e.left - f
                        };
                        break;
                    case "bottom":
                        h = {
                            top: m[j](),
                            left: l[k]()
                        };
                        break;
                    default:
                        h = {
                            top: e.top - g,
                            left: l[k]()
                        }
                }
                return h
            }
        }
    }]), angular.module("ui.bootstrap.datepicker", ["ui.bootstrap.dateparser", "ui.bootstrap.position"]).constant("datepickerConfig", {
        formatDay: "dd",
        formatMonth: "MMMM",
        formatYear: "yyyy",
        formatDayHeader: "EEE",
        formatDayTitle: "MMMM yyyy",
        formatMonthTitle: "yyyy",
        datepickerMode: "day",
        minMode: "day",
        maxMode: "year",
        showWeeks: !0,
        startingDay: 0,
        yearRange: 20,
        minDate: null,
        maxDate: null
    }).controller("DatepickerController", ["$scope", "$attrs", "$parse", "$interpolate", "$timeout", "$log", "dateFilter", "datepickerConfig", function(a, b, c, d, e, f, g, h) {
        var i = this,
            j = {
                $setViewValue: angular.noop
            };
        this.modes = ["day", "month", "year"], angular.forEach(["formatDay", "formatMonth", "formatYear", "formatDayHeader", "formatDayTitle", "formatMonthTitle", "minMode", "maxMode", "showWeeks", "startingDay", "yearRange"], function(c, e) {
            i[c] = angular.isDefined(b[c]) ? 8 > e ? d(b[c])(a.$parent) : a.$parent.$eval(b[c]) : h[c]
        }), angular.forEach(["minDate", "maxDate"], function(d) {
            b[d] ? a.$parent.$watch(c(b[d]), function(a) {
                i[d] = a ? new Date(a) : null, i.refreshView()
            }) : i[d] = h[d] ? new Date(h[d]) : null
        }), a.datepickerMode = a.datepickerMode || h.datepickerMode, a.uniqueId = "datepicker-" + a.$id + "-" + Math.floor(1e4 * Math.random()), this.activeDate = angular.isDefined(b.initDate) ? a.$parent.$eval(b.initDate) : new Date, a.isActive = function(b) {
            return 0 === i.compare(b.date, i.activeDate) ? (a.activeDateId = b.uid, !0) : !1
        }, this.init = function(a) {
            j = a, j.$render = function() {
                i.render()
            }
        }, this.render = function() {
            if (j.$modelValue) {
                var a = new Date(j.$modelValue),
                    b = !isNaN(a);
                b ? this.activeDate = a : f.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.'), j.$setValidity("date", b)
            }
            this.refreshView()
        }, this.refreshView = function() {
            if (this.element) {
                this._refreshView();
                var a = j.$modelValue ? new Date(j.$modelValue) : null;
                j.$setValidity("date-disabled", !a || this.element && !this.isDisabled(a))
            }
        }, this.createDateObject = function(a, b) {
            var c = j.$modelValue ? new Date(j.$modelValue) : null;
            return {
                date: a,
                label: g(a, b),
                selected: c && 0 === this.compare(a, c),
                disabled: this.isDisabled(a),
                current: 0 === this.compare(a, new Date)
            }
        }, this.isDisabled = function(c) {
            return this.minDate && this.compare(c, this.minDate) < 0 || this.maxDate && this.compare(c, this.maxDate) > 0 || b.dateDisabled && a.dateDisabled({
                date: c,
                mode: a.datepickerMode
            })
        }, this.split = function(a, b) {
            for (var c = []; a.length > 0;) c.push(a.splice(0, b));
            return c
        }, a.select = function(b) {
            if (a.datepickerMode === i.minMode) {
                var c = j.$modelValue ? new Date(j.$modelValue) : new Date(0, 0, 0, 0, 0, 0, 0);
                c.setFullYear(b.getFullYear(), b.getMonth(), b.getDate()), j.$setViewValue(c), j.$render()
            } else i.activeDate = b, a.datepickerMode = i.modes[i.modes.indexOf(a.datepickerMode) - 1]
        }, a.move = function(a) {
            var b = i.activeDate.getFullYear() + a * (i.step.years || 0),
                c = i.activeDate.getMonth() + a * (i.step.months || 0);
            i.activeDate.setFullYear(b, c, 1), i.refreshView()
        }, a.toggleMode = function(b) {
            b = b || 1, a.datepickerMode === i.maxMode && 1 === b || a.datepickerMode === i.minMode && -1 === b || (a.datepickerMode = i.modes[i.modes.indexOf(a.datepickerMode) + b])
        }, a.keys = {
            13: "enter",
            32: "space",
            33: "pageup",
            34: "pagedown",
            35: "end",
            36: "home",
            37: "left",
            38: "up",
            39: "right",
            40: "down"
        };
        var k = function() {
            e(function() {
                i.element[0].focus()
            }, 0, !1)
        };
        a.$on("datepicker.focus", k), a.keydown = function(b) {
            var c = a.keys[b.which];
            if (c && !b.shiftKey && !b.altKey)
                if (b.preventDefault(), b.stopPropagation(), "enter" === c || "space" === c) {
                    if (i.isDisabled(i.activeDate)) return;
                    a.select(i.activeDate), k()
                } else !b.ctrlKey || "up" !== c && "down" !== c ? (i.handleKeyDown(c, b), i.refreshView()) : (a.toggleMode("up" === c ? 1 : -1), k())
        }
    }]).directive("datepicker", function() {
        return {
            restrict: "EA",
            replace: !0,
            templateUrl: "template/datepicker/datepicker.html",
            scope: {
                datepickerMode: "=?",
                dateDisabled: "&"
            },
            require: ["datepicker", "?^ngModel"],
            controller: "DatepickerController",
            link: function(a, b, c, d) {
                var e = d[0],
                    f = d[1];
                f && e.init(f)
            }
        }
    }).directive("daypicker", ["dateFilter", function(a) {
        return {
            restrict: "EA",
            replace: !0,
            templateUrl: "template/datepicker/day.html",
            require: "^datepicker",
            link: function(b, c, d, e) {
                function f(a, b) {
                    return 1 !== b || a % 4 !== 0 || a % 100 === 0 && a % 400 !== 0 ? i[b] : 29
                }

                function g(a, b) {
                    var c = new Array(b),
                        d = new Date(a),
                        e = 0;
                    for (d.setHours(12); b > e;) c[e++] = new Date(d), d.setDate(d.getDate() + 1);
                    return c
                }

                function h(a) {
                    var b = new Date(a);
                    b.setDate(b.getDate() + 4 - (b.getDay() || 7));
                    var c = b.getTime();
                    return b.setMonth(0), b.setDate(1), Math.floor(Math.round((c - b) / 864e5) / 7) + 1
                }
                b.showWeeks = e.showWeeks, e.step = {
                    months: 1
                }, e.element = c;
                var i = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
                e._refreshView = function() {
                    var c = e.activeDate.getFullYear(),
                        d = e.activeDate.getMonth(),
                        f = new Date(c, d, 1),
                        i = e.startingDay - f.getDay(),
                        j = i > 0 ? 7 - i : -i,
                        k = new Date(f);
                    j > 0 && k.setDate(-j + 1);
                    for (var l = g(k, 42), m = 0; 42 > m; m++) l[m] = angular.extend(e.createDateObject(l[m], e.formatDay), {
                        secondary: l[m].getMonth() !== d,
                        uid: b.uniqueId + "-" + m
                    });
                    b.labels = new Array(7);
                    for (var n = 0; 7 > n; n++) b.labels[n] = {
                        abbr: a(l[n].date, e.formatDayHeader),
                        full: a(l[n].date, "EEEE")
                    };
                    if (b.title = a(e.activeDate, e.formatDayTitle), b.rows = e.split(l, 7), b.showWeeks) {
                        b.weekNumbers = [];
                        for (var o = h(b.rows[0][0].date), p = b.rows.length; b.weekNumbers.push(o++) < p;);
                    }
                }, e.compare = function(a, b) {
                    return new Date(a.getFullYear(), a.getMonth(), a.getDate()) - new Date(b.getFullYear(), b.getMonth(), b.getDate())
                }, e.handleKeyDown = function(a, b) {
                    var c = e.activeDate.getDate();
                    if ("left" === a) c -= 1;
                    else if ("up" === a) c -= 7;
                    else if ("right" === a) c += 1;
                    else if ("down" === a) c += 7;
                    else if ("pageup" === a || "pagedown" === a) {
                        var d = e.activeDate.getMonth() + ("pageup" === a ? -1 : 1);
                        e.activeDate.setMonth(d, 1), c = Math.min(f(e.activeDate.getFullYear(), e.activeDate.getMonth()), c)
                    } else "home" === a ? c = 1 : "end" === a && (c = f(e.activeDate.getFullYear(), e.activeDate.getMonth()));
                    e.activeDate.setDate(c)
                }, e.refreshView()
            }
        }
    }]).directive("monthpicker", ["dateFilter", function(a) {
        return {
            restrict: "EA",
            replace: !0,
            templateUrl: "template/datepicker/month.html",
            require: "^datepicker",
            link: function(b, c, d, e) {
                e.step = {
                    years: 1
                }, e.element = c, e._refreshView = function() {
                    for (var c = new Array(12), d = e.activeDate.getFullYear(), f = 0; 12 > f; f++) c[f] = angular.extend(e.createDateObject(new Date(d, f, 1), e.formatMonth), {
                        uid: b.uniqueId + "-" + f
                    });
                    b.title = a(e.activeDate, e.formatMonthTitle), b.rows = e.split(c, 3)
                }, e.compare = function(a, b) {
                    return new Date(a.getFullYear(), a.getMonth()) - new Date(b.getFullYear(), b.getMonth())
                }, e.handleKeyDown = function(a, b) {
                    var c = e.activeDate.getMonth();
                    if ("left" === a) c -= 1;
                    else if ("up" === a) c -= 3;
                    else if ("right" === a) c += 1;
                    else if ("down" === a) c += 3;
                    else if ("pageup" === a || "pagedown" === a) {
                        var d = e.activeDate.getFullYear() + ("pageup" === a ? -1 : 1);
                        e.activeDate.setFullYear(d)
                    } else "home" === a ? c = 0 : "end" === a && (c = 11);
                    e.activeDate.setMonth(c)
                }, e.refreshView()
            }
        }
    }]).directive("yearpicker", ["dateFilter", function(a) {
        return {
            restrict: "EA",
            replace: !0,
            templateUrl: "template/datepicker/year.html",
            require: "^datepicker",
            link: function(a, b, c, d) {
                function e(a) {
                    return parseInt((a - 1) / f, 10) * f + 1
                }
                var f = d.yearRange;
                d.step = {
                    years: f
                }, d.element = b, d._refreshView = function() {
                    for (var b = new Array(f), c = 0, g = e(d.activeDate.getFullYear()); f > c; c++) b[c] = angular.extend(d.createDateObject(new Date(g + c, 0, 1), d.formatYear), {
                        uid: a.uniqueId + "-" + c
                    });
                    a.title = [b[0].label, b[f - 1].label].join(" - "), a.rows = d.split(b, 5)
                }, d.compare = function(a, b) {
                    return a.getFullYear() - b.getFullYear()
                }, d.handleKeyDown = function(a, b) {
                    var c = d.activeDate.getFullYear();
                    "left" === a ? c -= 1 : "up" === a ? c -= 5 : "right" === a ? c += 1 : "down" === a ? c += 5 : "pageup" === a || "pagedown" === a ? c += ("pageup" === a ? -1 : 1) * d.step.years : "home" === a ? c = e(d.activeDate.getFullYear()) : "end" === a && (c = e(d.activeDate.getFullYear()) + f - 1), d.activeDate.setFullYear(c)
                }, d.refreshView()
            }
        }
    }]).constant("datepickerPopupConfig", {
        datepickerPopup: "yyyy-MM-dd",
        currentText: "Today",
        clearText: "Clear",
        closeText: "Done",
        closeOnDateSelection: !0,
        appendToBody: !1,
        showButtonBar: !0
    }).directive("datepickerPopup", ["$compile", "$parse", "$document", "$position", "dateFilter", "dateParser", "datepickerPopupConfig", function(a, b, c, d, e, f, g) {
        return {
            restrict: "EA",
            require: "ngModel",
            scope: {
                isOpen: "=?",
                currentText: "@",
                clearText: "@",
                closeText: "@",
                dateDisabled: "&"
            },
            link: function(h, i, j, k) {
                function l(a) {
                    return a.replace(/([A-Z])/g, function(a) {
                        return "-" + a.toLowerCase()
                    })
                }

                function m(a) {
                    if (a) {
                        if (angular.isDate(a) && !isNaN(a)) return k.$setValidity("date", !0), a;
                        if (angular.isString(a)) {
                            var b = f.parse(a, n) || new Date(a);
                            return isNaN(b) ? void k.$setValidity("date", !1) : (k.$setValidity("date", !0), b)
                        }
                        return void k.$setValidity("date", !1)
                    }
                    return k.$setValidity("date", !0), null
                }
                var n, o = angular.isDefined(j.closeOnDateSelection) ? h.$parent.$eval(j.closeOnDateSelection) : g.closeOnDateSelection,
                    p = angular.isDefined(j.datepickerAppendToBody) ? h.$parent.$eval(j.datepickerAppendToBody) : g.appendToBody;
                h.showButtonBar = angular.isDefined(j.showButtonBar) ? h.$parent.$eval(j.showButtonBar) : g.showButtonBar, h.getText = function(a) {
                    return h[a + "Text"] || g[a + "Text"]
                }, j.$observe("datepickerPopup", function(a) {
                    n = a || g.datepickerPopup, k.$render()
                });
                var q = angular.element("<div datepicker-popup-wrap><div datepicker></div></div>");
                q.attr({
                    "ng-model": "date",
                    "ng-change": "dateSelection()"
                });
                var r = angular.element(q.children()[0]);
                j.datepickerOptions && angular.forEach(h.$parent.$eval(j.datepickerOptions), function(a, b) {
                    r.attr(l(b), a)
                }), h.watchData = {}, angular.forEach(["minDate", "maxDate", "datepickerMode"], function(a) {
                    if (j[a]) {
                        var c = b(j[a]);
                        if (h.$parent.$watch(c, function(b) {
                                h.watchData[a] = b
                            }), r.attr(l(a), "watchData." + a), "datepickerMode" === a) {
                            var d = c.assign;
                            h.$watch("watchData." + a, function(a, b) {
                                a !== b && d(h.$parent, a)
                            })
                        }
                    }
                }), j.dateDisabled && r.attr("date-disabled", "dateDisabled({ date: date, mode: mode })"), k.$parsers.unshift(m), h.dateSelection = function(a) {
                    angular.isDefined(a) && (h.date = a), k.$setViewValue(h.date), k.$render(), o && (h.isOpen = !1, i[0].focus())
                }, i.bind("input change keyup", function() {
                    h.$apply(function() {
                        h.date = k.$modelValue
                    })
                }), k.$render = function() {
                    var a = k.$viewValue ? e(k.$viewValue, n) : "";
                    i.val(a), h.date = m(k.$modelValue)
                };
                var s = function(a) {
                        h.isOpen && a.target !== i[0] && h.$apply(function() {
                            h.isOpen = !1
                        })
                    },
                    t = function(a, b) {
                        h.keydown(a)
                    };
                i.bind("keydown", t), h.keydown = function(a) {
                    27 === a.which ? (a.preventDefault(), a.stopPropagation(), h.close()) : 40 !== a.which || h.isOpen || (h.isOpen = !0)
                }, h.$watch("isOpen", function(a) {
                    a ? (h.$broadcast("datepicker.focus"), h.position = p ? d.offset(i) : d.position(i), h.position.top = h.position.top + i.prop("offsetHeight"), c.bind("click", s)) : c.unbind("click", s)
                }), h.select = function(a) {
                    if ("today" === a) {
                        var b = new Date;
                        angular.isDate(k.$modelValue) ? (a = new Date(k.$modelValue), a.setFullYear(b.getFullYear(), b.getMonth(), b.getDate())) : a = new Date(b.setHours(0, 0, 0, 0))
                    }
                    h.dateSelection(a)
                }, h.close = function() {
                    h.isOpen = !1, i[0].focus()
                };
                var u = a(q)(h);
                q.remove(), p ? c.find("body").append(u) : i.after(u), h.$on("$destroy", function() {
                    u.remove(), i.unbind("keydown", t), c.unbind("click", s)
                })
            }
        }
    }]).directive("datepickerPopupWrap", function() {
        return {
            restrict: "EA",
            replace: !0,
            transclude: !0,
            templateUrl: "template/datepicker/popup.html",
            link: function(a, b, c) {
                b.bind("click", function(a) {
                    a.preventDefault(), a.stopPropagation()
                })
            }
        }
    }), angular.module("ui.bootstrap.dropdown", []).constant("dropdownConfig", {
        openClass: "open"
    }).service("dropdownService", ["$document", function(a) {
        var b = null;
        this.open = function(e) {
            b || (a.bind("click", c), a.bind("keydown", d)), b && b !== e && (b.isOpen = !1), b = e
        }, this.close = function(e) {
            b === e && (b = null, a.unbind("click", c), a.unbind("keydown", d))
        };
        var c = function(a) {
                if (b) {
                    var c = b.getToggleElement();
                    a && c && c[0].contains(a.target) || b.$apply(function() {
                        b.isOpen = !1
                    })
                }
            },
            d = function(a) {
                27 === a.which && (b.focusToggleElement(), c())
            }
    }]).controller("DropdownController", ["$scope", "$attrs", "$parse", "dropdownConfig", "dropdownService", "$animate", function(a, b, c, d, e, f) {
        var g, h = this,
            i = a.$new(),
            j = d.openClass,
            k = angular.noop,
            l = b.onToggle ? c(b.onToggle) : angular.noop;
        this.init = function(d) {
            h.$element = d, b.isOpen && (g = c(b.isOpen), k = g.assign, a.$watch(g, function(a) {
                i.isOpen = !!a
            }))
        }, this.toggle = function(a) {
            return i.isOpen = arguments.length ? !!a : !i.isOpen
        }, this.isOpen = function() {
            return i.isOpen
        }, i.getToggleElement = function() {
            return h.toggleElement
        }, i.focusToggleElement = function() {
            h.toggleElement && h.toggleElement[0].focus()
        }, i.$watch("isOpen", function(b, c) {
            f[b ? "addClass" : "removeClass"](h.$element, j), b ? (i.focusToggleElement(), e.open(i)) : e.close(i), k(a, b), angular.isDefined(b) && b !== c && l(a, {
                open: !!b
            })
        }), a.$on("$locationChangeSuccess", function() {
            i.isOpen = !1
        }), a.$on("$destroy", function() {
            i.$destroy()
        })
    }]).directive("dropdown", function() {
        return {
            controller: "DropdownController",
            link: function(a, b, c, d) {
                d.init(b)
            }
        }
    }).directive("dropdownToggle", function() {
        return {
            require: "?^dropdown",
            link: function(a, b, c, d) {
                if (d) {
                    d.toggleElement = b;
                    var e = function(e) {
                        e.preventDefault(), b.hasClass("disabled") || c.disabled || a.$apply(function() {
                            d.toggle()
                        })
                    };
                    b.bind("click", e), b.attr({
                        "aria-haspopup": !0,
                        "aria-expanded": !1
                    }), a.$watch(d.isOpen, function(a) {
                        b.attr("aria-expanded", !!a)
                    }), a.$on("$destroy", function() {
                        b.unbind("click", e)
                    })
                }
            }
        }
    }), angular.module("ui.bootstrap.modal", ["ui.bootstrap.transition"]).factory("$$stackedMap", function() {
        return {
            createNew: function() {
                var a = [];
                return {
                    add: function(b, c) {
                        a.push({
                            key: b,
                            value: c
                        })
                    },
                    get: function(b) {
                        for (var c = 0; c < a.length; c++)
                            if (b == a[c].key) return a[c]
                    },
                    keys: function() {
                        for (var b = [], c = 0; c < a.length; c++) b.push(a[c].key);
                        return b
                    },
                    top: function() {
                        return a[a.length - 1]
                    },
                    remove: function(b) {
                        for (var c = -1, d = 0; d < a.length; d++)
                            if (b == a[d].key) {
                                c = d;
                                break
                            }
                        return a.splice(c, 1)[0]
                    },
                    removeTop: function() {
                        return a.splice(a.length - 1, 1)[0]
                    },
                    length: function() {
                        return a.length
                    }
                }
            }
        }
    }).directive("modalBackdrop", ["$timeout", function(a) {
        return {
            restrict: "EA",
            replace: !0,
            templateUrl: "template/modal/backdrop.html",
            link: function(b, c, d) {
                b.backdropClass = d.backdropClass || "", b.animate = !1, a(function() {
                    b.animate = !0
                })
            }
        }
    }]).directive("modalWindow", ["$modalStack", "$timeout", function(a, b) {
        return {
            restrict: "EA",
            scope: {
                index: "@",
                animate: "="
            },
            replace: !0,
            transclude: !0,
            templateUrl: function(a, b) {
                return b.templateUrl || "template/modal/window.html"
            },
            link: function(c, d, e) {
                d.addClass(e.windowClass || ""), c.size = e.size, b(function() {
                    c.animate = !0, d[0].querySelectorAll("[autofocus]").length || d[0].focus()
                }), c.close = function(b) {
                    var c = a.getTop();
                    c && c.value.backdrop && "static" != c.value.backdrop && b.target === b.currentTarget && (b.preventDefault(), b.stopPropagation(), a.dismiss(c.key, "backdrop click"))
                }
            }
        }
    }]).directive("modalTransclude", function() {
        return {
            link: function(a, b, c, d, e) {
                e(a.$parent, function(a) {
                    b.empty(), b.append(a)
                })
            }
        }
    }).factory("$modalStack", ["$transition", "$timeout", "$document", "$compile", "$rootScope", "$$stackedMap", function(a, b, c, d, e, f) {
        function g() {
            for (var a = -1, b = n.keys(), c = 0; c < b.length; c++) n.get(b[c]).value.backdrop && (a = c);
            return a
        }

        function h(a) {
            var b = c.find("body").eq(0),
                d = n.get(a).value;
            n.remove(a), j(d.modalDomEl, d.modalScope, 300, function() {
                d.modalScope.$destroy(), b.toggleClass(m, n.length() > 0), i()
            })
        }

        function i() {
            if (k && -1 == g()) {
                var a = l;
                j(k, l, 150, function() {
                    a.$destroy(), a = null
                }), k = void 0, l = void 0
            }
        }

        function j(c, d, e, f) {
            function g() {
                g.done || (g.done = !0, c.remove(), f && f())
            }
            d.animate = !1;
            var h = a.transitionEndEventName;
            if (h) {
                var i = b(g, e);
                c.bind(h, function() {
                    b.cancel(i), g(), d.$apply()
                })
            } else b(g)
        }
        var k, l, m = "modal-open",
            n = f.createNew(),
            o = {};
        return e.$watch(g, function(a) {
            l && (l.index = a)
        }), c.bind("keydown", function(a) {
            var b;
            27 === a.which && (b = n.top(), b && b.value.keyboard && (a.preventDefault(), e.$apply(function() {
                o.dismiss(b.key, "escape key press")
            })))
        }), o.open = function(a, b) {
            n.add(a, {
                deferred: b.deferred,
                modalScope: b.scope,
                backdrop: b.backdrop,
                keyboard: b.keyboard
            });
            var f = c.find("body").eq(0),
                h = g();
            if (h >= 0 && !k) {
                l = e.$new(!0), l.index = h;
                var i = angular.element("<div modal-backdrop></div>");
                i.attr("backdrop-class", b.backdropClass), k = d(i)(l), f.append(k)
            }
            var j = angular.element("<div modal-window></div>");
            j.attr({
                "template-url": b.windowTemplateUrl,
                "window-class": b.windowClass,
                size: b.size,
                index: n.length() - 1,
                animate: "animate"
            }).html(b.content);
            var o = d(j)(b.scope);
            n.top().value.modalDomEl = o, f.append(o), f.addClass(m)
        }, o.close = function(a, b) {
            var c = n.get(a);
            c && (c.value.deferred.resolve(b), h(a))
        }, o.dismiss = function(a, b) {
            var c = n.get(a);
            c && (c.value.deferred.reject(b), h(a))
        }, o.dismissAll = function(a) {
            for (var b = this.getTop(); b;) this.dismiss(b.key, a), b = this.getTop()
        }, o.getTop = function() {
            return n.top()
        }, o
    }]).provider("$modal", function() {
        var a = {
            options: {
                backdrop: !0,
                keyboard: !0
            },
            $get: ["$injector", "$rootScope", "$q", "$http", "$templateCache", "$controller", "$modalStack", function(b, c, d, e, f, g, h) {
                function i(a) {
                    return a.template ? d.when(a.template) : e.get(angular.isFunction(a.templateUrl) ? a.templateUrl() : a.templateUrl, {
                        cache: f
                    }).then(function(a) {
                        return a.data
                    })
                }

                function j(a) {
                    var c = [];
                    return angular.forEach(a, function(a) {
                        (angular.isFunction(a) || angular.isArray(a)) && c.push(d.when(b.invoke(a)))
                    }), c
                }
                var k = {};
                return k.open = function(b) {
                    var e = d.defer(),
                        f = d.defer(),
                        k = {
                            result: e.promise,
                            opened: f.promise,
                            close: function(a) {
                                h.close(k, a)
                            },
                            dismiss: function(a) {
                                h.dismiss(k, a)
                            }
                        };
                    if (b = angular.extend({}, a.options, b), b.resolve = b.resolve || {}, !b.template && !b.templateUrl) throw new Error("One of template or templateUrl options is required.");
                    var l = d.all([i(b)].concat(j(b.resolve)));
                    return l.then(function(a) {
                        var d = (b.scope || c).$new();
                        d.$close = k.close, d.$dismiss = k.dismiss;
                        var f, i = {},
                            j = 1;
                        b.controller && (i.$scope = d, i.$modalInstance = k, angular.forEach(b.resolve, function(b, c) {
                            i[c] = a[j++]
                        }), f = g(b.controller, i), b.controllerAs && (d[b.controllerAs] = f)), h.open(k, {
                            scope: d,
                            deferred: e,
                            content: a[0],
                            backdrop: b.backdrop,
                            keyboard: b.keyboard,
                            backdropClass: b.backdropClass,
                            windowClass: b.windowClass,
                            windowTemplateUrl: b.windowTemplateUrl,
                            size: b.size
                        })
                    }, function(a) {
                        e.reject(a)
                    }), l.then(function() {
                        f.resolve(!0)
                    }, function() {
                        f.reject(!1)
                    }), k
                }, k
            }]
        };
        return a
    }), angular.module("ui.bootstrap.pagination", []).controller("PaginationController", ["$scope", "$attrs", "$parse", function(a, b, c) {
        var d = this,
            e = {
                $setViewValue: angular.noop
            },
            f = b.numPages ? c(b.numPages).assign : angular.noop;
        this.init = function(f, g) {
            e = f, this.config = g, e.$render = function() {
                d.render()
            }, b.itemsPerPage ? a.$parent.$watch(c(b.itemsPerPage), function(b) {
                d.itemsPerPage = parseInt(b, 10), a.totalPages = d.calculateTotalPages()
            }) : this.itemsPerPage = g.itemsPerPage
        }, this.calculateTotalPages = function() {
            var b = this.itemsPerPage < 1 ? 1 : Math.ceil(a.totalItems / this.itemsPerPage);
            return Math.max(b || 0, 1)
        }, this.render = function() {
            a.page = parseInt(e.$viewValue, 10) || 1
        }, a.selectPage = function(b) {
            a.page !== b && b > 0 && b <= a.totalPages && (e.$setViewValue(b), e.$render())
        }, a.getText = function(b) {
            return a[b + "Text"] || d.config[b + "Text"]
        }, a.noPrevious = function() {
            return 1 === a.page
        }, a.noNext = function() {
            return a.page === a.totalPages
        }, a.$watch("totalItems", function() {
            a.totalPages = d.calculateTotalPages()
        }), a.$watch("totalPages", function(b) {
            f(a.$parent, b), a.page > b ? a.selectPage(b) : e.$render()
        })
    }]).constant("paginationConfig", {
        itemsPerPage: 10,
        boundaryLinks: !1,
        directionLinks: !0,
        firstText: "First",
        previousText: "Previous",
        nextText: "Next",
        lastText: "Last",
        rotate: !0
    }).directive("pagination", ["$parse", "paginationConfig", function(a, b) {
        return {
            restrict: "EA",
            scope: {
                totalItems: "=",
                firstText: "@",
                previousText: "@",
                nextText: "@",
                lastText: "@"
            },
            require: ["pagination", "?ngModel"],
            controller: "PaginationController",
            templateUrl: "template/pagination/pagination.html",
            replace: !0,
            link: function(c, d, e, f) {
                function g(a, b, c) {
                    return {
                        number: a,
                        text: b,
                        active: c
                    }
                }

                function h(a, b) {
                    var c = [],
                        d = 1,
                        e = b,
                        f = angular.isDefined(k) && b > k;
                    f && (l ? (d = Math.max(a - Math.floor(k / 2), 1), e = d + k - 1, e > b && (e = b, d = e - k + 1)) : (d = (Math.ceil(a / k) - 1) * k + 1, e = Math.min(d + k - 1, b)));
                    for (var h = d; e >= h; h++) {
                        var i = g(h, h, h === a);
                        c.push(i)
                    }
                    if (f && !l) {
                        if (d > 1) {
                            var j = g(d - 1, "...", !1);
                            c.unshift(j)
                        }
                        if (b > e) {
                            var m = g(e + 1, "...", !1);
                            c.push(m)
                        }
                    }
                    return c
                }
                var i = f[0],
                    j = f[1];
                if (j) {
                    var k = angular.isDefined(e.maxSize) ? c.$parent.$eval(e.maxSize) : b.maxSize,
                        l = angular.isDefined(e.rotate) ? c.$parent.$eval(e.rotate) : b.rotate;
                    c.boundaryLinks = angular.isDefined(e.boundaryLinks) ? c.$parent.$eval(e.boundaryLinks) : b.boundaryLinks, c.directionLinks = angular.isDefined(e.directionLinks) ? c.$parent.$eval(e.directionLinks) : b.directionLinks, i.init(j, b), e.maxSize && c.$parent.$watch(a(e.maxSize), function(a) {
                        k = parseInt(a, 10), i.render()
                    });
                    var m = i.render;
                    i.render = function() {
                        m(), c.page > 0 && c.page <= c.totalPages && (c.pages = h(c.page, c.totalPages))
                    }
                }
            }
        }
    }]).constant("pagerConfig", {
        itemsPerPage: 10,
        previousText: "« Previous",
        nextText: "Next »",
        align: !0
    }).directive("pager", ["pagerConfig", function(a) {
        return {
            restrict: "EA",
            scope: {
                totalItems: "=",
                previousText: "@",
                nextText: "@"
            },
            require: ["pager", "?ngModel"],
            controller: "PaginationController",
            templateUrl: "template/pagination/pager.html",
            replace: !0,
            link: function(b, c, d, e) {
                var f = e[0],
                    g = e[1];
                g && (b.align = angular.isDefined(d.align) ? b.$parent.$eval(d.align) : a.align, f.init(g, a))
            }
        }
    }]), angular.module("ui.bootstrap.tooltip", ["ui.bootstrap.position", "ui.bootstrap.bindHtml"]).provider("$tooltip", function() {
        function a(a) {
            var b = /[A-Z]/g,
                c = "-";
            return a.replace(b, function(a, b) {
                return (b ? c : "") + a.toLowerCase()
            })
        }
        var b = {
                placement: "top",
                animation: !0,
                popupDelay: 0
            },
            c = {
                mouseenter: "mouseleave",
                click: "click",
                focus: "blur"
            },
            d = {};
        this.options = function(a) {
            angular.extend(d, a)
        }, this.setTriggers = function(a) {
            angular.extend(c, a)
        }, this.$get = ["$window", "$compile", "$timeout", "$document", "$position", "$interpolate", function(e, f, g, h, i, j) {
            return function(e, k, l) {
                function m(a) {
                    var b = a || n.trigger || l,
                        d = c[b] || b;
                    return {
                        show: b,
                        hide: d
                    }
                }
                var n = angular.extend({}, b, d),
                    o = a(e),
                    p = j.startSymbol(),
                    q = j.endSymbol(),
                    r = "<div " + o + '-popup title="' + p + "title" + q + '" content="' + p + "content" + q + '" placement="' + p + "placement" + q + '" animation="animation" is-open="isOpen"></div>';
                return {
                    restrict: "EA",
                    compile: function(a, b) {
                        var c = f(r);
                        return function(a, b, d) {
                            function f() {
                                D.isOpen ? l() : j()
                            }

                            function j() {
                                (!C || a.$eval(d[k + "Enable"])) && (s(), D.popupDelay ? z || (z = g(o, D.popupDelay, !1), z.then(function(a) {
                                    a()
                                })) : o()())
                            }

                            function l() {
                                a.$apply(function() {
                                    p()
                                })
                            }

                            function o() {
                                return z = null, y && (g.cancel(y), y = null), D.content ? (q(), w.css({
                                    top: 0,
                                    left: 0,
                                    display: "block"
                                }), A ? h.find("body").append(w) : b.after(w), E(), D.isOpen = !0, D.$digest(), E) : angular.noop
                            }

                            function p() {
                                D.isOpen = !1, g.cancel(z), z = null, D.animation ? y || (y = g(r, 500)) : r()
                            }

                            function q() {
                                w && r(), x = D.$new(), w = c(x, angular.noop)
                            }

                            function r() {
                                y = null, w && (w.remove(), w = null), x && (x.$destroy(), x = null)
                            }

                            function s() {
                                t(), u()
                            }

                            function t() {
                                var a = d[k + "Placement"];
                                D.placement = angular.isDefined(a) ? a : n.placement
                            }

                            function u() {
                                var a = d[k + "PopupDelay"],
                                    b = parseInt(a, 10);
                                D.popupDelay = isNaN(b) ? n.popupDelay : b
                            }

                            function v() {
                                var a = d[k + "Trigger"];
                                F(), B = m(a), B.show === B.hide ? b.bind(B.show, f) : (b.bind(B.show, j), b.bind(B.hide, l))
                            }
                            var w, x, y, z, A = angular.isDefined(n.appendToBody) ? n.appendToBody : !1,
                                B = m(void 0),
                                C = angular.isDefined(d[k + "Enable"]),
                                D = a.$new(!0),
                                E = function() {
                                    var a = i.positionElements(b, w, D.placement, A);
                                    a.top += "px", a.left += "px", w.css(a)
                                };
                            D.isOpen = !1, d.$observe(e, function(a) {
                                D.content = a, !a && D.isOpen && p()
                            }), d.$observe(k + "Title", function(a) {
                                D.title = a
                            });
                            var F = function() {
                                b.unbind(B.show, j), b.unbind(B.hide, l)
                            };
                            v();
                            var G = a.$eval(d[k + "Animation"]);
                            D.animation = angular.isDefined(G) ? !!G : n.animation;
                            var H = a.$eval(d[k + "AppendToBody"]);
                            A = angular.isDefined(H) ? H : A, A && a.$on("$locationChangeSuccess", function() {
                                D.isOpen && p()
                            }), a.$on("$destroy", function() {
                                g.cancel(y), g.cancel(z), F(), r(), D = null
                            })
                        }
                    }
                }
            }
        }]
    }).directive("tooltipPopup", function() {
        return {
            restrict: "EA",
            replace: !0,
            scope: {
                content: "@",
                placement: "@",
                animation: "&",
                isOpen: "&"
            },
            templateUrl: "template/tooltip/tooltip-popup.html"
        }
    }).directive("tooltip", ["$tooltip", function(a) {
        return a("tooltip", "tooltip", "mouseenter")
    }]).directive("tooltipHtmlUnsafePopup", function() {
        return {
            restrict: "EA",
            replace: !0,
            scope: {
                content: "@",
                placement: "@",
                animation: "&",
                isOpen: "&"
            },
            templateUrl: "template/tooltip/tooltip-html-unsafe-popup.html"
        }
    }).directive("tooltipHtmlUnsafe", ["$tooltip", function(a) {
        return a("tooltipHtmlUnsafe", "tooltip", "mouseenter")
    }]), angular.module("ui.bootstrap.popover", ["ui.bootstrap.tooltip"]).directive("popoverPopup", function() {
        return {
            restrict: "EA",
            replace: !0,
            scope: {
                title: "@",
                content: "@",
                placement: "@",
                animation: "&",
                isOpen: "&"
            },
            templateUrl: "template/popover/popover.html"
        }
    }).directive("popover", ["$tooltip", function(a) {
        return a("popover", "popover", "click")
    }]), angular.module("ui.bootstrap.progressbar", []).constant("progressConfig", {
        animate: !0,
        max: 100
    }).controller("ProgressController", ["$scope", "$attrs", "progressConfig", function(a, b, c) {
        var d = this,
            e = angular.isDefined(b.animate) ? a.$parent.$eval(b.animate) : c.animate;
        this.bars = [], a.max = angular.isDefined(b.max) ? a.$parent.$eval(b.max) : c.max, this.addBar = function(b, c) {
            e || c.css({
                transition: "none"
            }), this.bars.push(b), b.$watch("value", function(c) {
                b.percent = +(100 * c / a.max).toFixed(2)
            }), b.$on("$destroy", function() {
                c = null, d.removeBar(b)
            })
        }, this.removeBar = function(a) {
            this.bars.splice(this.bars.indexOf(a), 1)
        }
    }]).directive("progress", function() {
        return {
            restrict: "EA",
            replace: !0,
            transclude: !0,
            controller: "ProgressController",
            require: "progress",
            scope: {},
            templateUrl: "template/progressbar/progress.html"
        }
    }).directive("bar", function() {
        return {
            restrict: "EA",
            replace: !0,
            transclude: !0,
            require: "^progress",
            scope: {
                value: "=",
                type: "@"
            },
            templateUrl: "template/progressbar/bar.html",
            link: function(a, b, c, d) {
                d.addBar(a, b)
            }
        }
    }).directive("progressbar", function() {
        return {
            restrict: "EA",
            replace: !0,
            transclude: !0,
            controller: "ProgressController",
            scope: {
                value: "=",
                type: "@"
            },
            templateUrl: "template/progressbar/progressbar.html",
            link: function(a, b, c, d) {
                d.addBar(a, angular.element(b.children()[0]))
            }
        }
    }), angular.module("ui.bootstrap.rating", []).constant("ratingConfig", {
        max: 5,
        stateOn: null,
        stateOff: null
    }).controller("RatingController", ["$scope", "$attrs", "ratingConfig", function(a, b, c) {
        var d = {
            $setViewValue: angular.noop
        };
        this.init = function(e) {
            d = e, d.$render = this.render, this.stateOn = angular.isDefined(b.stateOn) ? a.$parent.$eval(b.stateOn) : c.stateOn, this.stateOff = angular.isDefined(b.stateOff) ? a.$parent.$eval(b.stateOff) : c.stateOff;
            var f = angular.isDefined(b.ratingStates) ? a.$parent.$eval(b.ratingStates) : new Array(angular.isDefined(b.max) ? a.$parent.$eval(b.max) : c.max);
            a.range = this.buildTemplateObjects(f)
        }, this.buildTemplateObjects = function(a) {
            for (var b = 0, c = a.length; c > b; b++) a[b] = angular.extend({
                index: b
            }, {
                stateOn: this.stateOn,
                stateOff: this.stateOff
            }, a[b]);
            return a
        }, a.rate = function(b) {
            !a.readonly && b >= 0 && b <= a.range.length && (d.$setViewValue(b), d.$render())
        }, a.enter = function(b) {
            a.readonly || (a.value = b), a.onHover({
                value: b
            })
        }, a.reset = function() {
            a.value = d.$viewValue, a.onLeave()
        }, a.onKeydown = function(b) {
            /(37|38|39|40)/.test(b.which) && (b.preventDefault(), b.stopPropagation(), a.rate(a.value + (38 === b.which || 39 === b.which ? 1 : -1)))
        }, this.render = function() {
            a.value = d.$viewValue
        }
    }]).directive("rating", function() {
        return {
            restrict: "EA",
            require: ["rating", "ngModel"],
            scope: {
                readonly: "=?",
                onHover: "&",
                onLeave: "&"
            },
            controller: "RatingController",
            templateUrl: "template/rating/rating.html",
            replace: !0,
            link: function(a, b, c, d) {
                var e = d[0],
                    f = d[1];
                f && e.init(f)
            }
        }
    }), angular.module("ui.bootstrap.tabs", []).controller("TabsetController", ["$scope", function(a) {
        var b = this,
            c = b.tabs = a.tabs = [];
        b.select = function(a) {
            angular.forEach(c, function(b) {
                b.active && b !== a && (b.active = !1, b.onDeselect())
            }), a.active = !0, a.onSelect()
        }, b.addTab = function(a) {
            c.push(a), 1 === c.length ? a.active = !0 : a.active && b.select(a)
        }, b.removeTab = function(a) {
            var e = c.indexOf(a);
            if (a.active && c.length > 1 && !d) {
                var f = e == c.length - 1 ? e - 1 : e + 1;
                b.select(c[f])
            }
            c.splice(e, 1)
        };
        var d;
        a.$on("$destroy", function() {
            d = !0
        })
    }]).directive("tabset", function() {
        return {
            restrict: "EA",
            transclude: !0,
            replace: !0,
            scope: {
                type: "@"
            },
            controller: "TabsetController",
            templateUrl: "template/tabs/tabset.html",
            link: function(a, b, c) {
                a.vertical = angular.isDefined(c.vertical) ? a.$parent.$eval(c.vertical) : !1, a.justified = angular.isDefined(c.justified) ? a.$parent.$eval(c.justified) : !1
            }
        }
    }).directive("tab", ["$parse", function(a) {
        return {
            require: "^tabset",
            restrict: "EA",
            replace: !0,
            templateUrl: "template/tabs/tab.html",
            transclude: !0,
            scope: {
                active: "=?",
                heading: "@",
                onSelect: "&select",
                onDeselect: "&deselect"
            },
            controller: function() {},
            compile: function(b, c, d) {
                return function(b, c, e, f) {
                    b.$watch("active", function(a) {
                        a && f.select(b)
                    }), b.disabled = !1, e.disabled && b.$parent.$watch(a(e.disabled), function(a) {
                        b.disabled = !!a
                    }), b.select = function() {
                        b.disabled || (b.active = !0)
                    }, f.addTab(b), b.$on("$destroy", function() {
                        f.removeTab(b)
                    }), b.$transcludeFn = d
                }
            }
        }
    }]).directive("tabHeadingTransclude", [function() {
        return {
            restrict: "A",
            require: "^tab",
            link: function(a, b, c, d) {
                a.$watch("headingElement", function(a) {
                    a && (b.html(""), b.append(a))
                })
            }
        }
    }]).directive("tabContentTransclude", function() {
        function a(a) {
            return a.tagName && (a.hasAttribute("tab-heading") || a.hasAttribute("data-tab-heading") || "tab-heading" === a.tagName.toLowerCase() || "data-tab-heading" === a.tagName.toLowerCase())
        }
        return {
            restrict: "A",
            require: "^tabset",
            link: function(b, c, d) {
                var e = b.$eval(d.tabContentTransclude);
                e.$transcludeFn(e.$parent, function(b) {
                    angular.forEach(b, function(b) {
                        a(b) ? e.headingElement = b : c.append(b)
                    })
                })
            }
        }
    }), angular.module("ui.bootstrap.timepicker", []).constant("timepickerConfig", {
        hourStep: 1,
        minuteStep: 1,
        showMeridian: !0,
        meridians: null,
        readonlyInput: !1,
        mousewheel: !0
    }).controller("TimepickerController", ["$scope", "$attrs", "$parse", "$log", "$locale", "timepickerConfig", function(a, b, c, d, e, f) {
        function g() {
            var b = parseInt(a.hours, 10),
                c = a.showMeridian ? b > 0 && 13 > b : b >= 0 && 24 > b;
            return c ? (a.showMeridian && (12 === b && (b = 0), a.meridian === p[1] && (b += 12)), b) : void 0
        }

        function h() {
            var b = parseInt(a.minutes, 10);
            return b >= 0 && 60 > b ? b : void 0
        }

        function i(a) {
            return angular.isDefined(a) && a.toString().length < 2 ? "0" + a : a
        }

        function j(a) {
            k(), o.$setViewValue(new Date(n)), l(a)
        }

        function k() {
            o.$setValidity("time", !0), a.invalidHours = !1, a.invalidMinutes = !1
        }

        function l(b) {
            var c = n.getHours(),
                d = n.getMinutes();
            a.showMeridian && (c = 0 === c || 12 === c ? 12 : c % 12), a.hours = "h" === b ? c : i(c), a.minutes = "m" === b ? d : i(d), a.meridian = n.getHours() < 12 ? p[0] : p[1]
        }

        function m(a) {
            var b = new Date(n.getTime() + 6e4 * a);
            n.setHours(b.getHours(), b.getMinutes()), j()
        }
        var n = new Date,
            o = {
                $setViewValue: angular.noop
            },
            p = angular.isDefined(b.meridians) ? a.$parent.$eval(b.meridians) : f.meridians || e.DATETIME_FORMATS.AMPMS;
        this.init = function(c, d) {
            o = c, o.$render = this.render;
            var e = d.eq(0),
                g = d.eq(1),
                h = angular.isDefined(b.mousewheel) ? a.$parent.$eval(b.mousewheel) : f.mousewheel;
            h && this.setupMousewheelEvents(e, g), a.readonlyInput = angular.isDefined(b.readonlyInput) ? a.$parent.$eval(b.readonlyInput) : f.readonlyInput, this.setupInputEvents(e, g)
        };
        var q = f.hourStep;
        b.hourStep && a.$parent.$watch(c(b.hourStep), function(a) {
            q = parseInt(a, 10)
        });
        var r = f.minuteStep;
        b.minuteStep && a.$parent.$watch(c(b.minuteStep), function(a) {
            r = parseInt(a, 10)
        }), a.showMeridian = f.showMeridian, b.showMeridian && a.$parent.$watch(c(b.showMeridian), function(b) {
            if (a.showMeridian = !!b, o.$error.time) {
                var c = g(),
                    d = h();
                angular.isDefined(c) && angular.isDefined(d) && (n.setHours(c), j())
            } else l()
        }), this.setupMousewheelEvents = function(b, c) {
            var d = function(a) {
                a.originalEvent && (a = a.originalEvent);
                var b = a.wheelDelta ? a.wheelDelta : -a.deltaY;
                return a.detail || b > 0
            };
            b.bind("mousewheel wheel", function(b) {
                a.$apply(d(b) ? a.incrementHours() : a.decrementHours()), b.preventDefault()
            }), c.bind("mousewheel wheel", function(b) {
                a.$apply(d(b) ? a.incrementMinutes() : a.decrementMinutes()), b.preventDefault()
            })
        }, this.setupInputEvents = function(b, c) {
            if (a.readonlyInput) return a.updateHours = angular.noop, void(a.updateMinutes = angular.noop);
            var d = function(b, c) {
                o.$setViewValue(null), o.$setValidity("time", !1), angular.isDefined(b) && (a.invalidHours = b), angular.isDefined(c) && (a.invalidMinutes = c)
            };
            a.updateHours = function() {
                var a = g();
                angular.isDefined(a) ? (n.setHours(a), j("h")) : d(!0)
            }, b.bind("blur", function(b) {
                !a.invalidHours && a.hours < 10 && a.$apply(function() {
                    a.hours = i(a.hours)
                })
            }), a.updateMinutes = function() {
                var a = h();
                angular.isDefined(a) ? (n.setMinutes(a), j("m")) : d(void 0, !0)
            }, c.bind("blur", function(b) {
                !a.invalidMinutes && a.minutes < 10 && a.$apply(function() {
                    a.minutes = i(a.minutes)
                })
            })
        }, this.render = function() {
            var a = o.$modelValue ? new Date(o.$modelValue) : null;
            isNaN(a) ? (o.$setValidity("time", !1), d.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')) : (a && (n = a), k(), l())
        }, a.incrementHours = function() {
            m(60 * q)
        }, a.decrementHours = function() {
            m(60 * -q)
        }, a.incrementMinutes = function() {
            m(r)
        }, a.decrementMinutes = function() {
            m(-r)
        }, a.toggleMeridian = function() {
            m(720 * (n.getHours() < 12 ? 1 : -1))
        }
    }]).directive("timepicker", function() {
        return {
            restrict: "EA",
            require: ["timepicker", "?^ngModel"],
            controller: "TimepickerController",
            replace: !0,
            scope: {},
            templateUrl: "template/timepicker/timepicker.html",
            link: function(a, b, c, d) {
                var e = d[0],
                    f = d[1];
                f && e.init(f, b.find("input"))
            }
        }
    }), angular.module("ui.bootstrap.typeahead", ["ui.bootstrap.position", "ui.bootstrap.bindHtml"]).factory("typeaheadParser", ["$parse", function(a) {
        var b = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/;
        return {
            parse: function(c) {
                var d = c.match(b);
                if (!d) throw new Error('Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_" but got "' + c + '".');
                return {
                    itemName: d[3],
                    source: a(d[4]),
                    viewMapper: a(d[2] || d[1]),
                    modelMapper: a(d[1])
                }
            }
        }
    }]).directive("typeahead", ["$compile", "$parse", "$q", "$timeout", "$document", "$position", "typeaheadParser", function(a, b, c, d, e, f, g) {
        var h = [9, 13, 27, 38, 40];
        return {
            require: "ngModel",
            link: function(i, j, k, l) {
                var m, n = i.$eval(k.typeaheadMinLength) || 1,
                    o = i.$eval(k.typeaheadWaitMs) || 0,
                    p = i.$eval(k.typeaheadEditable) !== !1,
                    q = b(k.typeaheadLoading).assign || angular.noop,
                    r = b(k.typeaheadOnSelect),
                    s = k.typeaheadInputFormatter ? b(k.typeaheadInputFormatter) : void 0,
                    t = k.typeaheadAppendToBody ? i.$eval(k.typeaheadAppendToBody) : !1,
                    u = i.$eval(k.typeaheadFocusFirst) !== !1,
                    v = b(k.ngModel).assign,
                    w = g.parse(k.typeahead),
                    x = i.$new();
                i.$on("$destroy", function() {
                    x.$destroy()
                });
                var y = "typeahead-" + x.$id + "-" + Math.floor(1e4 * Math.random());
                j.attr({
                    "aria-autocomplete": "list",
                    "aria-expanded": !1,
                    "aria-owns": y
                });
                var z = angular.element("<div typeahead-popup></div>");
                z.attr({
                    id: y,
                    matches: "matches",
                    active: "activeIdx",
                    select: "select(activeIdx)",
                    query: "query",
                    position: "position"
                }), angular.isDefined(k.typeaheadTemplateUrl) && z.attr("template-url", k.typeaheadTemplateUrl);
                var A = function() {
                        x.matches = [], x.activeIdx = -1, j.attr("aria-expanded", !1)
                    },
                    B = function(a) {
                        return y + "-option-" + a
                    };
                x.$watch("activeIdx", function(a) {
                    0 > a ? j.removeAttr("aria-activedescendant") : j.attr("aria-activedescendant", B(a))
                });
                var C = function(a) {
                    var b = {
                        $viewValue: a
                    };
                    q(i, !0), c.when(w.source(i, b)).then(function(c) {
                        var d = a === l.$viewValue;
                        if (d && m)
                            if (c.length > 0) {
                                x.activeIdx = u ? 0 : -1, x.matches.length = 0;
                                for (var e = 0; e < c.length; e++) b[w.itemName] = c[e], x.matches.push({
                                    id: B(e),
                                    label: w.viewMapper(x, b),
                                    model: c[e]
                                });
                                x.query = a, x.position = t ? f.offset(j) : f.position(j), x.position.top = x.position.top + j.prop("offsetHeight"), j.attr("aria-expanded", !0)
                            } else A();
                        d && q(i, !1)
                    }, function() {
                        A(), q(i, !1)
                    })
                };
                A(), x.query = void 0;
                var D, E = function(a) {
                        D = d(function() {
                            C(a)
                        }, o)
                    },
                    F = function() {
                        D && d.cancel(D)
                    };
                l.$parsers.unshift(function(a) {
                    return m = !0, a && a.length >= n ? o > 0 ? (F(), E(a)) : C(a) : (q(i, !1), F(), A()), p ? a : a ? void l.$setValidity("editable", !1) : (l.$setValidity("editable", !0), a)
                }), l.$formatters.push(function(a) {
                    var b, c, d = {};
                    return s ? (d.$model = a, s(i, d)) : (d[w.itemName] = a, b = w.viewMapper(i, d), d[w.itemName] = void 0, c = w.viewMapper(i, d), b !== c ? b : a)
                }), x.select = function(a) {
                    var b, c, e = {};
                    e[w.itemName] = c = x.matches[a].model, b = w.modelMapper(i, e), v(i, b), l.$setValidity("editable", !0), r(i, {
                        $item: c,
                        $model: b,
                        $label: w.viewMapper(i, e)
                    }), A(), d(function() {
                        j[0].focus()
                    }, 0, !1)
                }, j.bind("keydown", function(a) {
                    0 !== x.matches.length && -1 !== h.indexOf(a.which) && (-1 != x.activeIdx || 13 !== a.which && 9 !== a.which) && (a.preventDefault(), 40 === a.which ? (x.activeIdx = (x.activeIdx + 1) % x.matches.length, x.$digest()) : 38 === a.which ? (x.activeIdx = (x.activeIdx > 0 ? x.activeIdx : x.matches.length) - 1, x.$digest()) : 13 === a.which || 9 === a.which ? x.$apply(function() {
                        x.select(x.activeIdx)
                    }) : 27 === a.which && (a.stopPropagation(), A(), x.$digest()))
                }), j.bind("blur", function(a) {
                    m = !1
                });
                var G = function(a) {
                    j[0] !== a.target && (A(), x.$digest())
                };
                e.bind("click", G), i.$on("$destroy", function() {
                    e.unbind("click", G), t && H.remove()
                });
                var H = a(z)(x);
                t ? e.find("body").append(H) : j.after(H)
            }
        }
    }]).directive("typeaheadPopup", function() {
        return {
            restrict: "EA",
            scope: {
                matches: "=",
                query: "=",
                active: "=",
                position: "=",
                select: "&"
            },
            replace: !0,
            templateUrl: "template/typeahead/typeahead-popup.html",
            link: function(a, b, c) {
                a.templateUrl = c.templateUrl, a.isOpen = function() {
                    return a.matches.length > 0
                }, a.isActive = function(b) {
                    return a.active == b
                }, a.selectActive = function(b) {
                    a.active = b
                }, a.selectMatch = function(b) {
                    a.select({
                        activeIdx: b
                    })
                }
            }
        }
    }).directive("typeaheadMatch", ["$http", "$templateCache", "$compile", "$parse", function(a, b, c, d) {
        return {
            restrict: "EA",
            scope: {
                index: "=",
                match: "=",
                query: "="
            },
            link: function(e, f, g) {
                var h = d(g.templateUrl)(e.$parent) || "template/typeahead/typeahead-match.html";
                a.get(h, {
                    cache: b
                }).success(function(a) {
                    f.replaceWith(c(a.trim())(e))
                })
            }
        }
    }]).filter("typeaheadHighlight", function() {
        function a(a) {
            return a.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1")
        }
        return function(b, c) {
            return c ? ("" + b).replace(new RegExp(a(c), "gi"), "<strong>$&</strong>") : b
        }
    }), angular.module("template/accordion/accordion-group.html", []).run(["$templateCache", function(a) {
        a.put("template/accordion/accordion-group.html", '<div class="panel panel-default">\n  <div class="panel-heading">\n    <h4 class="panel-title">\n      <a href class="accordion-toggle" ng-click="toggleOpen()" accordion-transclude="heading"><span ng-class="{\'text-muted\': isDisabled}">{{heading}}</span></a>\n    </h4>\n  </div>\n  <div class="panel-collapse" collapse="!isOpen">\n	  <div class="panel-body" ng-transclude></div>\n  </div>\n</div>\n')
    }]), angular.module("template/accordion/accordion.html", []).run(["$templateCache", function(a) {
        a.put("template/accordion/accordion.html", '<div class="panel-group" ng-transclude></div>')
    }]), angular.module("template/alert/alert.html", []).run(["$templateCache", function(a) {
        a.put("template/alert/alert.html", '<div class="alert" ng-class="[\'alert-\' + (type || \'warning\'), closeable ? \'alert-dismissable\' : null]" role="alert">\n    <button ng-show="closeable" type="button" class="close" ng-click="close()">\n        <span aria-hidden="true">&times;</span>\n        <span class="sr-only">Close</span>\n    </button>\n    <div ng-transclude></div>\n</div>\n')
    }]), angular.module("template/carousel/carousel.html", []).run(["$templateCache", function(a) {
        a.put("template/carousel/carousel.html", '<div ng-mouseenter="pause()" ng-mouseleave="play()" class="carousel" ng-swipe-right="prev()" ng-swipe-left="next()">\n    <ol class="carousel-indicators" ng-show="slides.length > 1">\n        <li ng-repeat="slide in slides track by $index" ng-class="{active: isActive(slide)}" ng-click="select(slide)"></li>\n    </ol>\n    <div class="carousel-inner" ng-transclude></div>\n    <a class="left carousel-control" ng-click="prev()" ng-show="slides.length > 1"><span class="glyphicon glyphicon-chevron-left"></span></a>\n    <a class="right carousel-control" ng-click="next()" ng-show="slides.length > 1"><span class="glyphicon glyphicon-chevron-right"></span></a>\n</div>\n')
    }]), angular.module("template/carousel/slide.html", []).run(["$templateCache", function(a) {
        a.put("template/carousel/slide.html", "<div ng-class=\"{\n    'active': leaving || (active && !entering),\n    'prev': (next || active) && direction=='prev',\n    'next': (next || active) && direction=='next',\n    'right': direction=='prev',\n    'left': direction=='next'\n  }\" class=\"item text-center\" ng-transclude></div>\n")
    }]), angular.module("template/datepicker/datepicker.html", []).run(["$templateCache", function(a) {
        a.put("template/datepicker/datepicker.html", '<div ng-switch="datepickerMode" role="application" ng-keydown="keydown($event)">\n  <daypicker ng-switch-when="day" tabindex="0"></daypicker>\n  <monthpicker ng-switch-when="month" tabindex="0"></monthpicker>\n  <yearpicker ng-switch-when="year" tabindex="0"></yearpicker>\n</div>')
    }]), angular.module("template/datepicker/day.html", []).run(["$templateCache", function(a) {
        a.put("template/datepicker/day.html", '<table role="grid" aria-labelledby="{{uniqueId}}-title" aria-activedescendant="{{activeDateId}}">\n  <thead>\n    <tr>\n      <th><button type="button" class="btn btn-default btn-sm pull-left" ng-click="move(-1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-left"></i></button></th>\n      <th colspan="{{5 + showWeeks}}"><button id="{{uniqueId}}-title" role="heading" aria-live="assertive" aria-atomic="true" type="button" class="btn btn-default btn-sm" ng-click="toggleMode()" tabindex="-1" style="width:100%;"><strong>{{title}}</strong></button></th>\n      <th><button type="button" class="btn btn-default btn-sm pull-right" ng-click="move(1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-right"></i></button></th>\n    </tr>\n    <tr>\n      <th ng-show="showWeeks" class="text-center"></th>\n      <th ng-repeat="label in labels track by $index" class="text-center"><small aria-label="{{label.full}}">{{label.abbr}}</small></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr ng-repeat="row in rows track by $index">\n      <td ng-show="showWeeks" class="text-center h6"><em>{{ weekNumbers[$index] }}</em></td>\n      <td ng-repeat="dt in row track by dt.date" class="text-center" role="gridcell" id="{{dt.uid}}" aria-disabled="{{!!dt.disabled}}">\n        <button type="button" style="width:100%;" class="btn btn-default btn-sm" ng-class="{\'btn-info\': dt.selected, active: isActive(dt)}" ng-click="select(dt.date)" ng-disabled="dt.disabled" tabindex="-1"><span ng-class="{\'text-muted\': dt.secondary, \'text-info\': dt.current}">{{dt.label}}</span></button>\n      </td>\n    </tr>\n  </tbody>\n</table>\n')
    }]), angular.module("template/datepicker/month.html", []).run(["$templateCache", function(a) {
        a.put("template/datepicker/month.html", '<table role="grid" aria-labelledby="{{uniqueId}}-title" aria-activedescendant="{{activeDateId}}">\n  <thead>\n    <tr>\n      <th><button type="button" class="btn btn-default btn-sm pull-left" ng-click="move(-1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-left"></i></button></th>\n      <th><button id="{{uniqueId}}-title" role="heading" aria-live="assertive" aria-atomic="true" type="button" class="btn btn-default btn-sm" ng-click="toggleMode()" tabindex="-1" style="width:100%;"><strong>{{title}}</strong></button></th>\n      <th><button type="button" class="btn btn-default btn-sm pull-right" ng-click="move(1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-right"></i></button></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr ng-repeat="row in rows track by $index">\n      <td ng-repeat="dt in row track by dt.date" class="text-center" role="gridcell" id="{{dt.uid}}" aria-disabled="{{!!dt.disabled}}">\n        <button type="button" style="width:100%;" class="btn btn-default" ng-class="{\'btn-info\': dt.selected, active: isActive(dt)}" ng-click="select(dt.date)" ng-disabled="dt.disabled" tabindex="-1"><span ng-class="{\'text-info\': dt.current}">{{dt.label}}</span></button>\n      </td>\n    </tr>\n  </tbody>\n</table>\n')
    }]), angular.module("template/datepicker/popup.html", []).run(["$templateCache", function(a) {
        a.put("template/datepicker/popup.html", '<ul class="dropdown-menu" ng-style="{display: (isOpen && \'block\') || \'none\', top: position.top+\'px\', left: position.left+\'px\'}" ng-keydown="keydown($event)">\n	<li ng-transclude></li>\n	<li ng-if="showButtonBar" style="padding:10px 9px 2px">\n		<span class="btn-group pull-left">\n			<button type="button" class="btn btn-sm btn-info" ng-click="select(\'today\')">{{ getText(\'current\') }}</button>\n			<button type="button" class="btn btn-sm btn-danger" ng-click="select(null)">{{ getText(\'clear\') }}</button>\n		</span>\n		<button type="button" class="btn btn-sm btn-success pull-right" ng-click="close()">{{ getText(\'close\') }}</button>\n	</li>\n</ul>\n')
    }]), angular.module("template/datepicker/year.html", []).run(["$templateCache", function(a) {
        a.put("template/datepicker/year.html", '<table role="grid" aria-labelledby="{{uniqueId}}-title" aria-activedescendant="{{activeDateId}}">\n  <thead>\n    <tr>\n      <th><button type="button" class="btn btn-default btn-sm pull-left" ng-click="move(-1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-left"></i></button></th>\n      <th colspan="3"><button id="{{uniqueId}}-title" role="heading" aria-live="assertive" aria-atomic="true" type="button" class="btn btn-default btn-sm" ng-click="toggleMode()" tabindex="-1" style="width:100%;"><strong>{{title}}</strong></button></th>\n      <th><button type="button" class="btn btn-default btn-sm pull-right" ng-click="move(1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-right"></i></button></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr ng-repeat="row in rows track by $index">\n      <td ng-repeat="dt in row track by dt.date" class="text-center" role="gridcell" id="{{dt.uid}}" aria-disabled="{{!!dt.disabled}}">\n        <button type="button" style="width:100%;" class="btn btn-default" ng-class="{\'btn-info\': dt.selected, active: isActive(dt)}" ng-click="select(dt.date)" ng-disabled="dt.disabled" tabindex="-1"><span ng-class="{\'text-info\': dt.current}">{{dt.label}}</span></button>\n      </td>\n    </tr>\n  </tbody>\n</table>\n')
    }]), angular.module("template/modal/backdrop.html", []).run(["$templateCache", function(a) {
        a.put("template/modal/backdrop.html", '<div class="modal-backdrop fade {{ backdropClass }}"\n     ng-class="{in: animate}"\n     ng-style="{\'z-index\': 1040 + (index && 1 || 0) + index*10}"\n></div>\n')
    }]), angular.module("template/modal/window.html", []).run(["$templateCache", function(a) {
        a.put("template/modal/window.html", '<div tabindex="-1" role="dialog" class="modal fade" ng-class="{in: animate}" ng-style="{\'z-index\': 1050 + index*10, display: \'block\'}" ng-click="close($event)">\n    <div class="modal-dialog" ng-class="{\'modal-sm\': size == \'sm\', \'modal-lg\': size == \'lg\'}"><div class="modal-content" modal-transclude></div></div>\n</div>')
    }]), angular.module("template/pagination/pager.html", []).run(["$templateCache", function(a) {
        a.put("template/pagination/pager.html", '<ul class="pager">\n  <li ng-class="{disabled: noPrevious(), previous: align}"><a href ng-click="selectPage(page - 1)">{{getText(\'previous\')}}</a></li>\n  <li ng-class="{disabled: noNext(), next: align}"><a href ng-click="selectPage(page + 1)">{{getText(\'next\')}}</a></li>\n</ul>')
    }]), angular.module("template/pagination/pagination.html", []).run(["$templateCache", function(a) {
        a.put("template/pagination/pagination.html", '<ul class="pagination">\n  <li ng-if="boundaryLinks" ng-class="{disabled: noPrevious()}"><a href ng-click="selectPage(1)">{{getText(\'first\')}}</a></li>\n  <li ng-if="directionLinks" ng-class="{disabled: noPrevious()}"><a href ng-click="selectPage(page - 1)">{{getText(\'previous\')}}</a></li>\n  <li ng-repeat="page in pages track by $index" ng-class="{active: page.active}"><a href ng-click="selectPage(page.number)">{{page.text}}</a></li>\n  <li ng-if="directionLinks" ng-class="{disabled: noNext()}"><a href ng-click="selectPage(page + 1)">{{getText(\'next\')}}</a></li>\n  <li ng-if="boundaryLinks" ng-class="{disabled: noNext()}"><a href ng-click="selectPage(totalPages)">{{getText(\'last\')}}</a></li>\n</ul>')
    }]), angular.module("template/tooltip/tooltip-html-unsafe-popup.html", []).run(["$templateCache", function(a) {
        a.put("template/tooltip/tooltip-html-unsafe-popup.html", '<div class="tooltip {{placement}}" ng-class="{ in: isOpen(), fade: animation() }">\n  <div class="tooltip-arrow"></div>\n  <div class="tooltip-inner" bind-html-unsafe="content"></div>\n</div>\n')
    }]), angular.module("template/tooltip/tooltip-popup.html", []).run(["$templateCache", function(a) {
        a.put("template/tooltip/tooltip-popup.html", '<div class="tooltip {{placement}}" ng-class="{ in: isOpen(), fade: animation() }">\n  <div class="tooltip-arrow"></div>\n  <div class="tooltip-inner" ng-bind="content"></div>\n</div>\n')
    }]), angular.module("template/popover/popover.html", []).run(["$templateCache", function(a) {
        a.put("template/popover/popover.html", '<div class="popover {{placement}}" ng-class="{ in: isOpen(), fade: animation() }">\n  <div class="arrow"></div>\n\n  <div class="popover-inner">\n      <h3 class="popover-title" ng-bind="title" ng-show="title"></h3>\n      <div class="popover-content" ng-bind="content"></div>\n  </div>\n</div>\n')
    }]), angular.module("template/progressbar/bar.html", []).run(["$templateCache", function(a) {
        a.put("template/progressbar/bar.html", '<div class="progress-bar" ng-class="type && \'progress-bar-\' + type" role="progressbar" aria-valuenow="{{value}}" aria-valuemin="0" aria-valuemax="{{max}}" ng-style="{width: percent + \'%\'}" aria-valuetext="{{percent | number:0}}%" ng-transclude></div>')
    }]), angular.module("template/progressbar/progress.html", []).run(["$templateCache", function(a) {
        a.put("template/progressbar/progress.html", '<div class="progress" ng-transclude></div>')
    }]), angular.module("template/progressbar/progressbar.html", []).run(["$templateCache", function(a) {
        a.put("template/progressbar/progressbar.html", '<div class="progress">\n  <div class="progress-bar" ng-class="type && \'progress-bar-\' + type" role="progressbar" aria-valuenow="{{value}}" aria-valuemin="0" aria-valuemax="{{max}}" ng-style="{width: percent + \'%\'}" aria-valuetext="{{percent | number:0}}%" ng-transclude></div>\n</div>')
    }]), angular.module("template/rating/rating.html", []).run(["$templateCache", function(a) {
        a.put("template/rating/rating.html", '<span ng-mouseleave="reset()" ng-keydown="onKeydown($event)" tabindex="0" role="slider" aria-valuemin="0" aria-valuemax="{{range.length}}" aria-valuenow="{{value}}">\n    <i ng-repeat="r in range track by $index" ng-mouseenter="enter($index + 1)" ng-click="rate($index + 1)" class="glyphicon" ng-class="$index < value && (r.stateOn || \'glyphicon-star\') || (r.stateOff || \'glyphicon-star-empty\')">\n        <span class="sr-only">({{ $index < value ? \'*\' : \' \' }})</span>\n    </i>\n</span>')
    }]), angular.module("template/tabs/tab.html", []).run(["$templateCache", function(a) {
        a.put("template/tabs/tab.html", '<li ng-class="{active: active, disabled: disabled}">\n  <a href ng-click="select()" tab-heading-transclude>{{heading}}</a>\n</li>\n')
    }]), angular.module("template/tabs/tabset.html", []).run(["$templateCache", function(a) {
        a.put("template/tabs/tabset.html", '<div>\n  <ul class="nav nav-{{type || \'tabs\'}}" ng-class="{\'nav-stacked\': vertical, \'nav-justified\': justified}" ng-transclude></ul>\n  <div class="tab-content">\n    <div class="tab-pane" \n         ng-repeat="tab in tabs" \n         ng-class="{active: tab.active}"\n         tab-content-transclude="tab">\n    </div>\n  </div>\n</div>\n')
    }]), angular.module("template/timepicker/timepicker.html", []).run(["$templateCache", function(a) {
        a.put("template/timepicker/timepicker.html", '<table>\n	<tbody>\n		<tr class="text-center">\n			<td><a ng-click="incrementHours()" class="btn btn-link"><span class="glyphicon glyphicon-chevron-up"></span></a></td>\n			<td>&nbsp;</td>\n			<td><a ng-click="incrementMinutes()" class="btn btn-link"><span class="glyphicon glyphicon-chevron-up"></span></a></td>\n			<td ng-show="showMeridian"></td>\n		</tr>\n		<tr>\n			<td style="width:50px;" class="form-group" ng-class="{\'has-error\': invalidHours}">\n				<input type="text" ng-model="hours" ng-change="updateHours()" class="form-control text-center" ng-mousewheel="incrementHours()" ng-readonly="readonlyInput" maxlength="2">\n			</td>\n			<td>:</td>\n			<td style="width:50px;" class="form-group" ng-class="{\'has-error\': invalidMinutes}">\n				<input type="text" ng-model="minutes" ng-change="updateMinutes()" class="form-control text-center" ng-readonly="readonlyInput" maxlength="2">\n			</td>\n			<td ng-show="showMeridian"><button type="button" class="btn btn-default text-center" ng-click="toggleMeridian()">{{meridian}}</button></td>\n		</tr>\n		<tr class="text-center">\n			<td><a ng-click="decrementHours()" class="btn btn-link"><span class="glyphicon glyphicon-chevron-down"></span></a></td>\n			<td>&nbsp;</td>\n			<td><a ng-click="decrementMinutes()" class="btn btn-link"><span class="glyphicon glyphicon-chevron-down"></span></a></td>\n			<td ng-show="showMeridian"></td>\n		</tr>\n	</tbody>\n</table>\n');
    }]), angular.module("template/typeahead/typeahead-match.html", []).run(["$templateCache", function(a) {
        a.put("template/typeahead/typeahead-match.html", '<a tabindex="-1" bind-html-unsafe="match.label | typeaheadHighlight:query"></a>')
    }]), angular.module("template/typeahead/typeahead-popup.html", []).run(["$templateCache", function(a) {
        a.put("template/typeahead/typeahead-popup.html", '<ul class="dropdown-menu" ng-show="isOpen()" ng-style="{top: position.top+\'px\', left: position.left+\'px\'}" style="display: block;" role="listbox" aria-hidden="{{!isOpen()}}">\n    <li ng-repeat="match in matches track by $index" ng-class="{active: isActive($index) }" ng-mouseenter="selectActive($index)" ng-click="selectMatch($index)" role="option" id="{{match.id}}">\n        <div typeahead-match index="$index" match="match" query="query" template-url="templateUrl"></div>\n    </li>\n</ul>\n')
    }]), angular.module("colorpicker.module", []).factory("Helper", function() {
        "use strict";
        return {
            closestSlider: function(a) {
                var b = a.matches || a.webkitMatchesSelector || a.mozMatchesSelector || a.msMatchesSelector;
                return b.bind(a)("I") ? a.parentNode : a
            },
            getOffset: function(a, b) {
                for (var c = 0, d = 0, e = 0, f = 0; a && !isNaN(a.offsetLeft) && !isNaN(a.offsetTop);) c += a.offsetLeft, d += a.offsetTop, b || "BODY" !== a.tagName ? (e += a.scrollLeft, f += a.scrollTop) : (e += document.documentElement.scrollLeft || a.scrollLeft, f += document.documentElement.scrollTop || a.scrollTop), a = a.offsetParent;
                return {
                    top: d,
                    left: c,
                    scrollX: e,
                    scrollY: f
                }
            },
            stringParsers: [{
                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-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,
                parse: function(a) {
                    return [parseInt(a[1], 16), parseInt(a[2], 16), parseInt(a[3], 16)]
                }
            }, {
                re: /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/,
                parse: function(a) {
                    return [parseInt(a[1] + a[1], 16), parseInt(a[2] + a[2], 16), parseInt(a[3] + a[3], 16)]
                }
            }]
        }
    }).factory("Color", ["Helper", function(a) {
        "use strict";
        return {
            value: {
                h: 1,
                s: 1,
                b: 1,
                a: 1
            },
            rgb: function() {
                var a = this.toRGB();
                return "rgb(" + a.r + "," + a.g + "," + a.b + ")"
            },
            rgba: function() {
                var a = this.toRGB();
                return "rgba(" + a.r + "," + a.g + "," + a.b + "," + a.a + ")"
            },
            hex: function() {
                return this.toHex()
            },
            RGBtoHSB: function(a, b, c, d) {
                a /= 255, b /= 255, c /= 255;
                var e, f, g, h;
                return g = Math.max(a, b, c), h = g - Math.min(a, b, c), e = 0 === h ? null : g === a ? (b - c) / h : g === b ? (c - a) / h + 2 : (a - b) / h + 4, e = (e + 360) % 6 * 60 / 360, f = 0 === h ? 0 : h / g, {
                    h: e || 1,
                    s: f,
                    b: g,
                    a: d || 1
                }
            },
            setColor: function(b) {
                b = b.toLowerCase();
                for (var c in a.stringParsers)
                    if (a.stringParsers.hasOwnProperty(c)) {
                        var d = a.stringParsers[c],
                            e = d.re.exec(b),
                            f = e && d.parse(e);
                        if (f) return this.value = this.RGBtoHSB.apply(null, f), !1
                    }
            },
            setHue: function(a) {
                this.value.h = 1 - a
            },
            setSaturation: function(a) {
                this.value.s = a
            },
            setLightness: function(a) {
                this.value.b = 1 - a
            },
            setAlpha: function(a) {
                this.value.a = parseInt(100 * (1 - a), 10) / 100
            },
            toRGB: function(a, b, c, d) {
                a || (a = this.value.h, b = this.value.s, c = this.value.b), a *= 360;
                var e, f, g, h, i;
                return a = a % 360 / 60, i = c * b, h = i * (1 - Math.abs(a % 2 - 1)), e = f = g = c - i, a = ~~a, e += [i, h, 0, 0, h, i][a], f += [h, i, i, h, 0, 0][a], g += [0, 0, h, i, i, h][a], {
                    r: Math.round(255 * e),
                    g: Math.round(255 * f),
                    b: Math.round(255 * g),
                    a: d || this.value.a
                }
            },
            toHex: function(a, b, c, d) {
                var e = this.toRGB(a, b, c, d);
                return "#" + (1 << 24 | parseInt(e.r, 10) << 16 | parseInt(e.g, 10) << 8 | parseInt(e.b, 10)).toString(16).substr(1)
            }
        }
    }]).factory("Slider", ["Helper", function(a) {
        "use strict";
        var b = {
                maxLeft: 0,
                maxTop: 0,
                callLeft: null,
                callTop: null,
                knob: {
                    top: 0,
                    left: 0
                }
            },
            c = {};
        return {
            getSlider: function() {
                return b
            },
            getLeftPosition: function(a) {
                return Math.max(0, Math.min(b.maxLeft, b.left + ((a.pageX || c.left) - c.left)))
            },
            getTopPosition: function(a) {
                return Math.max(0, Math.min(b.maxTop, b.top + ((a.pageY || c.top) - c.top)))
            },
            setSlider: function(d, e) {
                var f = a.closestSlider(d.target),
                    g = a.getOffset(f, e),
                    h = f.getBoundingClientRect(),
                    i = d.clientX - h.left,
                    j = d.clientY - h.top;
                b.knob = f.children[0].style, b.left = d.pageX - g.left - window.pageXOffset + g.scrollX, b.top = d.pageY - g.top - window.pageYOffset + g.scrollY, c = {
                    left: d.pageX - (i - b.left),
                    top: d.pageY - (j - b.top)
                }
            },
            setSaturation: function(a, c) {
                b = {
                    maxLeft: 100,
                    maxTop: 100,
                    callLeft: "setSaturation",
                    callTop: "setLightness"
                }, this.setSlider(a, c)
            },
            setHue: function(a, c) {
                b = {
                    maxLeft: 0,
                    maxTop: 100,
                    callLeft: !1,
                    callTop: "setHue"
                }, this.setSlider(a, c)
            },
            setAlpha: function(a, c) {
                b = {
                    maxLeft: 0,
                    maxTop: 100,
                    callLeft: !1,
                    callTop: "setAlpha"
                }, this.setSlider(a, c)
            },
            setKnob: function(a, c) {
                b.knob.top = a + "px", b.knob.left = c + "px"
            }
        }
    }]).directive("colorpicker", ["$document", "$compile", "Color", "Slider", "Helper", function(a, b, c, d, e) {
        "use strict";
        return {
            require: "?ngModel",
            restrict: "A",
            link: function(f, g, h, i) {
                var j, k = h.colorpicker ? h.colorpicker : "hex",
                    l = angular.isDefined(h.colorpickerPosition) ? h.colorpickerPosition : "bottom",
                    m = angular.isDefined(h.colorpickerInline) ? h.colorpickerInline : !1,
                    n = angular.isDefined(h.colorpickerFixedPosition) ? h.colorpickerFixedPosition : !1,
                    o = angular.isDefined(h.colorpickerParent) ? g.parent() : angular.element(document.body),
                    p = angular.isDefined(h.colorpickerWithInput) ? h.colorpickerWithInput : !1,
                    q = p ? '<input type="text" name="colorpicker-input">' : "",
                    r = m ? "" : '<button type="button" class="close close-colorpicker">&times;</button>',
                    s = '<div class="colorpicker dropdown"><div class="dropdown-menu"><colorpicker-saturation><i></i></colorpicker-saturation><colorpicker-hue><i></i></colorpicker-hue><colorpicker-alpha><i></i></colorpicker-alpha><colorpicker-preview></colorpicker-preview>' + q + r + "</div></div>",
                    t = angular.element(s),
                    u = c,
                    v = t.find("colorpicker-hue"),
                    w = t.find("colorpicker-saturation"),
                    x = t.find("colorpicker-preview"),
                    y = t.find("i");
                if (b(t)(f), p) {
                    var z = t.find("input");
                    z.on("mousedown", function(a) {
                        a.stopPropagation()
                    }).on("keyup", function(a) {
                        var b = this.value;
                        g.val(b), i && f.$apply(i.$setViewValue(b)), a.stopPropagation(), a.preventDefault()
                    }), g.on("keyup", function() {
                        z.val(g.val())
                    })
                }
                var A = function() {
                    a.on("mousemove", C), a.on("mouseup", D)
                };
                "rgba" === k && (t.addClass("alpha"), j = t.find("colorpicker-alpha"), j.on("click", function(a) {
                    d.setAlpha(a, n), C(a)
                }).on("mousedown", function(a) {
                    d.setAlpha(a, n), A()
                }).on("mouseup", function(a) {
                    I("colorpicker-selected-alpha")
                })), v.on("click", function(a) {
                    d.setHue(a, n), C(a)
                }).on("mousedown", function(a) {
                    d.setHue(a, n), A()
                }).on("mouseup", function(a) {
                    I("colorpicker-selected-hue")
                }), w.on("click", function(a) {
                    d.setSaturation(a, n), C(a), angular.isDefined(h.colorpickerCloseOnSelect) && J()
                }).on("mousedown", function(a) {
                    d.setSaturation(a, n), A()
                }).on("mouseup", function(a) {
                    I("colorpicker-selected-saturation")
                }), n && t.addClass("colorpicker-fixed-position"), t.addClass("colorpicker-position-" + l), "true" === m && t.addClass("colorpicker-inline"), o.append(t), i && (i.$render = function() {
                    g.val(i.$viewValue)
                }, f.$watch(h.ngModel, function(a) {
                    E(), p && z.val(a)
                })), g.on("$destroy", function() {
                    t.remove()
                });
                var B = function() {
                        try {
                            x.css("backgroundColor", u[k]())
                        } catch (a) {
                            x.css("backgroundColor", u.toHex())
                        }
                        w.css("backgroundColor", u.toHex(u.value.h, 1, 1, 1)), "rgba" === k && (j.css.backgroundColor = u.toHex())
                    },
                    C = function(a) {
                        var b = d.getLeftPosition(a),
                            c = d.getTopPosition(a),
                            e = d.getSlider();
                        d.setKnob(c, b), e.callLeft && u[e.callLeft].call(u, b / 100), e.callTop && u[e.callTop].call(u, c / 100), B();
                        var h = u[k]();
                        return g.val(h), i && f.$apply(i.$setViewValue(h)), p && z.val(h), !1
                    },
                    D = function() {
                        I("colorpicker-selected"), a.off("mousemove", C), a.off("mouseup", D)
                    },
                    E = function() {
                        u.setColor(g.val()), y.eq(0).css({
                            left: 100 * u.value.s + "px",
                            top: 100 - 100 * u.value.b + "px"
                        }), y.eq(1).css("top", 100 * (1 - u.value.h) + "px"), y.eq(2).css("top", 100 * (1 - u.value.a) + "px"), B()
                    },
                    F = function() {
                        var a, b = e.getOffset(g[0]);
                        return angular.isDefined(h.colorpickerParent) && (b.left = 0, b.top = 0), "top" === l ? a = {
                            top: b.top - 147,
                            left: b.left
                        } : "right" === l ? a = {
                            top: b.top,
                            left: b.left + 126
                        } : "bottom" === l ? a = {
                            top: b.top + g[0].offsetHeight + 2,
                            left: b.left
                        } : "left" === l && (a = {
                            top: b.top,
                            left: b.left - 150
                        }), {
                            top: a.top + "px",
                            left: a.left + "px"
                        }
                    },
                    G = function() {
                        J()
                    },
                    H = function() {
                        t.hasClass("colorpicker-visible") || (E(), t.addClass("colorpicker-visible").css(F()), I("colorpicker-shown"), m === !1 && a.on("mousedown", G), h.colorpickerIsOpen && (f[h.colorpickerIsOpen] = !0, f.$$phase || f.$digest()))
                    };
                m === !1 ? g.on("click", H) : H(), t.on("mousedown", function(a) {
                    a.stopPropagation(), a.preventDefault()
                });
                var I = function(a) {
                        i && f.$emit(a, {
                            name: h.ngModel,
                            value: i.$modelValue
                        })
                    },
                    J = function() {
                        t.hasClass("colorpicker-visible") && (t.removeClass("colorpicker-visible"), I("colorpicker-closed"), a.off("mousedown", G), h.colorpickerIsOpen && (f[h.colorpickerIsOpen] = !1, f.$$phase || f.$digest()))
                    };
                t.find("button").on("click", function() {
                    J()
                }), h.colorpickerIsOpen && f.$watch(h.colorpickerIsOpen, function(a) {
                    a === !0 ? H() : a === !1 && J()
                })
            }
        }
    }]), function(a, b, c) {
        "use strict";
        b.module("ngCookies", ["ng"]).factory("$cookies", ["$rootScope", "$browser", function(a, d) {
            function e() {
                var a, e, f, i;
                for (a in h) k(g[a]) && d.cookies(a, c);
                for (a in g) e = g[a], b.isString(e) || (e = "" + e, g[a] = e), e !== h[a] && (d.cookies(a, e), i = !0);
                if (i) {
                    i = !1, f = d.cookies();
                    for (a in g) g[a] !== f[a] && (k(f[a]) ? delete g[a] : g[a] = f[a], i = !0)
                }
            }
            var f, g = {},
                h = {},
                i = !1,
                j = b.copy,
                k = b.isUndefined;
            return d.addPollFn(function() {
                var b = d.cookies();
                f != b && (f = b, j(b, h), j(b, g), i && a.$apply())
            })(), i = !0, a.$watch(e), g
        }]).factory("$cookieStore", ["$cookies", function(a) {
            return {
                get: function(c) {
                    var d = a[c];
                    return d ? b.fromJson(d) : d
                },
                put: function(c, d) {
                    a[c] = b.toJson(d)
                },
                remove: function(b) {
                    delete a[b]
                }
            }
        }])
    }(window, window.angular), function(a, b, c) {
        "use strict";

        function d(a) {
            return null != a && "" !== a && "hasOwnProperty" !== a && h.test("." + a)
        }

        function e(a, b) {
            if (!d(b)) throw g("badmember", 'Dotted member path "@{0}" is invalid.', b);
            for (var e = b.split("."), f = 0, h = e.length; h > f && a !== c; f++) {
                var i = e[f];
                a = null !== a ? a[i] : c
            }
            return a
        }

        function f(a, c) {
            c = c || {}, b.forEach(c, function(a, b) {
                delete c[b]
            });
            for (var d in a) !a.hasOwnProperty(d) || "$" === d.charAt(0) && "$" === d.charAt(1) || (c[d] = a[d]);
            return c
        }
        var g = b.$$minErr("$resource"),
            h = /^(\.[a-zA-Z_$][0-9a-zA-Z_$]*)+$/;
        b.module("ngResource", ["ng"]).factory("$resource", ["$http", "$q", function(a, d) {
            function h(a) {
                return i(a, !0).replace(/%26/gi, "&").replace(/%3D/gi, "=").replace(/%2B/gi, "+")
            }

            function i(a, b) {
                return encodeURIComponent(a).replace(/%40/gi, "@").replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, b ? "%20" : "+")
            }

            function j(a, b) {
                this.template = a, this.defaults = b || {}, this.urlParams = {}
            }

            function k(h, i, r) {
                function s(a, b) {
                    var c = {};
                    return b = o({}, i, b), n(b, function(b, d) {
                        q(b) && (b = b()), c[d] = b && b.charAt && "@" == b.charAt(0) ? e(a, b.substr(1)) : b
                    }), c
                }

                function t(a) {
                    return a.resource
                }

                function u(a) {
                    f(a || {}, this)
                }
                var v = new j(h);
                return r = o({}, l, r), n(r, function(e, h) {
                    var i = /^(POST|PUT|PATCH)$/i.test(e.method);
                    u[h] = function(h, j, k, l) {
                        var r, w, x, y = {};
                        switch (arguments.length) {
                            case 4:
                                x = l, w = k;
                            case 3:
                            case 2:
                                if (!q(j)) {
                                    y = h, r = j, w = k;
                                    break
                                }
                                if (q(h)) {
                                    w = h, x = j;
                                    break
                                }
                                w = j, x = k;
                            case 1:
                                q(h) ? w = h : i ? r = h : y = h;
                                break;
                            case 0:
                                break;
                            default:
                                throw g("badargs", "Expected up to 4 arguments [params, data, success, error], got {0} arguments", arguments.length)
                        }
                        var z = this instanceof u,
                            A = z ? r : e.isArray ? [] : new u(r),
                            B = {},
                            C = e.interceptor && e.interceptor.response || t,
                            D = e.interceptor && e.interceptor.responseError || c;
                        n(e, function(a, b) {
                            "params" != b && "isArray" != b && "interceptor" != b && (B[b] = p(a))
                        }), i && (B.data = r), v.setUrlParams(B, o({}, s(r, e.params || {}), y), e.url);
                        var E = a(B).then(function(a) {
                            var c = a.data,
                                d = A.$promise;
                            if (c) {
                                if (b.isArray(c) !== !!e.isArray) throw g("badcfg", "Error in resource configuration. Expected response to contain an {0} but got an {1}", e.isArray ? "array" : "object", b.isArray(c) ? "array" : "object");
                                e.isArray ? (A.length = 0, n(c, function(a) {
                                    "object" == typeof a ? A.push(new u(a)) : A.push(a)
                                })) : (f(c, A), A.$promise = d)
                            }
                            return A.$resolved = !0, a.resource = A, a
                        }, function(a) {
                            return A.$resolved = !0, (x || m)(a), d.reject(a)
                        });
                        return E = E.then(function(a) {
                            var b = C(a);
                            return (w || m)(b, a.headers), b
                        }, D), z ? E : (A.$promise = E, A.$resolved = !1, A)
                    }, u.prototype["$" + h] = function(a, b, c) {
                        q(a) && (c = b, b = a, a = {});
                        var d = u[h].call(this, a, this, b, c);
                        return d.$promise || d
                    }
                }), u.bind = function(a) {
                    return k(h, o({}, i, a), r)
                }, u
            }
            var l = {
                    get: {
                        method: "GET"
                    },
                    save: {
                        method: "POST"
                    },
                    query: {
                        method: "GET",
                        isArray: !0
                    },
                    remove: {
                        method: "DELETE"
                    },
                    "delete": {
                        method: "DELETE"
                    }
                },
                m = b.noop,
                n = b.forEach,
                o = b.extend,
                p = b.copy,
                q = b.isFunction;
            return j.prototype = {
                setUrlParams: function(a, c, d) {
                    var e, f, i = this,
                        j = d || i.template,
                        k = i.urlParams = {};
                    n(j.split(/\W/), function(a) {
                        if ("hasOwnProperty" === a) throw g("badname", "hasOwnProperty is not a valid parameter name.");
                        !new RegExp("^\\d+$").test(a) && a && new RegExp("(^|[^\\\\]):" + a + "(\\W|$)").test(j) && (k[a] = !0)
                    }), j = j.replace(/\\:/g, ":"), c = c || {}, n(i.urlParams, function(a, d) {
                        e = c.hasOwnProperty(d) ? c[d] : i.defaults[d], b.isDefined(e) && null !== e ? (f = h(e), j = j.replace(new RegExp(":" + d + "(\\W|$)", "g"), function(a, b) {
                            return f + b
                        })) : j = j.replace(new RegExp("(/?):" + d + "(\\W|$)", "g"), function(a, b, c) {
                            return "/" == c.charAt(0) ? c : b + c
                        })
                    }), j = j.replace(/\/+$/, "") || "/", j = j.replace(/\/\.(?=\w+($|\?))/, "."), a.url = j.replace(/\/\\\./, "/."), n(c, function(b, c) {
                        i.urlParams[c] || (a.params = a.params || {}, a.params[c] = b)
                    })
                }
            }, k
        }])
    }(window, window.angular), function(a, b, c) {
        "use strict";

        function d() {
            function a(a, c) {
                return b.extend(new(b.extend(function() {}, {
                    prototype: a
                })), c)
            }

            function c(a, b) {
                var c = b.caseInsensitiveMatch,
                    d = {
                        originalPath: a,
                        regexp: a
                    },
                    e = d.keys = [];
                return a = a.replace(/([().])/g, "\\$1").replace(/(\/)?:(\w+)([\?\*])?/g, function(a, b, c, d) {
                    var f = "?" === d ? d : null,
                        g = "*" === d ? d : null;
                    return e.push({
                        name: c,
                        optional: !!f
                    }), b = b || "", "" + (f ? "" : b) + "(?:" + (f ? b : "") + (g && "(.+?)" || "([^/]+)") + (f || "") + ")" + (f || "")
                }).replace(/([\/$\*])/g, "\\$1"), d.regexp = new RegExp("^" + a + "$", c ? "i" : ""), d
            }
            var d = {};
            this.when = function(a, e) {
                if (d[a] = b.extend({
                        reloadOnSearch: !0
                    }, e, a && c(a, e)), a) {
                    var f = "/" == a[a.length - 1] ? a.substr(0, a.length - 1) : a + "/";
                    d[f] = b.extend({
                        redirectTo: a
                    }, c(f, e))
                }
                return this
            }, this.otherwise = function(a) {
                return this.when(null, a), this
            }, this.$get = ["$rootScope", "$location", "$routeParams", "$q", "$injector", "$http", "$templateCache", "$sce", function(c, e, f, g, h, i, j, k) {
                function l(a, b) {
                    var c = b.keys,
                        d = {};
                    if (!b.regexp) return null;
                    var e = b.regexp.exec(a);
                    if (!e) return null;
                    for (var f = 1, g = e.length; g > f; ++f) {
                        var h = c[f - 1],
                            i = e[f];
                        h && i && (d[h.name] = i)
                    }
                    return d
                }

                function m() {
                    var a = n(),
                        d = q.current;
                    a && d && a.$$route === d.$$route && b.equals(a.pathParams, d.pathParams) && !a.reloadOnSearch && !p ? (d.params = a.params, b.copy(d.params, f), c.$broadcast("$routeUpdate", d)) : (a || d) && (p = !1, c.$broadcast("$routeChangeStart", a, d), q.current = a, a && a.redirectTo && (b.isString(a.redirectTo) ? e.path(o(a.redirectTo, a.params)).search(a.params).replace() : e.url(a.redirectTo(a.pathParams, e.path(), e.search())).replace()), g.when(a).then(function() {
                        if (a) {
                            var c, d, e = b.extend({}, a.resolve);
                            return b.forEach(e, function(a, c) {
                                e[c] = b.isString(a) ? h.get(a) : h.invoke(a)
                            }), b.isDefined(c = a.template) ? b.isFunction(c) && (c = c(a.params)) : b.isDefined(d = a.templateUrl) && (b.isFunction(d) && (d = d(a.params)), d = k.getTrustedResourceUrl(d), b.isDefined(d) && (a.loadedTemplateUrl = d, c = i.get(d, {
                                cache: j
                            }).then(function(a) {
                                return a.data
                            }))), b.isDefined(c) && (e.$template = c), g.all(e)
                        }
                    }).then(function(e) {
                        a == q.current && (a && (a.locals = e, b.copy(a.params, f)), c.$broadcast("$routeChangeSuccess", a, d))
                    }, function(b) {
                        a == q.current && c.$broadcast("$routeChangeError", a, d, b)
                    }))
                }

                function n() {
                    var c, f;
                    return b.forEach(d, function(d, g) {
                        !f && (c = l(e.path(), d)) && (f = a(d, {
                            params: b.extend({}, e.search(), c),
                            pathParams: c
                        }), f.$$route = d)
                    }), f || d[null] && a(d[null], {
                        params: {},
                        pathParams: {}
                    })
                }

                function o(a, c) {
                    var d = [];
                    return b.forEach((a || "").split(":"), function(a, b) {
                        if (0 === b) d.push(a);
                        else {
                            var e = a.match(/(\w+)(?:[?*])?(.*)/),
                                f = e[1];
                            d.push(c[f]), d.push(e[2] || ""), delete c[f]
                        }
                    }), d.join("")
                }
                var p = !1,
                    q = {
                        routes: d,
                        reload: function() {
                            p = !0, c.$evalAsync(m)
                        }
                    };
                return c.$on("$locationChangeSuccess", m), q
            }]
        }

        function e() {
            this.$get = function() {
                return {}
            }
        }

        function f(a, c, d) {
            return {
                restrict: "ECA",
                terminal: !0,
                priority: 400,
                transclude: "element",
                link: function(e, f, g, h, i) {
                    function j() {
                        n && (n.remove(), n = null), l && (l.$destroy(), l = null), m && (d.leave(m, function() {
                            n = null
                        }), n = m, m = null)
                    }

                    function k() {
                        var g = a.current && a.current.locals,
                            h = g && g.$template;
                        if (b.isDefined(h)) {
                            var k = e.$new(),
                                n = a.current,
                                q = i(k, function(a) {
                                    d.enter(a, null, m || f, function() {
                                        !b.isDefined(o) || o && !e.$eval(o) || c()
                                    }), j()
                                });
                            m = q, l = n.scope = k, l.$emit("$viewContentLoaded"), l.$eval(p)
                        } else j()
                    }
                    var l, m, n, o = g.autoscroll,
                        p = g.onload || "";
                    e.$on("$routeChangeSuccess", k), k()
                }
            }
        }

        function g(a, b, c) {
            return {
                restrict: "ECA",
                priority: -400,
                link: function(d, e) {
                    var f = c.current,
                        g = f.locals;
                    e.html(g.$template);
                    var h = a(e.contents());
                    if (f.controller) {
                        g.$scope = d;
                        var i = b(f.controller, g);
                        f.controllerAs && (d[f.controllerAs] = i), e.data("$ngControllerController", i), e.children().data("$ngControllerController", i)
                    }
                    h(d)
                }
            }
        }
        var h = b.module("ngRoute", ["ng"]).provider("$route", d);
        h.provider("$routeParams", e), h.directive("ngView", f), h.directive("ngView", g), f.$inject = ["$route", "$anchorScroll", "$animate"], g.$inject = ["$compile", "$controller", "$route"]
    }(window, window.angular), function(a, b, c) {
        "use strict";

        function d() {
            this.$get = ["$$sanitizeUri", function(a) {
                return function(b) {
                    var c = [];
                    return g(b, j(c, function(b, c) {
                        return !/^unsafe/.test(a(b, c))
                    })), c.join("")
                }
            }]
        }

        function e(a) {
            var c = [],
                d = j(c, b.noop);
            return d.chars(a), c.join("")
        }

        function f(a) {
            var b, c = {},
                d = a.split(",");
            for (b = 0; b < d.length; b++) c[d[b]] = !0;
            return c
        }

        function g(a, c) {
            function d(a, d, f, g) {
                if (d = b.lowercase(d), z[d])
                    for (; t.last() && A[t.last()];) e("", t.last());
                y[d] && t.last() == d && e("", d), g = v[d] || !!g, g || t.push(d);
                var i = {};
                f.replace(n, function(a, b, c, d, e) {
                    var f = c || d || e || "";
                    i[b] = h(f)
                }), c.start && c.start(d, i, g)
            }

            function e(a, d) {
                var e, f = 0;
                if (d = b.lowercase(d))
                    for (f = t.length - 1; f >= 0 && t[f] != d; f--);
                if (f >= 0) {
                    for (e = t.length - 1; e >= f; e--) c.end && c.end(t[e]);
                    t.length = f
                }
            }
            "string" != typeof a && (a = null === a || "undefined" == typeof a ? "" : "" + a);
            var f, g, i, j, t = [],
                u = a;
            for (t.last = function() {
                    return t[t.length - 1]
                }; a;) {
                if (j = "", g = !0, t.last() && B[t.last()] ? (a = a.replace(new RegExp("(.*)<\\s*\\/\\s*" + t.last() + "[^>]*>", "i"), function(a, b) {
                        return b = b.replace(q, "$1").replace(s, "$1"), c.chars && c.chars(h(b)), ""
                    }), e("", t.last())) : (0 === a.indexOf("<!--") ? (f = a.indexOf("--", 4), f >= 0 && a.lastIndexOf("-->", f) === f && (c.comment && c.comment(a.substring(4, f)), a = a.substring(f + 3), g = !1)) : r.test(a) ? (i = a.match(r), i && (a = a.replace(i[0], ""), g = !1)) : p.test(a) ? (i = a.match(m), i && (a = a.substring(i[0].length), i[0].replace(m, e), g = !1)) : o.test(a) && (i = a.match(l), i ? (i[4] && (a = a.substring(i[0].length), i[0].replace(l, d)), g = !1) : (j += "<", a = a.substring(1))), g && (f = a.indexOf("<"), j += 0 > f ? a : a.substring(0, f), a = 0 > f ? "" : a.substring(f), c.chars && c.chars(h(j)))), a == u) throw k("badparse", "The sanitizer was unable to parse the following block of html: {0}", a);
                u = a
            }
            e()
        }

        function h(a) {
            if (!a) return "";
            var b = G.exec(a),
                c = b[1],
                d = b[3],
                e = b[2];
            return e && (F.innerHTML = e.replace(/</g, "&lt;"), e = "textContent" in F ? F.textContent : F.innerText), c + e + d
        }

        function i(a) {
            return a.replace(/&/g, "&amp;").replace(t, function(a) {
                var b = a.charCodeAt(0),
                    c = a.charCodeAt(1);
                return "&#" + (1024 * (b - 55296) + (c - 56320) + 65536) + ";"
            }).replace(u, function(a) {
                return "&#" + a.charCodeAt(0) + ";"
            }).replace(/</g, "&lt;").replace(/>/g, "&gt;")
        }

        function j(a, c) {
            var d = !1,
                e = b.bind(a, a.push);
            return {
                start: function(a, f, g) {
                    a = b.lowercase(a), !d && B[a] && (d = a), d || C[a] !== !0 || (e("<"), e(a), b.forEach(f, function(d, f) {
                        var g = b.lowercase(f),
                            h = "img" === a && "src" === g || "background" === g;
                        E[g] !== !0 || D[g] === !0 && !c(d, h) || (e(" "), e(f), e('="'), e(i(d)), e('"'))
                    }), e(g ? "/>" : ">"))
                },
                end: function(a) {
                    a = b.lowercase(a), d || C[a] !== !0 || (e("</"), e(a), e(">")), a == d && (d = !1)
                },
                chars: function(a) {
                    d || e(i(a))
                }
            }
        }
        var k = b.$$minErr("$sanitize"),
            l = /^<((?:[a-zA-Z])[\w:-]*)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*(>?)/,
            m = /^<\/\s*([\w:-]+)[^>]*>/,
            n = /([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,
            o = /^</,
            p = /^<\//,
            q = /<!--(.*?)-->/g,
            r = /<!DOCTYPE([^>]*?)>/i,
            s = /<!\[CDATA\[(.*?)]]>/g,
            t = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
            u = /([^\#-~| |!])/g,
            v = f("area,br,col,hr,img,wbr"),
            w = f("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),
            x = f("rp,rt"),
            y = b.extend({}, x, w),
            z = b.extend({}, w, f("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")),
            A = b.extend({}, x, f("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var")),
            B = f("script,style"),
            C = b.extend({}, v, z, A, y),
            D = f("background,cite,href,longdesc,src,usemap"),
            E = b.extend({}, D, f("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,target,title,type,valign,value,vspace,width")),
            F = document.createElement("pre"),
            G = /^(\s*)([\s\S]*?)(\s*)$/;
        b.module("ngSanitize", []).provider("$sanitize", d), b.module("ngSanitize").filter("linky", ["$sanitize", function(a) {
            var c = /((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"]/,
                d = /^mailto:/;
            return function(f, g) {
                function h(a) {
                    a && n.push(e(a))
                }

                function i(a, c) {
                    n.push("<a "), b.isDefined(g) && (n.push('target="'), n.push(g), n.push('" ')), n.push('href="', a.replace('"', "&quot;"), '">'), h(c), n.push("</a>")
                }
                if (!f) return f;
                for (var j, k, l, m = f, n = []; j = m.match(c);) k = j[0], j[2] == j[3] && (k = "mailto:" + k), l = j.index, h(m.substr(0, l)), i(k, j[0].replace(d, "")), m = m.substring(l + j[0].length);
                return h(m), a(n.join(""))
            }
        }])
    }(window, window.angular), function(a, b) {
        "object" == typeof exports ? module.exports = b() : "function" == typeof define && define.amd ? define(b) : a.Spinner = b()
    }(this, function() {
        "use strict";

        function a(a, b) {
            var c, d = document.createElement(a || "div");
            for (c in b) d[c] = b[c];
            return d
        }

        function b(a) {
            for (var b = 1, c = arguments.length; c > b; b++) a.appendChild(arguments[b]);
            return a
        }

        function c(a, b, c, d) {
            var e = ["opacity", b, ~~(100 * a), c, d].join("-"),
                f = .01 + c / d * 100,
                g = Math.max(1 - (1 - a) / b * (100 - f), a),
                h = j.substring(0, j.indexOf("Animation")).toLowerCase(),
                i = h && "-" + h + "-" || "";
            return l[e] || (m.insertRule("@" + i + "keyframes " + e + "{0%{opacity:" + g + "}" + f + "%{opacity:" + a + "}" + (f + .01) + "%{opacity:1}" + (f + b) % 100 + "%{opacity:" + a + "}100%{opacity:" + g + "}}", m.cssRules.length), l[e] = 1), e
        }

        function d(a, b) {
            var c, d, e = a.style;
            for (b = b.charAt(0).toUpperCase() + b.slice(1), d = 0; d < k.length; d++)
                if (c = k[d] + b, void 0 !== e[c]) return c;
            return void 0 !== e[b] ? b : void 0
        }

        function e(a, b) {
            for (var c in b) a.style[d(a, c) || c] = b[c];
            return a
        }

        function f(a) {
            for (var b = 1; b < arguments.length; b++) {
                var c = arguments[b];
                for (var d in c) void 0 === a[d] && (a[d] = c[d])
            }
            return a
        }

        function g(a, b) {
            return "string" == typeof a ? a : a[b % a.length]
        }

        function h(a) {
            this.opts = f(a || {}, h.defaults, n)
        }

        function i() {
            function c(b, c) {
                return a("<" + b + ' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">', c)
            }
            m.addRule(".spin-vml", "behavior:url(#default#VML)"), h.prototype.lines = function(a, d) {
                function f() {
                    return e(c("group", {
                        coordsize: k + " " + k,
                        coordorigin: -j + " " + -j
                    }), {
                        width: k,
                        height: k
                    })
                }

                function h(a, h, i) {
                    b(m, b(e(f(), {
                        rotation: 360 / d.lines * a + "deg",
                        left: ~~h
                    }), b(e(c("roundrect", {
                        arcsize: d.corners
                    }), {
                        width: j,
                        height: d.width,
                        left: d.radius,
                        top: -d.width >> 1,
                        filter: i
                    }), c("fill", {
                        color: g(d.color, a),
                        opacity: d.opacity
                    }), c("stroke", {
                        opacity: 0
                    }))))
                }
                var i, j = d.length + d.width,
                    k = 2 * j,
                    l = 2 * -(d.width + d.length) + "px",
                    m = e(f(), {
                        position: "absolute",
                        top: l,
                        left: l
                    });
                if (d.shadow)
                    for (i = 1; i <= d.lines; i++) h(i, -2, "progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)");
                for (i = 1; i <= d.lines; i++) h(i);
                return b(a, m)
            }, h.prototype.opacity = function(a, b, c, d) {
                var e = a.firstChild;
                d = d.shadow && d.lines || 0, e && b + d < e.childNodes.length && (e = e.childNodes[b + d], e = e && e.firstChild, e = e && e.firstChild, e && (e.opacity = c))
            }
        }
        var j, k = ["webkit", "Moz", "ms", "O"],
            l = {},
            m = function() {
                var c = a("style", {
                    type: "text/css"
                });
                return b(document.getElementsByTagName("head")[0], c), c.sheet || c.styleSheet
            }(),
            n = {
                lines: 12,
                length: 7,
                width: 5,
                radius: 10,
                rotate: 0,
                corners: 1,
                color: "#000",
                direction: 1,
                speed: 1,
                trail: 100,
                opacity: .25,
                fps: 20,
                zIndex: 2e9,
                className: "spinner",
                top: "50%",
                left: "50%",
                position: "absolute"
            };
        h.defaults = {}, f(h.prototype, {
            spin: function(b) {
                this.stop();
                var c = this,
                    d = c.opts,
                    f = c.el = e(a(0, {
                        className: d.className
                    }), {
                        position: d.position,
                        width: 0,
                        zIndex: d.zIndex
                    });
                if (e(f, {
                        left: d.left,
                        top: d.top
                    }), b && b.insertBefore(f, b.firstChild || null), f.setAttribute("role", "progressbar"), c.lines(f, c.opts), !j) {
                    var g, h = 0,
                        i = (d.lines - 1) * (1 - d.direction) / 2,
                        k = d.fps,
                        l = k / d.speed,
                        m = (1 - d.opacity) / (l * d.trail / 100),
                        n = l / d.lines;
                    ! function o() {
                        h++;
                        for (var a = 0; a < d.lines; a++) g = Math.max(1 - (h + (d.lines - a) * n) % l * m, d.opacity), c.opacity(f, a * d.direction + i, g, d);
                        c.timeout = c.el && setTimeout(o, ~~(1e3 / k))
                    }()
                }
                return c
            },
            stop: function() {
                var a = this.el;
                return a && (clearTimeout(this.timeout), a.parentNode && a.parentNode.removeChild(a), this.el = void 0), this
            },
            lines: function(d, f) {
                function h(b, c) {
                    return e(a(), {
                        position: "absolute",
                        width: f.length + f.width + "px",
                        height: f.width + "px",
                        background: b,
                        boxShadow: c,
                        transformOrigin: "left",
                        transform: "rotate(" + ~~(360 / f.lines * k + f.rotate) + "deg) translate(" + f.radius + "px,0)",
                        borderRadius: (f.corners * f.width >> 1) + "px"
                    })
                }
                for (var i, k = 0, l = (f.lines - 1) * (1 - f.direction) / 2; k < f.lines; k++) i = e(a(), {
                    position: "absolute",
                    top: 1 + ~(f.width / 2) + "px",
                    transform: f.hwaccel ? "translate3d(0,0,0)" : "",
                    opacity: f.opacity,
                    animation: j && c(f.opacity, f.trail, l + k * f.direction, f.lines) + " " + 1 / f.speed + "s linear infinite"
                }), f.shadow && b(i, e(h("#000", "0 0 4px #000"), {
                    top: "2px"
                })), b(d, b(i, h(g(f.color, k), "0 0 1px rgba(0,0,0,.1)")));
                return d
            },
            opacity: function(a, b, c) {
                b < a.childNodes.length && (a.childNodes[b].style.opacity = c)
            }
        });
        var o = e(a("group"), {
            behavior: "url(#default#VML)"
        });
        return !d(o, "transform") && o.adj ? i() : j = d(o, "animation"), h
    }), function(a) {
        "use strict";

        function b(a, b) {
            a.module("angularSpinner", []).factory("usSpinnerService", ["$rootScope", function(a) {
                var b = {};
                return b.spin = function(b) {
                    a.$broadcast("us-spinner:spin", b)
                }, b.stop = function(b) {
                    a.$broadcast("us-spinner:stop", b)
                }, b
            }]).directive("usSpinner", ["$window", function(c) {
                return {
                    scope: !0,
                    link: function(d, e, f) {
                        function g() {
                            d.spinner && d.spinner.stop()
                        }
                        var h = b || c.Spinner;
                        d.spinner = null, d.key = a.isDefined(f.spinnerKey) ? f.spinnerKey : !1, d.startActive = a.isDefined(f.spinnerStartActive) ? f.spinnerStartActive : d.key ? !1 : !0, d.spin = function() {
                            d.spinner && d.spinner.spin(e[0])
                        }, d.stop = function() {
                            d.startActive = !1, g()
                        }, d.$watch(f.usSpinner, function(a) {
                            g(), d.spinner = new h(a), (!d.key || d.startActive) && d.spinner.spin(e[0])
                        }, !0), d.$on("us-spinner:spin", function(a, b) {
                            b === d.key && d.spin()
                        }), d.$on("us-spinner:stop", function(a, b) {
                            b === d.key && d.stop()
                        }), d.$on("$destroy", function() {
                            d.stop(), d.spinner = null
                        })
                    }
                }
            }])
        }
        "function" == typeof define && define.amd ? define(["angular", "spin"], b) : b(a.angular)
    }(window), function(a, b) {
        "use strict";

        function c(a) {
            return function(b) {
                return b[a]
            }
        }
        var d = a.module("angular-underscore", []),
            e = a.module("angular-underscore/utils", []),
            f = a.module("angular-underscore/filters", []);
        b._ = b, b.each(["min", "max", "sortedIndex"], function(a) {
            b[a] = b.wrap(b[a], function(a) {
                var d = b.toArray(arguments).slice(1);
                return b.isString(d[2]) ? d[2] = c(d[2]) : b.isString(d[1]) && (d[1] = c(d[1])), a.apply(b, d)
            })
        }), a.injector(["ng"]).invoke(["$filter", function(a) {
            b.filter = b.select = b.wrap(a("filter"), function(a, c, d, e) {
                return b.isArray(c) || (c = b.toArray(c)), a(c, d, e)
            }), b.reject = function(a, c) {
                if (b.isString(c)) return b.filter(a, "!" + c);
                var d = b.bind(b.difference, b, a);
                return d(b.filter(a, c))
            }
        }]), b.each(b.methods(b), function(c) {
            function f(a) {
                a[c] = b.bind(b[c], b)
            }
            b.each([d, e, a.module("angular-underscore/utils/" + c, [])], function(a) {
                a.run(["$rootScope", f])
            })
        });
        var g = [
            ["map", "collect"],
            ["reduce", "inject", "foldl"],
            ["reduceRight", "foldr"],
            ["find", "detect"],
            ["filter", "select"], "where", "findWhere", "reject", "invoke", "pluck", "max", "min", "sortBy", "groupBy", "indexBy", "countBy", "shuffle", "sample", "toArray", "size", ["first", "head", "take"], "initial", "last", ["rest", "tail", "drop"], "compact", "flatten", "without", "partition", "union", "intersection", "difference", ["uniq", "unique"], "zip", "object", "indexOf", "lastIndexOf", "sortedIndex", "keys", "values", "pairs", "invert", ["functions", "methods"], "pick", "omit", "tap", "identity", "uniqueId", "escape", "unescape", "result", "template"
        ];
        b.each(g, function(c) {
            b.isArray(c) || (c = [c]);
            var e = b.bind(b[c[0]], b),
                g = function() {
                    return e
                };
            b.each(c, function(c) {
                b.each([d, f, a.module("angular-underscore/filters/" + c, [])], function(a) {
                    a.filter(c, g)
                })
            })
        })
    }(angular, _), "undefined" == typeof jQuery) throw new Error("Bootstrap requires jQuery"); + function(a) {
    "use strict";

    function b() {
        var a = document.createElement("bootstrap"),
            b = {
                WebkitTransition: "webkitTransitionEnd",
                MozTransition: "transitionend",
                OTransition: "oTransitionEnd otransitionend",
                transition: "transitionend"
            };
        for (var c in b)
            if (void 0 !== a.style[c]) return {
                end: b[c]
            }
    }
    a.fn.emulateTransitionEnd = function(b) {
        var c = !1,
            d = this;
        a(this).one(a.support.transition.end, function() {
            c = !0
        });
        var e = function() {
            c || a(d).trigger(a.support.transition.end)
        };
        return setTimeout(e, b), this
    }, a(function() {
        a.support.transition = b()
    })
}(jQuery), + function(a) {
    "use strict";
    var b = '[data-dismiss="alert"]',
        c = function(c) {
            a(c).on("click", b, this.close)
        };
    c.prototype.close = function(b) {
        function c() {
            f.trigger("closed.bs.alert").remove()
        }
        var d = a(this),
            e = d.attr("data-target");
        e || (e = d.attr("href"), e = e && e.replace(/.*(?=#[^\s]*$)/, ""));
        var f = a(e);
        b && b.preventDefault(), f.length || (f = d.hasClass("alert") ? d : d.parent()), f.trigger(b = a.Event("close.bs.alert")), b.isDefaultPrevented() || (f.removeClass("in"), a.support.transition && f.hasClass("fade") ? f.one(a.support.transition.end, c).emulateTransitionEnd(150) : c())
    };
    var d = a.fn.alert;
    a.fn.alert = function(b) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.alert");
            e || d.data("bs.alert", e = new c(this)), "string" == typeof b && e[b].call(d)
        })
    }, a.fn.alert.Constructor = c, a.fn.alert.noConflict = function() {
        return a.fn.alert = d, this
    }, a(document).on("click.bs.alert.data-api", b, c.prototype.close)
}(jQuery), + function(a) {
    "use strict";
    var b = function(c, d) {
        this.$element = a(c), this.options = a.extend({}, b.DEFAULTS, d)
    };
    b.DEFAULTS = {
        loadingText: "loading..."
    }, b.prototype.setState = function(a) {
        var b = "disabled",
            c = this.$element,
            d = c.is("input") ? "val" : "html",
            e = c.data();
        a += "Text", e.resetText || c.data("resetText", c[d]()), c[d](e[a] || this.options[a]), setTimeout(function() {
            "loadingText" == a ? c.addClass(b).attr(b, b) : c.removeClass(b).removeAttr(b)
        }, 0)
    }, b.prototype.toggle = function() {
        var a = this.$element.closest('[data-toggle="buttons"]'),
            b = !0;
        if (a.length) {
            var c = this.$element.find("input");
            "radio" === c.prop("type") && (c.prop("checked") && this.$element.hasClass("active") ? b = !1 : a.find(".active").removeClass("active")), b && c.prop("checked", !this.$element.hasClass("active")).trigger("change")
        }
        b && this.$element.toggleClass("active")
    };
    var c = a.fn.button;
    a.fn.button = function(c) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.button"),
                f = "object" == typeof c && c;
            e || d.data("bs.button", e = new b(this, f)), "toggle" == c ? e.toggle() : c && e.setState(c)
        })
    }, a.fn.button.Constructor = b, a.fn.button.noConflict = function() {
        return a.fn.button = c, this
    }, a(document).on("click.bs.button.data-api", "[data-toggle^=button]", function(b) {
        var c = a(b.target);
        c.hasClass("btn") || (c = c.closest(".btn")), c.button("toggle"), b.preventDefault()
    })
}(jQuery), + function(a) {
    "use strict";
    var b = function(b, c) {
        this.$element = a(b), this.$indicators = this.$element.find(".carousel-indicators"), this.options = c, this.paused = this.sliding = this.interval = this.$active = this.$items = null, "hover" == this.options.pause && this.$element.on("mouseenter", a.proxy(this.pause, this)).on("mouseleave", a.proxy(this.cycle, this))
    };
    b.DEFAULTS = {
        interval: 5e3,
        pause: "hover",
        wrap: !0
    }, b.prototype.cycle = function(b) {
        return b || (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
    }, b.prototype.getActiveIndex = function() {
        return this.$active = this.$element.find(".item.active"), this.$items = this.$active.parent().children(), this.$items.index(this.$active)
    }, b.prototype.to = function(b) {
        var c = this,
            d = this.getActiveIndex();
        return b > this.$items.length - 1 || 0 > b ? void 0 : this.sliding ? this.$element.one("slid.bs.carousel", function() {
            c.to(b)
        }) : d == b ? this.pause().cycle() : this.slide(b > d ? "next" : "prev", a(this.$items[b]))
    }, b.prototype.pause = function(b) {
        return b || (this.paused = !0), this.$element.find(".next, .prev").length && a.support.transition.end && (this.$element.trigger(a.support.transition.end), this.cycle(!0)), this.interval = clearInterval(this.interval), this
    }, b.prototype.next = function() {
        return this.sliding ? void 0 : this.slide("next")
    }, b.prototype.prev = function() {
        return this.sliding ? void 0 : this.slide("prev")
    }, b.prototype.slide = function(b, c) {
        var d = this.$element.find(".item.active"),
            e = c || d[b](),
            f = this.interval,
            g = "next" == b ? "left" : "right",
            h = "next" == b ? "first" : "last",
            i = this;
        if (!e.length) {
            if (!this.options.wrap) return;
            e = this.$element.find(".item")[h]()
        }
        this.sliding = !0, f && this.pause();
        var j = a.Event("slide.bs.carousel", {
            relatedTarget: e[0],
            direction: g
        });
        if (!e.hasClass("active")) {
            if (this.$indicators.length && (this.$indicators.find(".active").removeClass("active"), this.$element.one("slid.bs.carousel", function() {
                    var b = a(i.$indicators.children()[i.getActiveIndex()]);
                    b && b.addClass("active")
                })), a.support.transition && this.$element.hasClass("slide")) {
                if (this.$element.trigger(j), j.isDefaultPrevented()) return;
                e.addClass(b), e[0].offsetWidth, d.addClass(g), e.addClass(g), d.one(a.support.transition.end, function() {
                    e.removeClass([b, g].join(" ")).addClass("active"), d.removeClass(["active", g].join(" ")), i.sliding = !1, setTimeout(function() {
                        i.$element.trigger("slid.bs.carousel")
                    }, 0)
                }).emulateTransitionEnd(600)
            } else {
                if (this.$element.trigger(j), j.isDefaultPrevented()) return;
                d.removeClass("active"), e.addClass("active"), this.sliding = !1, this.$element.trigger("slid.bs.carousel")
            }
            return f && this.cycle(), this
        }
    };
    var c = a.fn.carousel;
    a.fn.carousel = function(c) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.carousel"),
                f = a.extend({}, b.DEFAULTS, d.data(), "object" == typeof c && c),
                g = "string" == typeof c ? c : f.slide;
            e || d.data("bs.carousel", e = new b(this, f)), "number" == typeof c ? e.to(c) : g ? e[g]() : f.interval && e.pause().cycle()
        })
    }, a.fn.carousel.Constructor = b, a.fn.carousel.noConflict = function() {
        return a.fn.carousel = c, this
    }, a(document).on("click.bs.carousel.data-api", "[data-slide], [data-slide-to]", function(b) {
        var c, d = a(this),
            e = a(d.attr("data-target") || (c = d.attr("href")) && c.replace(/.*(?=#[^\s]+$)/, "")),
            f = a.extend({}, e.data(), d.data()),
            g = d.attr("data-slide-to");
        g && (f.interval = !1), e.carousel(f), (g = d.attr("data-slide-to")) && e.data("bs.carousel").to(g), b.preventDefault()
    }), a(window).on("load", function() {
        a('[data-ride="carousel"]').each(function() {
            var b = a(this);
            b.carousel(b.data())
        })
    })
}(jQuery), + function(a) {
    "use strict";
    var b = function(c, d) {
        this.$element = a(c), this.options = a.extend({}, b.DEFAULTS, d), this.transitioning = null, this.options.parent && (this.$parent = a(this.options.parent)), this.options.toggle && this.toggle()
    };
    b.DEFAULTS = {
        toggle: !0
    }, b.prototype.dimension = function() {
        var a = this.$element.hasClass("width");
        return a ? "width" : "height"
    }, b.prototype.show = function() {
        if (!this.transitioning && !this.$element.hasClass("in")) {
            var b = a.Event("show.bs.collapse");
            if (this.$element.trigger(b), !b.isDefaultPrevented()) {
                var c = this.$parent && this.$parent.find("> .panel > .in");
                if (c && c.length) {
                    var d = c.data("bs.collapse");
                    if (d && d.transitioning) return;
                    c.collapse("hide"), d || c.data("bs.collapse", null)
                }
                var e = this.dimension();
                this.$element.removeClass("collapse").addClass("collapsing")[e](0), this.transitioning = 1;
                var f = function() {
                    this.$element.removeClass("collapsing").addClass("in")[e]("auto"), this.transitioning = 0, this.$element.trigger("shown.bs.collapse")
                };
                if (!a.support.transition) return f.call(this);
                var g = a.camelCase(["scroll", e].join("-"));
                this.$element.one(a.support.transition.end, a.proxy(f, this)).emulateTransitionEnd(350)[e](this.$element[0][g])
            }
        }
    }, b.prototype.hide = function() {
        if (!this.transitioning && this.$element.hasClass("in")) {
            var b = a.Event("hide.bs.collapse");
            if (this.$element.trigger(b), !b.isDefaultPrevented()) {
                var c = this.dimension();
                this.$element[c](this.$element[c]())[0].offsetHeight, this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"), this.transitioning = 1;
                var d = function() {
                    this.transitioning = 0, this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")
                };
                return a.support.transition ? void this.$element[c](0).one(a.support.transition.end, a.proxy(d, this)).emulateTransitionEnd(350) : d.call(this)
            }
        }
    }, b.prototype.toggle = function() {
        this[this.$element.hasClass("in") ? "hide" : "show"]()
    };
    var c = a.fn.collapse;
    a.fn.collapse = function(c) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.collapse"),
                f = a.extend({}, b.DEFAULTS, d.data(), "object" == typeof c && c);
            e || d.data("bs.collapse", e = new b(this, f)), "string" == typeof c && e[c]()
        })
    }, a.fn.collapse.Constructor = b, a.fn.collapse.noConflict = function() {
        return a.fn.collapse = c, this
    }, a(document).on("click.bs.collapse.data-api", "[data-toggle=collapse]", function(b) {
        var c, d = a(this),
            e = d.attr("data-target") || b.preventDefault() || (c = d.attr("href")) && c.replace(/.*(?=#[^\s]+$)/, ""),
            f = a(e),
            g = f.data("bs.collapse"),
            h = g ? "toggle" : d.data(),
            i = d.attr("data-parent"),
            j = i && a(i);
        g && g.transitioning || (j && j.find('[data-toggle=collapse][data-parent="' + i + '"]').not(d).addClass("collapsed"), d[f.hasClass("in") ? "addClass" : "removeClass"]("collapsed")), f.collapse(h)
    })
}(jQuery), + function(a) {
    "use strict";

    function b() {
        a(d).remove(), a(e).each(function(b) {
            var d = c(a(this));
            d.hasClass("open") && (d.trigger(b = a.Event("hide.bs.dropdown")), b.isDefaultPrevented() || d.removeClass("open").trigger("hidden.bs.dropdown"))
        })
    }

    function c(b) {
        var c = b.attr("data-target");
        c || (c = b.attr("href"), c = c && /#/.test(c) && c.replace(/.*(?=#[^\s]*$)/, ""));
        var d = c && a(c);
        return d && d.length ? d : b.parent()
    }
    var d = ".dropdown-backdrop",
        e = "[data-toggle=dropdown]",
        f = function(b) {
            a(b).on("click.bs.dropdown", this.toggle)
        };
    f.prototype.toggle = function(d) {
        var e = a(this);
        if (!e.is(".disabled, :disabled")) {
            var f = c(e),
                g = f.hasClass("open");
            if (b(), !g) {
                if ("ontouchstart" in document.documentElement && !f.closest(".navbar-nav").length && a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click", b), f.trigger(d = a.Event("show.bs.dropdown")), d.isDefaultPrevented()) return;
                f.toggleClass("open").trigger("shown.bs.dropdown"), e.focus()
            }
            return !1
        }
    }, f.prototype.keydown = function(b) {
        if (/(38|40|27)/.test(b.keyCode)) {
            var d = a(this);
            if (b.preventDefault(), b.stopPropagation(), !d.is(".disabled, :disabled")) {
                var f = c(d),
                    g = f.hasClass("open");
                if (!g || g && 27 == b.keyCode) return 27 == b.which && f.find(e).focus(), d.click();
                var h = a("[role=menu] li:not(.divider):visible a", f);
                if (h.length) {
                    var i = h.index(h.filter(":focus"));
                    38 == b.keyCode && i > 0 && i--, 40 == b.keyCode && i < h.length - 1 && i++, ~i || (i = 0), h.eq(i).focus()
                }
            }
        }
    };
    var g = a.fn.dropdown;
    a.fn.dropdown = function(b) {
        return this.each(function() {
            var c = a(this),
                d = c.data("bs.dropdown");
            d || c.data("bs.dropdown", d = new f(this)), "string" == typeof b && d[b].call(c)
        })
    }, a.fn.dropdown.Constructor = f, a.fn.dropdown.noConflict = function() {
        return a.fn.dropdown = g, this
    }, a(document).on("click.bs.dropdown.data-api", b).on("click.bs.dropdown.data-api", ".dropdown form", function(a) {
        a.stopPropagation()
    }).on("click.bs.dropdown.data-api", e, f.prototype.toggle).on("keydown.bs.dropdown.data-api", e + ", [role=menu]", f.prototype.keydown)
}(jQuery), + function(a) {
    "use strict";
    var b = function(b, c) {
        this.options = c, this.$element = a(b), this.$backdrop = this.isShown = null, this.options.remote && this.$element.load(this.options.remote)
    };
    b.DEFAULTS = {
        backdrop: !0,
        keyboard: !0,
        show: !0
    }, b.prototype.toggle = function(a) {
        return this[this.isShown ? "hide" : "show"](a)
    }, b.prototype.show = function(b) {
        var c = this,
            d = a.Event("show.bs.modal", {
                relatedTarget: b
            });
        this.$element.trigger(d), this.isShown || d.isDefaultPrevented() || (this.isShown = !0, this.escape(), this.$element.on("click.dismiss.modal", '[data-dismiss="modal"]', a.proxy(this.hide, this)), this.backdrop(function() {
            var d = a.support.transition && c.$element.hasClass("fade");
            c.$element.parent().length || c.$element.appendTo(document.body), c.$element.show(), d && c.$element[0].offsetWidth, c.$element.addClass("in").attr("aria-hidden", !1), c.enforceFocus();
            var e = a.Event("shown.bs.modal", {
                relatedTarget: b
            });
            d ? c.$element.find(".modal-dialog").one(a.support.transition.end, function() {
                c.$element.focus().trigger(e)
            }).emulateTransitionEnd(300) : c.$element.focus().trigger(e)
        }))
    }, b.prototype.hide = function(b) {
        b && b.preventDefault(), b = a.Event("hide.bs.modal"), this.$element.trigger(b), this.isShown && !b.isDefaultPrevented() && (this.isShown = !1, this.escape(), a(document).off("focusin.bs.modal"), this.$element.removeClass("in").attr("aria-hidden", !0).off("click.dismiss.modal"), a.support.transition && this.$element.hasClass("fade") ? this.$element.one(a.support.transition.end, a.proxy(this.hideModal, this)).emulateTransitionEnd(300) : this.hideModal())
    }, b.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.focus()
        }, this))
    }, b.prototype.escape = function() {
        this.isShown && this.options.keyboard ? this.$element.on("keyup.dismiss.bs.modal", a.proxy(function(a) {
            27 == a.which && this.hide()
        }, this)) : this.isShown || this.$element.off("keyup.dismiss.bs.modal")
    }, b.prototype.hideModal = function() {
        var a = this;
        this.$element.hide(), this.backdrop(function() {
            a.removeBackdrop(), a.$element.trigger("hidden.bs.modal")
        })
    }, b.prototype.removeBackdrop = function() {
        this.$backdrop && this.$backdrop.remove(), this.$backdrop = null
    }, b.prototype.backdrop = function(b) {
        var c = this.$element.hasClass("fade") ? "fade" : "";
        if (this.isShown && this.options.backdrop) {
            var d = a.support.transition && c;
            if (this.$backdrop = a('<div class="modal-backdrop ' + c + '" />').appendTo(document.body), this.$element.on("click.dismiss.modal", a.proxy(function(a) {
                    a.target === a.currentTarget && ("static" == this.options.backdrop ? this.$element[0].focus.call(this.$element[0]) : this.hide.call(this))
                }, this)), d && this.$backdrop[0].offsetWidth, this.$backdrop.addClass("in"), !b) return;
            d ? this.$backdrop.one(a.support.transition.end, b).emulateTransitionEnd(150) : b()
        } else !this.isShown && this.$backdrop ? (this.$backdrop.removeClass("in"), a.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one(a.support.transition.end, b).emulateTransitionEnd(150) : b()) : b && b()
    };
    var c = a.fn.modal;
    a.fn.modal = function(c, d) {
        return this.each(function() {
            var e = a(this),
                f = e.data("bs.modal"),
                g = a.extend({}, b.DEFAULTS, e.data(), "object" == typeof c && c);
            f || e.data("bs.modal", f = new b(this, g)), "string" == typeof c ? f[c](d) : g.show && f.show(d)
        })
    }, a.fn.modal.Constructor = b, a.fn.modal.noConflict = function() {
        return a.fn.modal = c, this
    }, a(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', function(b) {
        var c = a(this),
            d = c.attr("href"),
            e = a(c.attr("data-target") || d && d.replace(/.*(?=#[^\s]+$)/, "")),
            f = e.data("modal") ? "toggle" : a.extend({
                remote: !/#/.test(d) && d
            }, e.data(), c.data());
        b.preventDefault(), e.modal(f, this).one("hide", function() {
            c.is(":visible") && c.focus()
        })
    }), a(document).on("show.bs.modal", ".modal", function() {
        a(document.body).addClass("modal-open")
    }).on("hidden.bs.modal", ".modal", function() {
        a(document.body).removeClass("modal-open")
    })
}(jQuery), + function(a) {
    "use strict";
    var b = function(a, b) {
        this.type = this.options = this.enabled = this.timeout = this.hoverState = this.$element = null, this.init("tooltip", a, b)
    };
    b.DEFAULTS = {
        animation: !0,
        placement: "top",
        selector: !1,
        template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
        trigger: "hover focus",
        title: "",
        delay: 0,
        html: !1,
        container: !1
    }, b.prototype.init = function(b, c, d) {
        this.enabled = !0, this.type = b, this.$element = a(c), this.options = this.getOptions(d);
        for (var e = this.options.trigger.split(" "), f = e.length; f--;) {
            var g = e[f];
            if ("click" == g) this.$element.on("click." + this.type, this.options.selector, a.proxy(this.toggle, this));
            else if ("manual" != g) {
                var h = "hover" == g ? "mouseenter" : "focus",
                    i = "hover" == g ? "mouseleave" : "blur";
                this.$element.on(h + "." + this.type, this.options.selector, a.proxy(this.enter, this)), this.$element.on(i + "." + this.type, this.options.selector, a.proxy(this.leave, this))
            }
        }
        this.options.selector ? this._options = a.extend({}, this.options, {
            trigger: "manual",
            selector: ""
        }) : this.fixTitle()
    }, b.prototype.getDefaults = function() {
        return b.DEFAULTS
    }, b.prototype.getOptions = function(b) {
        return b = a.extend({}, this.getDefaults(), this.$element.data(), b), b.delay && "number" == typeof b.delay && (b.delay = {
            show: b.delay,
            hide: b.delay
        }), b
    }, b.prototype.getDelegateOptions = function() {
        var b = {},
            c = this.getDefaults();
        return this._options && a.each(this._options, function(a, d) {
            c[a] != d && (b[a] = d)
        }), b
    }, b.prototype.enter = function(b) {
        var c = b instanceof this.constructor ? b : a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs." + this.type);
        return clearTimeout(c.timeout), c.hoverState = "in", c.options.delay && c.options.delay.show ? void(c.timeout = setTimeout(function() {
            "in" == c.hoverState && c.show()
        }, c.options.delay.show)) : c.show()
    }, b.prototype.leave = function(b) {
        var c = b instanceof this.constructor ? b : a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs." + this.type);
        return clearTimeout(c.timeout), c.hoverState = "out", c.options.delay && c.options.delay.hide ? void(c.timeout = setTimeout(function() {
            "out" == c.hoverState && c.hide()
        }, c.options.delay.hide)) : c.hide()
    }, b.prototype.show = function() {
        var b = a.Event("show.bs." + this.type);
        if (this.hasContent() && this.enabled) {
            if (this.$element.trigger(b), b.isDefaultPrevented()) return;
            var c = this.tip();
            this.setContent(), this.options.animation && c.addClass("fade");
            var d = "function" == typeof this.options.placement ? this.options.placement.call(this, c[0], this.$element[0]) : this.options.placement,
                e = /\s?auto?\s?/i,
                f = e.test(d);
            f && (d = d.replace(e, "") || "top"), c.detach().css({
                top: 0,
                left: 0,
                display: "block"
            }).addClass(d), this.options.container ? c.appendTo(this.options.container) : c.insertAfter(this.$element);
            var g = this.getPosition(),
                h = c[0].offsetWidth,
                i = c[0].offsetHeight;
            if (f) {
                var j = this.$element.parent(),
                    k = d,
                    l = document.documentElement.scrollTop || document.body.scrollTop,
                    m = "body" == this.options.container ? window.innerWidth : j.outerWidth(),
                    n = "body" == this.options.container ? window.innerHeight : j.outerHeight(),
                    o = "body" == this.options.container ? 0 : j.offset().left;
                d = "bottom" == d && g.top + g.height + i - l > n ? "top" : "top" == d && g.top - l - i < 0 ? "bottom" : "right" == d && g.right + h > m ? "left" : "left" == d && g.left - h < o ? "right" : d, c.removeClass(k).addClass(d)
            }
            var p = this.getCalculatedOffset(d, g, h, i);
            this.applyPlacement(p, d), this.$element.trigger("shown.bs." + this.type)
        }
    }, b.prototype.applyPlacement = function(a, b) {
        var c, d = this.tip(),
            e = d[0].offsetWidth,
            f = d[0].offsetHeight,
            g = parseInt(d.css("margin-top"), 10),
            h = parseInt(d.css("margin-left"), 10);
        isNaN(g) && (g = 0), isNaN(h) && (h = 0), a.top = a.top + g, a.left = a.left + h, d.offset(a).addClass("in");
        var i = d[0].offsetWidth,
            j = d[0].offsetHeight;
        if ("top" == b && j != f && (c = !0, a.top = a.top + f - j), /bottom|top/.test(b)) {
            var k = 0;
            a.left < 0 && (k = -2 * a.left, a.left = 0, d.offset(a), i = d[0].offsetWidth, j = d[0].offsetHeight), this.replaceArrow(k - e + i, i, "left")
        } else this.replaceArrow(j - f, j, "top");
        c && d.offset(a)
    }, b.prototype.replaceArrow = function(a, b, c) {
        this.arrow().css(c, a ? 50 * (1 - a / b) + "%" : "")
    }, b.prototype.setContent = function() {
        var a = this.tip(),
            b = this.getTitle();
        a.find(".tooltip-inner")[this.options.html ? "html" : "text"](b), a.removeClass("fade in top bottom left right")
    }, b.prototype.hide = function() {
        function b() {
            "in" != c.hoverState && d.detach()
        }
        var c = this,
            d = this.tip(),
            e = a.Event("hide.bs." + this.type);
        return this.$element.trigger(e), e.isDefaultPrevented() ? void 0 : (d.removeClass("in"), a.support.transition && this.$tip.hasClass("fade") ? d.one(a.support.transition.end, b).emulateTransitionEnd(150) : b(), this.$element.trigger("hidden.bs." + this.type), this)
    }, b.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", "")
    }, b.prototype.hasContent = function() {
        return this.getTitle()
    }, b.prototype.getPosition = function() {
        var b = this.$element[0];
        return a.extend({}, "function" == typeof b.getBoundingClientRect ? b.getBoundingClientRect() : {
            width: b.offsetWidth,
            height: b.offsetHeight
        }, this.$element.offset())
    }, b.prototype.getCalculatedOffset = function(a, b, c, d) {
        return "bottom" == a ? {
            top: b.top + b.height,
            left: b.left + b.width / 2 - c / 2
        } : "top" == a ? {
            top: b.top - d,
            left: b.left + b.width / 2 - c / 2
        } : "left" == a ? {
            top: b.top + b.height / 2 - d / 2,
            left: b.left - c
        } : {
            top: b.top + b.height / 2 - d / 2,
            left: b.left + b.width
        }
    }, b.prototype.getTitle = function() {
        var a, b = this.$element,
            c = this.options;
        return a = b.attr("data-original-title") || ("function" == typeof c.title ? c.title.call(b[0]) : c.title)
    }, b.prototype.tip = function() {
        return this.$tip = this.$tip || a(this.options.template)
    }, b.prototype.arrow = function() {
        return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
    }, b.prototype.validate = function() {
        this.$element[0].parentNode || (this.hide(), this.$element = null, this.options = null)
    }, b.prototype.enable = function() {
        this.enabled = !0
    }, b.prototype.disable = function() {
        this.enabled = !1
    }, b.prototype.toggleEnabled = function() {
        this.enabled = !this.enabled
    }, b.prototype.toggle = function(b) {
        var c = b ? a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs." + this.type) : this;
        c.tip().hasClass("in") ? c.leave(c) : c.enter(c)
    }, b.prototype.destroy = function() {
        this.hide().$element.off("." + this.type).removeData("bs." + this.type)
    };
    var c = a.fn.tooltip;
    a.fn.tooltip = function(c) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.tooltip"),
                f = "object" == typeof c && c;
            e || d.data("bs.tooltip", e = new b(this, f)), "string" == typeof c && e[c]()
        })
    }, a.fn.tooltip.Constructor = b, a.fn.tooltip.noConflict = function() {
        return a.fn.tooltip = c, this
    }
}(jQuery), + function(a) {
    "use strict";
    var b = function(a, b) {
        this.init("popover", a, b)
    };
    if (!a.fn.tooltip) throw new Error("Popover requires tooltip.js");
    b.DEFAULTS = a.extend({}, a.fn.tooltip.Constructor.DEFAULTS, {
        placement: "right",
        trigger: "click",
        content: "",
        template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
    }), b.prototype = a.extend({}, a.fn.tooltip.Constructor.prototype), b.prototype.constructor = b, b.prototype.getDefaults = function() {
        return b.DEFAULTS
    }, b.prototype.setContent = function() {
        var a = this.tip(),
            b = this.getTitle(),
            c = this.getContent();
        a.find(".popover-title")[this.options.html ? "html" : "text"](b), a.find(".popover-content")[this.options.html ? "html" : "text"](c), a.removeClass("fade top bottom left right in"), a.find(".popover-title").html() || a.find(".popover-title").hide()
    }, b.prototype.hasContent = function() {
        return this.getTitle() || this.getContent()
    }, b.prototype.getContent = function() {
        var a = this.$element,
            b = this.options;
        return a.attr("data-content") || ("function" == typeof b.content ? b.content.call(a[0]) : b.content)
    }, b.prototype.arrow = function() {
        return this.$arrow = this.$arrow || this.tip().find(".arrow")
    }, b.prototype.tip = function() {
        return this.$tip || (this.$tip = a(this.options.template)), this.$tip
    };
    var c = a.fn.popover;
    a.fn.popover = function(c) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.popover"),
                f = "object" == typeof c && c;
            e || d.data("bs.popover", e = new b(this, f)), "string" == typeof c && e[c]()
        })
    }, a.fn.popover.Constructor = b, a.fn.popover.noConflict = function() {
        return a.fn.popover = c, this
    }
}(jQuery), + function(a) {
    "use strict";

    function b(c, d) {
        var e, f = a.proxy(this.process, this);
        this.$element = a(a(c).is("body") ? window : c), this.$body = a("body"), this.$scrollElement = this.$element.on("scroll.bs.scroll-spy.data-api", f), this.options = a.extend({}, b.DEFAULTS, d), this.selector = (this.options.target || (e = a(c).attr("href")) && e.replace(/.*(?=#[^\s]+$)/, "") || "") + " .nav li > a", this.offsets = a([]), this.targets = a([]), this.activeTarget = null, this.refresh(), this.process()
    }
    b.DEFAULTS = {
        offset: 10
    }, b.prototype.refresh = function() {
        var b = this.$element[0] == window ? "offset" : "position";
        this.offsets = a([]), this.targets = a([]);
        var c = this;
        this.$body.find(this.selector).map(function() {
            var d = a(this),
                e = d.data("target") || d.attr("href"),
                f = /^#\w/.test(e) && a(e);
            return f && f.length && [
                [f[b]().top + (!a.isWindow(c.$scrollElement.get(0)) && c.$scrollElement.scrollTop()), e]
            ] || null
        }).sort(function(a, b) {
            return a[0] - b[0]
        }).each(function() {
            c.offsets.push(this[0]), c.targets.push(this[1])
        })
    }, b.prototype.process = function() {
        var a, b = this.$scrollElement.scrollTop() + this.options.offset,
            c = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight,
            d = c - this.$scrollElement.height(),
            e = this.offsets,
            f = this.targets,
            g = this.activeTarget;
        if (b >= d) return g != (a = f.last()[0]) && this.activate(a);
        for (a = e.length; a--;) g != f[a] && b >= e[a] && (!e[a + 1] || b <= e[a + 1]) && this.activate(f[a])
    }, b.prototype.activate = function(b) {
        this.activeTarget = b, a(this.selector).parents(".active").removeClass("active");
        var c = this.selector + '[data-target="' + b + '"],' + this.selector + '[href="' + b + '"]',
            d = a(c).parents("li").addClass("active");
        d.parent(".dropdown-menu").length && (d = d.closest("li.dropdown").addClass("active")), d.trigger("activate.bs.scrollspy")
    };
    var c = a.fn.scrollspy;
    a.fn.scrollspy = function(c) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.scrollspy"),
                f = "object" == typeof c && c;
            e || d.data("bs.scrollspy", e = new b(this, f)), "string" == typeof c && e[c]()
        })
    }, a.fn.scrollspy.Constructor = b, a.fn.scrollspy.noConflict = function() {
        return a.fn.scrollspy = c, this
    }, a(window).on("load", function() {
        a('[data-spy="scroll"]').each(function() {
            var b = a(this);
            b.scrollspy(b.data())
        })
    })
}(jQuery), + function(a) {
    "use strict";
    var b = function(b) {
        this.element = a(b)
    };
    b.prototype.show = function() {
        var b = this.element,
            c = b.closest("ul:not(.dropdown-menu)"),
            d = b.data("target");
        if (d || (d = b.attr("href"), d = d && d.replace(/.*(?=#[^\s]*$)/, "")), !b.parent("li").hasClass("active")) {
            var e = c.find(".active:last a")[0],
                f = a.Event("show.bs.tab", {
                    relatedTarget: e
                });
            if (b.trigger(f), !f.isDefaultPrevented()) {
                var g = a(d);
                this.activate(b.parent("li"), c), this.activate(g, g.parent(), function() {
                    b.trigger({
                        type: "shown.bs.tab",
                        relatedTarget: e
                    })
                })
            }
        }
    }, b.prototype.activate = function(b, c, d) {
        function e() {
            f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"), b.addClass("active"), g ? (b[0].offsetWidth, b.addClass("in")) : b.removeClass("fade"), b.parent(".dropdown-menu") && b.closest("li.dropdown").addClass("active"), d && d()
        }
        var f = c.find("> .active"),
            g = d && a.support.transition && f.hasClass("fade");
        g ? f.one(a.support.transition.end, e).emulateTransitionEnd(150) : e(), f.removeClass("in")
    };
    var c = a.fn.tab;
    a.fn.tab = function(c) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.tab");
            e || d.data("bs.tab", e = new b(this)), "string" == typeof c && e[c]()
        })
    }, a.fn.tab.Constructor = b, a.fn.tab.noConflict = function() {
        return a.fn.tab = c, this
    }, a(document).on("click.bs.tab.data-api", '[data-toggle="tab"], [data-toggle="pill"]', function(b) {
        b.preventDefault(), a(this).tab("show")
    })
}(jQuery), + function(a) {
    "use strict";
    var b = function(c, d) {
        this.options = a.extend({}, b.DEFAULTS, d), this.$window = a(window).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(c), this.affixed = this.unpin = null, this.checkPosition()
    };
    b.RESET = "affix affix-top affix-bottom", b.DEFAULTS = {
        offset: 0
    }, b.prototype.checkPositionWithEventLoop = function() {
        setTimeout(a.proxy(this.checkPosition, this), 1)
    }, b.prototype.checkPosition = function() {
        if (this.$element.is(":visible")) {
            var c = a(document).height(),
                d = this.$window.scrollTop(),
                e = this.$element.offset(),
                f = this.options.offset,
                g = f.top,
                h = f.bottom;
            "object" != typeof f && (h = g = f), "function" == typeof g && (g = f.top()), "function" == typeof h && (h = f.bottom());
            var i = null != this.unpin && d + this.unpin <= e.top ? !1 : null != h && e.top + this.$element.height() >= c - h ? "bottom" : null != g && g >= d ? "top" : !1;
            this.affixed !== i && (this.unpin && this.$element.css("top", ""), this.affixed = i, this.unpin = "bottom" == i ? e.top - d : null, this.$element.removeClass(b.RESET).addClass("affix" + (i ? "-" + i : "")), "bottom" == i && this.$element.offset({
                top: document.body.offsetHeight - h - this.$element.height()
            }))
        }
    };
    var c = a.fn.affix;
    a.fn.affix = function(c) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.affix"),
                f = "object" == typeof c && c;
            e || d.data("bs.affix", e = new b(this, f)), "string" == typeof c && e[c]()
        })
    }, a.fn.affix.Constructor = b, a.fn.affix.noConflict = function() {
        return a.fn.affix = c, this
    }, a(window).on("load", function() {
        a('[data-spy="affix"]').each(function() {
            var b = a(this),
                c = b.data();
            c.offset = c.offset || {}, c.offsetBottom && (c.offset.bottom = c.offsetBottom), c.offsetTop && (c.offset.top = c.offsetTop), b.affix(c)
        })
    })
}(jQuery);
var cola;
! function(a) {
    var b = function() {
        function a() {
            this.locks = {}
        }
        return a.prototype.add = function(a, b) {
            isNaN(b[0]) || isNaN(b[1]), this.locks[a] = b
        }, a.prototype.clear = function() {
            this.locks = {}
        }, a.prototype.isEmpty = function() {
            for (var a in this.locks) return !1;
            return !0
        }, a.prototype.apply = function(a) {
            for (var b in this.locks) a(b, this.locks[b])
        }, a
    }();
    a.Locks = b;
    var c = function() {
        function a(a, c, e) {
            void 0 === e && (e = null), this.D = c, this.G = e, this.threshold = 1e-4, this.random = new d, this.project = null, this.x = a, this.k = a.length;
            var f = this.n = a[0].length;
            this.H = new Array(this.k), this.g = new Array(this.k), this.Hd = new Array(this.k), this.a = new Array(this.k), this.b = new Array(this.k), this.c = new Array(this.k), this.d = new Array(this.k), this.e = new Array(this.k), this.ia = new Array(this.k), this.ib = new Array(this.k), this.xtmp = new Array(this.k), this.locks = new b, this.minD = Number.MAX_VALUE;
            for (var g, h = f; h--;)
                for (g = f; --g > h;) {
                    var i = c[h][g];
                    i > 0 && i < this.minD && (this.minD = i)
                }
            for (this.minD === Number.MAX_VALUE && (this.minD = 1), h = this.k; h--;) {
                for (this.g[h] = new Array(f), this.H[h] = new Array(f), g = f; g--;) this.H[h][g] = new Array(f);
                this.Hd[h] = new Array(f), this.a[h] = new Array(f), this.b[h] = new Array(f), this.c[h] = new Array(f), this.d[h] = new Array(f), this.e[h] = new Array(f), this.ia[h] = new Array(f), this.ib[h] = new Array(f), this.xtmp[h] = new Array(f)
            }
        }
        return a.createSquareMatrix = function(a, b) {
            for (var c = new Array(a), d = 0; a > d; ++d) {
                c[d] = new Array(a);
                for (var e = 0; a > e; ++e) c[d][e] = b(d, e)
            }
            return c
        }, a.prototype.offsetDir = function() {
            for (var a = this, b = new Array(this.k), c = 0, d = 0; d < this.k; ++d) {
                var e = b[d] = this.random.getNextBetween(.01, 1) - .5;
                c += e * e
            }
            return c = Math.sqrt(c), b.map(function(b) {
                return b *= a.minD / c
            })
        }, a.prototype.computeDerivatives = function(a) {
            var b = this,
                c = this.n;
            if (!(1 > c)) {
                for (var d, e = new Array(this.k), f = new Array(this.k), g = new Array(this.k), h = 0, i = 0; c > i; ++i) {
                    for (d = 0; d < this.k; ++d) g[d] = this.g[d][i] = 0;
                    for (var j = 0; c > j; ++j)
                        if (i !== j) {
                            for (var k = c; k--;) {
                                var l = 0;
                                for (d = 0; d < this.k; ++d) {
                                    var m = e[d] = a[d][i] - a[d][j];
                                    l += f[d] = m * m
                                }
                                if (l > 1e-9) break;
                                var n = this.offsetDir();
                                for (d = 0; d < this.k; ++d) a[d][j] += n[d]
                            }
                            var o = Math.sqrt(l),
                                p = this.D[i][j],
                                q = null != this.G ? this.G[i][j] : 1;
                            if (q > 1 && o > p || !isFinite(p))
                                for (d = 0; d < this.k; ++d) this.H[d][i][j] = 0;
                            else {
                                q > 1 && (q = 1);
                                var r = p * p,
                                    s = q * (o - p) / (r * o),
                                    t = -q / (r * o * o * o);
                                for (isFinite(s) || console.log(s), d = 0; d < this.k; ++d) this.g[d][i] += e[d] * s, g[d] -= this.H[d][i][j] = t * (p * (f[d] - l) + o * l)
                            }
                        }
                    for (d = 0; d < this.k; ++d) h = Math.max(h, this.H[d][i][i] = g[d])
                }
                this.locks.isEmpty() || this.locks.apply(function(c, e) {
                    for (d = 0; d < b.k; ++d) b.H[d][c][c] += h, b.g[d][c] -= h * (e[d] - a[d][c])
                })
            }
        }, a.dotProd = function(a, b) {
            for (var c = 0, d = a.length; d--;) c += a[d] * b[d];
            return c
        }, a.rightMultiply = function(b, c, d) {
            for (var e = b.length; e--;) d[e] = a.dotProd(b[e], c)
        }, a.prototype.computeStepSize = function(b) {
            for (var c = 0, d = 0, e = 0; 2 > e; ++e) c += a.dotProd(this.g[e], b[e]), a.rightMultiply(this.H[e], b[e], this.Hd[e]), d += a.dotProd(b[e], this.Hd[e]);
            return 0 !== d && isFinite(d) ? c / d : 0
        }, a.prototype.reduceStress = function() {
            this.computeDerivatives(this.x);
            for (var a = this.computeStepSize(this.g), b = 0; b < this.k; ++b) this.takeDescentStep(this.x[b], this.g[b], a);
            return this.computeStress()
        }, a.copy = function(a, b) {
            for (var c = a.length, d = b[0].length, e = 0; c > e; ++e)
                for (var f = 0; d > f; ++f) b[e][f] = a[e][f]
        }, a.prototype.stepAndProject = function(b, c, d, e) {
            a.copy(b, c), this.takeDescentStep(c[0], d[0], e), this.project && this.project[0](b[0], b[1], c[0]), this.takeDescentStep(c[1], d[1], e), this.project && this.project[1](c[0], b[1], c[1])
        }, a.mApply = function(a, b, c) {
            for (var d = a; d-- > 0;)
                for (var e = b; e-- > 0;) c(d, e)
        }, a.prototype.matrixApply = function(b) {
            a.mApply(this.k, this.n, b)
        }, a.prototype.computeNextPosition = function(a, b) {
            var c = this;
            this.computeDerivatives(a);
            var d = this.computeStepSize(this.g);
            this.stepAndProject(a, b, this.g, d);
            for (var e = 0; e < this.n; ++e)
                for (var f = 0; f < this.k; ++f) isNaN(b[f][e]);
            if (this.project) {
                this.matrixApply(function(d, e) {
                    return c.e[d][e] = a[d][e] - b[d][e]
                });
                var g = this.computeStepSize(this.e);
                g = Math.max(.2, Math.min(g, 1)), this.stepAndProject(a, b, this.e, g)
            }
        }, a.prototype.run = function(a) {
            for (var b = Number.MAX_VALUE, c = !1; !c && a-- > 0;) {
                var d = this.rungeKutta();
                c = Math.abs(b / d - 1) < this.threshold, b = d
            }
            return b
        }, a.prototype.rungeKutta = function() {
            var b = this;
            this.computeNextPosition(this.x, this.a), a.mid(this.x, this.a, this.ia), this.computeNextPosition(this.ia, this.b), a.mid(this.x, this.b, this.ib), this.computeNextPosition(this.ib, this.c), this.computeNextPosition(this.c, this.d);
            var c = 0;
            return this.matrixApply(function(a, d) {
                var e = (b.a[a][d] + 2 * b.b[a][d] + 2 * b.c[a][d] + b.d[a][d]) / 6,
                    f = b.x[a][d] - e;
                c += f * f, b.x[a][d] = e
            }), c
        }, a.mid = function(b, c, d) {
            a.mApply(b.length, b[0].length, function(a, e) {
                return d[a][e] = b[a][e] + (c[a][e] - b[a][e]) / 2
            })
        }, a.prototype.takeDescentStep = function(a, b, c) {
            for (var d = 0; d < this.n; ++d) a[d] = a[d] - c * b[d]
        }, a.prototype.computeStress = function() {
            for (var a = 0, b = 0, c = this.n - 1; c > b; ++b)
                for (var d = b + 1, e = this.n; e > d; ++d) {
                    for (var f = 0, g = 0; g < this.k; ++g) {
                        var h = this.x[g][b] - this.x[g][d];
                        f += h * h
                    }
                    f = Math.sqrt(f);
                    var i = this.D[b][d];
                    if (isFinite(i)) {
                        var j = i - f,
                            k = i * i;
                        a += j * j / k
                    }
                }
            return a
        }, a.zeroDistance = 1e-10, a
    }();
    a.Descent = c;
    var d = function() {
        function a(a) {
            void 0 === a && (a = 1), this.seed = a, this.a = 214013, this.c = 2531011, this.m = 2147483648, this.range = 32767
        }
        return a.prototype.getNext = function() {
            return this.seed = (this.seed * this.a + this.c) % this.m, (this.seed >> 16) / this.range
        }, a.prototype.getNextBetween = function(a, b) {
            return a + this.getNext() * (b - a)
        }, a
    }();
    a.PseudoRandom = d
}(cola || (cola = {}));
var __extends = this.__extends || function(a, b) {
        function c() {
            this.constructor = a
        }
        for (var d in b) b.hasOwnProperty(d) && (a[d] = b[d]);
        c.prototype = b.prototype, a.prototype = new c
    },
    cola;
! function(a) {
    var b;
    ! function(b) {
        function c(a, b, c) {
            return (b.x - a.x) * (c.y - a.y) - (c.x - a.x) * (b.y - a.y)
        }

        function d(a, b, d) {
            return c(a, b, d) > 0
        }

        function e(a, b, d) {
            return c(a, b, d) < 0
        }

        function f(a) {
            var b, d = a.slice(0).sort(function(a, b) {
                    return a.x !== b.x ? b.x - a.x : b.y - a.y
                }),
                e = a.length,
                f = 0,
                g = d[0].x;
            for (b = 1; e > b && d[b].x === g; ++b);
            var h = b - 1,
                i = [];
            if (i.push(d[f]), h === e - 1) d[h].y !== d[f].y && i.push(d[h]);
            else {
                var j, k = e - 1,
                    l = d[e - 1].x;
                for (b = e - 2; b >= 0 && d[b].x === l; b--);
                for (j = b + 1, b = h; ++b <= j;)
                    if (!(c(d[f], d[j], d[b]) >= 0 && j > b)) {
                        for (; i.length > 1 && !(c(i[i.length - 2], i[i.length - 1], d[b]) > 0);) i.length -= 1;
                        b != f && i.push(d[b])
                    }
                k != j && i.push(d[k]);
                var m = i.length;
                for (b = j; --b >= h;)
                    if (!(c(d[k], d[h], d[b]) >= 0 && b > h)) {
                        for (; i.length > m && !(c(i[i.length - 2], i[i.length - 1], d[b]) > 0);) i.length -= 1;
                        b != f && i.push(d[b])
                    }
            }
            return i
        }

        function g(a, b, c) {
            b.slice(0).sort(function(b, c) {
                return Math.atan2(b.y - a.y, b.x - a.x) - Math.atan2(c.y - a.y, c.x - a.x)
            }).forEach(c)
        }

        function h(a, b) {
            return {
                rtan: i(a, b),
                ltan: j(a, b)
            }
        }

        function i(a, b) {
            var c, f, g, h, i, j = b.length - 1;
            if (e(a, b[1], b[0]) && !d(a, b[j - 1], b[0])) return 0;
            for (c = 0, f = j;;) {
                if (f - c === 1) return d(a, b[c], b[f]) ? c : f;
                if (g = Math.floor((c + f) / 2), i = e(a, b[g + 1], b[g]), i && !d(a, b[g - 1], b[g])) return g;
                h = d(a, b[c + 1], b[c]), h ? i ? f = g : d(a, b[c], b[g]) ? f = g : c = g : i && e(a, b[c], b[g]) ? f = g : c = g
            }
        }

        function j(a, b) {
            var c, f, g, h, i, j = b.length - 1;
            if (d(a, b[j - 1], b[0]) && !e(a, b[1], b[0])) return 0;
            for (c = 0, f = j;;) {
                if (f - c === 1) return e(a, b[c], b[f]) ? c : f;
                if (g = Math.floor((c + f) / 2), i = e(a, b[g + 1], b[g]), d(a, b[g - 1], b[g]) && !i) return g;
                h = e(a, b[c + 1], b[c]), h ? i ? e(a, b[c], b[g]) ? f = g : c = g : f = g : i ? c = g : d(a, b[c], b[g]) ? f = g : c = g
            }
        }

        function k(a, b, c, d, e, f) {
            var g, h;
            g = c(b[0], a), h = d(a[g], b);
            for (var i = !1; !i;) {
                for (i = !0; g === a.length - 1 && (g = 0), !e(b[h], a[g], a[g + 1]);) ++g;
                for (; 0 === h && (h = b.length - 1), !f(a[g], b[h], b[h - 1]);) --h, i = !1
            }
            return {
                t1: g,
                t2: h
            }
        }

        function l(a, b) {
            var c = m(b, a);
            return {
                t1: c.t2,
                t2: c.t1
            }
        }

        function m(a, b) {
            return k(a, b, i, j, d, e)
        }

        function n(a, b) {
            return k(a, b, j, j, e, e)
        }

        function o(a, b) {
            return k(a, b, i, i, d, d)
        }

        function p(b, c) {
            for (var d = [], e = 1, f = c.length; f > e; ++e) {
                var g = a.vpsc.Rectangle.lineIntersection(b.x1, b.y1, b.x2, b.y2, c[e - 1].x, c[e - 1].y, c[e].x, c[e].y);
                g && d.push(g)
            }
            return d
        }

        function q(a, b) {
            for (var d = a.length - 1, e = b.length - 1, f = new y, g = 0; d > g; ++g)
                for (var h = 0; e > h; ++h) {
                    var i = a[0 == g ? d - 1 : g - 1],
                        j = a[g],
                        k = a[g + 1],
                        l = b[0 == h ? e - 1 : h - 1],
                        m = b[h],
                        n = b[h + 1],
                        o = c(i, j, m),
                        p = c(j, l, m),
                        q = c(j, m, n),
                        r = c(l, m, j),
                        s = c(m, i, j),
                        t = c(m, j, k);
                    o >= 0 && p >= 0 && 0 > q && r >= 0 && s >= 0 && 0 > t ? f.ll = new x(g, h) : 0 >= o && 0 >= p && q > 0 && 0 >= r && 0 >= s && t > 0 ? f.rr = new x(g, h) : 0 >= o && p > 0 && 0 >= q && r >= 0 && 0 > s && t >= 0 ? f.rl = new x(g, h) : o >= 0 && 0 > p && q >= 0 && 0 >= r && s > 0 && 0 >= t && (f.lr = new x(g, h))
                }
            return f
        }

        function r(a, b) {
            for (var c = 1, d = b.length; d > c; ++c)
                if (e(b[c - 1], b[c], a)) return !1;
            return !0
        }

        function s(a, b) {
            return !a.every(function(a) {
                return !r(a, b)
            })
        }

        function t(a, b) {
            if (s(a, b)) return !0;
            if (s(b, a)) return !0;
            for (var c = 1, d = a.length; d > c; ++c) {
                var e = a[c],
                    f = a[c - 1];
                if (p(new v(f.x, f.y, e.x, e.y), b).length > 0) return !0
            }
            return !1
        }
        var u = function() {
            function a() {}
            return a
        }();
        b.Point = u;
        var v = function() {
            function a(a, b, c, d) {
                this.x1 = a, this.y1 = b, this.x2 = c, this.y2 = d
            }
            return a
        }();
        b.LineSegment = v;
        var w = function(a) {
            function b() {
                a.apply(this, arguments)
            }
            return __extends(b, a), b
        }(u);
        b.PolyPoint = w,
            b.isLeft = c, b.ConvexHull = f, b.clockwiseRadialSweep = g, b.tangent_PolyPolyC = k, b.LRtangent_PolyPolyC = l, b.RLtangent_PolyPolyC = m, b.LLtangent_PolyPolyC = n, b.RRtangent_PolyPolyC = o;
        var x = function() {
            function a(a, b) {
                this.t1 = a, this.t2 = b
            }
            return a
        }();
        b.BiTangent = x;
        var y = function() {
            function a() {}
            return a
        }();
        b.BiTangents = y;
        var z = function(a) {
            function b() {
                a.apply(this, arguments)
            }
            return __extends(b, a), b
        }(u);
        b.TVGPoint = z;
        var A = function() {
            function a(a, b, c, d) {
                this.id = a, this.polyid = b, this.polyvertid = c, this.p = d, d.vv = this
            }
            return a
        }();
        b.VisibilityVertex = A;
        var B = function() {
            function a(a, b) {
                this.source = a, this.target = b
            }
            return a.prototype.length = function() {
                var a = this.source.p.x - this.target.p.x,
                    b = this.source.p.y - this.target.p.y;
                return Math.sqrt(a * a + b * b)
            }, a
        }();
        b.VisibilityEdge = B;
        var C = function() {
            function a(a, c) {
                if (this.P = a, this.V = [], this.E = [], c) this.V = c.V.slice(0), this.E = c.E.slice(0);
                else {
                    for (var d = a.length, e = 0; d > e; e++)
                        for (var f = a[e], g = 0; g < f.length; ++g) {
                            var h = f[g],
                                i = new A(this.V.length, e, g, h);
                            this.V.push(i), g > 0 && this.E.push(new B(f[g - 1].vv, i))
                        }
                    for (var e = 0; d - 1 > e; e++)
                        for (var j = a[e], g = e + 1; d > g; g++) {
                            var k = a[g],
                                l = b.tangents(j, k);
                            for (var m in l) {
                                var n = l[m],
                                    o = j[n.t1],
                                    p = k[n.t2];
                                this.addEdgeIfVisible(o, p, e, g)
                            }
                        }
                }
            }
            return a.prototype.addEdgeIfVisible = function(a, b, c, d) {
                this.intersectsPolys(new v(a.x, a.y, b.x, b.y), c, d) || this.E.push(new B(a.vv, b.vv))
            }, a.prototype.addPoint = function(a, b) {
                var c = this.P.length;
                this.V.push(new A(this.V.length, c, 0, a));
                for (var d = 0; c > d; ++d)
                    if (d !== b) {
                        var e = this.P[d],
                            f = h(a, e);
                        this.addEdgeIfVisible(a, e[f.ltan], b, d), this.addEdgeIfVisible(a, e[f.rtan], b, d)
                    }
                return a.vv
            }, a.prototype.intersectsPolys = function(a, b, c) {
                for (var d = 0, e = this.P.length; e > d; ++d)
                    if (d != b && d != c && p(a, this.P[d]).length > 0) return !0;
                return !1
            }, a
        }();
        b.TangentVisibilityGraph = C, b.tangents = q, b.polysOverlap = t
    }(b = a.geom || (a.geom = {}))
}(cola || (cola = {}));
var cola;
! function(a) {
    var b;
    ! function(a) {
        var b = function() {
            function a(a) {
                this.scale = a, this.AB = 0, this.AD = 0, this.A2 = 0
            }
            return a.prototype.addVariable = function(a) {
                var b = this.scale / a.scale,
                    c = a.offset / a.scale,
                    d = a.weight;
                this.AB += d * b * c, this.AD += d * b * a.desiredPosition, this.A2 += d * b * b
            }, a.prototype.getPosn = function() {
                return (this.AD - this.AB) / this.A2
            }, a
        }();
        a.PositionStats = b;
        var c = function() {
            function a(a, b, c, d) {
                void 0 === d && (d = !1), this.left = a, this.right = b, this.gap = c, this.equality = d, this.active = !1, this.unsatisfiable = !1, this.left = a, this.right = b, this.gap = c, this.equality = d
            }
            return a.prototype.slack = function() {
                return this.unsatisfiable ? Number.MAX_VALUE : this.right.scale * this.right.position() - this.gap - this.left.scale * this.left.position()
            }, a
        }();
        a.Constraint = c;
        var d = function() {
            function a(a, b, c) {
                void 0 === b && (b = 1), void 0 === c && (c = 1), this.desiredPosition = a, this.weight = b, this.scale = c, this.offset = 0
            }
            return a.prototype.dfdv = function() {
                return 2 * this.weight * (this.position() - this.desiredPosition)
            }, a.prototype.position = function() {
                return (this.block.ps.scale * this.block.posn + this.offset) / this.scale
            }, a.prototype.visitNeighbours = function(a, b) {
                var c = function(c, d) {
                    return c.active && a !== d && b(c, d)
                };
                this.cOut.forEach(function(a) {
                    return c(a, a.right)
                }), this.cIn.forEach(function(a) {
                    return c(a, a.left)
                })
            }, a
        }();
        a.Variable = d;
        var e = function() {
            function a(a) {
                this.vars = [], a.offset = 0, this.ps = new b(a.scale), this.addVariable(a)
            }
            return a.prototype.addVariable = function(a) {
                a.block = this, this.vars.push(a), this.ps.addVariable(a), this.posn = this.ps.getPosn()
            }, a.prototype.updateWeightedPosition = function() {
                this.ps.AB = this.ps.AD = this.ps.A2 = 0;
                for (var a = 0, b = this.vars.length; b > a; ++a) this.ps.addVariable(this.vars[a]);
                this.posn = this.ps.getPosn()
            }, a.prototype.compute_lm = function(a, b, c) {
                var d = this,
                    e = a.dfdv();
                return a.visitNeighbours(b, function(b, f) {
                    var g = d.compute_lm(f, a, c);
                    f === b.right ? (e += g * b.left.scale, b.lm = g) : (e += g * b.right.scale, b.lm = -g), c(b)
                }), e / a.scale
            }, a.prototype.populateSplitBlock = function(a, b) {
                var c = this;
                a.visitNeighbours(b, function(b, d) {
                    d.offset = a.offset + (d === b.right ? b.gap : -b.gap), c.addVariable(d), c.populateSplitBlock(d, a)
                })
            }, a.prototype.traverse = function(a, b, c, d) {
                var e = this;
                void 0 === c && (c = this.vars[0]), void 0 === d && (d = null), c.visitNeighbours(d, function(d, f) {
                    b.push(a(d)), e.traverse(a, b, f, c)
                })
            }, a.prototype.findMinLM = function() {
                var a = null;
                return this.compute_lm(this.vars[0], null, function(b) {
                    !b.equality && (null === a || b.lm < a.lm) && (a = b)
                }), a
            }, a.prototype.findMinLMBetween = function(a, b) {
                this.compute_lm(a, null, function() {});
                var c = null;
                return this.findPath(a, null, b, function(a, b) {
                    !a.equality && a.right === b && (null === c || a.lm < c.lm) && (c = a)
                }), c
            }, a.prototype.findPath = function(a, b, c, d) {
                var e = this,
                    f = !1;
                return a.visitNeighbours(b, function(b, g) {
                    f || g !== c && !e.findPath(g, a, c, d) || (f = !0, d(b, g))
                }), f
            }, a.prototype.isActiveDirectedPathBetween = function(a, b) {
                if (a === b) return !0;
                for (var c = a.cOut.length; c--;) {
                    var d = a.cOut[c];
                    if (d.active && this.isActiveDirectedPathBetween(d.right, b)) return !0
                }
                return !1
            }, a.split = function(b) {
                return b.active = !1, [a.createSplitBlock(b.left), a.createSplitBlock(b.right)]
            }, a.createSplitBlock = function(b) {
                var c = new a(b);
                return c.populateSplitBlock(b, null), c
            }, a.prototype.splitBetween = function(b, c) {
                var d = this.findMinLMBetween(b, c);
                if (null !== d) {
                    var e = a.split(d);
                    return {
                        constraint: d,
                        lb: e[0],
                        rb: e[1]
                    }
                }
                return null
            }, a.prototype.mergeAcross = function(a, b, c) {
                b.active = !0;
                for (var d = 0, e = a.vars.length; e > d; ++d) {
                    var f = a.vars[d];
                    f.offset += c, this.addVariable(f)
                }
                this.posn = this.ps.getPosn()
            }, a.prototype.cost = function() {
                for (var a = 0, b = this.vars.length; b--;) {
                    var c = this.vars[b],
                        d = c.position() - c.desiredPosition;
                    a += d * d * c.weight
                }
                return a
            }, a
        }();
        a.Block = e;
        var f = function() {
            function a(a) {
                this.vs = a;
                var b = a.length;
                for (this.list = new Array(b); b--;) {
                    var c = new e(a[b]);
                    this.list[b] = c, c.blockInd = b
                }
            }
            return a.prototype.cost = function() {
                for (var a = 0, b = this.list.length; b--;) a += this.list[b].cost();
                return a
            }, a.prototype.insert = function(a) {
                a.blockInd = this.list.length, this.list.push(a)
            }, a.prototype.remove = function(a) {
                var b = this.list.length - 1,
                    c = this.list[b];
                this.list.length = b, a !== c && (this.list[a.blockInd] = c, c.blockInd = a.blockInd)
            }, a.prototype.merge = function(a) {
                var b = a.left.block,
                    c = a.right.block,
                    d = a.right.offset - a.left.offset - a.gap;
                b.vars.length < c.vars.length ? (c.mergeAcross(b, a, d), this.remove(b)) : (b.mergeAcross(c, a, -d), this.remove(c))
            }, a.prototype.forEach = function(a) {
                this.list.forEach(a)
            }, a.prototype.updateBlockPositions = function() {
                this.list.forEach(function(a) {
                    return a.updateWeightedPosition()
                })
            }, a.prototype.split = function(a) {
                var b = this;
                this.updateBlockPositions(), this.list.forEach(function(c) {
                    var d = c.findMinLM();
                    null !== d && d.lm < g.LAGRANGIAN_TOLERANCE && (c = d.left.block, e.split(d).forEach(function(a) {
                        return b.insert(a)
                    }), b.remove(c), a.push(d))
                })
            }, a
        }();
        a.Blocks = f;
        var g = function() {
            function a(a, b) {
                this.vs = a, this.cs = b, this.vs = a, a.forEach(function(a) {
                    a.cIn = [], a.cOut = []
                }), this.cs = b, b.forEach(function(a) {
                    a.left.cOut.push(a), a.right.cIn.push(a)
                }), this.inactive = b.map(function(a) {
                    return a.active = !1, a
                }), this.bs = null
            }
            return a.prototype.cost = function() {
                return this.bs.cost()
            }, a.prototype.setStartingPositions = function(a) {
                this.inactive = this.cs.map(function(a) {
                    return a.active = !1, a
                }), this.bs = new f(this.vs), this.bs.forEach(function(b, c) {
                    return b.posn = a[c]
                })
            }, a.prototype.setDesiredPositions = function(a) {
                this.vs.forEach(function(b, c) {
                    return b.desiredPosition = a[c]
                })
            }, a.prototype.mostViolated = function() {
                for (var b = Number.MAX_VALUE, c = null, d = this.inactive, e = d.length, f = e, g = 0; e > g; ++g) {
                    var h = d[g];
                    if (!h.unsatisfiable) {
                        var i = h.slack();
                        if ((h.equality || b > i) && (b = i, c = h, f = g, h.equality)) break
                    }
                }
                return f !== e && (b < a.ZERO_UPPERBOUND && !c.active || c.equality) && (d[f] = d[e - 1], d.length = e - 1), c
            }, a.prototype.satisfy = function() {
                null == this.bs && (this.bs = new f(this.vs)), this.bs.split(this.inactive);
                for (var b = null;
                    (b = this.mostViolated()) && (b.equality || b.slack() < a.ZERO_UPPERBOUND && !b.active);) {
                    var c = b.left.block,
                        d = b.right.block;
                    if (c !== d) this.bs.merge(b);
                    else {
                        if (c.isActiveDirectedPathBetween(b.right, b.left)) {
                            b.unsatisfiable = !0;
                            continue
                        }
                        var e = c.splitBetween(b.left, b.right);
                        if (null === e) {
                            b.unsatisfiable = !0;
                            continue
                        }
                        this.bs.insert(e.lb), this.bs.insert(e.rb), this.bs.remove(c), this.inactive.push(e.constraint), b.slack() >= 0 ? this.inactive.push(b) : this.bs.merge(b)
                    }
                }
            }, a.prototype.solve = function() {
                this.satisfy();
                for (var a = Number.MAX_VALUE, b = this.bs.cost(); Math.abs(a - b) > 1e-4;) this.satisfy(), a = b, b = this.bs.cost();
                return b
            }, a.LAGRANGIAN_TOLERANCE = -1e-4, a.ZERO_UPPERBOUND = -1e-10, a
        }();
        a.Solver = g
    }(b = a.vpsc || (a.vpsc = {}))
}(cola || (cola = {}));
var cola;
! function(a) {
    var b;
    ! function(a) {
        function b(a) {
            return a.bounds = "undefined" != typeof a.leaves ? a.leaves.reduce(function(a, b) {
                return b.bounds.union(a)
            }, p.empty()) : p.empty(), "undefined" != typeof a.groups && (a.bounds = a.groups.reduce(function(a, c) {
                return b(c).union(a)
            }, a.bounds)), a.bounds = a.bounds.inflate(a.padding), a.bounds
        }

        function c(a, b, c, d) {
            var e = b.rayIntersection(c.cx(), c.cy());
            e || (e = {
                x: b.cx(),
                y: b.cy()
            });
            var f = c.rayIntersection(b.cx(), b.cy());
            f || (f = {
                x: c.cx(),
                y: c.cy()
            });
            var g = f.x - e.x,
                h = f.y - e.y,
                i = Math.sqrt(g * g + h * h),
                j = i - d;
            a.sourceIntersection = e, a.targetIntersection = f, a.arrowStart = {
                x: e.x + j * g / i,
                y: e.y + j * h / i
            }
        }

        function d(a, b, c) {
            var d = b.rayIntersection(a.x, a.y);
            d || (d = {
                x: b.cx(),
                y: b.cy()
            });
            var e = d.x - a.x,
                f = d.y - a.y,
                g = Math.sqrt(e * e + f * f);
            return {
                x: d.x - c * e / g,
                y: d.y - c * f / g
            }
        }

        function e(a, b) {
            return a.pos > b.pos ? 1 : a.pos < b.pos ? -1 : a.isOpen ? -1 : 0
        }

        function f() {
            return new RBTree(function(a, b) {
                return a.pos - b.pos
            })
        }

        function g(a, b, c, d) {
            void 0 === d && (d = !1);
            var e = a.padding,
                f = "undefined" != typeof a.groups ? a.groups.length : 0,
                i = "undefined" != typeof a.leaves ? a.leaves.length : 0,
                j = f ? a.groups.reduce(function(a, d) {
                    return a.concat(g(d, b, c, !0))
                }, []) : [],
                k = (d ? 2 : 0) + i + f,
                l = new Array(k),
                m = new Array(k),
                n = 0,
                o = function(a, b) {
                    m[n] = a, l[n++] = b
                };
            if (d) {
                var p = a.bounds,
                    q = b.getCentre(p),
                    r = b.getSize(p) / 2,
                    s = b.getOpen(p),
                    t = b.getClose(p),
                    u = q - r + e / 2,
                    v = q + r - e / 2;
                a.minVar.desiredPosition = u, o(b.makeRect(s, t, u, e), a.minVar), a.maxVar.desiredPosition = v, o(b.makeRect(s, t, v, e), a.maxVar)
            }
            i && a.leaves.forEach(function(a) {
                return o(a.bounds, a.variable)
            }), f && a.groups.forEach(function(a) {
                var c = a.bounds;
                o(b.makeRect(b.getOpen(c), b.getClose(c), b.getCentre(c), b.getSize(c)), a.minVar)
            });
            var w = h(m, l, b, c);
            return f && (l.forEach(function(a) {
                a.cOut = [], a.cIn = []
            }), w.forEach(function(a) {
                a.left.cOut.push(a), a.right.cIn.push(a)
            }), a.groups.forEach(function(a) {
                var c = (a.padding - b.getSize(a.bounds)) / 2;
                a.minVar.cIn.forEach(function(a) {
                    return a.gap += c
                }), a.minVar.cOut.forEach(function(b) {
                    b.left = a.maxVar, b.gap += c
                })
            })), j.concat(w)
        }

        function h(b, c, d, g) {
            var h, i = b.length,
                j = 2 * i;
            console.assert(c.length >= i);
            var k = new Array(j);
            for (h = 0; i > h; ++h) {
                var l = b[h],
                    m = new q(c[h], l, d.getCentre(l));
                k[h] = new r(!0, m, d.getOpen(l)), k[h + i] = new r(!1, m, d.getClose(l))
            }
            k.sort(e);
            var n = new Array,
                o = f();
            for (h = 0; j > h; ++h) {
                var p = k[h],
                    m = p.v;
                if (p.isOpen) o.insert(m), d.findNeighbours(m, o);
                else {
                    o.remove(m);
                    var s = function(b, c) {
                            var e = (d.getSize(b.r) + d.getSize(c.r)) / 2 + g;
                            n.push(new a.Constraint(b.v, c.v, e))
                        },
                        t = function(a, b, c) {
                            for (var d, e = m[a].iterator(); null !== (d = e[a]());) c(d, m), d[b].remove(m)
                        };
                    t("prev", "next", function(a, b) {
                        return s(a, b)
                    }), t("next", "prev", function(a, b) {
                        return s(b, a)
                    })
                }
            }
            return console.assert(0 === o.size), n
        }

        function i(a, b) {
            var c = function(c, d) {
                for (var e, f = b.findIter(a); null !== (e = f[c]());) {
                    var g = e.r.overlapX(a.r);
                    if ((0 >= g || g <= e.r.overlapY(a.r)) && (a[c].insert(e), e[d].insert(a)), 0 >= g) break
                }
            };
            c("next", "prev"), c("prev", "next")
        }

        function j(a, b) {
            var c = function(c, d) {
                var e = b.findIter(a)[c]();
                null !== e && e.r.overlapX(a.r) > 0 && (a[c].insert(e), e[d].insert(a))
            };
            c("next", "prev"), c("prev", "next")
        }

        function k(a, b) {
            return h(a, b, s, 1e-6)
        }

        function l(a, b) {
            return h(a, b, t, 1e-6)
        }

        function m(a) {
            return g(a, s, 1e-6)
        }

        function n(a) {
            return g(a, t, 1e-6)
        }

        function o(b) {
            var c = b.map(function(b) {
                    return new a.Variable(b.cx())
                }),
                d = a.generateXConstraints(b, c),
                e = new a.Solver(c, d);
            e.solve(), c.forEach(function(a, c) {
                return b[c].setXCentre(a.position())
            }), c = b.map(function(b) {
                return new a.Variable(b.cy())
            }), d = a.generateYConstraints(b, c), e = new a.Solver(c, d), e.solve(), c.forEach(function(a, c) {
                return b[c].setYCentre(a.position())
            })
        }
        a.computeGroupBounds = b;
        var p = function() {
            function a(a, b, c, d) {
                this.x = a, this.X = b, this.y = c, this.Y = d
            }
            return a.empty = function() {
                return new a(Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY)
            }, a.prototype.cx = function() {
                return (this.x + this.X) / 2
            }, a.prototype.cy = function() {
                return (this.y + this.Y) / 2
            }, a.prototype.overlapX = function(a) {
                var b = this.cx(),
                    c = a.cx();
                return c >= b && a.x < this.X ? this.X - a.x : b >= c && this.x < a.X ? a.X - this.x : 0
            }, a.prototype.overlapY = function(a) {
                var b = this.cy(),
                    c = a.cy();
                return c >= b && a.y < this.Y ? this.Y - a.y : b >= c && this.y < a.Y ? a.Y - this.y : 0
            }, a.prototype.setXCentre = function(a) {
                var b = a - this.cx();
                this.x += b, this.X += b
            }, a.prototype.setYCentre = function(a) {
                var b = a - this.cy();
                this.y += b, this.Y += b
            }, a.prototype.width = function() {
                return this.X - this.x
            }, a.prototype.height = function() {
                return this.Y - this.y
            }, a.prototype.union = function(b) {
                return new a(Math.min(this.x, b.x), Math.max(this.X, b.X), Math.min(this.y, b.y), Math.max(this.Y, b.Y))
            }, a.prototype.lineIntersections = function(b, c, d, e) {
                for (var f = [
                        [this.x, this.y, this.X, this.y],
                        [this.X, this.y, this.X, this.Y],
                        [this.X, this.Y, this.x, this.Y],
                        [this.x, this.Y, this.x, this.y]
                    ], g = [], h = 0; 4 > h; ++h) {
                    var i = a.lineIntersection(b, c, d, e, f[h][0], f[h][1], f[h][2], f[h][3]);
                    null !== i && g.push({
                        x: i.x,
                        y: i.y
                    })
                }
                return g
            }, a.prototype.rayIntersection = function(a, b) {
                var c = this.lineIntersections(this.cx(), this.cy(), a, b);
                return c.length > 0 ? c[0] : null
            }, a.prototype.vertices = function() {
                return [{
                    x: this.x,
                    y: this.y
                }, {
                    x: this.X,
                    y: this.y
                }, {
                    x: this.X,
                    y: this.Y
                }, {
                    x: this.x,
                    y: this.Y
                }, {
                    x: this.x,
                    y: this.y
                }]
            }, a.lineIntersection = function(a, b, c, d, e, f, g, h) {
                var i = c - a,
                    j = g - e,
                    k = d - b,
                    l = h - f,
                    m = l * i - j * k;
                if (0 == m) return null;
                var n = a - e,
                    o = b - f,
                    p = j * o - l * n,
                    q = p / m,
                    r = i * o - k * n,
                    s = r / m;
                return q >= 0 && 1 >= q && s >= 0 && 1 >= s ? {
                    x: a + q * i,
                    y: b + q * k
                } : null
            }, a.prototype.inflate = function(b) {
                return new a(this.x - b, this.X + b, this.y - b, this.Y + b)
            }, a
        }();
        a.Rectangle = p, a.makeEdgeBetween = c, a.makeEdgeTo = d;
        var q = function() {
                function a(a, b, c) {
                    this.v = a, this.r = b, this.pos = c, this.prev = f(), this.next = f()
                }
                return a
            }(),
            r = function() {
                function a(a, b, c) {
                    this.isOpen = a, this.v = b, this.pos = c
                }
                return a
            }(),
            s = {
                getCentre: function(a) {
                    return a.cx()
                },
                getOpen: function(a) {
                    return a.y
                },
                getClose: function(a) {
                    return a.Y
                },
                getSize: function(a) {
                    return a.width()
                },
                makeRect: function(a, b, c, d) {
                    return new p(c - d / 2, c + d / 2, a, b)
                },
                findNeighbours: i
            },
            t = {
                getCentre: function(a) {
                    return a.cy()
                },
                getOpen: function(a) {
                    return a.x
                },
                getClose: function(a) {
                    return a.X
                },
                getSize: function(a) {
                    return a.height()
                },
                makeRect: function(a, b, c, d) {
                    return new p(a, b, c - d / 2, c + d / 2)
                },
                findNeighbours: j
            };
        a.generateXConstraints = k, a.generateYConstraints = l, a.generateXGroupConstraints = m, a.generateYGroupConstraints = n, a.removeOverlaps = o;
        var u = function(a) {
                function b(b, c) {
                    a.call(this, 0, c), this.index = b
                }
                return __extends(b, a), b
            }(a.Variable),
            v = function() {
                function c(c, d, e, f, g) {
                    var h = this;
                    if (void 0 === e && (e = null), void 0 === f && (f = null), void 0 === g && (g = !1), this.nodes = c, this.groups = d, this.rootGroup = e, this.avoidOverlaps = g, this.variables = c.map(function(a, b) {
                            return a.variable = new u(b, 1)
                        }), f && this.createConstraints(f), g && e && "undefined" != typeof e.groups) {
                        c.forEach(function(b) {
                            if (!b.width || !b.height) return void(b.bounds = new a.Rectangle(b.x, b.x, b.y, b.y));
                            var c = b.width / 2,
                                d = b.height / 2;
                            b.bounds = new a.Rectangle(b.x - c, b.x + c, b.y - d, b.y + d)
                        }), b(e);
                        var i = c.length;
                        d.forEach(function(a) {
                            h.variables[i] = a.minVar = new u(i++, .01), h.variables[i] = a.maxVar = new u(i++, .01)
                        })
                    }
                }
                return c.prototype.createSeparation = function(b) {
                    return new a.Constraint(this.nodes[b.left].variable, this.nodes[b.right].variable, b.gap, "undefined" != typeof b.equality ? b.equality : !1)
                }, c.prototype.makeFeasible = function(a) {
                    var b = this;
                    if (this.avoidOverlaps) {
                        var c = "x",
                            d = "width";
                        "x" === a.axis && (c = "y", d = "height");
                        var e = a.offsets.map(function(a) {
                                return b.nodes[a.node]
                            }).sort(function(a, b) {
                                return a[c] - b[c]
                            }),
                            f = null;
                        e.forEach(function(a) {
                            f && (a[c] = f[c] + f[d] + 1), f = a
                        })
                    }
                }, c.prototype.createAlignment = function(b) {
                    var c = this,
                        d = this.nodes[b.offsets[0].node].variable;
                    this.makeFeasible(b);
                    var e = "x" === b.axis ? this.xConstraints : this.yConstraints;
                    b.offsets.slice(1).forEach(function(b) {
                        var f = c.nodes[b.node].variable;
                        e.push(new a.Constraint(d, f, b.offset, !0))
                    })
                }, c.prototype.createConstraints = function(a) {
                    var b = this,
                        c = function(a) {
                            return "undefined" == typeof a.type || "separation" === a.type
                        };
                    this.xConstraints = a.filter(function(a) {
                        return "x" === a.axis && c(a)
                    }).map(function(a) {
                        return b.createSeparation(a)
                    }), this.yConstraints = a.filter(function(a) {
                        return "y" === a.axis && c(a)
                    }).map(function(a) {
                        return b.createSeparation(a)
                    }), a.filter(function(a) {
                        return "alignment" === a.type
                    }).forEach(function(a) {
                        return b.createAlignment(a)
                    })
                }, c.prototype.setupVariablesAndBounds = function(a, b, c, d) {
                    this.nodes.forEach(function(e, f) {
                        e.fixed ? (e.variable.weight = 1e3, c[f] = d(e)) : e.variable.weight = 1;
                        var g = (e.width || 0) / 2,
                            h = (e.height || 0) / 2,
                            i = a[f],
                            j = b[f];
                        e.bounds = new p(i - g, i + g, j - h, j + h)
                    })
                }, c.prototype.xProject = function(a, b, c) {
                    (this.rootGroup || this.avoidOverlaps || this.xConstraints) && this.project(a, b, a, c, function(a) {
                        return a.px
                    }, this.xConstraints, m, function(a) {
                        return a.bounds.setXCentre(c[a.variable.index] = a.variable.position())
                    }, function(a) {
                        var b = c[a.minVar.index] = a.minVar.position(),
                            d = c[a.maxVar.index] = a.maxVar.position(),
                            e = a.padding / 2;
                        a.bounds.x = b - e, a.bounds.X = d + e
                    })
                }, c.prototype.yProject = function(a, b, c) {
                    (this.rootGroup || this.yConstraints) && this.project(a, b, b, c, function(a) {
                        return a.py
                    }, this.yConstraints, n, function(a) {
                        return a.bounds.setYCentre(c[a.variable.index] = a.variable.position())
                    }, function(a) {
                        var b = c[a.minVar.index] = a.minVar.position(),
                            d = c[a.maxVar.index] = a.maxVar.position(),
                            e = a.padding / 2;
                        a.bounds.y = b - e, a.bounds.Y = d + e
                    })
                }, c.prototype.projectFunctions = function() {
                    var a = this;
                    return [function(b, c, d) {
                        return a.xProject(b, c, d)
                    }, function(b, c, d) {
                        return a.yProject(b, c, d)
                    }]
                }, c.prototype.project = function(a, c, d, e, f, g, h, i, j) {
                    this.setupVariablesAndBounds(a, c, e, f), this.rootGroup && this.avoidOverlaps && (b(this.rootGroup), g = g.concat(h(this.rootGroup))), this.solve(this.variables, g, d, e), this.nodes.forEach(i), this.rootGroup && this.avoidOverlaps && this.groups.forEach(j)
                }, c.prototype.solve = function(b, c, d, e) {
                    var f = new a.Solver(b, c);
                    f.setStartingPositions(d), f.setDesiredPositions(e), f.solve()
                }, c
            }();
        a.Projection = v
    }(b = a.vpsc || (a.vpsc = {}))
}(cola || (cola = {}));
var PairingHeap = function() {
        function a(a) {
            this.elem = a, this.subheaps = []
        }
        return a.prototype.toString = function(a) {
            for (var b = "", c = !1, d = 0; d < this.subheaps.length; ++d) {
                var e = this.subheaps[d];
                e.elem ? (c && (b += ","), b += e.toString(a), c = !0) : c = !1
            }
            return "" !== b && (b = "(" + b + ")"), (this.elem ? a(this.elem) : "") + b
        }, a.prototype.forEach = function(a) {
            this.empty() || (a(this.elem, this), this.subheaps.forEach(function(b) {
                return b.forEach(a)
            }))
        }, a.prototype.count = function() {
            return this.empty() ? 0 : 1 + this.subheaps.reduce(function(a, b) {
                return a + b.count()
            }, 0)
        }, a.prototype.min = function() {
            return this.elem
        }, a.prototype.empty = function() {
            return null == this.elem
        }, a.prototype.contains = function(a) {
            if (this === a) return !0;
            for (var b = 0; b < this.subheaps.length; b++)
                if (this.subheaps[b].contains(a)) return !0;
            return !1
        }, a.prototype.isHeap = function(a) {
            var b = this;
            return this.subheaps.every(function(c) {
                return a(b.elem, c.elem) && c.isHeap(a)
            })
        }, a.prototype.insert = function(b, c) {
            return this.merge(new a(b), c)
        }, a.prototype.merge = function(a, b) {
            return this.empty() ? a : a.empty() ? this : b(this.elem, a.elem) ? (this.subheaps.push(a), this) : (a.subheaps.push(this), a)
        }, a.prototype.removeMin = function(a) {
            return this.empty() ? null : this.mergePairs(a)
        }, a.prototype.mergePairs = function(b) {
            if (0 == this.subheaps.length) return new a(null);
            if (1 == this.subheaps.length) return this.subheaps[0];
            var c = this.subheaps.pop().merge(this.subheaps.pop(), b),
                d = this.mergePairs(b);
            return c.merge(d, b)
        }, a.prototype.decreaseKey = function(b, c, d, e) {
            var f = b.removeMin(e);
            b.elem = f.elem, b.subheaps = f.subheaps, null !== d && null !== f.elem && d(b.elem, b);
            var g = new a(c);
            return null !== d && d(c, g), this.merge(g, e)
        }, a
    }(),
    PriorityQueue = function() {
        function a(a) {
            this.lessThan = a
        }
        return a.prototype.top = function() {
            return this.empty() ? null : this.root.elem
        }, a.prototype.push = function() {
            for (var a = [], b = 0; b < arguments.length; b++) a[b - 0] = arguments[b];
            for (var c, d, e = 0; d = a[e]; ++e) c = new PairingHeap(d), this.root = this.empty() ? c : this.root.merge(c, this.lessThan);
            return c
        }, a.prototype.empty = function() {
            return !this.root || !this.root.elem
        }, a.prototype.isHeap = function() {
            return this.root.isHeap(this.lessThan)
        }, a.prototype.forEach = function(a) {
            this.root.forEach(a)
        }, a.prototype.pop = function() {
            if (this.empty()) return null;
            var a = this.root.min();
            return this.root = this.root.removeMin(this.lessThan), a
        }, a.prototype.reduceKey = function(a, b, c) {
            void 0 === c && (c = null), this.root = this.root.decreaseKey(a, b, c, this.lessThan)
        }, a.prototype.toString = function(a) {
            return this.root.toString(a)
        }, a.prototype.count = function() {
            return this.root.count()
        }, a
    }(),
    cola;
! function(a) {
    var b;
    ! function(a) {
        var b = function() {
                function a(a, b) {
                    this.id = a, this.distance = b
                }
                return a
            }(),
            c = function() {
                function a(a) {
                    this.id = a, this.neighbours = []
                }
                return a
            }(),
            d = function() {
                function a(a, b, c) {
                    this.node = a, this.prev = b, this.d = c
                }
                return a
            }(),
            e = function() {
                function a(a, d, e, f, g) {
                    this.n = a, this.es = d, this.neighbours = new Array(this.n);
                    for (var h = this.n; h--;) this.neighbours[h] = new c(h);
                    for (h = this.es.length; h--;) {
                        var i = this.es[h],
                            j = e(i),
                            k = f(i),
                            l = g(i);
                        this.neighbours[j].neighbours.push(new b(k, l)), this.neighbours[k].neighbours.push(new b(j, l))
                    }
                }
                return a.prototype.DistanceMatrix = function() {
                    for (var a = new Array(this.n), b = 0; b < this.n; ++b) a[b] = this.dijkstraNeighbours(b);
                    return a
                }, a.prototype.DistancesFromNode = function(a) {
                    return this.dijkstraNeighbours(a)
                }, a.prototype.PathFromNodeToNode = function(a, b) {
                    return this.dijkstraNeighbours(a, b)
                }, a.prototype.PathFromNodeToNodeWithPrevCost = function(a, b, c) {
                    var e = new PriorityQueue(function(a, b) {
                            return a.d <= b.d
                        }),
                        f = this.neighbours[a],
                        g = new d(f, null, 0),
                        h = {};
                    for (e.push(g); !e.empty() && (g = e.pop(), f = g.node, f.id !== b);)
                        for (var i = f.neighbours.length; i--;) {
                            var j = f.neighbours[i],
                                k = this.neighbours[j.id];
                            if (!g.prev || k.id !== g.prev.node.id) {
                                var l = k.id + "," + f.id;
                                if (!(l in h && h[l] <= g.d)) {
                                    var m = g.prev ? c(g.prev.node.id, f.id, k.id) : 0,
                                        n = g.d + j.distance + m;
                                    h[l] = n, e.push(new d(k, g, n))
                                }
                            }
                        }
                    for (var o = []; g.prev;) g = g.prev, o.push(g.node.id);
                    return o
                }, a.prototype.dijkstraNeighbours = function(a, b) {
                    void 0 === b && (b = -1);
                    for (var c = new PriorityQueue(function(a, b) {
                            return a.d <= b.d
                        }), d = this.neighbours.length, e = new Array(d); d--;) {
                        var f = this.neighbours[d];
                        f.d = d === a ? 0 : Number.POSITIVE_INFINITY, f.q = c.push(f)
                    }
                    for (; !c.empty();) {
                        var g = c.pop();
                        if (e[g.id] = g.d, g.id === b) {
                            for (var h = [], i = g;
                                "undefined" != typeof i.prev;) h.push(i.prev.id), i = i.prev;
                            return h
                        }
                        for (d = g.neighbours.length; d--;) {
                            var j = g.neighbours[d],
                                i = this.neighbours[j.id],
                                k = g.d + j.distance;
                            g.d !== Number.MAX_VALUE && i.d > k && (i.d = k, i.prev = g, c.reduceKey(i.q, i, function(a, b) {
                                return a.q = b
                            }))
                        }
                    }
                    return e
                }, a
            }();
        a.Calculator = e
    }(b = a.shortestpaths || (a.shortestpaths = {}))
}(cola || (cola = {}));
var cola;
! function(a) {
    var b = function() {
        function a(a, b, c) {
            this.id = a, this.rect = b, this.children = c, this.leaf = "undefined" == typeof c || 0 === c.length
        }
        return a
    }();
    a.NodeWrapper = b;
    var c = function() {
        function a(a, b, c, d, e) {
            void 0 === d && (d = null), void 0 === e && (e = null), this.id = a, this.x = b, this.y = c, this.node = d, this.line = e
        }
        return a
    }();
    a.Vert = c;
    var d = function() {
        function a(b, c) {
            this.s = b, this.t = c;
            var d = a.findMatch(b, c),
                e = c.slice(0).reverse(),
                f = a.findMatch(b, e);
            d.length >= f.length ? (this.length = d.length, this.si = d.si, this.ti = d.ti, this.reversed = !1) : (this.length = f.length, this.si = f.si, this.ti = c.length - f.ti - f.length, this.reversed = !0)
        }
        return a.findMatch = function(a, b) {
            for (var c = a.length, d = b.length, e = {
                    length: 0,
                    si: -1,
                    ti: -1
                }, f = new Array(c), g = 0; c > g; g++) {
                f[g] = new Array(d);
                for (var h = 0; d > h; h++)
                    if (a[g] === b[h]) {
                        var i = f[g][h] = 0 === g || 0 === h ? 1 : f[g - 1][h - 1] + 1;
                        i > e.length && (e.length = i, e.si = g - i + 1, e.ti = h - i + 1)
                    } else f[g][h] = 0
            }
            return e
        }, a.prototype.getSequence = function() {
            return this.length >= 0 ? this.s.slice(this.si, this.si + this.length) : []
        }, a
    }();
    a.LongestCommonSubsequence = d;
    var e = function() {
        function d(d, e, f) {
            var g = this;
            void 0 === f && (f = 12), this.originalnodes = d, this.groupPadding = f, this.leaves = null, this.nodes = d.map(function(a, c) {
                return new b(c, e.getBounds(a), e.getChildren(a))
            }), this.leaves = this.nodes.filter(function(a) {
                return a.leaf
            }), this.groups = this.nodes.filter(function(a) {
                return !a.leaf
            }), this.cols = this.getGridDim("x"), this.rows = this.getGridDim("y"), this.groups.forEach(function(a) {
                return a.children.forEach(function(b) {
                    return g.nodes[b].parent = a
                })
            }), this.root = {
                children: []
            }, this.nodes.forEach(function(a) {
                "undefined" == typeof a.parent && (a.parent = g.root, g.root.children.push(a.id)), a.ports = []
            }), this.backToFront = this.nodes.slice(0), this.backToFront.sort(function(a, b) {
                return g.getDepth(a) - g.getDepth(b)
            });
            var h = this.backToFront.slice(0).reverse().filter(function(a) {
                return !a.leaf
            });
            h.forEach(function(b) {
                var c = a.vpsc.Rectangle.empty();
                b.children.forEach(function(a) {
                    return c = c.union(g.nodes[a].rect)
                }), b.rect = c.inflate(g.groupPadding)
            });
            var i = this.midPoints(this.cols.map(function(a) {
                    return a.x
                })),
                j = this.midPoints(this.rows.map(function(a) {
                    return a.y
                })),
                k = i[0],
                l = i[i.length - 1],
                m = j[0],
                n = j[j.length - 1],
                o = this.rows.map(function(a) {
                    return {
                        x1: k,
                        x2: l,
                        y1: a.y,
                        y2: a.y
                    }
                }).concat(j.map(function(a) {
                    return {
                        x1: k,
                        x2: l,
                        y1: a,
                        y2: a
                    }
                })),
                p = this.cols.map(function(a) {
                    return {
                        x1: a.x,
                        x2: a.x,
                        y1: m,
                        y2: n
                    }
                }).concat(i.map(function(a) {
                    return {
                        x1: a,
                        x2: a,
                        y1: m,
                        y2: n
                    }
                })),
                q = o.concat(p);
            q.forEach(function(a) {
                return a.verts = []
            }), this.verts = [], this.edges = [], o.forEach(function(a) {
                return p.forEach(function(b) {
                    var d = new c(g.verts.length, b.x1, a.y1);
                    a.verts.push(d), b.verts.push(d), g.verts.push(d);
                    for (var e = g.backToFront.length; e-- > 0;) {
                        var f = g.backToFront[e],
                            h = f.rect,
                            i = Math.abs(d.x - h.cx()),
                            j = Math.abs(d.y - h.cy());
                        if (i < h.width() / 2 && j < h.height() / 2) {
                            d.node = f;
                            break
                        }
                    }
                })
            }), q.forEach(function(a) {
                g.nodes.forEach(function(b) {
                    b.rect.lineIntersections(a.x1, a.y1, a.x2, a.y2).forEach(function(d) {
                        var e = new c(g.verts.length, d.x, d.y, b, a);
                        g.verts.push(e), a.verts.push(e), b.ports.push(e)
                    })
                });
                var b = Math.abs(a.y1 - a.y2) < .1,
                    d = function(a, c) {
                        return b ? c.x - a.x : c.y - a.y
                    };
                a.verts.sort(d);
                for (var e = 1; e < a.verts.length; e++) {
                    var f = a.verts[e - 1],
                        h = a.verts[e];
                    f.node && f.node === h.node && f.node.leaf || g.edges.push({
                        source: f.id,
                        target: h.id,
                        length: Math.abs(d(f, h))
                    })
                }
            })
        }
        return d.prototype.avg = function(a) {
            return a.reduce(function(a, b) {
                return a + b
            }) / a.length
        }, d.prototype.getGridDim = function(a) {
            for (var b = [], c = this.leaves.slice(0, this.leaves.length); c.length > 0;) {
                var d = c[0].rect,
                    e = c.filter(function(b) {
                        return b.rect["overlap" + a.toUpperCase()](d)
                    });
                b.push(e), e.forEach(function(a) {
                    return c.splice(c.indexOf(a), 1)
                }), e[a] = this.avg(e.map(function(b) {
                    return b.rect["c" + a]()
                }))
            }
            return b.sort(function(b, c) {
                return b[a] - c[a]
            }), b
        }, d.prototype.getDepth = function(a) {
            for (var b = 0; a.parent !== this.root;) b++, a = a.parent;
            return b
        }, d.prototype.midPoints = function(a) {
            for (var b = a[1] - a[0], c = [a[0] - b / 2], d = 1; d < a.length; d++) c.push((a[d] + a[d - 1]) / 2);
            return c.push(a[a.length - 1] + b / 2), c
        }, d.prototype.findLineage = function(a) {
            var b = [a];
            do a = a.parent, b.push(a); while (a !== this.root);
            return b.reverse()
        }, d.prototype.findAncestorPathBetween = function(a, b) {
            for (var c = this.findLineage(a), d = this.findLineage(b), e = 0; c[e] === d[e];) e++;
            return {
                commonAncestor: c[e - 1],
                lineages: c.slice(e).concat(d.slice(e))
            }
        }, d.prototype.siblingObstacles = function(a, b) {
            var c = this,
                d = this.findAncestorPathBetween(a, b),
                e = {};
            d.lineages.forEach(function(a) {
                return e[a.id] = {}
            });
            var f = d.commonAncestor.children.filter(function(a) {
                return !(a in e)
            });
            return d.lineages.filter(function(a) {
                return a.parent !== d.commonAncestor
            }).forEach(function(a) {
                return f = f.concat(a.parent.children.filter(function(b) {
                    return b !== a.id
                }))
            }), f.map(function(a) {
                return c.nodes[a]
            })
        }, d.getSegmentSets = function(a, b) {
            for (var c = [], d = 0; d < a.length; d++)
                for (var e = a[d], f = 0; f < e.length; f++) {
                    var g = e[f];
                    g.edgeid = d, g.i = f;
                    var h = g[1][b] - g[0][b];
                    Math.abs(h) < .1 && c.push(g)
                }
            c.sort(function(a, c) {
                return a[0][b] - c[0][b]
            });
            for (var i = [], j = null, k = 0; k < c.length; k++) {
                var g = c[k];
                (!j || Math.abs(g[0][b] - j.pos) > .1) && (j = {
                    pos: g[0][b],
                    segments: []
                }, i.push(j)), j.segments.push(g)
            }
            return i
        }, d.nudgeSegs = function(b, c, d, e, f, g) {
            var h = e.length;
            if (!(1 >= h)) {
                for (var i = e.map(function(c) {
                        return new a.vpsc.Variable(c[0][b])
                    }), j = [], k = 0; h > k; k++)
                    for (var l = 0; h > l; l++)
                        if (k !== l) {
                            var m = e[k],
                                n = e[l],
                                o = m.edgeid,
                                p = n.edgeid,
                                q = -1,
                                r = -1;
                            "x" == b ? f(o, p) && (m[0][c] < m[1][c] ? (q = l, r = k) : (q = k, r = l)) : f(o, p) && (m[0][c] < m[1][c] ? (q = k, r = l) : (q = l, r = k)), q >= 0 && j.push(new a.vpsc.Constraint(i[q], i[r], g))
                        }
                var s = new a.vpsc.Solver(i, j);
                s.solve(), i.forEach(function(a, c) {
                    var f = e[c],
                        g = a.position();
                    f[0][b] = f[1][b] = g;
                    var h = d[f.edgeid];
                    f.i > 0 && (h[f.i - 1][1][b] = g), f.i < h.length - 1 && (h[f.i + 1][0][b] = g)
                })
            }
        }, d.nudgeSegments = function(a, b, c, e, f) {
            for (var g = d.getSegmentSets(a, b, c), h = 0; h < g.length; h++) {
                for (var i = g[h], j = [], k = 0; k < i.segments.length; k++) {
                    var l = i.segments[k];
                    j.push({
                        type: 0,
                        s: l,
                        pos: Math.min(l[0][c], l[1][c])
                    }), j.push({
                        type: 1,
                        s: l,
                        pos: Math.max(l[0][c], l[1][c])
                    })
                }
                j.sort(function(a, b) {
                    return a.pos - b.pos + a.type - b.type
                });
                var m = [],
                    n = 0;
                j.forEach(function(g) {
                    0 === g.type ? (m.push(g.s), n++) : n--, 0 == n && (d.nudgeSegs(b, c, a, m, e, f), m = [])
                })
            }
        }, d.prototype.routeEdges = function(b, c, d, e) {
            var f = this,
                g = b.map(function(a) {
                    return f.route(d(a), e(a))
                }),
                h = a.GridRouter.orderEdges(g),
                i = g.map(function(b) {
                    return a.GridRouter.makeSegments(b)
                });
            return a.GridRouter.nudgeSegments(i, "x", "y", h, c), a.GridRouter.nudgeSegments(i, "y", "x", h, c), i
        }, d.angleBetween2Lines = function(a, b) {
            var c = Math.atan2(a[0].y - a[1].y, a[0].x - a[1].x),
                d = Math.atan2(b[0].y - b[1].y, b[0].x - b[1].x),
                e = c - d;
            return (e > Math.PI || e < -Math.PI) && (e = d - c), e
        }, d.isLeft = function(a, b, c) {
            return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x) <= 0
        }, d.getOrder = function(a) {
            for (var b = {}, c = 0; c < a.length; c++) {
                var d = a[c];
                "undefined" == typeof b[d.l] && (b[d.l] = {}), b[d.l][d.r] = !0
            }
            return function(a, c) {
                return "undefined" != typeof b[a] && b[a][c]
            }
        }, d.orderEdges = function(b) {
            for (var c = [], e = 0; e < b.length - 1; e++)
                for (var f = e + 1; f < b.length; f++) {
                    var g, h, i, j = b[e],
                        k = b[f],
                        l = new a.LongestCommonSubsequence(j, k);
                    0 !== l.length && (l.reversed && (k.reverse(), k.reversed = !0, l = new a.LongestCommonSubsequence(j, k)), l.length !== j.length && l.length !== k.length ? (l.si + l.length >= j.length || l.ti + l.length >= k.length ? (g = j[l.si + 1], i = j[l.si - 1], h = k[l.ti - 1]) : (g = j[l.si + l.length - 2], h = j[l.si + l.length], i = k[l.ti + l.length]), c.push(d.isLeft(g, h, i) ? {
                        l: f,
                        r: e
                    } : {
                        l: e,
                        r: f
                    })) : c.push({
                        l: e,
                        r: f
                    }))
                }
            return a.GridRouter.getOrder(c)
        }, d.makeSegments = function(a) {
            function b(a) {
                return {
                    x: a.x,
                    y: a.y
                }
            }
            for (var c = function(a, b, c) {
                    return Math.abs((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x)) < .001
                }, d = [], e = b(a[0]), f = 1; f < a.length; f++) {
                var g = b(a[f]),
                    h = f < a.length - 1 ? a[f + 1] : null;
                h && c(e, g, h) || (d.push([e, g]), e = g)
            }
            return d
        }, d.prototype.route = function(b, c) {
            var d = this,
                e = this.nodes[b],
                f = this.nodes[c];
            this.obstacles = this.siblingObstacles(e, f);
            var g = {};
            this.obstacles.forEach(function(a) {
                return g[a.id] = a
            }), this.passableEdges = this.edges.filter(function(a) {
                var b = d.verts[a.source],
                    c = d.verts[a.target];
                return !(b.node && b.node.id in g || c.node && c.node.id in g)
            });
            for (var h = 1; h < e.ports.length; h++) {
                var i = e.ports[0].id,
                    j = e.ports[h].id;
                this.passableEdges.push({
                    source: i,
                    target: j,
                    length: 0
                })
            }
            for (var h = 1; h < f.ports.length; h++) {
                var i = f.ports[0].id,
                    j = f.ports[h].id;
                this.passableEdges.push({
                    source: i,
                    target: j,
                    length: 0
                })
            }
            var k = function(a) {
                    return a.source
                },
                l = function(a) {
                    return a.target
                },
                m = function(a) {
                    return a.length
                },
                n = new a.shortestpaths.Calculator(this.verts.length, this.passableEdges, k, l, m),
                o = function(a, b, c) {
                    var g = d.verts[a],
                        h = d.verts[b],
                        i = d.verts[c],
                        j = Math.abs(i.x - g.x),
                        k = Math.abs(i.y - g.y);
                    return g.node === e && g.node === h.node || h.node === f && h.node === i.node ? 0 : j > 1 && k > 1 ? 1e3 : 0
                },
                p = n.PathFromNodeToNodeWithPrevCost(e.ports[0].id, f.ports[0].id, o),
                q = p.reverse().map(function(a) {
                    return d.verts[a]
                });
            return q.push(this.nodes[f.id].ports[0]), q.filter(function(a, b) {
                return !(b < q.length - 1 && q[b + 1].node === e && a.node === e || b > 0 && a.node === f && q[b - 1].node === f)
            })
        }, d
    }();
    a.GridRouter = e
}(cola || (cola = {}));
var cola;
! function(a) {
    function b(a, b) {
        var c = {};
        for (var d in a) c[d] = {};
        for (var d in b) c[d] = {};
        return Object.keys(c).length
    }

    function c(a, b) {
        var c = 0;
        for (var d in a) "undefined" != typeof b[d] && ++c;
        return c
    }

    function d(a, b) {
        var c = {},
            d = function(a, b) {
                "undefined" == typeof c[a] && (c[a] = {}), c[a][b] = {}
            };
        return a.forEach(function(a) {
            var c = b.getSourceIndex(a),
                e = b.getTargetIndex(a);
            d(c, e), d(e, c)
        }), c
    }

    function e(a, b, c, e) {
        var f = d(a, e);
        a.forEach(function(a) {
            var d = f[e.getSourceIndex(a)],
                g = f[e.getTargetIndex(a)];
            e.setLength(a, 1 + b * c(d, g))
        })
    }

    function f(a, d, f) {
        void 0 === f && (f = 1), e(a, f, function(a, d) {
            return Math.sqrt(b(a, d) - c(a, d))
        }, d)
    }

    function g(a, d, f) {
        void 0 === f && (f = 1), e(a, f, function(a, d) {
            return Math.min(Object.keys(a).length, Object.keys(d).length) < 1.1 ? 0 : c(a, d) / b(a, d)
        }, d)
    }

    function h(a, b, c, d) {
        var e = i(a, b, d),
            f = {};
        e.filter(function(a) {
            return a.length > 1
        }).forEach(function(a) {
            return a.forEach(function(b) {
                return f[b] = a
            })
        });
        var g = [];
        return b.forEach(function(a) {
            var b = d.getSourceIndex(a),
                e = d.getTargetIndex(a),
                h = f[b],
                i = f[e];
            h && i && h.component === i.component || g.push({
                axis: c,
                left: b,
                right: e,
                gap: d.getMinSeparation(a)
            })
        }), g
    }

    function i(a, b, c) {
        function d(a) {
            f[a] = j, g[a] = j, h[a] = !0, j += 1, k.push(a);
            for (var b = e[a], c = 0; c < b.length; ++c) {
                var i = b[c];
                f[i] < 0 ? (d(i), g[a] = 0 | Math.min(g[a], g[i])) : h[i] && (g[a] = Math.min(g[a], g[i]))
            }
            if (g[a] === f[a]) {
                for (var m = [], c = k.length - 1; c >= 0; --c) {
                    var n = k[c];
                    if (h[n] = !1, m.push(n), n === a) {
                        k.length = c;
                        break
                    }
                }
                l.push(m)
            }
        }
        for (var e = new Array(a), f = new Array(a), g = new Array(a), h = new Array(a), i = 0; a > i; ++i) e[i] = [], f[i] = -1, g[i] = 0, h[i] = !1;
        for (var i = 0; i < b.length; ++i) e[c.getSourceIndex(b[i])].push(c.getTargetIndex(b[i]));
        for (var j = 0, k = [], l = [], i = 0; a > i; ++i) f[i] < 0 && d(i);
        return l
    }
    a.symmetricDiffLinkLengths = f, a.jaccardLinkLengths = g, a.generateDirectedEdgeConstraints = h
}(cola || (cola = {}));
var cola;
! function(a) {
    var b;
    ! function(a) {
        function b(a, c, d) {
            a.forAll(function(a) {
                if (a.isLeaf()) c.leaves || (c.leaves = []), c.leaves.push(a.id);
                else {
                    var e = c;
                    a.gid = d.length, (!a.isIsland() || a.predefined) && (e = {
                        id: a.gid
                    }, c.groups || (c.groups = []), c.groups.push(a.gid), d.push(e)), b(a.children, e, d)
                }
            })
        }

        function c(a, b) {
            var c = {};
            for (var d in a) d in b && (c[d] = a[d]);
            return c
        }

        function d(b, c, d, e) {
            for (var f = b.length, g = new a.Configuration(f, c, d, e); g.greedyMerge(););
            var h = [],
                i = g.getGroupHierarchy(h);
            return h.forEach(function(a) {
                var c = function(c) {
                    var d = a[c];
                    "number" == typeof d && (a[c] = b[d])
                };
                c("source"), c("target")
            }), {
                groups: i,
                powerEdges: h
            }
        }
        var e = function() {
            function a(a, b, c) {
                this.source = a, this.target = b, this.type = c
            }
            return a
        }();
        a.PowerEdge = e;
        var f = function() {
            function a(a, b, c, d) {
                var e = this;
                if (this.linkAccessor = c, this.modules = new Array(a), this.roots = [], d) this.initModulesFromGroup(d);
                else {
                    this.roots.push(new h);
                    for (var f = 0; a > f; ++f) this.roots[0].add(this.modules[f] = new g(f))
                }
                this.R = b.length, b.forEach(function(a) {
                    var b = e.modules[c.getSourceIndex(a)],
                        d = e.modules[c.getTargetIndex(a)],
                        f = c.getType(a);
                    b.outgoing.add(f, d), d.incoming.add(f, b)
                })
            }
            return a.prototype.initModulesFromGroup = function(a) {
                var b = new h;
                this.roots.push(b);
                for (var c = 0; c < a.leaves.length; ++c) {
                    var d = a.leaves[c],
                        e = new g(d.id);
                    this.modules[d.id] = e, b.add(e)
                }
                if (a.groups)
                    for (var f = 0; f < a.groups.length; ++f) {
                        var j = a.groups[f];
                        b.add(new g(-1 - f, new i, new i, this.initModulesFromGroup(j), !0))
                    }
                return b
            }, a.prototype.merge = function(a, b, c) {
                void 0 === c && (c = 0);
                var d = a.incoming.intersection(b.incoming),
                    e = a.outgoing.intersection(b.outgoing),
                    f = new h;
                f.add(a), f.add(b);
                var i = new g(this.modules.length, e, d, f);
                this.modules.push(i);
                var j = function(c, d, e) {
                    c.forAll(function(c, f) {
                        c.forAll(function(c) {
                            var g = c[d];
                            g.add(f, i), g.remove(f, a), g.remove(f, b), a[e].remove(f, c), b[e].remove(f, c)
                        })
                    })
                };
                return j(e, "incoming", "outgoing"), j(d, "outgoing", "incoming"), this.R -= d.count() + e.count(), this.roots[c].remove(a), this.roots[c].remove(b), this.roots[c].add(i), i
            }, a.prototype.rootMerges = function(a) {
                void 0 === a && (a = 0);
                for (var b = this.roots[a].modules(), c = b.length, d = new Array(c * (c - 1)), e = 0, f = 0, g = c - 1; g > f; ++f)
                    for (var h = f + 1; c > h; ++h) {
                        var i = b[f],
                            j = b[h];
                        d[e++] = {
                            nEdges: this.nEdges(i, j),
                            a: i,
                            b: j
                        }
                    }
                return d
            }, a.prototype.greedyMerge = function() {
                for (var a = 0; a < this.roots.length; ++a)
                    if (!(this.roots[a].modules().length < 2)) {
                        var b = this.rootMerges(a).sort(function(a, b) {
                                return a.nEdges - b.nEdges
                            }),
                            c = b[0];
                        if (!(c.nEdges >= this.R)) return this.merge(c.a, c.b, a), !0
                    }
            }, a.prototype.nEdges = function(a, b) {
                var c = a.incoming.intersection(b.incoming),
                    d = a.outgoing.intersection(b.outgoing);
                return this.R - c.count() - d.count()
            }, a.prototype.getGroupHierarchy = function(a) {
                var c = this,
                    d = [],
                    f = {};
                b(this.roots[0], f, d);
                var g = this.allEdges();
                return g.forEach(function(b) {
                    var f = c.modules[b.source],
                        g = c.modules[b.target];
                    a.push(new e("undefined" == typeof f.gid ? b.source : d[f.gid], "undefined" == typeof g.gid ? b.target : d[g.gid], b.type))
                }), d
            }, a.prototype.allEdges = function() {
                var b = [];
                return a.getEdges(this.roots[0], b), b
            }, a.getEdges = function(b, c) {
                b.forAll(function(b) {
                    b.getEdges(c), a.getEdges(b.children, c)
                })
            }, a
        }();
        a.Configuration = f;
        var g = function() {
            function a(a, b, c, d, e) {
                void 0 === b && (b = new i), void 0 === c && (c = new i), void 0 === d && (d = new h), void 0 === e && (e = !1), this.id = a, this.outgoing = b, this.incoming = c, this.children = d, this.predefined = e
            }
            return a.prototype.getEdges = function(a) {
                var b = this;
                this.outgoing.forAll(function(c, d) {
                    c.forAll(function(c) {
                        a.push(new e(b.id, c.id, d))
                    })
                })
            }, a.prototype.isLeaf = function() {
                return 0 === this.children.count()
            }, a.prototype.isIsland = function() {
                return 0 === this.outgoing.count() && 0 === this.incoming.count()
            }, a
        }();
        a.Module = g;
        var h = function() {
            function a() {
                this.table = {}
            }
            return a.prototype.count = function() {
                return Object.keys(this.table).length
            }, a.prototype.intersection = function(b) {
                var d = new a;
                return d.table = c(this.table, b.table), d
            }, a.prototype.intersectionCount = function(a) {
                return this.intersection(a).count()
            }, a.prototype.contains = function(a) {
                return a in this.table
            }, a.prototype.add = function(a) {
                this.table[a.id] = a
            }, a.prototype.remove = function(a) {
                delete this.table[a.id]
            }, a.prototype.forAll = function(a) {
                for (var b in this.table) a(this.table[b])
            }, a.prototype.modules = function() {
                var a = [];
                return this.forAll(function(b) {
                    b.predefined || a.push(b)
                }), a
            }, a
        }();
        a.ModuleSet = h;
        var i = function() {
            function a() {
                this.sets = {}, this.n = 0
            }
            return a.prototype.count = function() {
                return this.n
            }, a.prototype.contains = function(a) {
                var b = !1;
                return this.forAllModules(function(c) {
                    b || c.id != a || (b = !0)
                }), b
            }, a.prototype.add = function(a, b) {
                var c = a in this.sets ? this.sets[a] : this.sets[a] = new h;
                c.add(b), ++this.n
            }, a.prototype.remove = function(a, b) {
                var c = this.sets[a];
                c.remove(b), 0 === c.count() && delete this.sets[a], --this.n
            }, a.prototype.forAll = function(a) {
                for (var b in this.sets) a(this.sets[b], b)
            }, a.prototype.forAllModules = function(a) {
                this.forAll(function(b) {
                    return b.forAll(a)
                })
            }, a.prototype.intersection = function(b) {
                var c = new a;
                return this.forAll(function(a, d) {
                    if (d in b.sets) {
                        var e = a.intersection(b.sets[d]),
                            f = e.count();
                        f > 0 && (c.sets[d] = e, c.n += f)
                    }
                }), c
            }, a
        }();
        a.LinkSets = i, a.getGroups = d
    }(b = a.powergraph || (a.powergraph = {}))
}(cola || (cola = {}));
var cola;
! function(a) {
    function b(a) {
        a.fixed |= 2, a.px = a.x, a.py = a.y
    }

    function c(a) {
        a.fixed &= -7
    }

    function d(a) {
        a.fixed |= 4, a.px = a.x, a.py = a.y
    }

    function e(a) {
        a.fixed &= -5
    }
    return a.d3adaptor = function() {
        var d = d3.dispatch("start", "tick", "end"),
            e = a.adaptor({
                trigger: function(a) {
                    d[a.type](a)
                },
                on: function(a, b) {
                    return d.on(a, b), e
                },
                kick: function(a) {
                    d3.timer(a)
                },
                drag: function() {
                    var a = d3.behavior.drag().origin(function(a) {
                        return a
                    }).on("dragstart.d3adaptor", b).on("drag.d3adaptor", function(a) {
                        a.px = d3.event.x, a.py = d3.event.y, e.resume()
                    }).on("dragend.d3adaptor", c);
                    return arguments.length ? void this.call(a) : a
                }
            });
        return e
    }, a.adaptor = function(f) {
        function g(a) {
            return "function" == typeof r ? +r.call(null, a) : r
        }

        function h(a, b) {
            a.length = b
        }

        function i(a) {
            return "function" == typeof t ? t(a) : 0
        }

        function j(a) {
            return "number" == typeof a.source ? a.source : a.source.index
        }

        function k(a) {
            return "number" == typeof a.target ? a.target : a.target.index
        }
        var l, m, n = {},
            o = f.trigger,
            p = f.kick,
            q = [1, 1],
            r = 20,
            s = null,
            t = null,
            u = !1,
            v = !0,
            w = !1,
            x = [],
            y = [],
            z = [],
            A = null,
            B = [],
            C = [],
            D = null,
            E = null,
            F = null,
            G = .01,
            H = 10,
            I = null;
        n.on = f.on, n.drag = f.drag, n.dragstart = b, n.dragend = c, n.mouseover = d, n.mouseout = e, n.tick = function() {
            if (G > l) return w = !1, o({
                type: "end",
                alpha: l = 0,
                stress: m
            }), delete m, !0;
            var a, b = x.length;
            B.length, E.locks.clear();
            for (var c = 0; b > c; ++c)
                if (a = x[c], a.fixed) {
                    ("undefined" == typeof a.px || "undefined" == typeof a.py) && (a.px = a.x, a.py = a.y);
                    var d = [a.px, a.py];
                    E.locks.add(c, d)
                }
            var e = E.rungeKutta();
            0 === e ? l = 0 : "undefined" != typeof m && (l = Math.abs(Math.abs(m / e) - 1)), m = e;
            for (var c = 0; b > c; ++c) a = x[c], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x = E.x[0][c], a.y = E.x[1][c]);
            o({
                type: "tick",
                alpha: l,
                stress: m
            })
        }, n.nodes = function(a) {
            if (!arguments.length) {
                if (0 === x.length && B.length > 0) {
                    var b = 0;
                    B.forEach(function(a) {
                        b = Math.max(b, a.source, a.target)
                    }), x = new Array(++b);
                    for (var c = 0; b > c; ++c) x[c] = {}
                }
                return x
            }
            return x = a, n
        }, n.groups = function(a) {
            return arguments.length ? (y = a, A = {}, y.forEach(function(a) {
                "undefined" == typeof a.padding && (a.padding = 1), "undefined" != typeof a.leaves && a.leaves.forEach(function(b, c) {
                    (a.leaves[c] = x[b]).parent = a
                }), "undefined" != typeof a.groups && a.groups.forEach(function(b, c) {
                    (a.groups[c] = y[b]).parent = a
                })
            }), A.leaves = x.filter(function(a) {
                return "undefined" == typeof a.parent
            }), A.groups = y.filter(function(a) {
                return "undefined" == typeof a.parent
            }), n) : y
        }, n.powerGraphGroups = function(b) {
            var c = a.powergraph.getGroups(x, B, J, A);
            return this.groups(c.groups), b(c), n
        }, n.avoidOverlaps = function(a) {
            return arguments.length ? (u = a, n) : u
        }, n.handleDisconnected = function(a) {
            return arguments.length ? (v = a, n) : v
        }, n.flowLayout = function(a, b) {
            return arguments.length || (a = "y"), F = {
                axis: a,
                getMinSeparation: "number" == typeof b ? function() {
                    return b
                } : b
            }, n
        }, n.links = function(a) {
            return arguments.length ? (B = a, n) : B
        }, n.constraints = function(a) {
            return arguments.length ? (C = a, n) : C
        }, n.distanceMatrix = function(a) {
            return arguments.length ? (D = a, n) : D
        }, n.size = function(a) {
            return arguments.length ? (q = a, n) : q
        }, n.defaultNodeSize = function(a) {
            return arguments.length ? (H = a, n) : H
        }, n.linkDistance = function(a) {
            return arguments.length ? (r = "function" == typeof a ? a : +a, s = null, n) : "function" == typeof r ? r() : r
        }, n.linkType = function(a) {
            return t = a, n
        }, n.convergenceThreshold = function(a) {
            return arguments.length ? (G = "function" == typeof a ? a : +a, n) : G
        }, n.alpha = function(a) {
            return arguments.length ? (a = +a, l ? l = a > 0 ? a : 0 : a > 0 && (w || (w = !0, o({
                type: "start",
                alpha: l = a
            }), p(n.tick))), n) : l
        };
        var J = {
            getSourceIndex: j,
            getTargetIndex: k,
            setLength: h,
            getType: i
        };
        return n.symmetricDiffLinkLengths = function(b, c) {
            return this.linkDistance(function(a) {
                return b * a.length
            }), s = function() {
                a.symmetricDiffLinkLengths(B, J, c)
            }, n
        }, n.jaccardLinkLengths = function(b, c) {
            return this.linkDistance(function(a) {
                return b * a.length
            }), s = function() {
                a.jaccardLinkLengths(B, J, c)
            }, n
        }, n.start = function() {
            var b, c = this.nodes().length,
                d = c + 2 * y.length,
                e = (B.length, q[0]),
                f = q[1];
            s && s();
            var h = new Array(d),
                i = new Array(d);
            z = new Array(d);
            var l = null,
                m = this.avoidOverlaps();
            x.forEach(function(a, b) {
                a.index = b, "undefined" == typeof a.x && (a.x = e / 2, a.y = f / 2), h[b] = a.x, i[b] = a.y
            });
            var o;
            D ? o = D : (o = new a.shortestpaths.Calculator(d, B, j, k, g).DistanceMatrix(), l = a.Descent.createSquareMatrix(d, function() {
                return 2
            }), B.forEach(function(a) {
                var b = j(a),
                    c = k(a);
                l[b][c] = l[c][b] = 1
            }));
            var p = a.Descent.createSquareMatrix(d, function(a, b) {
                return o[a][b]
            });
            if (A && "undefined" != typeof A.groups) {
                var b = c;
                y.forEach(function() {
                    l[b][b + 1] = l[b + 1][b] = 1e-6, p[b][b + 1] = p[b + 1][b] = .1, h[b] = 0, i[b++] = 0, h[b] = 0, i[b++] = 0
                })
            } else A = {
                leaves: x,
                groups: []
            };
            var r = C || [];
            F && (J.getMinSeparation = F.getMinSeparation, r = r.concat(a.generateDirectedEdgeConstraints(c, B, F.axis, J)));
            var t = arguments.length > 0 ? arguments[0] : 0,
                u = arguments.length > 1 ? arguments[1] : 0,
                w = arguments.length > 2 ? arguments[2] : 0;
            this.avoidOverlaps(!1), E = new a.Descent([h, i], p), E.locks.clear();
            for (var b = 0; c > b; ++b) {
                var I = x[b];
                if (I.fixed) {
                    I.px = I.x, I.py = I.y;
                    var K = [I.x, I.y];
                    E.locks.add(b, K)
                }
            }
            return E.threshold = G, E.run(t), r.length > 0 && (E.project = new a.vpsc.Projection(x, y, A, r).projectFunctions()), E.run(u), this.avoidOverlaps(m), m && (x.forEach(function(a, b) {
                a.x = h[b], a.y = i[b]
            }), E.project = new a.vpsc.Projection(x, y, A, r, !0).projectFunctions(), x.forEach(function(a, b) {
                h[b] = a.x, i[b] = a.y
            })), E.G = l, E.run(w), B.forEach(function(a) {
                "number" == typeof a.source && (a.source = x[a.source]), "number" == typeof a.target && (a.target = x[a.target])
            }), x.forEach(function(a, b) {
                a.x = h[b], a.y = i[b]
            }), !D && v && (a.applyPacking(a.separateGraphs(x, B), e, f, H), x.forEach(function(a, b) {
                E.x[0][b] = a.x, E.x[1][b] = a.y
            })), n.resume()
        }, n.resume = function() {
            return n.alpha(.1)
        }, n.stop = function() {
            return n.alpha(0)
        }, n.prepareEdgeRouting = function(b) {
            I = new a.geom.TangentVisibilityGraph(x.map(function(a) {
                return a.bounds.inflate(-b).vertices()
            }))
        }, n.routeEdge = function(b, c) {
            var d = [],
                e = new a.geom.TangentVisibilityGraph(I.P, {
                    V: I.V,
                    E: I.E
                }),
                f = {
                    x: b.source.x,
                    y: b.source.y
                },
                g = {
                    x: b.target.x,
                    y: b.target.y
                },
                h = e.addPoint(f, b.source.id),
                i = e.addPoint(g, b.target.id);
            e.addEdgeIfVisible(f, g, b.source.id, b.target.id), "undefined" != typeof c && c(e);
            var j = function(a) {
                    return a.source.id
                },
                k = function(a) {
                    return a.target.id
                },
                l = function(a) {
                    return a.length()
                },
                m = new a.shortestpaths.Calculator(e.V.length, e.E, j, k, l),
                n = m.PathFromNodeToNode(h.id, i.id);
            if (1 === n.length || n.length === e.V.length) a.vpsc.makeEdgeBetween(b, b.source.innerBounds, b.target.innerBounds, 5), d = [{
                x: b.sourceIntersection.x,
                y: b.sourceIntersection.y
            }, {
                x: b.arrowStart.x,
                y: b.arrowStart.y
            }];
            else {
                for (var o = n.length - 2, p = e.V[n[o]].p, q = e.V[n[0]].p, d = [b.source.innerBounds.rayIntersection(p.x, p.y)], r = o; r >= 0; --r) d.push(e.V[n[r]].p);
                d.push(a.vpsc.makeEdgeTo(q, b.target.innerBounds, 5))
            }
            return d
        }, n.linkId = function(a) {
            return j(a) + "-" + k(a)
        }, n
    }, a
}(cola || (cola = {})), RBTree = function(a) {
    var b = function(a) {
        var c = b.m[a];
        if (c.mod) return c.mod.exports;
        var d = c.mod = {
            exports: {}
        };
        return c(d, d.exports), d.exports
    };
    return b.m = {}, b.m["./treebase"] = function(a) {
        function b() {}

        function c(a) {
            this._tree = a, this._ancestors = [], this._cursor = null
        }
        b.prototype.clear = function() {
            this._root = null, this.size = 0
        }, b.prototype.find = function(a) {
            for (var b = this._root; null !== b;) {
                var c = this._comparator(a, b.data);
                if (0 === c) return b.data;
                b = b.get_child(c > 0)
            }
            return null
        }, b.prototype.findIter = function(a) {
            for (var b = this._root, c = this.iterator(); null !== b;) {
                var d = this._comparator(a, b.data);
                if (0 === d) return c._cursor = b, c;
                c._ancestors.push(b), b = b.get_child(d > 0)
            }
            return null
        }, b.prototype.lowerBound = function(a) {
            return this._bound(a, this._comparator)
        }, b.prototype.upperBound = function(a) {
            function b(a, b) {
                return c(b, a)
            }
            var c = this._comparator;
            return this._bound(a, b)
        }, b.prototype.min = function() {
            var a = this._root;
            if (null === a) return null;
            for (; null !== a.left;) a = a.left;
            return a.data
        }, b.prototype.max = function() {
            var a = this._root;
            if (null === a) return null;
            for (; null !== a.right;) a = a.right;
            return a.data
        }, b.prototype.iterator = function() {
            return new c(this)
        }, b.prototype.each = function(a) {
            for (var b, c = this.iterator(); null !== (b = c.next());) a(b)
        }, b.prototype.reach = function(a) {
            for (var b, c = this.iterator(); null !== (b = c.prev());) a(b)
        }, b.prototype._bound = function(a, b) {
            for (var c = this._root, d = this.iterator(); null !== c;) {
                var e = this._comparator(a, c.data);
                if (0 === e) return d._cursor = c, d;
                d._ancestors.push(c), c = c.get_child(e > 0)
            }
            for (var f = d._ancestors.length - 1; f >= 0; --f)
                if (c = d._ancestors[f], b(a, c.data) > 0) return d._cursor = c, d._ancestors.length = f, d;
            return d._ancestors.length = 0, d
        }, c.prototype.data = function() {
            return null !== this._cursor ? this._cursor.data : null
        }, c.prototype.next = function() {
            if (null === this._cursor) {
                var a = this._tree._root;
                null !== a && this._minNode(a)
            } else if (null === this._cursor.right) {
                var b;
                do {
                    if (b = this._cursor, !this._ancestors.length) {
                        this._cursor = null;
                        break
                    }
                    this._cursor = this._ancestors.pop()
                } while (this._cursor.right === b)
            } else this._ancestors.push(this._cursor), this._minNode(this._cursor.right);
            return null !== this._cursor ? this._cursor.data : null
        }, c.prototype.prev = function() {
            if (null === this._cursor) {
                var a = this._tree._root;
                null !== a && this._maxNode(a)
            } else if (null === this._cursor.left) {
                var b;
                do {
                    if (b = this._cursor, !this._ancestors.length) {
                        this._cursor = null;
                        break
                    }
                    this._cursor = this._ancestors.pop()
                } while (this._cursor.left === b)
            } else this._ancestors.push(this._cursor), this._maxNode(this._cursor.left);
            return null !== this._cursor ? this._cursor.data : null
        }, c.prototype._minNode = function(a) {
            for (; null !== a.left;) this._ancestors.push(a), a = a.left;
            this._cursor = a
        }, c.prototype._maxNode = function(a) {
            for (; null !== a.right;) this._ancestors.push(a), a = a.right;
            this._cursor = a
        }, a.exports = b
    }, b.m.__main__ = function(a) {
        function c(a) {
            this.data = a, this.left = null, this.right = null, this.red = !0
        }

        function d(a) {
            this._root = null, this._comparator = a, this.size = 0
        }

        function e(a) {
            return null !== a && a.red
        }

        function f(a, b) {
            var c = a.get_child(!b);
            return a.set_child(!b, c.get_child(b)), c.set_child(b, a), a.red = !0, c.red = !1, c
        }

        function g(a, b) {
            return a.set_child(!b, f(a.get_child(!b), !b)), f(a, b)
        }
        var h = b("./treebase");
        c.prototype.get_child = function(a) {
            return a ? this.right : this.left
        }, c.prototype.set_child = function(a, b) {
            a ? this.right = b : this.left = b
        }, d.prototype = new h, d.prototype.insert = function(a) {
            var b = !1;
            if (null === this._root) this._root = new c(a), b = !0, this.size++;
            else {
                var d = new c(void 0),
                    h = 0,
                    i = 0,
                    j = null,
                    k = d,
                    l = null,
                    m = this._root;
                for (k.right = this._root;;) {
                    if (null === m ? (m = new c(a), l.set_child(h, m), b = !0, this.size++) : e(m.left) && e(m.right) && (m.red = !0, m.left.red = !1, m.right.red = !1), e(m) && e(l)) {
                        var n = k.right === j;
                        m === l.get_child(i) ? k.set_child(n, f(j, !i)) : k.set_child(n, g(j, !i))
                    }
                    var o = this._comparator(m.data, a);
                    if (0 === o) break;
                    i = h, h = 0 > o, null !== j && (k = j), j = l, l = m, m = m.get_child(h)
                }
                this._root = d.right
            }
            return this._root.red = !1, b
        }, d.prototype.remove = function(a) {
            if (null === this._root) return !1;
            var b = new c(void 0),
                d = b;
            d.right = this._root;
            for (var h = null, i = null, j = null, k = 1; null !== d.get_child(k);) {
                var l = k;
                i = h, h = d, d = d.get_child(k);
                var m = this._comparator(a, d.data);
                if (k = m > 0, 0 === m && (j = d), !e(d) && !e(d.get_child(k)))
                    if (e(d.get_child(!k))) {
                        var n = f(d, k);
                        h.set_child(l, n), h = n
                    } else if (!e(d.get_child(!k))) {
                    var o = h.get_child(!l);
                    if (null !== o)
                        if (e(o.get_child(!l)) || e(o.get_child(l))) {
                            var p = i.right === h;
                            e(o.get_child(l)) ? i.set_child(p, g(h, l)) : e(o.get_child(!l)) && i.set_child(p, f(h, l));
                            var q = i.get_child(p);
                            q.red = !0, d.red = !0, q.left.red = !1, q.right.red = !1
                        } else h.red = !1, o.red = !0, d.red = !0
                }
            }
            return null !== j && (j.data = d.data, h.set_child(h.right === d, d.get_child(null === d.left)), this.size--), this._root = b.right, null !== this._root && (this._root.red = !1), null !== j
        }, a.exports = d
    }, b("__main__")
}(window);
var cola;
! function(a) {
    var b = {};
    return b.PADDING = 10, b.GOLDEN_SECTION = (1 + Math.sqrt(5)) / 2, b.FLOAT_EPSILON = 1e-4, b.MAX_INERATIONS = 100, a.applyPacking = function(a, c, d, e, f) {
        function g(a) {
            function b(a) {
                var b = Number.MAX_VALUE,
                    c = Number.MAX_VALUE,
                    d = 0,
                    f = 0;
                a.array.forEach(function(a) {
                    var g = "undefined" != typeof a.width ? a.width : e,
                        h = "undefined" != typeof a.height ? a.height : e;
                    g /= 2, h /= 2, d = Math.max(a.x + g, d), b = Math.min(a.x - g, b), f = Math.max(a.y + h, f), c = Math.min(a.y - h, c)
                }), a.width = d - b, a.height = f - c
            }
            a.forEach(function(a) {
                b(a)
            })
        }

        function h(a) {
            a.forEach(function(a) {
                var b = {
                    x: 0,
                    y: 0
                };
                a.array.forEach(function(a) {
                    b.x += a.x, b.y += a.y
                }), b.x /= a.array.length, b.y /= a.array.length;
                var c = {
                        x: b.x - a.width / 2,
                        y: b.y - a.height / 2
                    },
                    d = {
                        x: a.x - c.x,
                        y: a.y - c.y
                    };
                a.array.forEach(function(a) {
                    a.x = a.x + d.x + p / 2 - r / 2, a.y = a.y + d.y + q / 2 - s / 2
                })
            })
        }

        function i(a) {
            var c = Number.POSITIVE_INFINITY,
                d = 0;
            a.sort(function(a, b) {
                return b.height - a.height
            }), t = a.reduce(function(a, b) {
                return a.width < b.width ? a.width : b.width
            });
            for (var e = o = t, f = p = l(a), g = 0, h = Number.MAX_VALUE, i = Number.MAX_VALUE, k = -1, m = Number.MAX_VALUE, n = Number.MAX_VALUE; m > t || n > b.FLOAT_EPSILON;) {
                if (1 != k) var o = f - (f - e) / b.GOLDEN_SECTION,
                    h = j(a, o);
                if (0 != k) var p = e + (f - e) / b.GOLDEN_SECTION,
                    i = j(a, p);
                if (m = Math.abs(o - p), n = Math.abs(h - i), c > h && (c = h, d = o), c > i && (c = i, d = p), h > i ? (e = o, o = p, h = i, k = 1) : (f = p, p = o, i = h, k = 0), g++ > 100) break
            }
            j(a, d)
        }

        function j(a, b) {
            v = [], r = 0, s = 0, u = o;
            for (var c = 0; c < a.length; c++) {
                var d = a[c];
                k(d, b)
            }
            return Math.abs(m() - f)
        }

        function k(a, c) {
            for (var d = void 0, e = 0; e < v.length; e++)
                if (v[e].space_left >= a.height && v[e].x + v[e].width + a.width + b.PADDING - c <= b.FLOAT_EPSILON) {
                    d = v[e];
                    break
                }
            v.push(a), void 0 !== d ? (a.x = d.x + d.width + b.PADDING, a.y = d.bottom, a.space_left = a.height, a.bottom = a.y, d.space_left -= a.height + b.PADDING, d.bottom += a.height + b.PADDING) : (a.y = u, u += a.height + b.PADDING, a.x = n, a.bottom = a.y, a.space_left = a.height), a.y + a.height - s > -b.FLOAT_EPSILON && (s = a.y + a.height - o), a.x + a.width - r > -b.FLOAT_EPSILON && (r = a.x + a.width - n)
        }

        function l(a) {
            var c = 0;
            return a.forEach(function(a) {
                return c += a.width + b.PADDING
            }), c
        }

        function m() {
            return r / s
        }
        var n = 0,
            o = 0,
            p = c,
            q = d,
            f = "undefined" != typeof f ? f : 1,
            e = "undefined" != typeof e ? e : 0,
            r = 0,
            s = 0,
            t = 0,
            u = 0,
            v = [];
        0 != a.length && (g(a), i(a), h(a))
    }, a.separateGraphs = function(a, b) {
        function c(a, b) {
            if (void 0 === d[a.index]) {
                b && (g++, f.push({
                    array: []
                })), d[a.index] = g, f[g - 1].array.push(a);
                var h = e[a.index];
                if (h)
                    for (var i = 0; i < h.length; i++) c(h[i], !1)
            }
        }
        for (var d = {}, e = {}, f = [], g = 0, h = 0; h < b.length; h++) {
            var i = b[h],
                j = i.source,
                k = i.target;
            e[j.index] ? e[j.index].push(k) : e[j.index] = [k], e[k.index] ? e[k.index].push(j) : e[k.index] = [j]
        }
        for (var h = 0; h < a.length; h++) {
            var l = a[h];
            d[l.index] || c(l, !0)
        }
        return f
    }, a
}(cola || (cola = {}));
var cytoscape;
if (function(a) {
        "use strict";
        var b = cytoscape = function() {
            return cytoscape.init.apply(cytoscape, arguments)
        };
        b.version = "2.4.6", b.init = function(a) {
            return void 0 === a && (a = {}), b.is.plainObject(a) ? new b.Core(a) : b.is.string(a) ? b.extension.apply(b.extension, arguments) : void 0
        }, b.fn = {}, "undefined" != typeof module && module.exports && (module.exports = cytoscape), "undefined" != typeof define && define.amd && define("cytoscape", function() {
            return cytoscape
        }), a && (a.cytoscape = cytoscape)
    }("undefined" == typeof window ? null : window), this.cytoscape = cytoscape, function(a) {
        "use strict";
        var b = 0,
            c = 1,
            d = 2,
            e = function(a) {
                return this instanceof e ? (this.id = "Thenable/1.0.7", this.state = b, this.fulfillValue = void 0, this.rejectReason = void 0, this.onFulfilled = [], this.onRejected = [], this.proxy = {
                    then: this.then.bind(this)
                }, void("function" == typeof a && a.call(this, this.fulfill.bind(this), this.reject.bind(this)))) : new e(a)
            };
        e.prototype = {
            fulfill: function(a) {
                return f(this, c, "fulfillValue", a)
            },
            reject: function(a) {
                return f(this, d, "rejectReason", a)
            },
            then: function(a, b) {
                var c = this,
                    d = new e;
                return c.onFulfilled.push(i(a, d, "fulfill")), c.onRejected.push(i(b, d, "reject")), g(c), d.proxy
            }
        };
        var f = function(a, c, d, e) {
                return a.state === b && (a.state = c, a[d] = e, g(a)), a
            },
            g = function(a) {
                a.state === c ? h(a, "onFulfilled", a.fulfillValue) : a.state === d && h(a, "onRejected", a.rejectReason)
            },
            h = function(a, b, c) {
                if (0 !== a[b].length) {
                    var d = a[b];
                    a[b] = [];
                    var e = function() {
                        for (var a = 0; a < d.length; a++) d[a](c)
                    };
                    "object" == typeof process && "function" == typeof process.nextTick ? process.nextTick(e) : "function" == typeof setImmediate ? setImmediate(e) : setTimeout(e, 0)
                }
            },
            i = function(a, b, c) {
                return function(d) {
                    if ("function" != typeof a) b[c].call(b, d);
                    else {
                        var e;
                        try {
                            e = a(d)
                        } catch (f) {
                            return void b.reject(f)
                        }
                        j(b, e)
                    }
                }
            },
            j = function(a, b) {
                if (a === b || a.proxy === b) return void a.reject(new TypeError("cannot resolve promise with itself"));
                var c;
                if ("object" == typeof b && null !== b || "function" == typeof b) try {
                    c = b.then
                } catch (d) {
                    return void a.reject(d)
                }
                if ("function" != typeof c) a.fulfill(b);
                else {
                    var e = !1;
                    try {
                        c.call(b, function(c) {
                            e || (e = !0, c === b ? a.reject(new TypeError("circular thenable chain")) : j(a, c))
                        }, function(b) {
                            e || (e = !0, a.reject(b))
                        })
                    } catch (d) {
                        e || a.reject(d)
                    }
                }
            };
        a.Promise = "undefined" == typeof Promise ? e : Promise, a.Promise.all = a.Promise.all || function(b) {
            return new a.Promise(function(a, c) {
                for (var d = new Array(b.length), e = 0, f = function(c, f) {
                        d[c] = f, e++, e === b.length && a(d)
                    }, g = 0; g < b.length; g++) ! function(a) {
                    var d = b[a],
                        e = null != d.then;
                    if (e) d.then(function(b) {
                        f(a, b)
                    }, function(a) {
                        c(a)
                    });
                    else {
                        var g = d;
                        f(a, g)
                    }
                }(g)
            })
        }
    }(cytoscape), function(a, b) {
        "use strict";
        var c = "string",
            d = typeof {},
            e = "function";
        a.is = {
            defined: function(a) {
                return null != a
            },
            string: function(a) {
                return null != a && typeof a == c
            },
            fn: function(a) {
                return null != a && typeof a === e
            },
            array: function(a) {
                return Array.isArray ? Array.isArray(a) : null != a && a instanceof Array
            },
            plainObject: function(b) {
                return null != b && typeof b === d && !a.is.array(b) && b.constructor === Object
            },
            object: function(a) {
                return null != a && typeof a === d
            },
            number: function(a) {
                return null != a && "number" == typeof a && !isNaN(a)
            },
            integer: function(b) {
                return a.is.number(b) && Math.floor(b) === b
            },
            color: function(a) {
                return null != a && "string" == typeof a && "" !== $.Color(a).toString()
            },
            bool: function(a) {
                return null != a && typeof a == typeof !0
            },
            elementOrCollection: function(b) {
                return a.is.element(b) || a.is.collection(b)
            },
            element: function(b) {
                return b instanceof a.Element && b._private.single
            },
            collection: function(b) {
                return b instanceof a.Collection && !b._private.single
            },
            core: function(b) {
                return b instanceof a.Core
            },
            style: function(b) {
                return b instanceof a.Style
            },
            stylesheet: function(b) {
                return b instanceof a.Stylesheet
            },
            event: function(b) {
                return b instanceof a.Event
            },
            thread: function(b) {
                return b instanceof a.Thread
            },
            fabric: function(b) {
                return b instanceof a.Fabric
            },
            emptyString: function(b) {
                return b ? a.is.string(b) && ("" === b || b.match(/^\s+$/)) ? !0 : !1 : !0
            },
            nonemptyString: function(b) {
                return b && a.is.string(b) && "" !== b && !b.match(/^\s+$/) ? !0 : !1
            },
            domElement: function(a) {
                return "undefined" == typeof HTMLElement ? !1 : a instanceof HTMLElement
            },
            boundingBox: function(b) {
                return a.is.plainObject(b) && a.is.number(b.x1) && a.is.number(b.x2) && a.is.number(b.y1) && a.is.number(b.y2)
            },
            promise: function(b) {
                return a.is.object(b) && a.is.fn(b.then)
            },
            touch: function() {
                return b && ("ontouchstart" in b || b.DocumentTouch && document instanceof DocumentTouch)
            },
            gecko: function() {
                return "undefined" != typeof InstallTrigger || "MozAppearance" in document.documentElement.style
            },
            webkit: function() {
                return "undefined" != typeof webkitURL || "WebkitAppearance" in document.documentElement.style
            },
            chromium: function() {
                return "undefined" != typeof chrome
            },
            khtml: function() {
                return navigator.vendor.match(/kde/i)
            },
            khtmlEtc: function() {
                return a.is.khtml() || a.is.webkit() || a.is.chromium()
            },
            trident: function() {
                return "undefined" != typeof ActiveXObject || !1
            },
            windows: function() {
                return "undefined" != typeof navigator && navigator.appVersion.match(/Win/i)
            },
            mac: function() {
                return "undefined" != typeof navigator && navigator.appVersion.match(/Mac/i)
            },
            linux: function() {
                return "undefined" != typeof navigator && navigator.appVersion.match(/Linux/i)
            },
            unix: function() {
                return "undefined" != typeof navigator && navigator.appVersion.match(/X11/i)
            }
        }
    }(cytoscape, "undefined" == typeof window ? null : window), function(a, b) {
        "use strict";
        a.util = {
            extend: function() {
                var b, c, d, e, f, g, h = arguments[0] || {},
                    i = 1,
                    j = arguments.length,
                    k = !1;
                for ("boolean" == typeof h && (k = h, h = arguments[1] || {}, i = 2), "object" == typeof h || a.is.fn(h) || (h = {}), j === i && (h = this, --i); j > i; i++)
                    if (null != (b = arguments[i]))
                        for (c in b) d = h[c], e = b[c], h !== e && (k && e && (a.is.plainObject(e) || (f = a.is.array(e))) ? (f ? (f = !1, g = d && a.is.array(d) ? d : []) : g = d && a.is.plainObject(d) ? d : {}, h[c] = a.util.extend(k, g, e)) : void 0 !== e && (h[c] = e));
                return h
            },
            require: function(c, d, e) {
                var f;
                e = a.util.extend({
                    msgIfNotFound: !0
                }, e);
                var g = !1,
                    h = function(a) {
                        g = !0, d(a)
                    },
                    i = function(a) {
                        b && (f = b[c]), void 0 !== f && h(f), a && a()
                    },
                    j = function() {
                        g || k(l)
                    },
                    k = function(a) {
                        if ("undefined" != typeof module && module.exports && require) try {
                            f = require(c)
                        } catch (b) {}
                        void 0 !== f && h(f), a && a()
                    },
                    l = function() {
                        g || m(n)
                    },
                    m = function(a) {
                        "undefined" != typeof define && define.amd && require && require([c], function(b) {
                            f = b, void 0 !== f && h(f), a && a()
                        }, function(b) {
                            a && a()
                        })
                    },
                    n = function() {
                        !g && e.msgIfNotFound && a.util.error("Cytoscape.js tried to pull in dependency `" + c + "` but no module (i.e. CommonJS, AMD, or window) was found")
                    };
                i(j)
            },
            requires: function(b, c) {
                for (var d = [], e = [], f = function() {
                        for (var a = 0; a < b.length; a++)
                            if (!e[a]) return;
                        c.apply(c, d)
                    }, g = 0; g < b.length; g++) ! function() {
                    var c = b[g],
                        h = g;
                    a.util.require(c, function(a) {
                        d[h] = a, e[h] = !0, f()
                    })
                }()
            },
            throttle: function(b, c, d) {
                var e = !0,
                    f = !0;
                return d === !1 ? e = !1 : a.is.plainObject(d) && (e = "leading" in d ? d.leading : e, f = "trailing" in d ? d.trailing : f), d = d || {}, d.leading = e, d.maxWait = c, d.trailing = f, a.util.debounce(b, c, d)
            },
            now: function() {
                return +new Date
            },
            debounce: function(b, c, d) {
                var e, f, g, h, i, j, k, l = 0,
                    m = !1,
                    n = !0;
                if (a.is.fn(b)) {
                    if (c = Math.max(0, c) || 0, d === !0) {
                        var o = !0;
                        n = !1
                    } else a.is.plainObject(d) && (o = d.leading, m = "maxWait" in d && (Math.max(c, d.maxWait) || 0), n = "trailing" in d ? d.trailing : n);
                    var p = function() {
                            var d = c - (a.util.now() - h);
                            if (0 >= d) {
                                f && clearTimeout(f);
                                var m = k;
                                f = j = k = void 0, m && (l = a.util.now(), g = b.apply(i, e), j || f || (e = i = null))
                            } else j = setTimeout(p, d)
                        },
                        q = function() {
                            j && clearTimeout(j), f = j = k = void 0, (n || m !== c) && (l = a.util.now(), g = b.apply(i, e), j || f || (e = i = null))
                        };
                    return function() {
                        if (e = arguments, h = a.util.now(), i = this, k = n && (j || !o), m === !1) var d = o && !j;
                        else {
                            f || o || (l = h);
                            var r = m - (h - l),
                                s = 0 >= r;
                            s ? (f && (f = clearTimeout(f)), l = h, g = b.apply(i, e)) : f || (f = setTimeout(q, r))
                        }
                        return s && j ? j = clearTimeout(j) : j || c === m || (j = setTimeout(p, c)), d && (s = !0, g = b.apply(i, e)), !s || j || f || (e = i = null), g
                    }
                }
            },
            error: function(a) {
                if (!console) throw a;
                if (console.error) console.error.apply(console, arguments);
                else {
                    if (!console.log) throw a;
                    console.log.apply(console, arguments)
                }
            },
            clone: function(a) {
                var b = {};
                for (var c in a) b[c] = a[c];
                return b
            },
            copy: function(b) {
                return null == b ? b : a.is.array(b) ? b.slice() : a.is.plainObject(b) ? a.util.clone(b) : b
            },
            makeBoundingBox: function(a) {
                if (null != a.x1 && null != a.y1) {
                    if (null != a.x2 && null != a.y2 && a.x2 >= a.x1 && a.y2 >= a.y1) return {
                        x1: a.x1,
                        y1: a.y1,
                        x2: a.x2,
                        y2: a.y2,
                        w: a.x2 - a.x1,
                        h: a.y2 - a.y1
                    };
                    if (null != a.w && null != a.h && a.w >= 0 && a.h >= 0) return {
                        x1: a.x1,
                        y1: a.y1,
                        x2: a.x1 + a.w,
                        y2: a.y1 + a.h,
                        w: a.w,
                        h: a.h
                    }
                }
            },
            mapEmpty: function(a) {
                var b = !0;
                if (null != a)
                    for (var c in a) {
                        b = !1;
                        break
                    }
                return b
            },
            pushMap: function(b) {
                var c = a.util.getMap(b);
                null == c ? a.util.setMap($.extend({}, b, {
                    value: [b.value]
                })) : c.push(b.value)
            },
            setMap: function(b) {
                for (var c, d = b.map, e = b.keys, f = e.length, g = 0; f > g; g++) {
                    var c = e[g];
                    a.is.plainObject(c) && a.util.error("Tried to set map with object key"), g < e.length - 1 ? (null == d[c] && (d[c] = {}), d = d[c]) : d[c] = b.value
                }
            },
            getMap: function(b) {
                for (var c = b.map, d = b.keys, e = d.length, f = 0; e > f; f++) {
                    var g = d[f];
                    if (a.is.plainObject(g) && a.util.error("Tried to get map with object key"), c = c[g], null == c) return c
                }
                return c
            },
            deleteMap: function(b) {
                for (var c = b.map, d = b.keys, e = d.length, f = b.keepChildren, g = 0; e > g; g++) {
                    var h = d[g];
                    a.is.plainObject(h) && a.util.error("Tried to delete map with object key");
                    var i = g === b.keys.length - 1;
                    if (i)
                        if (f)
                            for (var j in c) f[j] || (c[j] = void 0);
                        else c[h] = void 0;
                    else c = c[h]
                }
            },
            capitalize: function(b) {
                return a.is.emptyString(b) ? b : b.charAt(0).toUpperCase() + b.substring(1)
            },
            trim: function(a) {
                var b, c;
                for (b = 0; b < a.length && " " === a[b]; b++);
                for (c = a.length - 1; c > b && " " === a[c]; c--);
                return a.substring(b, c + 1)
            },
            hex2tuple: function(a) {
                if ((4 === a.length || 7 === a.length) && "#" === a[0]) {
                    var b, c, d, e = 4 === a.length,
                        f = 16;
                    return e ? (b = parseInt(a[1] + a[1], f), c = parseInt(a[2] + a[2], f), d = parseInt(a[3] + a[3], f)) : (b = parseInt(a[1] + a[2], f), c = parseInt(a[3] + a[4], f), d = parseInt(a[5] + a[6], f)), [b, c, d]
                }
            },
            hsl2tuple: function(b) {
                function c(a, b, c) {
                    return 0 > c && (c += 1), c > 1 && (c -= 1), 1 / 6 > c ? a + 6 * (b - a) * c : .5 > c ? b : 2 / 3 > c ? a + (b - a) * (2 / 3 - c) * 6 : a
                }
                var d, e, f, g, h, i, j, k, l = new RegExp("^" + a.util.regex.hsla + "$").exec(b);
                if (l) {
                    if (e = parseInt(l[1]), 0 > e ? e = (360 - -1 * e % 360) % 360 : e > 360 && (e %= 360), e /= 360, f = parseFloat(l[2]), 0 > f || f > 100) return;
                    if (f /= 100, g = parseFloat(l[3]), 0 > g || g > 100) return;
                    if (g /= 100, h = l[4], void 0 !== h && (h = parseFloat(h), 0 > h || h > 1)) return;
                    if (0 === f) i = j = k = Math.round(255 * g);
                    else {
                        var m = .5 > g ? g * (1 + f) : g + f - g * f,
                            n = 2 * g - m;
                        i = Math.round(255 * c(n, m, e + 1 / 3)), j = Math.round(255 * c(n, m, e)), k = Math.round(255 * c(n, m, e - 1 / 3))
                    }
                    d = [i, j, k, h]
                }
                return d
            },
            rgb2tuple: function(b) {
                var c, d = new RegExp("^" + a.util.regex.rgba + "$").exec(b);
                if (d) {
                    c = [];
                    for (var e = [], f = 1; 3 >= f; f++) {
                        var g = d[f];
                        if ("%" === g[g.length - 1] && (e[f] = !0), g = parseFloat(g), e[f] && (g = g / 100 * 255), 0 > g || g > 255) return;
                        c.push(Math.floor(g))
                    }
                    var h = e[1] || e[2] || e[3],
                        i = e[1] && e[2] && e[3];
                    if (h && !i) return;
                    var j = d[4];
                    if (void 0 !== j) {
                        if (j = parseFloat(j), 0 > j || j > 1) return;
                        c.push(j)
                    }
                }
                return c
            },
            colorname2tuple: function(b) {
                return a.util.colors[b.toLowerCase()]
            },
            color2tuple: function(b) {
                return (a.is.array(b) ? b : null) || a.util.colorname2tuple(b) || a.util.hex2tuple(b) || a.util.rgb2tuple(b) || a.util.hsl2tuple(b)
            },
            tuple2hex: function(a) {
                function b(a) {
                    var b = a.toString(16);
                    return 1 === b.length && (b = "0" + b), b
                }
                var c = a[0],
                    d = a[1],
                    e = a[2];
                return "#" + b(c) + b(d) + b(e)
            },
            colors: {
                transparent: [0, 0, 0, 0],
                aliceblue: [240, 248, 255],
                antiquewhite: [250, 235, 215],
                aqua: [0, 255, 255],
                aquamarine: [127, 255, 212],
                azure: [240, 255, 255],
                beige: [245, 245, 220],
                bisque: [255, 228, 196],
                black: [0, 0, 0],
                blanchedalmond: [255, 235, 205],
                blue: [0, 0, 255],
                blueviolet: [138, 43, 226],
                brown: [165, 42, 42],
                burlywood: [222, 184, 135],
                cadetblue: [95, 158, 160],
                chartreuse: [127, 255, 0],
                chocolate: [210, 105, 30],
                coral: [255, 127, 80],
                cornflowerblue: [100, 149, 237],
                cornsilk: [255, 248, 220],
                crimson: [220, 20, 60],
                cyan: [0, 255, 255],
                darkblue: [0, 0, 139],
                darkcyan: [0, 139, 139],
                darkgoldenrod: [184, 134, 11],
                darkgray: [169, 169, 169],
                darkgreen: [0, 100, 0],
                darkgrey: [169, 169, 169],
                darkkhaki: [189, 183, 107],
                darkmagenta: [139, 0, 139],
                darkolivegreen: [85, 107, 47],
                darkorange: [255, 140, 0],
                darkorchid: [153, 50, 204],
                darkred: [139, 0, 0],
                darksalmon: [233, 150, 122],
                darkseagreen: [143, 188, 143],
                darkslateblue: [72, 61, 139],
                darkslategray: [47, 79, 79],
                darkslategrey: [47, 79, 79],
                darkturquoise: [0, 206, 209],
                darkviolet: [148, 0, 211],
                deeppink: [255, 20, 147],
                deepskyblue: [0, 191, 255],
                dimgray: [105, 105, 105],
                dimgrey: [105, 105, 105],
                dodgerblue: [30, 144, 255],
                firebrick: [178, 34, 34],
                floralwhite: [255, 250, 240],
                forestgreen: [34, 139, 34],
                fuchsia: [255, 0, 255],
                gainsboro: [220, 220, 220],
                ghostwhite: [248, 248, 255],
                gold: [255, 215, 0],
                goldenrod: [218, 165, 32],
                gray: [128, 128, 128],
                grey: [128, 128, 128],
                green: [0, 128, 0],
                greenyellow: [173, 255, 47],
                honeydew: [240, 255, 240],
                hotpink: [255, 105, 180],
                indianred: [205, 92, 92],
                indigo: [75, 0, 130],
                ivory: [255, 255, 240],
                khaki: [240, 230, 140],
                lavender: [230, 230, 250],
                lavenderblush: [255, 240, 245],
                lawngreen: [124, 252, 0],
                lemonchiffon: [255, 250, 205],
                lightblue: [173, 216, 230],
                lightcoral: [240, 128, 128],
                lightcyan: [224, 255, 255],
                lightgoldenrodyellow: [250, 250, 210],
                lightgray: [211, 211, 211],
                lightgreen: [144, 238, 144],
                lightgrey: [211, 211, 211],
                lightpink: [255, 182, 193],
                lightsalmon: [255, 160, 122],
                lightseagreen: [32, 178, 170],
                lightskyblue: [135, 206, 250],
                lightslategray: [119, 136, 153],
                lightslategrey: [119, 136, 153],
                lightsteelblue: [176, 196, 222],
                lightyellow: [255, 255, 224],
                lime: [0, 255, 0],
                limegreen: [50, 205, 50],
                linen: [250, 240, 230],
                magenta: [255, 0, 255],
                maroon: [128, 0, 0],
                mediumaquamarine: [102, 205, 170],
                mediumblue: [0, 0, 205],
                mediumorchid: [186, 85, 211],
                mediumpurple: [147, 112, 219],
                mediumseagreen: [60, 179, 113],
                mediumslateblue: [123, 104, 238],
                mediumspringgreen: [0, 250, 154],
                mediumturquoise: [72, 209, 204],
                mediumvioletred: [199, 21, 133],
                midnightblue: [25, 25, 112],
                mintcream: [245, 255, 250],
                mistyrose: [255, 228, 225],
                moccasin: [255, 228, 181],
                navajowhite: [255, 222, 173],
                navy: [0, 0, 128],
                oldlace: [253, 245, 230],
                olive: [128, 128, 0],
                olivedrab: [107, 142, 35],
                orange: [255, 165, 0],
                orangered: [255, 69, 0],
                orchid: [218, 112, 214],
                palegoldenrod: [238, 232, 170],
                palegreen: [152, 251, 152],
                paleturquoise: [175, 238, 238],
                palevioletred: [219, 112, 147],
                papayawhip: [255, 239, 213],
                peachpuff: [255, 218, 185],
                peru: [205, 133, 63],
                pink: [255, 192, 203],
                plum: [221, 160, 221],
                powderblue: [176, 224, 230],
                purple: [128, 0, 128],
                red: [255, 0, 0],
                rosybrown: [188, 143, 143],
                royalblue: [65, 105, 225],
                saddlebrown: [139, 69, 19],
                salmon: [250, 128, 114],
                sandybrown: [244, 164, 96],
                seagreen: [46, 139, 87],
                seashell: [255, 245, 238],
                sienna: [160, 82, 45],
                silver: [192, 192, 192],
                skyblue: [135, 206, 235],
                slateblue: [106, 90, 205],
                slategray: [112, 128, 144],
                slategrey: [112, 128, 144],
                snow: [255, 250, 250],
                springgreen: [0, 255, 127],
                steelblue: [70, 130, 180],
                tan: [210, 180, 140],
                teal: [0, 128, 128],
                thistle: [216, 191, 216],
                tomato: [255, 99, 71],
                turquoise: [64, 224, 208],
                violet: [238, 130, 238],
                wheat: [245, 222, 179],
                white: [255, 255, 255],
                whitesmoke: [245, 245, 245],
                yellow: [255, 255, 0],
                yellowgreen: [154, 205, 50]
            },
            memoize: function(a, b) {
                var c = this,
                    d = {};
                return b || (b = function() {
                        if (1 === arguments.length) return arguments[0];
                        for (var a = [], b = 0; b < arguments.length; b++) a.push(arguments[b]);
                        return a.join("$")
                    }),
                    function() {
                        var e, f = arguments,
                            g = b.apply(c, f);
                        return (e = d[g]) || (e = d[g] = a.apply(c, f)), e
                    }
            }
        }, a.util.camel2dash = a.util.memoize(function(a) {
            for (var b = [], c = 0; c < a.length; c++) {
                var d = a[c],
                    e = d.toLowerCase(),
                    f = d !== e;
                f ? (b.push("-"), b.push(e)) : b.push(d)
            }
            var g = b.length === a.length;
            return g ? a : b.join("")
        }), a.util.dash2camel = a.util.memoize(function(a) {
            for (var b = [], c = !1, d = 0; d < a.length; d++) {
                var e = a[d],
                    f = "-" === e;
                f ? c = !0 : (c ? b.push(e.toUpperCase()) : b.push(e), c = !1)
            }
            return b.join("")
        }), a.util.regex = {}, a.util.regex.number = "(?:[-]?\\d*\\.\\d+|[-]?\\d+|[-]?\\d*\\.\\d+[eE]\\d+)", a.util.regex.rgba = "rgb[a]?\\((" + a.util.regex.number + "[%]?)\\s*,\\s*(" + a.util.regex.number + "[%]?)\\s*,\\s*(" + a.util.regex.number + "[%]?)(?:\\s*,\\s*(" + a.util.regex.number + "))?\\)", a.util.regex.rgbaNoBackRefs = "rgb[a]?\\((?:" + a.util.regex.number + "[%]?)\\s*,\\s*(?:" + a.util.regex.number + "[%]?)\\s*,\\s*(?:" + a.util.regex.number + "[%]?)(?:\\s*,\\s*(?:" + a.util.regex.number + "))?\\)", a.util.regex.hsla = "hsl[a]?\\((" + a.util.regex.number + ")\\s*,\\s*(" + a.util.regex.number + "[%])\\s*,\\s*(" + a.util.regex.number + "[%])(?:\\s*,\\s*(" + a.util.regex.number + "))?\\)", a.util.regex.hslaNoBackRefs = "hsl[a]?\\((?:" + a.util.regex.number + ")\\s*,\\s*(?:" + a.util.regex.number + "[%])\\s*,\\s*(?:" + a.util.regex.number + "[%])(?:\\s*,\\s*(?:" + a.util.regex.number + "))?\\)", a.util.regex.hex3 = "\\#[0-9a-fA-F]{3}", a.util.regex.hex6 = "\\#[0-9a-fA-F]{6}";
        var c = b ? b.requestAnimationFrame || b.mozRequestAnimationFrame || b.webkitRequestAnimationFrame || b.msRequestAnimationFrame : null;
        c = c || function(a) {
            a && setTimeout(a, 1e3 / 60)
        }, a.util.requestAnimationFrame = function(a) {
            c(a)
        }
    }(cytoscape, "undefined" == typeof window ? null : window), function(a) {
        "use strict";
        a.math = {}, a.math.signum = function(a) {
            return a > 0 ? 1 : 0 > a ? -1 : 0
        }, a.math.distance = function(a, b) {
            var c = b.x - a.x,
                d = b.y - a.y;
            return Math.sqrt(c * c + d * d)
        }, a.math.qbezierAt = function(a, b, c, d) {
            return (1 - d) * (1 - d) * a + 2 * (1 - d) * d * b + d * d * c
        }, a.math.qbezierPtAt = function(b, c, d, e) {
            return {
                x: a.math.qbezierAt(b.x, c.x, d.x, e),
                y: a.math.qbezierAt(b.y, c.y, d.y, e)
            }
        }, a.math.boundingBoxesIntersect = function(a, b) {
            return a.x1 > b.x2 ? !1 : b.x1 > a.x2 ? !1 : a.x2 < b.x1 ? !1 : b.x2 < a.x1 ? !1 : a.y2 < b.y1 ? !1 : b.y2 < a.y1 ? !1 : a.y1 > b.y2 ? !1 : b.y1 > a.y2 ? !1 : !0
        }, a.math.inBoundingBox = function(a, b, c) {
            return a.x1 <= b && b <= a.x2 && a.y1 <= c && c <= a.y2
        }, a.math.pointInBoundingBox = function(a, b) {
            return this.inBoundingBox(a, b.x, b.y)
        }, a.math.roundRectangleIntersectLine = function(a, b, c, d, e, f, g) {
            var h, i = this.getRoundRectangleRadius(e, f),
                j = e / 2,
                k = f / 2,
                l = c - j + i - g,
                m = d - k - g,
                n = c + j - i + g,
                o = m;
            if (h = this.finiteLinesIntersect(a, b, c, d, l, m, n, o, !1), h.length > 0) return h;
            var p = c + j + g,
                q = d - k + i - g,
                r = p,
                s = d + k - i + g;
            if (h = this.finiteLinesIntersect(a, b, c, d, p, q, r, s, !1), h.length > 0) return h;
            var t = c - j + i - g,
                u = d + k + g,
                v = c + j - i + g,
                w = u;
            if (h = this.finiteLinesIntersect(a, b, c, d, t, u, v, w, !1), h.length > 0) return h;
            var x = c - j - g,
                y = d - k + i - g,
                z = x,
                A = d + k - i + g;
            if (h = this.finiteLinesIntersect(a, b, c, d, x, y, z, A, !1), h.length > 0) return h;
            var B, C = c - j + i,
                D = d - k + i;
            if (B = this.intersectLineCircle(a, b, c, d, C, D, i + g), B.length > 0 && B[0] <= C && B[1] <= D) return [B[0], B[1]];
            var E = c + j - i,
                F = d - k + i;
            if (B = this.intersectLineCircle(a, b, c, d, E, F, i + g), B.length > 0 && B[0] >= E && B[1] <= F) return [B[0], B[1]];
            var G = c + j - i,
                H = d + k - i;
            if (B = this.intersectLineCircle(a, b, c, d, G, H, i + g), B.length > 0 && B[0] >= G && B[1] >= H) return [B[0], B[1]];
            var I = c - j + i,
                J = d + k - i;
            return B = this.intersectLineCircle(a, b, c, d, I, J, i + g), B.length > 0 && B[0] <= I && B[1] >= J ? [B[0], B[1]] : []
        }, a.math.roundRectangleIntersectBox = function(a, b, c, d, e, f, g, h, i) {
            var j = this.getRoundRectangleRadius(e, f),
                k = g - e / 2 - i,
                l = h - f / 2 + j - i,
                m = g + e / 2 + i,
                n = h + f / 2 - j + i,
                o = g - e / 2 + j - i,
                p = h - f / 2 - i,
                q = g + e / 2 - j + i,
                r = h + f / 2 + i,
                s = Math.min(a, c),
                t = Math.max(a, c),
                u = Math.min(b, d),
                v = Math.max(b, d);
            return k > t ? !1 : s > m ? !1 : p > v ? !1 : u > r ? !1 : k >= s && t >= k && l >= u && v >= l ? !0 : m >= s && t >= m && l >= u && v >= l ? !0 : m >= s && t >= m && n >= u && v >= n ? !0 : k >= s && t >= k && n >= u && v >= n ? !0 : s >= k && m >= s && u >= l && n >= u ? !0 : t >= k && m >= t && u >= l && n >= u ? !0 : t >= k && m >= t && v >= l && n >= v ? !0 : s >= k && m >= s && v >= l && n >= v ? !0 : o >= s && t >= o && p >= u && v >= p ? !0 : q >= s && t >= q && p >= u && v >= p ? !0 : q >= s && t >= q && r >= u && v >= r ? !0 : o >= s && t >= o && r >= u && v >= r ? !0 : s >= o && q >= s && u >= p && r >= u ? !0 : t >= o && q >= t && u >= p && r >= u ? !0 : t >= o && q >= t && v >= p && r >= v ? !0 : s >= o && q >= s && v >= p && r >= v ? !0 : this.boxIntersectEllipse(s, u, t, v, i, 2 * j, 2 * j, o + i, l + i) ? !0 : this.boxIntersectEllipse(s, u, t, v, i, 2 * j, 2 * j, q - i, l + i) ? !0 : this.boxIntersectEllipse(s, u, t, v, i, 2 * j, 2 * j, q - i, n - i) ? !0 : this.boxIntersectEllipse(s, u, t, v, i, 2 * j, 2 * j, o + i, n - i) ? !0 : !1
        }, a.math.checkInBoundingCircle = function(a, b, c, d, e, f, g, h) {
            return a = (a - g) / (e + d), b = (b - h) / (f + d), c >= a * a + b * b
        }, a.math.boxInBezierVicinity = function(a, b, c, d, e, f, g, h, i, j, k) {
            var l = .25 * e + .5 * g + .25 * i,
                m = .25 * f + .5 * h + .25 * j,
                n = Math.min(a, c) - k,
                o = Math.min(b, d) - k,
                p = Math.max(a, c) + k,
                q = Math.max(b, d) + k;
            if (e >= n && p >= e && f >= o && q >= f) return 1;
            if (i >= n && p >= i && j >= o && q >= j) return 1;
            if (l >= n && p >= l && m >= o && q >= m) return 1;
            if (g >= n && p >= g && h >= o && q >= h) return 1;
            var r = Math.min(e, l, i),
                s = Math.min(f, m, j),
                t = Math.max(e, l, i),
                u = Math.max(f, m, j);
            return r > p || n > t || s > q || o > u ? 0 : 1
        }, a.math.checkBezierInBox = function(b, c, d, e, f, g, h, i, j, k, l) {
            function m(l) {
                var m = a.math.qbezierAt(f, h, j, l),
                    n = a.math.qbezierAt(g, i, k, l);
                return m >= b && d >= m && n >= c && e >= n
            }
            for (var n = 0; 1 >= n; n += .25)
                if (!m(n)) return !1;
            return !0
        }, a.math.checkStraightEdgeInBox = function(a, b, c, d, e, f, g, h, i) {
            return e >= a && c >= e && g >= a && c >= g && f >= b && d >= f && h >= b && d >= h
        }, a.math.checkStraightEdgeCrossesBox = function(a, b, c, d, e, f, g, h, i) {
            var j, k, l = Math.min(a, c) - i,
                m = Math.min(b, d) - i,
                n = Math.max(a, c) + i,
                o = Math.max(b, d) + i,
                p = g - e,
                q = e,
                r = h - f,
                s = f;
            if (Math.abs(p) < 1e-4) return e >= l && n >= e && Math.min(f, h) <= m && Math.max(f, h) >= o;
            var t = (l - q) / p;
            if (t > 0 && 1 >= t && (j = r * t + s, j >= m && o >= j)) return !0;
            var u = (n - q) / p;
            if (u > 0 && 1 >= u && (j = r * u + s, j >= m && o >= j)) return !0;
            var v = (m - s) / r;
            if (v > 0 && 1 >= v && (k = p * v + q, k >= l && n >= k)) return !0;
            var w = (o - s) / r;
            return w > 0 && 1 >= w && (k = p * w + q, k >= l && n >= k) ? !0 : !1
        }, a.math.checkBezierCrossesBox = function(a, b, c, d, e, f, g, h, i, j, k) {
            var l = Math.min(a, c) - k,
                m = Math.min(b, d) - k,
                n = Math.max(a, c) + k,
                o = Math.max(b, d) + k;
            if (e >= l && n >= e && f >= m && o >= f) return !0;
            if (i >= l && n >= i && j >= m && o >= j) return !0;
            var p = e - 2 * g + i,
                q = -2 * e + 2 * g,
                r = e,
                s = [];
            if (Math.abs(p) < 1e-4) {
                var t = (l - e) / q,
                    u = (n - e) / q;
                s.push(t, u)
            } else {
                var v, w, x = q * q - 4 * p * (r - l);
                if (x > 0) {
                    var y = Math.sqrt(x);
                    v = (-q + y) / (2 * p), w = (-q - y) / (2 * p), s.push(v, w)
                }
                var z, A, B = q * q - 4 * p * (r - n);
                if (B > 0) {
                    var y = Math.sqrt(B);
                    z = (-q + y) / (2 * p), A = (-q - y) / (2 * p), s.push(z, A)
                }
            }
            s.sort(function(a, b) {
                return a - b
            });
            var C = f - 2 * h + j,
                D = -2 * f + 2 * h,
                E = f,
                F = [];
            if (Math.abs(C) < 1e-4) {
                var G = (m - f) / D,
                    H = (o - f) / D;
                F.push(G, H)
            } else {
                var I, J, K = D * D - 4 * C * (E - m);
                if (K > 0) {
                    var y = Math.sqrt(K);
                    I = (-D + y) / (2 * C), J = (-D - y) / (2 * C), F.push(I, J)
                }
                var L, M, N = D * D - 4 * C * (E - o);
                if (N > 0) {
                    var y = Math.sqrt(N);
                    L = (-D + y) / (2 * C), M = (-D - y) / (2 * C), F.push(L, M)
                }
            }
            F.sort(function(a, b) {
                return a - b
            });
            for (var O = 0; O < s.length; O += 2)
                for (var P = 1; P < F.length; P += 2)
                    if (s[O] < F[P] && F[P] >= 0 && s[O] <= 1 && s[O + 1] > F[P - 1] && F[P - 1] <= 1 && s[O + 1] >= 0) return !0;
            return !1
        }, a.math.inLineVicinity = function(a, b, c, d, e, f, g) {
            var h = g,
                i = Math.min(c, e),
                j = Math.max(c, e),
                k = Math.min(d, f),
                l = Math.max(d, f);
            return a >= i - h && j + h >= a && b >= k - h && l + h >= b
        }, a.math.inBezierVicinity = function(a, b, c, d, e, f, g, h, i) {
            var j = {
                x1: Math.min(c, g, e),
                x2: Math.max(c, g, e),
                y1: Math.min(d, h, f),
                y2: Math.max(d, h, f)
            };
            return a < j.x1 || a > j.x2 || b < j.y1 || b > j.y2 ? !1 : !0
        }, a.math.solveCubic = function(a, b, c, d, e) {
            b /= a, c /= a, d /= a;
            var f, g, h, i, j, k, l, m;
            return g = (3 * c - b * b) / 9, h = -(27 * d) + b * (9 * c - 2 * (b * b)), h /= 54, f = g * g * g + h * h, e[1] = 0, l = b / 3, f > 0 ? (j = h + Math.sqrt(f), j = 0 > j ? -Math.pow(-j, 1 / 3) : Math.pow(j, 1 / 3), k = h - Math.sqrt(f), k = 0 > k ? -Math.pow(-k, 1 / 3) : Math.pow(k, 1 / 3), e[0] = -l + j + k, l += (j + k) / 2, e[4] = e[2] = -l, l = Math.sqrt(3) * (-k + j) / 2, e[3] = l, void(e[5] = -l)) : (e[5] = e[3] = 0, 0 === f ? (m = 0 > h ? -Math.pow(-h, 1 / 3) : Math.pow(h, 1 / 3), e[0] = -l + 2 * m, void(e[4] = e[2] = -(m + l))) : (g = -g, i = g * g * g, i = Math.acos(h / Math.sqrt(i)), m = 2 * Math.sqrt(g), e[0] = -l + m * Math.cos(i / 3), e[2] = -l + m * Math.cos((i + 2 * Math.PI) / 3), void(e[4] = -l + m * Math.cos((i + 4 * Math.PI) / 3))))
        }, a.math.sqDistanceToQuadraticBezier = function(a, b, c, d, e, f, g, h) {
            var i = 1 * c * c - 4 * c * e + 2 * c * g + 4 * e * e - 4 * e * g + g * g + d * d - 4 * d * f + 2 * d * h + 4 * f * f - 4 * f * h + h * h,
                j = 9 * c * e - 3 * c * c - 3 * c * g - 6 * e * e + 3 * e * g + 9 * d * f - 3 * d * d - 3 * d * h - 6 * f * f + 3 * f * h,
                k = 3 * c * c - 6 * c * e + c * g - c * a + 2 * e * e + 2 * e * a - g * a + 3 * d * d - 6 * d * f + d * h - d * b + 2 * f * f + 2 * f * b - h * b,
                l = 1 * c * e - c * c + c * a - e * a + d * f - d * d + d * b - f * b,
                m = [];
            this.solveCubic(i, j, k, l, m);
            for (var n = 1e-7, o = [], p = 0; 6 > p; p += 2) Math.abs(m[p + 1]) < n && m[p] >= 0 && m[p] <= 1 && o.push(m[p]);
            o.push(1), o.push(0);
            for (var q, r, s, t, u = -1, v = 0; v < o.length; v++) r = Math.pow(1 - o[v], 2) * c + 2 * (1 - o[v]) * o[v] * e + o[v] * o[v] * g, s = Math.pow(1 - o[v], 2) * d + 2 * (1 - o[v]) * o[v] * f + o[v] * o[v] * h, t = Math.pow(r - a, 2) + Math.pow(s - b, 2), u >= 0 ? u > t && (u = t, q = o[v]) : (u = t, q = o[v]);
            return u
        }, a.math.sqDistanceToFiniteLine = function(a, b, c, d, e, f) {
            var g = [a - c, b - d],
                h = [e - c, f - d],
                i = h[0] * h[0] + h[1] * h[1],
                j = g[0] * g[0] + g[1] * g[1],
                k = g[0] * h[0] + g[1] * h[1],
                l = k * k / i;
            return 0 > k ? j : l > i ? (a - e) * (a - e) + (b - f) * (b - f) : j - l
        }, a.math.pointInsidePolygon = function(a, b, c, d, e, f, g, h, i) {
            var j = new Array(c.length),
                k = Math.asin(h[1] / Math.sqrt(h[0] * h[0] + h[1] * h[1]));
            h[0] < 0 ? k += Math.PI / 2 : k = -k - Math.PI / 2;
            for (var l = Math.cos(-k), m = Math.sin(-k), n = 0; n < j.length / 2; n++) j[2 * n] = f / 2 * (c[2 * n] * l - c[2 * n + 1] * m), j[2 * n + 1] = g / 2 * (c[2 * n + 1] * l + c[2 * n] * m), j[2 * n] += d, j[2 * n + 1] += e;
            var o;
            if (i > 0) {
                var p = this.expandPolygon(j, -i);
                o = this.joinLines(p)
            } else o = j;
            for (var q, r, s, t, u, v = 0, w = 0, n = 0; n < o.length / 2; n++)
                if (q = o[2 * n], r = o[2 * n + 1], n + 1 < o.length / 2 ? (s = o[2 * (n + 1)], t = o[2 * (n + 1) + 1]) : (s = o[2 * (n + 1 - o.length / 2)], t = o[2 * (n + 1 - o.length / 2) + 1]), q == a && s == a);
                else {
                    if (!(q >= a && a >= s || a >= q && s >= a)) continue;
                    u = (a - q) / (s - q) * (t - r) + r, u > b && v++, b > u && w++
                }
            return v % 2 === 0 ? !1 : !0
        }, a.math.joinLines = function(a) {
            for (var b, c, d, e, f, g, h, i, j = new Array(a.length / 2), k = 0; k < a.length / 4; k++) {
                b = a[4 * k], c = a[4 * k + 1], d = a[4 * k + 2], e = a[4 * k + 3], k < a.length / 4 - 1 ? (f = a[4 * (k + 1)], g = a[4 * (k + 1) + 1], h = a[4 * (k + 1) + 2], i = a[4 * (k + 1) + 3]) : (f = a[0], g = a[1], h = a[2], i = a[3]);
                var l = this.finiteLinesIntersect(b, c, d, e, f, g, h, i, !0);
                j[2 * k] = l[0], j[2 * k + 1] = l[1]
            }
            return j
        }, a.math.expandPolygon = function(a, b) {
            for (var c, d, e, f, g = new Array(2 * a.length), h = 0; h < a.length / 2; h++) {
                c = a[2 * h], d = a[2 * h + 1], h < a.length / 2 - 1 ? (e = a[2 * (h + 1)], f = a[2 * (h + 1) + 1]) : (e = a[0], f = a[1]);
                var i = f - d,
                    j = -(e - c),
                    k = Math.sqrt(i * i + j * j),
                    l = i / k,
                    m = j / k;
                g[4 * h] = c + l * b, g[4 * h + 1] = d + m * b, g[4 * h + 2] = e + l * b, g[4 * h + 3] = f + m * b
            }
            return g
        }, a.math.intersectLineEllipse = function(a, b, c, d, e, f) {
            var g = c - a,
                h = d - b;
            g /= e, h /= f;
            var i = Math.sqrt(g * g + h * h),
                j = i - 1;
            if (0 > j) return [];
            var k = j / i;
            return [(c - a) * k + a, (d - b) * k + b]
        }, a.math.dotProduct = function(a, b) {
            if (2 != a.length || 2 != b.length) throw "dot product: arguments are not vectors";
            return a[0] * b[0] + a[1] * b[1]
        }, a.math.intersectLineCircle = function(a, b, c, d, e, f, g) {
            var h = [c - a, d - b],
                i = [e, f],
                j = [a - e, b - f],
                k = h[0] * h[0] + h[1] * h[1],
                l = 2 * (j[0] * h[0] + j[1] * h[1]),
                i = j[0] * j[0] + j[1] * j[1] - g * g,
                m = l * l - 4 * k * i;
            if (0 > m) return [];
            var n = (-l + Math.sqrt(m)) / (2 * k),
                o = (-l - Math.sqrt(m)) / (2 * k),
                p = Math.min(n, o),
                q = Math.max(n, o),
                r = [];
            if (p >= 0 && 1 >= p && r.push(p), q >= 0 && 1 >= q && r.push(q), 0 === r.length) return [];
            var s = r[0] * h[0] + a,
                t = r[0] * h[1] + b;
            if (r.length > 1) {
                if (r[0] == r[1]) return [s, t];
                var u = r[1] * h[0] + a,
                    v = r[1] * h[1] + b;
                return [s, t, u, v]
            }
            return [s, t]
        }, a.math.findCircleNearPoint = function(a, b, c, d, e) {
            var f = d - a,
                g = e - b,
                h = Math.sqrt(f * f + g * g),
                i = f / h,
                j = g / h;
            return [a + i * c, b + j * c]
        }, a.math.findMaxSqDistanceToOrigin = function(a) {
            for (var b, c = 1e-6, d = 0; d < a.length / 2; d++) b = a[2 * d] * a[2 * d] + a[2 * d + 1] * a[2 * d + 1], b > c && (c = b);
            return c
        }, a.math.finiteLinesIntersect = function(a, b, c, d, e, f, g, h, i) {
            var j = (g - e) * (b - f) - (h - f) * (a - e),
                k = (c - a) * (b - f) - (d - b) * (a - e),
                l = (h - f) * (c - a) - (g - e) * (d - b);
            if (0 !== l) {
                var m = j / l,
                    n = k / l;
                return m >= 0 && 1 >= m && n >= 0 && 1 >= n ? [a + m * (c - a), b + m * (d - b)] : i ? [a + m * (c - a), b + m * (d - b)] : []
            }
            return 0 === j || 0 === k ? [a, c, g].sort()[1] === g ? [g, h] : [a, c, e].sort()[1] === e ? [e, f] : [e, g, c].sort()[1] === c ? [c, d] : [] : []
        }, a.math.boxIntersectEllipse = function(a, b, c, d, e, f, g, h, i) {
            if (a > c) {
                var j = a;
                a = c, c = j
            }
            if (b > d) {
                var k = b;
                b = d, d = k
            }
            var l = [h - f / 2 - e, i],
                m = [h + f / 2 + e, i],
                n = [h, i - g / 2 - e],
                o = [h, i + g / 2 + e];
            return c < l[0] ? !1 : a > m[0] ? !1 : b > o[1] ? !1 : d < n[1] ? !1 : a <= m[0] && m[0] <= c && b <= m[1] && m[1] <= d ? !0 : a <= l[0] && l[0] <= c && b <= l[1] && l[1] <= d ? !0 : a <= n[0] && n[0] <= c && b <= n[1] && n[1] <= d ? !0 : a <= o[0] && o[0] <= c && b <= o[1] && o[1] <= d ? !0 : (a = (a - h) / (f / 2 + e), c = (c - h) / (f / 2 + e), b = (b - i) / (g / 2 + e), d = (d - i) / (g / 2 + e), 1 >= a * a + b * b ? !0 : 1 >= c * c + b * b ? !0 : 1 >= c * c + d * d ? !0 : 1 >= a * a + d * d ? !0 : !1)
        }, a.math.boxIntersectPolygon = function(b, c, d, e, f, g, h, i, j, k, l) {
            if (b > d) {
                var m = b;
                b = d, d = m
            }
            if (c > e) {
                var n = c;
                c = e, e = n
            }
            var o = new Array(f.length),
                p = Math.asin(k[1] / Math.sqrt(k[0] * k[0] + k[1] * k[1]));
            k[0] < 0 ? p += Math.PI / 2 : p = -p - Math.PI / 2;
            for (var q = Math.cos(-p), r = Math.sin(-p), s = 0; s < o.length / 2; s++) o[2 * s] = g / 2 * (f[2 * s] * q - f[2 * s + 1] * r), o[2 * s + 1] = h / 2 * (f[2 * s + 1] * q + f[2 * s] * r), o[2 * s] += i, o[2 * s + 1] += j;
            for (var t = o[0], u = o[0], v = o[1], w = o[1], s = 1; s < o.length / 2; s++) o[2 * s] > u && (u = o[2 * s]), o[2 * s] < t && (t = o[2 * s]), o[2 * s + 1] > w && (w = o[2 * s + 1]), o[2 * s + 1] < v && (v = o[2 * s + 1]);
            if (t - l > d) return !1;
            if (b > u + l) return !1;
            if (v - l > e) return !1;
            if (c > w + l) return !1;
            var x;
            if (l > 0) {
                var y = a.math.expandPolygon(o, -l);
                x = a.math.joinLines(y)
            } else x = o;
            for (var s = 0; s < o.length / 2; s++)
                if (b <= o[2 * s] && o[2 * s] <= d && c <= o[2 * s + 1] && o[2 * s + 1] <= e) return !0;
            for (var s = 0; s < x.length / 2; s++) {
                var z, A, B = x[2 * s],
                    C = x[2 * s + 1];
                if (s < x.length / 2 - 1 ? (z = x[2 * (s + 1)], A = x[2 * (s + 1) + 1]) : (z = x[0], A = x[1]), a.math.finiteLinesIntersect(B, C, z, A, b, c, d, c, !1).length > 0) return !0;
                if (a.math.finiteLinesIntersect(B, C, z, A, b, e, d, e, !1).length > 0) return !0;
                if (a.math.finiteLinesIntersect(B, C, z, A, b, c, b, e, !1).length > 0) return !0;
                if (a.math.finiteLinesIntersect(B, C, z, A, d, c, d, e, !1).length > 0) return !0
            }
            return !1
        }, a.math.polygonIntersectLine = function(b, c, d, e, f, g, h, i) {
            for (var j, k = [], l = new Array(d.length), m = 0; m < l.length / 2; m++) l[2 * m] = d[2 * m] * g + e, l[2 * m + 1] = d[2 * m + 1] * h + f;
            var n;
            if (i > 0) {
                var o = a.math.expandPolygon(l, -i);
                n = a.math.joinLines(o)
            } else n = l;
            for (var p, q, r, s, m = 0; m < n.length / 2; m++) p = n[2 * m], q = n[2 * m + 1], m < n.length / 2 - 1 ? (r = n[2 * (m + 1)], s = n[2 * (m + 1) + 1]) : (r = n[0], s = n[1]), j = this.finiteLinesIntersect(b, c, e, f, p, q, r, s), 0 !== j.length && k.push(j[0], j[1]);
            return k
        }, a.math.shortenIntersection = function(a, b, c) {
            var d = [a[0] - b[0], a[1] - b[1]],
                e = Math.sqrt(d[0] * d[0] + d[1] * d[1]),
                f = (e - c) / e;
            return 0 > f && (f = 1e-5), [b[0] + f * d[0], b[1] + f * d[1]]
        }, a.math.generateUnitNgonPointsFitToSquare = function(b, c) {
            var d = a.math.generateUnitNgonPoints(b, c);
            return d = a.math.fitPolygonToSquare(d)
        }, a.math.fitPolygonToSquare = function(a) {
            for (var b, c, d = a.length / 2, e = 1 / 0, f = 1 / 0, g = -(1 / 0), h = -(1 / 0), i = 0; d > i; i++) b = a[2 * i], c = a[2 * i + 1], e = Math.min(e, b), g = Math.max(g, b), f = Math.min(f, c), h = Math.max(h, c);
            for (var j = 2 / (g - e), k = 2 / (h - f), i = 0; d > i; i++) b = a[2 * i] = a[2 * i] * j, c = a[2 * i + 1] = a[2 * i + 1] * k, e = Math.min(e, b), g = Math.max(g, b), f = Math.min(f, c), h = Math.max(h, c);
            if (-1 > f)
                for (var i = 0; d > i; i++) c = a[2 * i + 1] = a[2 * i + 1] + (-1 - f);
            return a
        }, a.math.generateUnitNgonPoints = function(a, b) {
            var c = 1 / a * 2 * Math.PI,
                d = a % 2 === 0 ? Math.PI / 2 + c / 2 : Math.PI / 2;
            d += b;
            for (var e, f, g, h = new Array(2 * a), i = 0; a > i; i++) e = i * c + d, f = h[2 * i] = Math.cos(e), g = h[2 * i + 1] = Math.sin(-e);
            return h
        }, a.math.getRoundRectangleRadius = function(a, b) {
            return Math.min(a / 4, b / 4, 8)
        }
    }(cytoscape), function(a) {
        "use strict";

        function b(b, c, d) {
            var e = {};
            switch (e[c] = d, b) {
                case "core":
                case "collection":
                    a.fn[b](e)
            }
            if ("layout" === b) {
                for (var g = d.prototype, h = [], i = 0; i < h.length; i++) {
                    var j = h[i];
                    g[j] = g[j] || function() {
                        return this
                    }
                }
                g.start && !g.run ? g.run = function() {
                    return this.start(), this
                } : !g.start && g.run && (g.start = function() {
                    return this.run(), this
                }), g.stop || (g.stop = function() {
                    var a = this.options;
                    return a && a.animate && a.eles.stop(), this
                }), g.on = a.define.on({
                    layout: !0
                }), g.one = a.define.on({
                    layout: !0,
                    unbindSelfOnTrigger: !0
                }), g.once = a.define.on({
                    layout: !0,
                    unbindAllBindersOnTrigger: !0
                }), g.off = a.define.off({
                    layout: !0
                }), g.trigger = a.define.trigger({
                    layout: !0
                }), a.define.eventAliasesOn(g)
            }
            return a.util.setMap({
                map: f,
                keys: [b, c],
                value: d
            })
        }

        function c(b, c) {
            return a.util.getMap({
                map: f,
                keys: [b, c]
            })
        }

        function d(b, c, d, e, f) {
            return a.util.setMap({
                map: g,
                keys: [b, c, d, e],
                value: f
            })
        }

        function e(b, c, d, e) {
            return a.util.getMap({
                map: g,
                keys: [b, c, d, e]
            })
        }
        var f = {};
        a.extensions = f;
        var g = {};
        a.modules = g, a.extension = function() {
            return 2 == arguments.length ? c.apply(this, arguments) : 3 == arguments.length ? b.apply(this, arguments) : 4 == arguments.length ? e.apply(this, arguments) : 5 == arguments.length ? d.apply(this, arguments) : void a.util.error("Invalid extension access syntax")
        }
    }(cytoscape), function(a, b) {
        "use strict";
        var c = function(a) {
            var b = a[0]._cyreg = a[0]._cyreg || {};
            return b
        };
        b.registerJquery = function(a) {
            a && (a.fn.cytoscape || (a.fn.cytoscape = function(d) {
                var e = a(this);
                if ("get" === d) return c(e).cy;
                if (b.is.fn(d)) {
                    var f = d,
                        g = c(e).cy;
                    if (g && g.isReady()) g.trigger("ready", [], f);
                    else {
                        var h = c(e),
                            i = h.readies = h.readies || [];
                        i.push(f)
                    }
                } else if (b.is.plainObject(d)) return e.each(function() {
                    var b = a.extend({}, d, {
                        container: a(this)[0]
                    });
                    window.cy = cytoscape(b)
                })
            }, a.cytoscape = cytoscape, null == a.fn.cy && null == a.cy && (a.fn.cy = a.fn.cytoscape, a.cy = a.cytoscape)))
        }, b.registerJquery(a), b.util.require("jquery", function(a) {
            b.registerJquery(a)
        })
    }("undefined" != typeof jQuery ? jQuery : null, cytoscape), function(a) {
        "use strict";

        function b() {
            return !1
        }

        function c() {
            return !0
        }
        a.Event = function(d, e) {
            return this instanceof a.Event ? (d && d.type ? (this.originalEvent = d, this.type = d.type, this.isDefaultPrevented = d.defaultPrevented ? c : b) : this.type = d, e && (this.type = void 0 !== e.type ? e.type : this.type, this.cy = e.cy, this.cyTarget = e.cyTarget, this.cyPosition = e.cyPosition, this.cyRenderedPosition = e.cyRenderedPosition, this.namespace = e.namespace, this.layout = e.layout, this.data = e.data, this.message = e.message), void(this.timeStamp = d && d.timeStamp || +new Date)) : new a.Event(d, e)
        }, a.Event.prototype = {
            preventDefault: function() {
                this.isDefaultPrevented = c;
                var a = this.originalEvent;
                a && a.preventDefault && a.preventDefault()
            },
            stopPropagation: function() {
                this.isPropagationStopped = c;
                var a = this.originalEvent;
                a && a.stopPropagation && a.stopPropagation()
            },
            stopImmediatePropagation: function() {
                this.isImmediatePropagationStopped = c, this.stopPropagation()
            },
            isDefaultPrevented: b,
            isPropagationStopped: b,
            isImmediatePropagationStopped: b
        }
    }(cytoscape), function(a) {
        "use strict";
        a.define = {
            data: function(b) {
                var c = {
                    field: "data",
                    bindingEvent: "data",
                    allowBinding: !1,
                    allowSetting: !1,
                    allowGetting: !1,
                    settingEvent: "data",
                    settingTriggersEvent: !1,
                    triggerFnName: "trigger",
                    immutableKeys: {},
                    updateStyle: !1,
                    onSet: function(a) {},
                    canSet: function(a) {
                        return !0
                    }
                };
                return b = a.util.extend({}, c, b),
                    function(c, d) {
                        var e = b,
                            f = this,
                            g = void 0 !== f.length,
                            h = g ? f : [f],
                            i = g ? f[0] : f;
                        if (a.is.string(c)) {
                            if (e.allowGetting && void 0 === d) {
                                var j;
                                return i && (j = i._private[e.field][c]), j
                            }
                            if (e.allowSetting && void 0 !== d) {
                                var k = !e.immutableKeys[c];
                                if (k) {
                                    for (var l = 0, m = h.length; m > l; l++) e.canSet(h[l]) && (h[l]._private[e.field][c] = d);
                                    e.updateStyle && f.updateStyle(), e.onSet(f), e.settingTriggersEvent && f[e.triggerFnName](e.settingEvent)
                                }
                            }
                        } else if (e.allowSetting && a.is.plainObject(c)) {
                            var n, o, p = c;
                            for (n in p) {
                                o = p[n];
                                var k = !e.immutableKeys[n];
                                if (k)
                                    for (var l = 0, m = h.length; m > l; l++) e.canSet(h[l]) && (h[l]._private[e.field][n] = o)
                            }
                            e.updateStyle && f.updateStyle(), e.onSet(f), e.settingTriggersEvent && f[e.triggerFnName](e.settingEvent)
                        } else if (e.allowBinding && a.is.fn(c)) {
                            var q = c;
                            f.bind(e.bindingEvent, q)
                        } else if (e.allowGetting && void 0 === c) {
                            var j;
                            return i && (j = i._private[e.field]), j
                        }
                        return f
                    }
            },
            removeData: function(b) {
                var c = {
                    field: "data",
                    event: "data",
                    triggerFnName: "trigger",
                    triggerEvent: !1,
                    immutableKeys: {}
                };
                return b = a.util.extend({}, c, b),
                    function(c) {
                        var d = b,
                            e = this,
                            f = void 0 !== e.length,
                            g = f ? e : [e];
                        if (a.is.string(c)) {
                            for (var h = c.split(/\s+/), i = h.length, j = 0; i > j; j++) {
                                var k = h[j];
                                if (!a.is.emptyString(k)) {
                                    var l = !d.immutableKeys[k];
                                    if (l)
                                        for (var m = 0, n = g.length; n > m; m++) g[m]._private[d.field][k] = void 0
                                }
                            }
                            d.triggerEvent && e[d.triggerFnName](d.event)
                        } else if (void 0 === c) {
                            for (var m = 0, n = g.length; n > m; m++) {
                                var o = g[m]._private[d.field];
                                for (var k in o) {
                                    var p = !d.immutableKeys[k];
                                    p && (o[k] = void 0)
                                }
                            }
                            d.triggerEvent && e[d.triggerFnName](d.event)
                        }
                        return e
                    }
            },
            event: {
                regex: /(\w+)(\.\w+)?/,
                optionalTypeRegex: /(\w+)?(\.\w+)?/,
                falseCallback: function() {
                    return !1
                }
            },
            on: function(b) {
                var c = {
                    unbindSelfOnTrigger: !1,
                    unbindAllBindersOnTrigger: !1
                };
                return b = a.util.extend({}, c, b),
                    function(c, d, e, f) {
                        var g = this,
                            h = void 0 !== g.length,
                            i = h ? g : [g],
                            j = a.is.string(c),
                            k = b;
                        if (a.is.plainObject(d) ? (f = e, e = d, d = void 0) : (a.is.fn(d) || d === !1) && (f = d, e = void 0, d = void 0), (a.is.fn(e) || e === !1) && (f = e, e = void 0), !a.is.fn(f) && f !== !1 && j) return g;
                        if (j) {
                            var l = {};
                            l[c] = f, c = l
                        }
                        for (var m in c)
                            if (f = c[m], f === !1 && (f = a.define.event.falseCallback), a.is.fn(f)) {
                                m = m.split(/\s+/);
                                for (var n = 0; n < m.length; n++) {
                                    var o = m[n];
                                    if (!a.is.emptyString(o)) {
                                        var p = o.match(a.define.event.regex);
                                        if (p)
                                            for (var q = p[1], r = p[2] ? p[2] : void 0, s = {
                                                    callback: f,
                                                    data: e,
                                                    delegated: d ? !0 : !1,
                                                    selector: d,
                                                    selObj: new a.Selector(d),
                                                    type: q,
                                                    namespace: r,
                                                    unbindSelfOnTrigger: k.unbindSelfOnTrigger,
                                                    unbindAllBindersOnTrigger: k.unbindAllBindersOnTrigger,
                                                    binders: i
                                                }, t = 0; t < i.length; t++) {
                                                var u = i[t]._private;
                                                u.listeners = u.listeners || [], u.listeners.push(s)
                                            }
                                    }
                                }
                            }
                        return g
                    }
            },
            eventAliasesOn: function(b) {
                var c = b;
                c.addListener = c.listen = c.bind = c.on, c.removeListener = c.unlisten = c.unbind = c.off, c.emit = c.trigger, c.pon = c.promiseOn = function(b, c) {
                    var d = this,
                        e = Array.prototype.slice.call(arguments, 0);
                    return new a.Promise(function(a, b) {
                        var c = function(b) {
                                d.off.apply(d, g), a(b)
                            },
                            f = e.concat([c]),
                            g = f.concat([]);
                        d.on.apply(d, f)
                    })
                }
            },
            off: function(b) {
                var c = {};
                return b = a.util.extend({}, c, b),
                    function(b, c, d) {
                        var e = this,
                            f = void 0 !== e.length,
                            g = f ? e : [e],
                            h = a.is.string(b);
                        if (0 === arguments.length) {
                            for (var i = 0; i < g.length; i++) g[i]._private.listeners = [];
                            return e
                        }
                        if ((a.is.fn(c) || c === !1) && (d = c, c = void 0), h) {
                            var j = {};
                            j[b] = d, b = j
                        }
                        for (var k in b) {
                            d = b[k], d === !1 && (d = a.define.event.falseCallback), k = k.split(/\s+/);
                            for (var l = 0; l < k.length; l++) {
                                var m = k[l];
                                if (!a.is.emptyString(m)) {
                                    var n = m.match(a.define.event.optionalTypeRegex);
                                    if (n)
                                        for (var o = n[1] ? n[1] : void 0, p = n[2] ? n[2] : void 0, i = 0; i < g.length; i++)
                                            for (var q = g[i]._private.listeners = g[i]._private.listeners || [], r = 0; r < q.length; r++) {
                                                var s = q[r],
                                                    t = !p || p === s.namespace,
                                                    u = !o || s.type === o,
                                                    v = !d || d === s.callback,
                                                    w = t && u && v;
                                                w && (q.splice(r, 1), r--)
                                            }
                                }
                            }
                        }
                        return e
                    }
            },
            trigger: function(b) {
                var c = {};
                return b = a.util.extend({}, c, b),
                    function(c, d, e) {
                        var f = this,
                            g = void 0 !== f.length,
                            h = g ? f : [f],
                            i = a.is.string(c),
                            j = a.is.plainObject(c),
                            k = a.is.event(c),
                            l = this._private.cy || (a.is.core(this) ? this : null),
                            m = l ? l.hasCompoundNodes() : !1;
                        if (i) {
                            var n = c.split(/\s+/);
                            c = [];
                            for (var o = 0; o < n.length; o++) {
                                var p = n[o];
                                if (!a.is.emptyString(p)) {
                                    var q = p.match(a.define.event.regex),
                                        r = q[1],
                                        s = q[2] ? q[2] : void 0;
                                    c.push({
                                        type: r,
                                        namespace: s
                                    })
                                }
                            }
                        } else if (j) {
                            var t = c;
                            c = [t]
                        }
                        d ? a.is.array(d) || (d = [d]) : d = [];
                        for (var o = 0; o < c.length; o++)
                            for (var u = c[o], v = 0; v < h.length; v++) {
                                var p, w = h[v],
                                    x = w._private.listeners = w._private.listeners || [],
                                    y = a.is.element(w),
                                    z = y || b.layout;
                                if (k ? (p = u, p.cyTarget = p.cyTarget || w, p.cy = p.cy || l) : p = new a.Event(u, {
                                        cyTarget: w,
                                        cy: l,
                                        namespace: u.namespace
                                    }), u.layout && (p.layout = u.layout), b.layout && (p.layout = w), p.cyPosition) {
                                    var A = p.cyPosition,
                                        B = l.zoom(),
                                        C = l.pan();
                                    p.cyRenderedPosition = {
                                        x: A.x * B + C.x,
                                        y: A.y * B + C.y
                                    }
                                }
                                e && (x = [{
                                    namespace: p.namespace,
                                    type: p.type,
                                    callback: e
                                }]);
                                for (var D = 0; D < x.length; D++) {
                                    var E = x[D],
                                        F = !E.namespace || E.namespace === p.namespace,
                                        G = E.type === p.type,
                                        H = E.delegated ? w !== p.cyTarget && a.is.element(p.cyTarget) && E.selObj.matches(p.cyTarget) : !0,
                                        I = F && G && H;
                                    if (I) {
                                        var J = [p];
                                        if (J = J.concat(d), E.data ? p.data = E.data : p.data = void 0, (E.unbindSelfOnTrigger || E.unbindAllBindersOnTrigger) && (x.splice(D, 1), D--), E.unbindAllBindersOnTrigger)
                                            for (var K = E.binders, L = 0; L < K.length; L++) {
                                                var M = K[L];
                                                if (M && M !== w)
                                                    for (var N = M._private.listeners, O = 0; O < N.length; O++) {
                                                        var P = N[O];
                                                        P === E && (N.splice(O, 1), O--)
                                                    }
                                            }
                                        var Q = E.delegated ? p.cyTarget : w,
                                            R = E.callback.apply(Q, J);
                                        (R === !1 || p.isPropagationStopped()) && (z = !1, R === !1 && (p.stopPropagation(), p.preventDefault()))
                                    }
                                }
                                if (z) {
                                    var S = m ? w._private.parent : null,
                                        T = null != S && 0 !== S.length;
                                    T ? (S = S[0], S.trigger(p)) : l.trigger(p)
                                }
                            }
                        return f
                    }
            },
            animated: function(b) {
                var c = {};
                return b = a.util.extend({}, c, b),
                    function() {
                        var a = this,
                            b = void 0 !== a.length,
                            c = b ? a : [a],
                            d = this._private.cy || this;
                        if (!d.styleEnabled()) return !1;
                        var e = c[0];
                        return e ? e._private.animation.current.length > 0 : void 0
                    }
            },
            clearQueue: function(b) {
                var c = {};
                return b = a.util.extend({}, c, b),
                    function() {
                        var a = this,
                            b = void 0 !== a.length,
                            c = b ? a : [a],
                            d = this._private.cy || this;
                        if (!d.styleEnabled()) return this;
                        for (var e = 0; e < c.length; e++) {
                            var f = c[e];
                            f._private.animation.queue = []
                        }
                        return this
                    }
            },
            delay: function(b) {
                var c = {};
                return b = a.util.extend({}, c, b),
                    function(a, b) {
                        var c = this._private.cy || this;
                        return c.styleEnabled() ? (this.animate({
                            delay: a
                        }, {
                            duration: a,
                            complete: b
                        }), this) : this
                    }
            },
            animate: function(b) {
                var c = {};
                return b = a.util.extend({}, c, b),
                    function(a, b) {
                        var c = this,
                            d = void 0 !== c.length,
                            e = d ? c : [c],
                            f = this._private.cy || this,
                            g = !d,
                            h = !g;
                        if (!f.styleEnabled()) return this;
                        var i, j = +new Date,
                            k = f.style();
                        switch (void 0 === b && (b = {}), void 0 === b.duration && (b.duration = 400), b.duration) {
                            case "slow":
                                b.duration = 600;
                                break;
                            case "fast":
                                b.duration = 200
                        }
                        var l = !0;
                        if (a)
                            for (var m in a) {
                                l = !1;
                                break
                            }
                        if (l) return this;
                        if (a.css && h && (a.css = k.getPropsList(a.css)), a.renderedPosition && h) {
                            var n = a.renderedPosition,
                                o = f.pan(),
                                p = f.zoom();
                            a.position = {
                                x: (n.x - o.x) / p,
                                y: (n.y - o.y) / p
                            }
                        }
                        if (a.panBy && g) {
                            var q = a.panBy,
                                r = f.pan();
                            a.pan = {
                                x: r.x + q.x,
                                y: r.y + q.y
                            }
                        }
                        var s = a.center || a.centre;
                        if (s && g) {
                            var t = f.getCenterPan(s.eles, a.zoom);
                            t && (a.pan = t)
                        }
                        if (a.fit && g) {
                            var u = a.fit,
                                v = f.getFitViewport(u.eles || u.boundingBox, u.padding);
                            v && (a.pan = v.pan, a.zoom = v.zoom)
                        }
                        for (var m = 0; m < e.length; m++) {
                            var w = e[m];
                            i = w.animated() && (void 0 === b.queue || b.queue) ? w._private.animation.queue : w._private.animation.current, i.push({
                                properties: a,
                                duration: b.duration,
                                params: b,
                                callTime: j
                            })
                        }
                        return h && f.addToAnimationPool(this), this
                    }
            },
            stop: function(b) {
                var c = {};
                return b = a.util.extend({}, c, b),
                    function(a, b) {
                        var c = this,
                            d = void 0 !== c.length,
                            e = d ? c : [c],
                            f = this._private.cy || this;
                        if (!f.styleEnabled()) return this;
                        for (var g = 0; g < e.length; g++) {
                            for (var h = e[g], i = h._private.animation.current, j = 0; j < i.length; j++) {
                                var k = i[j];
                                b && (k.duration = 0)
                            }
                            a && (h._private.animation.queue = []), b || (h._private.animation.current = [])
                        }
                        return f.notify({
                            collection: this,
                            type: "draw"
                        }), this
                    }
            }
        }
    }(cytoscape), function(a) {
        "use strict";
        a.fn.selector = function(b, c) {
            for (var d in b) {
                var e = b[d];
                a.Selector.prototype[d] = e
            }
        }, a.Selector = function(b, c) {
            if (!(this instanceof a.Selector)) return new a.Selector(b, c);
            void 0 === c && void 0 !== b && (c = b, b = void 0);
            var d = this;
            if (d._private = {
                    selectorText: null,
                    invalid: !0
                }, !c || a.is.string(c) && c.match(/^\s*$/)) null == b ? d.length = 0 : (d[0] = g(), d[0].group = b, d.length = 1);
            else if (a.is.element(c)) {
                var e = new a.Collection(d.cy(), [c]);
                d[0] = g(), d[0].collection = e, d.length = 1
            } else if (a.is.collection(c)) d[0] = g(), d[0].collection = c, d.length = 1;
            else if (a.is.fn(c)) d[0] = g(), d[0].filter = c, d.length = 1;
            else {
                if (!a.is.string(c)) return void a.util.error("A selector must be created from a string; found " + c);
                var f = null,
                    g = function() {
                        return {
                            classes: [],
                            colonSelectors: [],
                            data: [],
                            group: null,
                            ids: [],
                            meta: [],
                            collection: null,
                            filter: null,
                            parent: null,
                            ancestor: null,
                            subject: null,
                            child: null,
                            descendant: null
                        }
                    },
                    h = {
                        metaChar: "[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",
                        comparatorOp: "=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",
                        boolOp: "\\?|\\!|\\^",
                        string: '"(?:\\\\"|[^"])+"|' + "'(?:\\\\'|[^'])+'",
                        number: a.util.regex.number,
                        meta: "degree|indegree|outdegree",
                        separator: "\\s*,\\s*",
                        descendant: "\\s+",
                        child: "\\s+>\\s+",
                        subject: "\\$"
                    };
                h.variable = "(?:[\\w-]|(?:\\\\" + h.metaChar + "))+", h.value = h.string + "|" + h.number, h.className = h.variable, h.id = h.variable;
                for (var i = function(a) {
                        return a.replace(new RegExp("\\\\(" + h.metaChar + ")", "g"), function(a, b, c, d) {
                            return b
                        })
                    }, j = h.comparatorOp.split("|"), k = 0; k < j.length; k++) {
                    var l = j[k];
                    h.comparatorOp += "|@" + l
                }
                for (var j = h.comparatorOp.split("|"), k = 0; k < j.length; k++) {
                    var l = j[k];
                    l.indexOf("!") >= 0 || "=" !== l && (h.comparatorOp += "|\\!" + l)
                }
                var m = {
                        group: {
                            query: !0,
                            regex: "(node|edge|\\*)",
                            populate: function(a) {
                                this.group = "*" == a ? a : a + "s"
                            }
                        },
                        state: {
                            query: !0,
                            regex: "(:selected|:unselected|:locked|:unlocked|:visible|:hidden|:transparent|:grabbed|:free|:removed|:inside|:grabbable|:ungrabbable|:animated|:unanimated|:selectable|:unselectable|:orphan|:nonorphan|:parent|:child|:loop|:simple|:active|:inactive|:touch|:backgrounding|:nonbackgrounding)",
                            populate: function(a) {
                                this.colonSelectors.push(a)
                            }
                        },
                        id: {
                            query: !0,
                            regex: "\\#(" + h.id + ")",
                            populate: function(a) {
                                this.ids.push(i(a))
                            }
                        },
                        className: {
                            query: !0,
                            regex: "\\.(" + h.className + ")",
                            populate: function(a) {
                                this.classes.push(i(a))
                            }
                        },
                        dataExists: {
                            query: !0,
                            regex: "\\[\\s*(" + h.variable + ")\\s*\\]",
                            populate: function(a) {
                                this.data.push({
                                    field: i(a)
                                })
                            }
                        },
                        dataCompare: {
                            query: !0,
                            regex: "\\[\\s*(" + h.variable + ")\\s*(" + h.comparatorOp + ")\\s*(" + h.value + ")\\s*\\]",
                            populate: function(a, b, c) {
                                var d = null != new RegExp("^" + h.string + "$").exec(c);
                                c = d ? c.substring(1, c.length - 1) : parseFloat(c), this.data.push({
                                    field: i(a),
                                    operator: b,
                                    value: c
                                })
                            }
                        },
                        dataBool: {
                            query: !0,
                            regex: "\\[\\s*(" + h.boolOp + ")\\s*(" + h.variable + ")\\s*\\]",
                            populate: function(a, b) {
                                this.data.push({
                                    field: i(b),
                                    operator: a
                                })
                            }
                        },
                        metaCompare: {
                            query: !0,
                            regex: "\\[\\[\\s*(" + h.meta + ")\\s*(" + h.comparatorOp + ")\\s*(" + h.number + ")\\s*\\]\\]",
                            populate: function(a, b, c) {
                                this.meta.push({
                                    field: i(a),
                                    operator: b,
                                    value: parseFloat(c)
                                })
                            }
                        },
                        nextQuery: {
                            separator: !0,
                            regex: h.separator,
                            populate: function() {
                                d[++k] = g(), f = null
                            }
                        },
                        child: {
                            separator: !0,
                            regex: h.child,
                            populate: function() {
                                var a = g();
                                a.parent = this, a.subject = f, d[k] = a
                            }
                        },
                        descendant: {
                            separator: !0,
                            regex: h.descendant,
                            populate: function() {
                                var a = g();
                                a.ancestor = this, a.subject = f, d[k] = a
                            }
                        },
                        subject: {
                            modifier: !0,
                            regex: h.subject,
                            populate: function() {
                                return null != f && this.subject != this ? (a.util.error("Redefinition of subject in selector `" + c + "`"), !1) : (f = this, void(this.subject = this))
                            }
                        }
                    },
                    n = 0;
                for (var o in m) m[n] = m[o], m[n].name = o, n++;
                m.length = n, d._private.selectorText = c;
                var p = c,
                    k = 0,
                    q = function(b) {
                        for (var c, d, e, f = 0; f < m.length; f++) {
                            var g = m[f],
                                h = g.name;
                            if (!a.is.fn(b) || b(h, g)) {
                                var i = p.match(new RegExp("^" + g.regex));
                                if (null != i) {
                                    d = i, c = g, e = h;
                                    var j = i[0];
                                    p = p.substring(j.length);
                                    break
                                }
                            }
                        }
                        return {
                            expr: c,
                            match: d,
                            name: e
                        }
                    },
                    r = function() {
                        var a = p.match(/^\s+/);
                        if (a) {
                            var b = a[0];
                            p = p.substring(b.length)
                        }
                    };
                for (d[0] = g(), r();;) {
                    var s = q();
                    if (null == s.expr) return void a.util.error("The selector `" + c + "`is invalid");
                    for (var t = [], n = 1; n < s.match.length; n++) t.push(s.match[n]);
                    var u = s.expr.populate.apply(d[k], t);
                    if (u === !1) return;
                    if (p.match(/^\s*$/)) break
                }
                for (d.length = k + 1, n = 0; n < d.length; n++) {
                    var v = d[n];
                    if (null != v.subject) {
                        for (; v.subject != v;)
                            if (null != v.parent) {
                                var w = v.parent,
                                    x = v;
                                x.parent = null, w.child = x, v = w
                            } else {
                                if (null == v.ancestor) {
                                    a.util.error("When adjusting references for the selector `" + v + "`, neither parent nor ancestor was found");
                                    break
                                }
                                var y = v.ancestor,
                                    z = v;
                                z.ancestor = null, y.descendant = z, v = y
                            }
                        d[n] = v.subject
                    }
                }
                if (null != b)
                    for (var n = 0; n < d.length; n++) {
                        if (null != d[n].group && d[n].group != b) return void a.util.error("Group `" + d[n].group + "` conflicts with implicit group `" + b + "` in selector `" + c + "`");
                        d[n].group = b
                    }
            }
            d._private.invalid = !1
        }, a.selfn = a.Selector.prototype, a.selfn.size = function() {
            return this.length
        }, a.selfn.eq = function(a) {
            return this[a]
        }, a.selfn.find = function() {};
        var b = function(c, d) {
            if (null != c.group && "*" != c.group && c.group != d._private.group) return !1;
            for (var e = d.cy(), f = !0, g = 0; g < c.colonSelectors.length; g++) {
                var h = c.colonSelectors[g];
                switch (h) {
                    case ":selected":
                        f = d.selected();
                        break;
                    case ":unselected":
                        f = !d.selected();
                        break;
                    case ":selectable":
                        f = d.selectable();
                        break;
                    case ":unselectable":
                        f = !d.selectable();
                        break;
                    case ":locked":
                        f = d.locked();
                        break;
                    case ":unlocked":
                        f = !d.locked();
                        break;
                    case ":visible":
                        f = d.visible();
                        break;
                    case ":hidden":
                        f = !d.visible();
                        break;
                    case ":transparent":
                        f = d.transparent();
                        break;
                    case ":grabbed":
                        f = d.grabbed();
                        break;
                    case ":free":
                        f = !d.grabbed();
                        break;
                    case ":removed":
                        f = d.removed();
                        break;
                    case ":inside":
                        f = !d.removed();
                        break;
                    case ":grabbable":
                        f = d.grabbable();
                        break;
                    case ":ungrabbable":
                        f = !d.grabbable();
                        break;
                    case ":animated":
                        f = d.animated();
                        break;
                    case ":unanimated":
                        f = !d.animated();
                        break;
                    case ":parent":
                        f = d.isNode() && d.children().nonempty();
                        break;
                    case ":child":
                    case ":nonorphan":
                        f = d.isNode() && d.parent().nonempty();
                        break;
                    case ":orphan":
                        f = d.isNode() && d.parent().empty();
                        break;
                    case ":loop":
                        f = d.isEdge() && d.data("source") === d.data("target");
                        break;
                    case ":simple":
                        f = d.isEdge() && d.data("source") !== d.data("target");
                        break;
                    case ":active":
                        f = d.active();
                        break;
                    case ":inactive":
                        f = !d.active();
                        break;
                    case ":touch":
                        f = a.is.touch();
                        break;
                    case ":backgrounding":
                        f = d.backgrounding();
                        break;
                    case ":nonbackgrounding":
                        f = !d.backgrounding()
                }
                if (!f) break
            }
            if (!f) return !1;
            for (var i = !0, g = 0; g < c.ids.length; g++) {
                var j = c.ids[g],
                    k = d._private.data.id;
                if (i = i && j == k, !i) break
            }
            if (!i) return !1;
            for (var l = !0, g = 0; g < c.classes.length; g++) {
                var m = c.classes[g];
                if (l = l && d.hasClass(m), !l) break
            }
            if (!l) return !1;
            var n = function(b) {
                    for (var d = !0, e = 0; e < c[b.name].length; e++) {
                        var f, g = c[b.name][e],
                            h = g.operator,
                            i = g.value,
                            j = g.field;
                        if (null != h && null != i) {
                            var k = b.fieldValue(j),
                                l = a.is.string(k) || a.is.number(k) ? "" + k : "",
                                m = "" + i,
                                n = !1;
                            h.indexOf("@") >= 0 && (l = l.toLowerCase(), m = m.toLowerCase(), h = h.replace("@", ""), n = !0);
                            var o = !1,
                                p = !1;
                            switch (h.indexOf("!") >= 0 && (h = h.replace("!", ""), o = !0), n && (i = m.toLowerCase(), k = l.toLowerCase()), h) {
                                case "*=":
                                    f = l.search(m) >= 0;
                                    break;
                                case "$=":
                                    f = null != new RegExp(m + "$").exec(l);
                                    break;
                                case "^=":
                                    f = null != new RegExp("^" + m).exec(l);
                                    break;
                                case "=":
                                    f = k === i;
                                    break;
                                case "!=":
                                    f = k !== i;
                                    break;
                                case ">":
                                    f = o ? i >= k : k > i, p = !0;
                                    break;
                                case ">=":
                                    f = o ? i > k : k >= i, p = !0;
                                    break;
                                case "<":
                                    f = o ? k >= i : i > k, p = !0;
                                    break;
                                case "<=":
                                    f = o ? k > i : i >= k, p = !0;
                                    break;
                                default:
                                    f = !1
                            }
                        } else if (null != h) switch (h) {
                            case "?":
                                f = b.fieldTruthy(j);
                                break;
                            case "!":
                                f = !b.fieldTruthy(j);
                                break;
                            case "^":
                                f = b.fieldUndefined(j)
                        } else f = !b.fieldUndefined(j);
                        if (o && !p && (f = !f, p = !0), !f) {
                            d = !1;
                            break
                        }
                    }
                    return d
                },
                o = n({
                    name: "data",
                    fieldValue: function(a) {
                        return d._private.data[a]
                    },
                    fieldRef: function(a) {
                        return "element._private.data." + a
                    },
                    fieldUndefined: function(a) {
                        return void 0 === d._private.data[a]
                    },
                    fieldTruthy: function(a) {
                        return d._private.data[a] ? !0 : !1
                    }
                });
            if (!o) return !1;
            var p = n({
                name: "meta",
                fieldValue: function(a) {
                    return d[a]()
                },
                fieldRef: function(a) {
                    return "element." + a + "()"
                },
                fieldUndefined: function(a) {
                    return null == d[a]()
                },
                fieldTruthy: function(a) {
                    return d[a]() ? !0 : !1
                }
            });
            if (!p) return !1;
            if (null != c.collection) {
                var q = null != c.collection._private.ids[d.id()];
                if (!q) return !1
            }
            if (null != c.filter && 0 === d.collection().filter(c.filter).size()) return !1;
            var r = function(a, c) {
                if (null != a) {
                    var d = !1;
                    if (!e.hasCompoundNodes()) return !1;
                    c = c();
                    for (var f = 0; f < c.length; f++)
                        if (b(a, c[f])) {
                            d = !0;
                            break
                        }
                    return d
                }
                return !0
            };
            return r(c.parent, function() {
                return d.parent()
            }) && r(c.ancestor, function() {
                return d.parents()
            }) && r(c.child, function() {
                return d.children()
            }) && r(c.descendant, function() {
                return d.descendants()
            }) ? !0 : !1
        };
        a.selfn.filter = function(c) {
            var d = this,
                e = c.cy();
            if (d._private.invalid) return new a.Collection(e);
            var f = function(a, c) {
                for (var e = 0; e < d.length; e++) {
                    var f = d[e];
                    if (b(f, c)) return !0
                }
                return !1
            };
            null == d._private.selectorText && (f = function() {
                return !0
            });
            var g = c.filter(f);
            return g
        }, a.selfn.matches = function(a) {
            var c = this;
            if (c._private.invalid) return !1;
            for (var d = 0; d < c.length; d++) {
                var e = c[d];
                if (b(e, a)) return !0
            }
            return !1
        }, a.selfn.toString = a.selfn.selector = function() {
            for (var b = "", c = function(b, c) {
                    return a.is.string(b) ? c ? '"' + b + '"' : b : ""
                }, d = function(a) {
                    var b = "";
                    a.subject === a && (b += "$");
                    var f = c(a.group);
                    b += f.substring(0, f.length - 1);
                    for (var g = 0; g < a.data.length; g++) {
                        var h = a.data[g];
                        b += h.value ? "[" + h.field + c(h.operator) + c(h.value, !0) + "]" : "[" + c(h.operator) + h.field + "]"
                    }
                    for (var g = 0; g < a.meta.length; g++) {
                        var i = a.meta[g];
                        b += "[[" + i.field + c(i.operator) + c(i.value, !0) + "]]"
                    }
                    for (var g = 0; g < a.colonSelectors.length; g++) {
                        var j = a.colonSelectors[e];
                        b += j
                    }
                    for (var g = 0; g < a.ids.length; g++) {
                        var j = "#" + a.ids[e];
                        b += j
                    }
                    for (var g = 0; g < a.classes.length; g++) {
                        var j = "." + a.classes[e];
                        b += j
                    }
                    return null != a.parent && (b = d(a.parent) + " > " + b), null != a.ancestor && (b = d(a.ancestor) + " " + b), null != a.child && (b += " > " + d(a.child)), null != a.descendant && (b += " " + d(a.descendant)), b
                }, e = 0; e < this.length; e++) {
                var f = this[e];
                b += d(f), this.length > 1 && e < this.length - 1 && (b += ", ")
            }
            return b
        }
    }(cytoscape), function(a) {
        "use strict";
        a.Style = function(b) {
                return this instanceof a.Style ? a.is.core(b) ? (this._private = {
                    cy: b,
                    coreStyle: {},
                    newStyle: !0
                }, this.length = 0, void this.addDefaultStylesheet()) : void a.util.error("A style must have a core reference") : new a.Style(b)
            }, a.style = a.Style, a.styfn = a.Style.prototype, a.fn.style = function(b, c) {
                for (var d in b) {
                    var e = b[d];
                    a.Style.prototype = e
                }
            },
            function() {
                var b = a.util.regex.number,
                    c = a.util.regex.rgbaNoBackRefs,
                    d = a.util.regex.hslaNoBackRefs,
                    e = a.util.regex.hex3,
                    f = a.util.regex.hex6,
                    g = function(a) {
                        return "^" + a + "\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"
                    },
                    h = function(a) {
                        return "^" + a + "\\s*\\(([\\w\\.]+)\\s*\\,\\s*(" + b + ")\\s*\\,\\s*(" + b + ")\\s*,\\s*(" + b + "|\\w+|" + c + "|" + d + "|" + e + "|" + f + ")\\s*\\,\\s*(" + b + "|\\w+|" + c + "|" + d + "|" + e + "|" + f + ")\\)$"
                    };
                a.style.types = {
                    time: {
                        number: !0,
                        min: 0,
                        units: "s|ms",
                        implicitUnits: "ms"
                    },
                    percent: {
                        number: !0,
                        min: 0,
                        max: 100,
                        units: "%"
                    },
                    zeroOneNumber: {
                        number: !0,
                        min: 0,
                        max: 1,
                        unitless: !0
                    },
                    nOneOneNumber: {
                        number: !0,
                        min: -1,
                        max: 1,
                        unitless: !0
                    },
                    nonNegativeInt: {
                        number: !0,
                        min: 0,
                        integer: !0,
                        unitless: !0
                    },
                    position: {
                        enums: ["parent", "origin"]
                    },
                    autoSize: {
                        number: !0,
                        min: 0,
                        enums: ["auto"]
                    },
                    number: {
                        number: !0
                    },
                    size: {
                        number: !0,
                        min: 0
                    },
                    bgSize: {
                        number: !0,
                        min: 0,
                        allowPercent: !0
                    },
                    bgWH: {
                        number: !0,
                        min: 0,
                        allowPercent: !0,
                        enums: ["auto"]
                    },
                    bgPos: {
                        number: !0,
                        allowPercent: !0
                    },
                    bgRepeat: {
                        enums: ["repeat", "repeat-x", "repeat-y", "no-repeat"]
                    },
                    bgFit: {
                        enums: ["none", "contain", "cover"]
                    },
                    bgClip: {
                        enums: ["none", "node"]
                    },
                    color: {
                        color: !0
                    },
                    lineStyle: {
                        enums: ["solid", "dotted", "dashed"]
                    },
                    borderStyle: {
                        enums: ["solid", "dotted", "dashed", "double"]
                    },
                    curveStyle: {
                        enums: ["bezier", "unbundled-bezier", "haystack"]
                    },
                    fontFamily: {
                        regex: '^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$'
                    },
                    fontVariant: {
                        enums: ["small-caps", "normal"]
                    },
                    fontStyle: {
                        enums: ["italic", "normal", "oblique"]
                    },
                    fontWeight: {
                        enums: ["normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "800", "900", 100, 200, 300, 400, 500, 600, 700, 800, 900]
                    },
                    textDecoration: {
                        enums: ["none", "underline", "overline", "line-through"]
                    },
                    textTransform: {
                        enums: ["none", "uppercase", "lowercase"]
                    },
                    textWrap: {
                        enums: ["none", "wrap"]
                    },
                    textBackgroundShape: {
                        enums: ["rectangle", "roundrectangle"]
                    },
                    nodeShape: {
                        enums: ["rectangle", "roundrectangle", "ellipse", "triangle", "square", "pentagon", "hexagon", "heptagon", "octagon", "star", "diamond", "vee", "rhomboid"]
                    },
                    compoundIncludeLabels: {
                        enums: ["include", "exclude"]
                    },
                    arrowShape: {
                        enums: ["tee", "triangle", "triangle-tee", "triangle-backcurve", "half-triangle-overshot", "square", "circle", "diamond", "none"]
                    },
                    arrowFill: {
                        enums: ["filled", "hollow"]
                    },
                    display: {
                        enums: ["element", "none"]
                    },
                    visibility: {
                        enums: ["hidden", "visible"]
                    },
                    valign: {
                        enums: ["top", "center", "bottom"]
                    },
                    halign: {
                        enums: ["left", "center", "right"]
                    },
                    text: {
                        string: !0
                    },
                    data: {
                        mapping: !0,
                        regex: g("data")
                    },
                    layoutData: {
                        mapping: !0,
                        regex: g("layoutData")
                    },
                    scratch: {
                        mapping: !0,
                        regex: g("scratch")
                    },
                    mapData: {
                        mapping: !0,
                        regex: h("mapData")
                    },
                    mapLayoutData: {
                        mapping: !0,
                        regex: h("mapLayoutData")
                    },
                    mapScratch: {
                        mapping: !0,
                        regex: h("mapScratch")
                    },
                    fn: {
                        mapping: !0,
                        fn: !0
                    },
                    url: {
                        regex: "^url\\s*\\(\\s*([^\\s]+)\\s*\\s*\\)|none|(.+)$"
                    },
                    propList: {
                        propList: !0
                    },
                    angle: {
                        number: !0,
                        units: "deg|rad"
                    },
                    textRotation: {
                        enums: ["none", "autorotate"]
                    }
                };
                var i = a.style.types,
                    j = a.style.properties = [{
                        name: "text-valign",
                        type: i.valign
                    }, {
                        name: "text-halign",
                        type: i.halign
                    }, {
                        name: "color",
                        type: i.color
                    }, {
                        name: "content",
                        type: i.text
                    }, {
                        name: "text-outline-color",
                        type: i.color
                    }, {
                        name: "text-outline-width",
                        type: i.size
                    }, {
                        name: "text-outline-opacity",
                        type: i.zeroOneNumber
                    }, {
                        name: "text-opacity",
                        type: i.zeroOneNumber
                    }, {
                        name: "text-background-color",
                        type: i.color
                    }, {
                        name: "text-background-opacity",
                        type: i.zeroOneNumber
                    }, {
                        name: "text-border-opacity",
                        type: i.zeroOneNumber
                    }, {
                        name: "text-border-color",
                        type: i.color
                    }, {
                        name: "text-border-width",
                        type: i.size
                    }, {
                        name: "text-border-style",
                        type: i.borderStyle
                    }, {
                        name: "text-background-shape",
                        type: i.textBackgroundShape
                    }, {
                        name: "text-transform",
                        type: i.textTransform
                    }, {
                        name: "text-wrap",
                        type: i.textWrap
                    }, {
                        name: "text-max-width",
                        type: i.size
                    }, {
                        name: "font-family",
                        type: i.fontFamily
                    }, {
                        name: "font-style",
                        type: i.fontStyle
                    }, {
                        name: "font-weight",
                        type: i.fontWeight
                    }, {
                        name: "font-size",
                        type: i.size
                    }, {
                        name: "min-zoomed-font-size",
                        type: i.size
                    }, {
                        name: "edge-text-rotation",
                        type: i.textRotation
                    }, {
                        name: "display",
                        type: i.display
                    }, {
                        name: "visibility",
                        type: i.visibility
                    }, {
                        name: "opacity",
                        type: i.zeroOneNumber
                    }, {
                        name: "z-index",
                        type: i.nonNegativeInt
                    }, {
                        name: "overlay-padding",
                        type: i.size
                    }, {
                        name: "overlay-color",
                        type: i.color
                    }, {
                        name: "overlay-opacity",
                        type: i.zeroOneNumber
                    }, {
                        name: "shadow-blur",
                        type: i.size
                    }, {
                        name: "shadow-color",
                        type: i.color
                    }, {
                        name: "shadow-opacity",
                        type: i.zeroOneNumber
                    }, {
                        name: "shadow-offset-x",
                        type: i.number
                    }, {
                        name: "shadow-offset-y",
                        type: i.number
                    }, {
                        name: "text-shadow-blur",
                        type: i.size
                    }, {
                        name: "text-shadow-color",
                        type: i.color
                    }, {
                        name: "text-shadow-opacity",
                        type: i.zeroOneNumber
                    }, {
                        name: "text-shadow-offset-x",
                        type: i.number
                    }, {
                        name: "text-shadow-offset-y",
                        type: i.number
                    }, {
                        name: "transition-property",
                        type: i.propList
                    }, {
                        name: "transition-duration",
                        type: i.time
                    }, {
                        name: "transition-delay",
                        type: i.time
                    }, {
                        name: "height",
                        type: i.autoSize
                    }, {
                        name: "width",
                        type: i.autoSize
                    }, {
                        name: "shape",
                        type: i.nodeShape
                    }, {
                        name: "background-color",
                        type: i.color
                    }, {
                        name: "background-opacity",
                        type: i.zeroOneNumber
                    }, {
                        name: "background-blacken",
                        type: i.nOneOneNumber
                    }, {
                        name: "border-color",
                        type: i.color
                    }, {
                        name: "border-opacity",
                        type: i.zeroOneNumber
                    }, {
                        name: "border-width",
                        type: i.size
                    }, {
                        name: "border-style",
                        type: i.borderStyle
                    }, {
                        name: "background-image",
                        type: i.url
                    }, {
                        name: "background-image-opacity",
                        type: i.zeroOneNumber
                    }, {
                        name: "background-position-x",
                        type: i.bgPos
                    }, {
                        name: "background-position-y",
                        type: i.bgPos
                    }, {
                        name: "background-repeat",
                        type: i.bgRepeat
                    }, {
                        name: "background-fit",
                        type: i.bgFit
                    }, {
                        name: "background-clip",
                        type: i.bgClip
                    }, {
                        name: "background-width",
                        type: i.bgWH
                    }, {
                        name: "background-height",
                        type: i.bgWH
                    }, {
                        name: "padding-left",
                        type: i.size
                    }, {
                        name: "padding-right",
                        type: i.size
                    }, {
                        name: "padding-top",
                        type: i.size
                    }, {
                        name: "padding-bottom",
                        type: i.size
                    }, {
                        name: "position",
                        type: i.position
                    }, {
                        name: "compound-sizing-wrt-labels",
                        type: i.compoundIncludeLabels
                    }, {
                        name: "line-style",
                        type: i.lineStyle
                    }, {
                        name: "line-color",
                        type: i.color
                    }, {
                        name: "control-point-step-size",
                        type: i.size
                    }, {
                        name: "control-point-distance",
                        type: i.number
                    }, {
                        name: "control-point-weight",
                        type: i.zeroOneNumber
                    }, {
                        name: "curve-style",
                        type: i.curveStyle
                    }, {
                        name: "haystack-radius",
                        type: i.zeroOneNumber
                    }, {
                        name: "source-arrow-shape",
                        type: i.arrowShape
                    }, {
                        name: "target-arrow-shape",
                        type: i.arrowShape
                    }, {
                        name: "mid-source-arrow-shape",
                        type: i.arrowShape
                    }, {
                        name: "mid-target-arrow-shape",
                        type: i.arrowShape
                    }, {
                        name: "source-arrow-color",
                        type: i.color
                    }, {
                        name: "target-arrow-color",
                        type: i.color
                    }, {
                        name: "mid-source-arrow-color",
                        type: i.color
                    }, {
                        name: "mid-target-arrow-color",
                        type: i.color
                    }, {
                        name: "source-arrow-fill",
                        type: i.arrowFill
                    }, {
                        name: "target-arrow-fill",
                        type: i.arrowFill
                    }, {
                        name: "mid-source-arrow-fill",
                        type: i.arrowFill
                    }, {
                        name: "mid-target-arrow-fill",
                        type: i.arrowFill
                    }, {
                        name: "selection-box-color",
                        type: i.color
                    }, {
                        name: "selection-box-opacity",
                        type: i.zeroOneNumber
                    }, {
                        name: "selection-box-border-color",
                        type: i.color
                    }, {
                        name: "selection-box-border-width",
                        type: i.size
                    }, {
                        name: "active-bg-color",
                        type: i.color
                    }, {
                        name: "active-bg-opacity",
                        type: i.zeroOneNumber
                    }, {
                        name: "active-bg-size",
                        type: i.size
                    }, {
                        name: "outside-texture-bg-color",
                        type: i.color
                    }, {
                        name: "outside-texture-bg-opacity",
                        type: i.zeroOneNumber
                    }];
                a.style.pieBackgroundN = 16, j.push({
                    name: "pie-size",
                    type: i.bgSize
                });
                for (var k = 1; k <= a.style.pieBackgroundN; k++) j.push({
                    name: "pie-" + k + "-background-color",
                    type: i.color
                }), j.push({
                    name: "pie-" + k + "-background-size",
                    type: i.percent
                }), j.push({
                    name: "pie-" + k + "-background-opacity",
                    type: i.zeroOneNumber
                });
                for (var k = 0; k < j.length; k++) {
                    var l = j[k];
                    j[l.name] = l
                }
            }(), a.styfn.addDefaultStylesheet = function() {
                var a = "Helvetica",
                    b = "normal",
                    c = "normal",
                    d = "#000",
                    e = "none",
                    f = 16,
                    g = 9999;
                this.selector("node, edge").css({
                    "text-valign": "top",
                    "text-halign": "center",
                    color: d,
                    "text-outline-color": "#000",
                    "text-outline-width": 0,
                    "text-outline-opacity": 1,
                    "text-opacity": 1,
                    "text-decoration": "none",
                    "text-transform": e,
                    "text-wrap": "none",
                    "text-max-width": g,
                    "text-background-color": "#000",
                    "text-background-opacity": 0,
                    "text-border-opacity": 0,
                    "text-border-width": 0,
                    "text-border-style": "solid",
                    "text-border-color": "#000",
                    "text-background-shape": "rectangle",
                    "font-family": a,
                    "font-style": b,
                    "font-weight": c,
                    "font-size": f,
                    "min-zoomed-font-size": 0,
                    "edge-text-rotation": "none",
                    visibility: "visible",
                    display: "element",
                    opacity: 1,
                    "z-index": 0,
                    content: "",
                    "overlay-opacity": 0,
                    "overlay-color": "#000",
                    "overlay-padding": 10,
                    "shadow-opacity": 0,
                    "shadow-color": "#000",
                    "shadow-blur": 10,
                    "shadow-offset-x": 0,
                    "shadow-offset-y": 0,
                    "text-shadow-opacity": 0,
                    "text-shadow-color": "#000",
                    "text-shadow-blur": 5,
                    "text-shadow-offset-x": 0,
                    "text-shadow-offset-y": 0,
                    "transition-property": "none",
                    "transition-duration": 0,
                    "transition-delay": 0,
                    "background-blacken": 0,
                    "background-color": "#888",
                    "background-opacity": 1,
                    "background-image": "none",
                    "background-image-opacity": 1,
                    "background-position-x": "50%",
                    "background-position-y": "50%",
                    "background-repeat": "no-repeat",
                    "background-fit": "none",
                    "background-clip": "node",
                    "background-width": "auto",
                    "background-height": "auto",
                    "border-color": "#000",
                    "border-opacity": 1,
                    "border-width": 0,
                    "border-style": "solid",
                    height: 30,
                    width: 30,
                    shape: "ellipse",
                    "padding-top": 0,
                    "padding-bottom": 0,
                    "padding-left": 0,
                    "padding-right": 0,
                    position: "origin",
                    "compound-sizing-wrt-labels": "include",
                    "pie-size": "100%",
                    "pie-1-background-color": "black",
                    "pie-2-background-color": "black",
                    "pie-3-background-color": "black",
                    "pie-4-background-color": "black",
                    "pie-5-background-color": "black",
                    "pie-6-background-color": "black",
                    "pie-7-background-color": "black",
                    "pie-8-background-color": "black",
                    "pie-9-background-color": "black",
                    "pie-10-background-color": "black",
                    "pie-11-background-color": "black",
                    "pie-12-background-color": "black",
                    "pie-13-background-color": "black",
                    "pie-14-background-color": "black",
                    "pie-15-background-color": "black",
                    "pie-16-background-color": "black",
                    "pie-1-background-size": "0%",
                    "pie-2-background-size": "0%",
                    "pie-3-background-size": "0%",
                    "pie-4-background-size": "0%",
                    "pie-5-background-size": "0%",
                    "pie-6-background-size": "0%",
                    "pie-7-background-size": "0%",
                    "pie-8-background-size": "0%",
                    "pie-9-background-size": "0%",
                    "pie-10-background-size": "0%",
                    "pie-11-background-size": "0%",
                    "pie-12-background-size": "0%",
                    "pie-13-background-size": "0%",
                    "pie-14-background-size": "0%",
                    "pie-15-background-size": "0%",
                    "pie-16-background-size": "0%",
                    "pie-1-background-opacity": 1,
                    "pie-2-background-opacity": 1,
                    "pie-3-background-opacity": 1,
                    "pie-4-background-opacity": 1,
                    "pie-5-background-opacity": 1,
                    "pie-6-background-opacity": 1,
                    "pie-7-background-opacity": 1,
                    "pie-8-background-opacity": 1,
                    "pie-9-background-opacity": 1,
                    "pie-10-background-opacity": 1,
                    "pie-11-background-opacity": 1,
                    "pie-12-background-opacity": 1,
                    "pie-13-background-opacity": 1,
                    "pie-14-background-opacity": 1,
                    "pie-15-background-opacity": 1,
                    "pie-16-background-opacity": 1,
                    "source-arrow-shape": "none",
                    "mid-source-arrow-shape": "none",
                    "target-arrow-shape": "none",
                    "mid-target-arrow-shape": "none",
                    "source-arrow-color": "#ddd",
                    "mid-source-arrow-color": "#ddd",
                    "target-arrow-color": "#ddd",
                    "mid-target-arrow-color": "#ddd",
                    "source-arrow-fill": "filled",
                    "mid-source-arrow-fill": "filled",
                    "target-arrow-fill": "filled",
                    "mid-target-arrow-fill": "filled",
                    "line-style": "solid",
                    "line-color": "#ddd",
                    "control-point-step-size": 40,
                    "control-point-weight": .5,
                    "curve-style": "bezier",
                    "haystack-radius": .8
                }).selector("$node > node").css({
                    width: "auto",
                    height: "auto",
                    shape: "rectangle",
                    "background-opacity": .5,
                    "padding-top": 10,
                    "padding-right": 10,
                    "padding-left": 10,
                    "padding-bottom": 10
                }).selector("edge").css({
                    width: 1
                }).selector(":active").css({
                    "overlay-color": "black",
                    "overlay-padding": 10,
                    "overlay-opacity": .25
                }).selector("core").css({
                    "selection-box-color": "#ddd",
                    "selection-box-opacity": .65,
                    "selection-box-border-color": "#aaa",
                    "selection-box-border-width": 1,
                    "active-bg-color": "black",
                    "active-bg-opacity": .15,
                    "active-bg-size": 30,
                    "outside-texture-bg-color": "#000",
                    "outside-texture-bg-opacity": .125
                }), this.defaultLength = this.length
            }, a.styfn.clear = function() {
                for (var a = 0; a < this.length; a++) this[a] = void 0;
                return this.length = 0, this._private.newStyle = !0, this
            }, a.styfn.resetToDefault = function() {
                return this.clear(), this.addDefaultStylesheet(), this
            }, a.styfn.core = function() {
                return this._private.coreStyle
            }, a.styfn.parse = function(b, c, d, e) {
                var f, g = [b, c, d, e].join("$"),
                    h = this.propCache = this.propCache || {};
                return (f = h[g]) || (f = h[g] = this.parseImpl(b, c, d, e)), a.util.copy(f)
            }, a.styfn.parseImpl = function(b, c, d, e) {
                b = a.util.camel2dash(b);
                var f = a.style.properties[b],
                    g = c,
                    h = a.style.types;
                if (!f) return null;
                if (void 0 === c || null === c) return null;
                var i = a.is.string(c);
                i && (c = a.util.trim(c));
                var j = f.type;
                if (!j) return null;
                if (d && ("" === c || null === c)) return {
                    name: b,
                    value: c,
                    bypass: !0,
                    deleteBypass: !0
                };
                var k = b.match(/pie-(\d+)-background-size/);
                if (a.is.fn(c)) return {
                    name: b,
                    value: c,
                    strValue: "fn",
                    mapped: h.fn,
                    bypass: d,
                    hasPie: k
                };
                var l, m, n, o, p, q;
                if (!i || e);
                else {
                    if ((l = new RegExp(h.data.regex).exec(c)) || (n = new RegExp(h.layoutData.regex).exec(c)) || (p = new RegExp(h.scratch.regex).exec(c))) {
                        if (d) return !1;
                        var r;
                        return r = l ? h.data : n ? h.layoutData : h.scratch, l = l || n || p, {
                            name: b,
                            value: l,
                            strValue: "" + c,
                            mapped: r,
                            field: l[1],
                            bypass: d,
                            hasPie: k
                        }
                    }
                    if ((m = new RegExp(h.mapData.regex).exec(c)) || (o = new RegExp(h.mapLayoutData.regex).exec(c)) || (q = new RegExp(h.mapScratch.regex).exec(c))) {
                        if (d) return !1;
                        var r;
                        if (r = m ? h.mapData : o ? h.mapLayoutData : h.mapScratch, m = m || o || q, !j.color && !j.number) return !1;
                        var s = this.parse(b, m[4]);
                        if (!s || s.mapped) return !1;
                        var t = this.parse(b, m[5]);
                        if (!t || t.mapped) return !1;
                        if (s.value === t.value) return !1;
                        if (j.color) {
                            var u = s.value,
                                v = t.value,
                                w = !(u[0] !== v[0] || u[1] !== v[1] || u[2] !== v[2] || u[3] !== v[3] && (null != u[3] && 1 !== u[3] || null != v[3] && 1 !== v[3]));
                            if (w) return !1
                        }
                        return {
                            name: b,
                            value: m,
                            strValue: "" + c,
                            mapped: r,
                            field: m[1],
                            fieldMin: parseFloat(m[2]),
                            fieldMax: parseFloat(m[3]),
                            valueMin: s.value,
                            valueMax: t.value,
                            bypass: d,
                            hasPie: k
                        }
                    }
                }
                if (j.number) {
                    var x, y = "px";
                    if (j.units && (x = j.units), j.implicitUnits && (y = j.implicitUnits), !j.unitless)
                        if (i) {
                            var z = "px|em" + (j.allowPercent ? "|\\%" : "");
                            x && (z = x);
                            var A = c.match("^(" + a.util.regex.number + ")(" + z + ")?$");
                            A && (c = A[1], x = A[2] || y)
                        } else(!x || j.implicitUnits) && (x = y);
                    if (c = parseFloat(c), isNaN(c) && void 0 === j.enums) return null;
                    if (isNaN(c) && void 0 !== j.enums) {
                        c = g;
                        for (var B = 0; B < j.enums.length; B++) {
                            var C = j.enums[B];
                            if (C === c) return {
                                name: b,
                                value: c,
                                strValue: "" + c,
                                bypass: d
                            }
                        }
                        return null
                    }
                    if (j.integer && !a.is.integer(c)) return null;
                    if (void 0 !== j.min && c < j.min || void 0 !== j.max && c > j.max) return null;
                    var D = {
                        name: b,
                        value: c,
                        strValue: "" + c + (x ? x : ""),
                        units: x,
                        bypass: d,
                        hasPie: k && null != c && 0 !== c && "" !== c
                    };
                    return j.unitless || "px" !== x && "em" !== x || (D.pxValue = "px" !== x && x ? this.getEmSizeInPixels() * c : c), ("ms" === x || "s" === x) && (D.msValue = "ms" === x ? c : 1e3 * c), D
                }
                if (j.propList) {
                    var E = [],
                        F = "" + c;
                    if ("none" === F);
                    else {
                        for (var G = F.split(","), B = 0; B < G.length; B++) {
                            var H = a.util.trim(G[B]);
                            a.style.properties[H] && E.push(H)
                        }
                        if (0 === E.length) return null
                    }
                    return {
                        name: b,
                        value: E,
                        strValue: 0 === E.length ? "none" : E.join(", "),
                        bypass: d
                    }
                }
                if (j.color) {
                    var I = a.util.color2tuple(c);
                    return I ? {
                        name: b,
                        value: I,
                        strValue: "" + c,
                        bypass: d
                    } : null
                }
                if (j.enums) {
                    for (var B = 0; B < j.enums.length; B++) {
                        var C = j.enums[B];
                        if (C === c) return {
                            name: b,
                            value: c,
                            strValue: "" + c,
                            bypass: d
                        }
                    }
                    return null
                }
                if (j.regex) {
                    var J = new RegExp(j.regex),
                        K = J.exec(c);
                    return K ? {
                        name: b,
                        value: K,
                        strValue: "" + c,
                        bypass: d
                    } : null
                }
                return j.string ? {
                    name: b,
                    value: c,
                    strValue: "" + c,
                    bypass: d
                } : null
            }, a.styfn.selector = function(b) {
                var c = "core" === b ? null : new a.Selector(b),
                    d = this.length++;
                return this[d] = {
                    selector: c,
                    properties: [],
                    mappedProperties: [],
                    index: d
                }, this
            }, a.styfn.css = function() {
                var b = arguments;
                switch (b.length) {
                    case 1:
                        for (var c = b[0], d = 0; d < a.style.properties.length; d++) {
                            var e = a.style.properties[d],
                                f = c[e.name];
                            void 0 === f && (f = c[a.util.dash2camel(e.name)]), void 0 !== f && this.cssRule(e.name, f)
                        }
                        break;
                    case 2:
                        this.cssRule(b[0], b[1])
                }
                return this
            }, a.styfn.style = a.styfn.css, a.styfn.cssRule = function(a, b) {
                var c = this.parse(a, b);
                if (c) {
                    var d = this.length - 1;
                    this[d].properties.push(c), this[d].properties[c.name] = c, c.hasPie && (this._private.hasPie = !0), c.mapped && this[d].mappedProperties.push(c);
                    var e = !this[d].selector;
                    e && (this._private.coreStyle[c.name] = c)
                }
                return this
            }
    }(cytoscape), function(a) {
        "use strict";
        a.styfn.apply = function(a) {
            var b = this;
            b._private.newStyle && (this._private.contextStyles = {}, this._private.propDiffs = {});
            for (var c = 0; c < a.length; c++) {
                var d = a[c],
                    e = b.getContextMeta(d),
                    f = b.getContextStyle(e),
                    g = b.applyContextStyle(e, f, d);
                b.updateTransitions(d, g.diffProps), b.updateStyleHints(d)
            }
            b._private.newStyle = !1
        }, a.styfn.getPropertiesDiff = function(a, b) {
            var c = this,
                d = c._private.propDiffs = c._private.propDiffs || {},
                e = a + "-" + b,
                f = d[e];
            if (f) return f;
            for (var g = [], h = {}, i = 0; i < c.length; i++) {
                var j = c[i],
                    k = "t" === a[i],
                    l = "t" === b[i],
                    m = k !== l,
                    n = j.mappedProperties.length > 0;
                if (m || n) {
                    var o;
                    m && n ? o = j.properties : m ? o = j.properties : n && (o = j.mappedProperties);
                    for (var p = 0; p < o.length; p++) {
                        for (var q = o[p], r = q.name, s = !1, t = i + 1; t < c.length; t++) {
                            var u = c[t],
                                v = "t" === b[t];
                            if (v && (s = null != u.properties[q.name])) break
                        }
                        h[r] || s || (h[r] = !0, g.push(r))
                    }
                }
            }
            return d[e] = g, g
        }, a.styfn.getContextMeta = function(a) {
            var b, c = this,
                d = "",
                e = a._private.styleCxtKey || "";
            c._private.newStyle && (e = "");
            for (var f = 0; f < c.length; f++) {
                var g = c[f],
                    h = g.selector && g.selector.matches(a);
                d += h ? "t" : "f"
            }
            return b = c.getPropertiesDiff(e, d), a._private.styleCxtKey = d, {
                key: d,
                diffPropNames: b
            }
        }, a.styfn.getContextStyle = function(a) {
            var b = a.key,
                c = this,
                d = this._private.contextStyles = this._private.contextStyles || {};
            if (d[b]) return d[b];
            for (var e = {
                    _private: {
                        key: b
                    }
                }, f = 0; f < c.length; f++) {
                var g = c[f],
                    h = "t" === b[f];
                if (h)
                    for (var i = 0; i < g.properties.length; i++) {
                        var j = g.properties[i],
                            k = e[j.name] = j;
                        k.context = g
                    }
            }
            return d[b] = e, e
        }, a.styfn.applyContextStyle = function(a, b, c) {
            for (var d = this, e = a.diffPropNames, f = {}, g = 0; g < e.length; g++) {
                var h = e[g],
                    i = b[h],
                    j = c._private.style[h];
                if (i && j !== i) {
                    var k = f[h] = {
                        prev: j
                    };
                    d.applyParsedProperty(c, i), k.next = c._private.style[h], k.next && k.next.bypass && (k.next = k.next.bypassed)
                }
            }
            return {
                diffProps: f
            }
        }, a.styfn.updateStyleHints = function(b) {
            var c = b._private,
                d = this,
                e = c.style,
                f = !1;
            if ("nodes" === c.group && d._private.hasPie)
                for (var g = 1; g <= a.style.pieBackgroundN; g++) {
                    var h = c.style["pie-" + g + "-background-size"].value;
                    if (h > 0) {
                        f = !0;
                        break
                    }
                }
            c.hasPie = f;
            var i = e["text-transform"].strValue,
                j = e.content.strValue,
                k = e["font-style"].strValue,
                h = e["font-size"].pxValue + "px",
                l = e["font-family"].strValue,
                m = e["font-weight"].strValue,
                n = e["text-valign"].strValue,
                o = e["text-valign"].strValue,
                p = e["text-outline-width"].pxValue,
                q = e["text-wrap"].strValue,
                r = e["text-max-width"].pxValue;
            c.labelKey = k + "$" + h + "$" + l + "$" + m + "$" + j + "$" + i + "$" + n + "$" + o + "$" + p + "$" + q + "$" + r, c.fontKey = k + "$" + m + "$" + h + "$" + l;
            var s = e.width.pxValue,
                t = e.height.pxValue,
                u = e["border-width"].pxValue;
            if (c.boundingBoxKey = s + "$" + t + "$" + u, "edges" === b._private.group) {
                var v = e["control-point-step-size"].pxValue,
                    w = e["control-point-distance"] ? e["control-point-distance"].pxValue : void 0,
                    x = e["control-point-weight"].value,
                    y = e["curve-style"].strValue;
                c.boundingBoxKey += "$" + v + "$" + w + "$" + x + "$" + y
            }
            c.styleKey = Date.now()
        }, a.styfn.applyParsedProperty = function(b, c) {
            var d, e, f = c,
                g = b._private.style,
                h = a.style.types,
                i = a.style.properties[f.name].type,
                j = f.bypass,
                k = g[f.name],
                l = k && k.bypass,
                m = b._private;
            if (("height" === c.name || "width" === c.name) && b.isNode()) {
                if ("auto" === c.value && !b.isParent()) return !1;
                "auto" !== c.value && b.isParent() && (f = c = this.parse(c.name, "auto", j))
            }
            if (j && f.deleteBypass) {
                var n = g[f.name];
                return n ? n.bypass && n.bypassed ? (g[f.name] = n.bypassed, !0) : !1 : !0
            }
            var o = function() {
                a.util.error("Do not assign mappings to elements without corresponding data (e.g. ele `" + b.id() + "` for property `" + f.name + "` with data field `" + f.field + "`); try a `[" + f.field + "]` selector to limit scope to elements with `" + f.field + "` defined")
            };
            switch (f.mapped) {
                case h.mapData:
                case h.mapLayoutData:
                case h.mapScratch:
                    var d, p = f.mapped === h.mapLayoutData,
                        q = f.mapped === h.mapScratch,
                        r = f.field.split(".");
                    d = q || p ? m.scratch : m.data;
                    for (var s = 0; s < r.length && d; s++) {
                        var t = r[s];
                        d = d[t]
                    }
                    var u;
                    if (u = a.is.number(d) ? (d - f.fieldMin) / (f.fieldMax - f.fieldMin) : 0, 0 > u ? u = 0 : u > 1 && (u = 1), i.color) {
                        var v = f.valueMin[0],
                            w = f.valueMax[0],
                            x = f.valueMin[1],
                            y = f.valueMax[1],
                            z = f.valueMin[2],
                            A = f.valueMax[2],
                            B = null == f.valueMin[3] ? 1 : f.valueMin[3],
                            C = null == f.valueMax[3] ? 1 : f.valueMax[3],
                            D = [Math.round(v + (w - v) * u), Math.round(x + (y - x) * u), Math.round(z + (A - z) * u), Math.round(B + (C - B) * u)];
                        e = {
                            bypass: f.bypass,
                            name: f.name,
                            value: D,
                            strValue: "rgb(" + D[0] + ", " + D[1] + ", " + D[2] + ")"
                        }
                    } else {
                        if (!i.number) return !1;
                        var E = f.valueMin + (f.valueMax - f.valueMin) * u;
                        e = this.parse(f.name, E, f.bypass, !0)
                    }
                    e || (e = this.parse(f.name, k.strValue, f.bypass, !0)), e || o(), e.mapping = f, f = e;
                    break;
                case h.data:
                case h.layoutData:
                case h.scratch:
                    var d, p = f.mapped === h.layoutData,
                        q = f.mapped === h.scratch,
                        r = f.field.split(".");
                    if (d = q || p ? m.scratch : m.data)
                        for (var s = 0; s < r.length; s++) {
                            var t = r[s];
                            d = d[t]
                        }
                    if (e = this.parse(f.name, d, f.bypass, !0), !e) {
                        var F = k ? k.strValue : "";
                        e = this.parse(f.name, F, f.bypass, !0)
                    }
                    e || o(), e.mapping = f, f = e;
                    break;
                case h.fn:
                    var G = f.value,
                        H = G(b);
                    e = this.parse(f.name, H, f.bypass, !0), e.mapping = f, f = e;
                    break;
                case void 0:
                    break;
                default:
                    return !1
            }
            return j ? (l ? f.bypassed = k.bypassed : f.bypassed = k, g[f.name] = f) : l ? k.bypassed = f : g[f.name] = f, !0
        }, a.styfn.update = function() {
            var a = this._private.cy,
                b = a.elements();
            b.updateStyle()
        }, a.styfn.updateMappers = function(b) {
            for (var c = 0; c < b.length; c++) {
                for (var d = b[c], e = d._private.style, f = 0; f < a.style.properties.length; f++) {
                    var g = a.style.properties[f],
                        h = e[g.name];
                    if (h && h.mapping) {
                        var i = h.mapping;
                        this.applyParsedProperty(d, i)
                    }
                }
                this.updateStyleHints(d)
            }
        }, a.styfn.updateTransitions = function(b, c, d) {
            var e = this,
                f = b._private.style,
                g = f["transition-property"].value,
                h = f["transition-duration"].msValue,
                i = f["transition-delay"].msValue,
                j = {};
            if (g.length > 0 && h > 0) {
                for (var k = !1, l = 0; l < g.length; l++) {
                    var m = g[l],
                        n = f[m],
                        o = c[m];
                    if (o) {
                        var p, q = o.prev,
                            r = q,
                            s = null != o.next ? o.next : n,
                            t = !1,
                            u = 1e-6;
                        r && (a.is.number(r.pxValue) && a.is.number(s.pxValue) ? (t = s.pxValue - r.pxValue, p = r.pxValue + u * t) : a.is.number(r.value) && a.is.number(s.value) ? (t = s.value - r.value, p = r.value + u * t) : a.is.array(r.value) && a.is.array(s.value) && (t = r.value[0] !== s.value[0] || r.value[1] !== s.value[1] || r.value[2] !== s.value[2], p = r.strValue), t && (j[m] = s.strValue, this.applyBypass(b, m, p), k = !0))
                    }
                }
                if (!k) return;
                b._private.transitioning = !0, b.stop(), i > 0 && b.delay(i), b.animate({
                    css: j
                }, {
                    duration: h,
                    queue: !1,
                    complete: function() {
                        d || e.removeBypasses(b, g), b._private.transitioning = !1
                    }
                })
            } else b._private.transitioning && (b.stop(), this.removeBypasses(b, g), b._private.transitioning = !1)
        }
    }(cytoscape), function(a) {
        "use strict";
        a.styfn.applyBypass = function(b, c, d, e) {
            var f = [],
                g = !0;
            if ("*" === c || "**" === c) {
                if (void 0 !== d)
                    for (var h = 0; h < a.style.properties.length; h++) {
                        var i = a.style.properties[h],
                            c = i.name,
                            j = this.parse(c, d, !0);
                        j && f.push(j)
                    }
            } else if (a.is.string(c)) {
                var j = this.parse(c, d, !0);
                j && f.push(j)
            } else {
                if (!a.is.plainObject(c)) return !1;
                var k = c;
                e = d;
                for (var h = 0; h < a.style.properties.length; h++) {
                    var i = a.style.properties[h],
                        c = i.name,
                        d = k[c];
                    if (void 0 === d && (d = k[a.util.dash2camel(c)]), void 0 !== d) {
                        var j = this.parse(c, d, !0);
                        j && f.push(j)
                    }
                }
            }
            if (0 === f.length) return !1;
            for (var l = !1, h = 0; h < b.length; h++) {
                for (var m, n = b[h], o = n._private.style, p = {}, q = 0; q < f.length; q++) {
                    var i = f[q];
                    if (e) {
                        var r = o[i.name];
                        m = p[i.name] = {
                            prev: r
                        }
                    }
                    l = this.applyParsedProperty(n, i) || l, e && (m.next = o[i.name])
                }
                e && this.updateTransitions(n, p, g)
            }
            return l
        }, a.styfn.overrideBypass = function(b, c, d) {
            for (var e = 0; e < b.length; e++) {
                var f = b[e],
                    g = f._private.style[a.util.camel2dash(c)];
                g.bypass ? (g.value = d, g.pxValue = d) : this.applyBypass(f, c, d)
            }
        }, a.styfn.removeAllBypasses = function(b, c) {
            for (var d = !0, e = 0; e < b.length; e++) {
                for (var f = b[e], g = {}, h = f._private.style, i = 0; i < a.style.properties.length; i++) {
                    var j = a.style.properties[i],
                        k = j.name,
                        l = "",
                        m = this.parse(k, l, !0),
                        n = h[j.name],
                        o = g[j.name] = {
                            prev: n
                        };
                    this.applyParsedProperty(f, m), o.next = h[j.name]
                }
                c && this.updateTransitions(f, g, d)
            }
        }, a.styfn.removeBypasses = function(b, c, d) {
            for (var e = !0, f = 0; f < b.length; f++) {
                for (var g = b[f], h = {}, i = g._private.style, j = 0; j < c.length; j++) {
                    var k = c[j],
                        l = a.style.properties[k],
                        m = "",
                        n = this.parse(k, m, !0),
                        o = i[l.name],
                        p = h[l.name] = {
                            prev: o
                        };
                    this.applyParsedProperty(g, n), p.next = i[l.name]
                }
                d && this.updateTransitions(g, h, e)
            }
        }
    }(cytoscape), function(a, b) {
        "use strict";
        a.styfn.getEmSizeInPixels = function() {
            var a = this._private.cy,
                c = a.container();
            if (b && c && b.getComputedStyle) {
                var d = b.getComputedStyle(c).getPropertyValue("font-size"),
                    e = parseFloat(d);
                return e
            }
            return 1
        }, a.styfn.containerCss = function(a) {
            var c = this._private.cy,
                d = c.container();
            return b && d && b.getComputedStyle ? b.getComputedStyle(d).getPropertyValue(a) : void 0
        }, a.styfn.containerProperty = function(a) {
            var b = this.containerCss(a),
                c = this.parse(a, b);
            return c
        }, a.styfn.containerPropertyAsString = function(a) {
            var b = this.containerProperty(a);
            return b ? b.strValue : void 0
        }
    }(cytoscape, "undefined" == typeof window ? null : window), function(a) {
        "use strict";
        a.styfn.getRenderedStyle = function(b) {
            var b = b[0];
            if (b) {
                for (var c = {}, d = b._private.style, e = this._private.cy, f = e.zoom(), g = 0; g < a.style.properties.length; g++) {
                    var h = a.style.properties[g],
                        i = d[h.name];
                    if (i) {
                        var j = i.unitless ? i.strValue : i.pxValue * f + "px";
                        c[h.name] = j, c[a.util.dash2camel(h.name)] = j
                    }
                }
                return c
            }
        }, a.styfn.getRawStyle = function(b) {
            var b = b[0];
            if (b) {
                for (var c = {}, d = b._private.style, e = 0; e < a.style.properties.length; e++) {
                    var f = a.style.properties[e],
                        g = d[f.name];
                    g && (c[f.name] = g.strValue, c[a.util.dash2camel(f.name)] = g.strValue)
                }
                return c
            }
        }, a.styfn.getValueStyle = function(b) {
            var c, d = {},
                e = a.is.element(b);
            if (c = e ? b._private.style : b)
                for (var f = 0; f < a.style.properties.length; f++) {
                    var g = a.style.properties[f],
                        h = c[g.name] || c[a.util.dash2camel(g.name)];
                    void 0 === h || a.is.plainObject(h) || (h = this.parse(g.name, h)), h && (d[g.name] = h, d[a.util.dash2camel(g.name)] = h)
                }
            return d
        }, a.styfn.getPropsList = function(b) {
            var c = [],
                d = b,
                e = a.style.properties;
            if (d)
                for (var f in d) {
                    var g = d[f],
                        h = e[f] || e[a.util.camel2dash(f)],
                        i = this.parse(h.name, g);
                    c.push(i)
                }
            return c
        }
    }(cytoscape), function(a) {
        "use strict";
        a.style.applyFromJson = function(a, b) {
            for (var c = 0; c < b.length; c++) {
                var d = b[c],
                    e = d.selector,
                    f = d.style || d.css;
                a.selector(e);
                for (var g in f) {
                    var h = f[g];
                    a.css(g, h)
                }
            }
            return a
        }, a.style.fromJson = function(b, c) {
            var d = new a.Style(b);
            return a.style.applyFromJson(d, c), d
        }, a.styfn.fromJson = function(b) {
            var c = this;
            return c.resetToDefault(), a.style.applyFromJson(c, b), c
        }, a.styfn.json = function() {
            for (var a = [], b = this.defaultLength; b < this.length; b++) {
                for (var c = this[b], d = c.selector, e = c.properties, f = {}, g = 0; g < e.length; g++) {
                    var h = e[g];
                    f[h.name] = h.strValue
                }
                a.push({
                    selector: d ? d.toString() : "core",
                    style: f
                })
            }
            return a
        }
    }(cytoscape), function(a) {
        "use strict";
        a.style.applyFromString = function(b, c) {
            function d() {
                i = i.length > f.length ? i.substr(f.length) : ""
            }

            function e() {
                g = g.length > h.length ? g.substr(h.length) : ""
            }
            var f, g, h, i = "" + c;
            for (i = i.replace(/[/][*](\s|.)+?[*][/]/g, "");;) {
                var j = i.match(/^\s*$/);
                if (j) break;
                var k = i.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);
                if (!k) {
                    a.util.error("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: " + i);
                    break
                }
                f = k[0];
                var l = k[1];
                if ("core" !== l) {
                    var m = new a.Selector(l);
                    if (m._private.invalid) {
                        a.util.error("Skipping parsing of block: Invalid selector found in string stylesheet: " + l), d();
                        continue
                    }
                }
                var n = k[2],
                    o = !1;
                g = n;
                for (var p = [];;) {
                    var j = g.match(/^\s*$/);
                    if (j) break;
                    var q = g.match(/^\s*(.+?)\s*:\s*(.+?)\s*;/);
                    if (!q) {
                        a.util.error("Skipping parsing of block: Invalid formatting of style property and value definitions found in:" + n), o = !0;
                        break
                    }
                    h = q[0];
                    var r = q[1],
                        s = q[2],
                        t = a.style.properties[r];
                    if (t) {
                        var u = b.parse(r, s);
                        u ? (p.push({
                            name: r,
                            val: s
                        }), e()) : (a.util.error("Skipping property: Invalid property definition in: " + h), e())
                    } else a.util.error("Skipping property: Invalid property name in: " + h), e()
                }
                if (o) {
                    d();
                    break
                }
                b.selector(l);
                for (var v = 0; v < p.length; v++) {
                    var t = p[v];
                    b.css(t.name, t.val)
                }
                d()
            }
            return b
        }, a.style.fromString = function(b, c) {
            var d = new a.Style(b);
            return a.style.applyFromString(d, c), d
        }, a.styfn.fromString = function(b) {
            var c = this;
            return c.resetToDefault(), a.style.applyFromString(c, b),
                c
        }
    }(cytoscape), function(a) {
        "use strict";
        a.stylesheet = a.Stylesheet = function() {
            return this instanceof a.Stylesheet ? void(this.length = 0) : new a.Stylesheet
        }, a.sheetfn = a.Stylesheet.prototype, a.sheetfn.selector = function(a) {
            var b = this.length++;
            return this[b] = {
                selector: a,
                properties: []
            }, this
        }, a.sheetfn.css = function(b, c) {
            var d = this.length - 1;
            if (a.is.string(b)) this[d].properties.push({
                name: b,
                value: c
            });
            else if (a.is.plainObject(b))
                for (var e = b, f = 0; f < a.style.properties.length; f++) {
                    var g = a.style.properties[f],
                        h = e[g.name];
                    if (void 0 === h && (h = e[a.util.dash2camel(g.name)]), void 0 !== h) {
                        var b = g.name,
                            c = h;
                        this[d].properties.push({
                            name: b,
                            value: c
                        })
                    }
                }
            return this
        }, a.sheetfn.style = a.sheetfn.css, a.sheetfn.generateStyle = function(b) {
            for (var c = new a.Style(b), d = 0; d < this.length; d++) {
                var e = this[d],
                    f = e.selector,
                    g = e.properties;
                c.selector(f);
                for (var h = 0; h < g.length; h++) {
                    var i = g[h];
                    c.css(i.name, i.value)
                }
            }
            return c
        }
    }(cytoscape), function(a, b) {
        "use strict";
        a.Thread = function(b) {
            return this instanceof a.Thread ? (this._private = {
                requires: [],
                files: [],
                queue: null,
                pass: []
            }, void(b && this.run(b))) : new a.Thread(b)
        }, a.thread = a.Thread, a.thdfn = a.Thread.prototype, a.fn.thread = function(b, c) {
            for (var d in b) {
                var e = b[d];
                a.Thread.prototype[d] = e
            }
        };
        var c = function(b) {
                var c = a.is.fn(b) ? b.toString() : 'JSON.parse("' + JSON.stringify(b) + '")';
                return c
            },
            d = function(b) {
                var e, g;
                a.is.object(b) && b.fn ? (e = f(b.fn, b.name), g = b.name, b = b.fn) : a.is.fn(b) ? (e = b.toString(), g = b.name) : a.is.string(b) ? e = b : a.is.object(b) && (e = b.proto ? "" : b.name + " = {};", g = b.name, b = b.obj), e += "\n";
                var h = function(a, b) {
                    if (a.prototype) {
                        var c = !1;
                        for (var f in a.prototype) {
                            c = !0;
                            break
                        }
                        c && (e += d({
                            name: b,
                            obj: a,
                            proto: !0
                        }, a))
                    }
                };
                if (b.prototype && null != g)
                    for (var i in b.prototype) {
                        var j = "",
                            k = b.prototype[i],
                            l = c(k),
                            m = g + ".prototype." + i;
                        j += m + " = " + l + ";\n", j && (e += j), h(k, m)
                    }
                if (!a.is.string(b))
                    for (var i in b) {
                        var n = "";
                        if (b.hasOwnProperty(i)) {
                            var k = b[i],
                                l = c(k),
                                m = g + '["' + i + '"]';
                            n += m + " = " + l + ";\n"
                        }
                        n && (e += n), h(k, m)
                    }
                return e
            },
            e = function(b) {
                return a.is.string(b) && b.match(/\.js$/)
            };
        a.fn.thread({
            require: function(b, c) {
                return e(b) ? (this._private.files.push(b), this) : (c && (a.is.fn(b) ? (c = c || b.name, b = {
                    name: c,
                    fn: b
                }) : b = {
                    name: c,
                    obj: b
                }), this._private.requires.push(b), this)
            },
            pass: function(a) {
                return this._private.pass.push(a), this
            },
            run: function(c, e) {
                var f = this,
                    g = this._private;
                if (e = e || g.pass.shift(), g.stopped) return void a.util.error("Attempted to run a stopped thread!  Start a new thread or do not stop the existing thread and reuse it.");
                if (g.running) return g.queue = g.queue.then(function() {
                    return f.run(c, e)
                });
                var h = null != b,
                    i = "undefined" != typeof module;
                f.trigger("run");
                var j = new a.Promise(function(j, k) {
                    g.running = !0;
                    var l = g.ran,
                        m = a.is.string(c) ? c : c.toString(),
                        n = "\n" + g.requires.map(function(a) {
                            return d(a)
                        }).concat(g.files.map(function(a) {
                            if (h) {
                                var c = function(a) {
                                    return a.match(/^\.\//) || a.match(/^\.\./) ? b.location.origin + b.location.pathname + a : a.match(/^\//) ? b.location.origin + "/" + a : a
                                };
                                return 'importScripts("' + c(a) + '");'
                            }
                            return i ? 'eval( require("fs").readFileSync("' + a + '", { encoding: "utf8" }) );' : void 0
                        })).concat(["( function(){", "var ret = (" + m + ")(" + JSON.stringify(e) + ");", "if( ret !== undefined ){ resolve(ret); }", "} )()\n"]).join("\n");
                    if (g.requires = [], g.files = [], h) {
                        var o, p;
                        if (!l) {
                            var q = n + "";
                            n = ["function broadcast(m){ return message(m); };", "function message(m){ postMessage(m); };", "function listen(fn){", '  self.addEventListener("message", function(m){ ', '    if( typeof m === "object" && (m.data.$$eval || m.data === "$$start") ){', "    } else { ", "      fn( m.data );", "    }", "  });", "};", 'self.addEventListener("message", function(m){  if( m.data.$$eval ){ eval( m.data.$$eval ); }  });', "function resolve(v){ postMessage({ $$resolve: v }); };", "function reject(v){ postMessage({ $$reject: v }); };"].join("\n"), n += q, o = new Blob([n], {
                                type: "application/javascript"
                            }), p = b.URL.createObjectURL(o)
                        }
                        var r = g.webworker = g.webworker || new Worker(p);
                        l && r.postMessage({
                            $$eval: n
                        });
                        var s;
                        r.addEventListener("message", s = function(b) {
                            var c = a.is.object(b) && a.is.object(b.data);
                            c && "$$resolve" in b.data ? (r.removeEventListener("message", s), j(b.data.$$resolve)) : c && "$$reject" in b.data ? (r.removeEventListener("message", s), k(b.data.$$reject)) : f.trigger(new a.Event(b, {
                                type: "message",
                                message: b.data
                            }))
                        }, !1), l || r.postMessage("$$start")
                    } else if (i) {
                        var s, t = require("path"),
                            u = require("child_process"),
                            v = g.child = g.child || u.fork(t.join(__dirname, "thread-node-fork"));
                        v.on("message", s = function(b) {
                            a.is.object(b) && "$$resolve" in b ? (v.removeListener("message", s), j(b.$$resolve)) : a.is.object(b) && "$$reject" in b ? (v.removeListener("message", s), k(b.$$reject)) : f.trigger(new a.Event({}, {
                                type: "message",
                                message: b
                            }))
                        }), v.send({
                            $$eval: n
                        })
                    } else a.error("Tried to create thread but no underlying tech found!")
                }).then(function(a) {
                    return g.running = !1, g.ran = !0, f.trigger("ran"), a
                });
                return null == g.queue && (g.queue = j), j
            },
            message: function(a) {
                var b = this._private;
                return b.webworker && b.webworker.postMessage(a), b.child && b.child.send(a), this
            },
            stop: function() {
                var a = this._private;
                return a.webworker && a.webworker.terminate(), a.child && a.child.kill(), a.stopped = !0, this.trigger("stop")
            },
            stopped: function() {
                return this._private.stopped
            }
        });
        var f = function(a, b) {
                var c = a.toString();
                return c = c.replace(/function.*\(/, "function " + b + "(")
            },
            g = function(a) {
                return a = a || {},
                    function(b, c) {
                        var d = f(b, "_$_$_" + a.name);
                        return this.require(d), this.run(["function( data ){", "  var origResolve = resolve;", "  var res = [];", "  ", "  resolve = function( val ){", "    res.push( val );", "  };", "  ", "  var ret = data." + a.name + "( _$_$_" + a.name + (arguments.length > 1 ? ", " + JSON.stringify(c) : "") + " );", "  ", "  resolve = origResolve;", "  resolve( res.length > 0 ? res : ret );", "}"].join("\n"))
                    }
            };
        a.fn.thread({
            reduce: g({
                name: "reduce"
            }),
            reduceRight: g({
                name: "reduceRight"
            }),
            map: g({
                name: "map"
            })
        });
        var h = a.thdfn;
        h.promise = h.run, h.terminate = h.halt = h.stop, h.include = h.require, a.worker = a.Worker = a.Thread, a.fn.thread({
            on: a.define.on(),
            one: a.define.on({
                unbindSelfOnTrigger: !0
            }),
            off: a.define.off(),
            trigger: a.define.trigger()
        }), a.define.eventAliasesOn(a.thdfn)
    }(cytoscape, "undefined" == typeof window ? null : window), function(a, b) {
        "use strict";
        a.Fabric = function(b) {
            if (!(this instanceof a.Fabric)) return new a.Fabric(b);
            this._private = {
                pass: []
            };
            var c = 4;
            a.is.number(b), b = "undefined" != typeof navigator && null != navigator.hardwareConcurrency ? navigator.hardwareConcurrency : "undefined" != typeof module ? require("os").cpus().length : c;
            for (var d = 0; b > d; d++) this[d] = a.Thread();
            this.length = b
        }, a.fabric = a.Fabric, a.fabfn = a.Fabric.prototype, a.fn.fabric = function(b, c) {
            for (var d in b) {
                var e = b[d];
                a.Fabric.prototype[d] = e
            }
        }, a.fn.fabric({
            require: function(a, b) {
                for (var c = 0; c < this.length; c++) {
                    var d = this[c];
                    d.require(a, b)
                }
                return this
            },
            random: function() {
                var a = Math.round((this.length - 1) * Math.random()),
                    b = this[a];
                return b
            },
            run: function(a) {
                var b = this._private.pass.shift();
                return this.random().pass(b).run(a)
            },
            message: function(a) {
                return this.random().message(a)
            },
            broadcast: function(a) {
                for (var b = 0; b < this.length; b++) {
                    var c = this[b];
                    c.message(a)
                }
                return this
            },
            stop: function() {
                for (var a = 0; a < this.length; a++) {
                    var b = this[a];
                    b.stop()
                }
                return this
            },
            pass: function(b) {
                var c = this._private.pass;
                return a.is.array(b) ? c.push(b) : a.util.error("Only arrays or collections may be used with fabric.pass()"), this
            },
            spreadSize: function() {
                var a = Math.ceil(this._private.pass[0].length / this.length);
                return a = Math.max(1, a)
            },
            spread: function(b) {
                for (var c = this, d = c._private, e = c.spreadSize(), f = d.pass.shift().concat([]), g = [], h = 0; h < this.length; h++) {
                    var i = this[h],
                        j = f.splice(0, e),
                        k = i.pass(j).run(b);
                    g.push(k);
                    var l = 0 === f.length;
                    if (l) break
                }
                return a.Promise.all(g).then(function(a) {
                    for (var b = [], c = 0, d = 0; d < a.length; d++)
                        for (var e = a[d], f = 0; f < e.length; f++) {
                            var g = e[f];
                            b[c++] = g
                        }
                    return b
                })
            },
            map: function(a) {
                var b = this;
                return b.require(a, "_$_$_fabmap"), b.spread(function(a) {
                    var b = [],
                        c = resolve;
                    resolve = function(a) {
                        b.push(a)
                    };
                    for (var d = 0; d < a.length; d++) {
                        var e = b.length,
                            f = _$_$_fabmap(a[d]),
                            g = e === b.length;
                        g && b.push(f)
                    }
                    return resolve = c, b
                })
            },
            filter: function(a) {
                var b = this._private,
                    c = b.pass[0];
                return this.map(a).then(function(a) {
                    for (var b = [], d = 0; d < c.length; d++) {
                        var e = c[d],
                            f = a[d];
                        f && b.push(e)
                    }
                    return b
                })
            },
            sort: function(a) {
                var b = this,
                    c = this._private.pass[0].length,
                    d = this.spreadSize();
                return a = a || function(a, b) {
                    return b > a ? -1 : a > b ? 1 : 0
                }, b.require(a, "_$_$_cmp"), b.spread(function(a) {
                    var b = a.sort(_$_$_cmp);
                    resolve(b)
                }).then(function(b) {
                    for (var e = function(d, e, f) {
                            e = Math.min(e, c), f = Math.min(f, c);
                            for (var g = d, h = e, i = [], j = g; f > j; j++) {
                                var k = b[d],
                                    l = b[e];
                                h > d && (e >= f || a(k, l) <= 0) ? (i.push(k), d++) : (i.push(l), e++)
                            }
                            for (var j = 0; j < i.length; j++) {
                                var m = g + j;
                                b[m] = i[j]
                            }
                        }, f = d; c > f; f *= 2)
                        for (var g = 0; c > g; g += 2 * f) e(g, g + f, g + 2 * f);
                    return b
                })
            }
        });
        var c = function(a) {
            return a = a || {},
                function(b, c) {
                    var d = this._private.pass.shift();
                    return this.random().pass(d)[a.threadFn](b, c)
                }
        };
        a.fn.fabric({
            randomMap: c({
                threadFn: "map"
            }),
            reduce: c({
                threadFn: "reduce"
            }),
            reduceRight: c({
                threadFn: "reduceRight"
            })
        });
        var d = a.fabfn;
        d.promise = d.run, d.terminate = d.halt = d.stop, d.include = d.require, a.fn.fabric({
            on: a.define.on(),
            one: a.define.on({
                unbindSelfOnTrigger: !0
            }),
            off: a.define.off(),
            trigger: a.define.trigger()
        }), a.define.eventAliasesOn(a.fabfn)
    }(cytoscape, "undefined" == typeof window ? null : window), function(a, b) {
        "use strict";
        var c = {},
            d = a.util.copy(c);
        a.defaults = function(b) {
            c = a.util.extend({}, d, b)
        }, a.fn.core = function(b, c) {
            for (var d in b) {
                var e = b[d];
                a.Core.prototype[d] = e
            }
        }, a.Core = function(d) {
            if (!(this instanceof a.Core)) return new a.Core(d);
            var e = this;
            d = a.util.extend({}, c, d);
            var f = d.container,
                g = f ? f._cyreg : null;
            if (g = g || {}, g && g.cy) {
                if (f)
                    for (; f.firstChild;) f.removeChild(f.firstChild);
                g.cy.notify({
                    type: "destroy"
                }), g = {}
            }
            var h = g.readies = g.readies || [];
            f && (f._cyreg = g), g.cy = e;
            var i = void 0 !== b && void 0 !== f && !d.headless,
                j = d;
            j.layout = a.util.extend({
                name: i ? "grid" : "null"
            }, j.layout), j.renderer = a.util.extend({
                name: i ? "canvas" : "null"
            }, j.renderer);
            var k = function(a, b, c) {
                    return void 0 !== b ? b : void 0 !== c ? c : a
                },
                l = this._private = {
                    container: j.container,
                    ready: !1,
                    initrender: !1,
                    options: j,
                    elements: [],
                    id2index: {},
                    listeners: [],
                    onRenders: [],
                    aniEles: a.Collection(this),
                    scratch: {},
                    layout: null,
                    renderer: null,
                    notificationsEnabled: !0,
                    minZoom: 1e-50,
                    maxZoom: 1e50,
                    zoomingEnabled: k(!0, j.zoomingEnabled),
                    userZoomingEnabled: k(!0, j.userZoomingEnabled),
                    panningEnabled: k(!0, j.panningEnabled),
                    userPanningEnabled: k(!0, j.userPanningEnabled),
                    boxSelectionEnabled: k(!1, j.boxSelectionEnabled),
                    autolock: k(!1, j.autolock, j.autolockNodes),
                    autoungrabify: k(!1, j.autoungrabify, j.autoungrabifyNodes),
                    autounselectify: k(!1, j.autounselectify),
                    styleEnabled: void 0 === j.styleEnabled ? i : j.styleEnabled,
                    zoom: a.is.number(j.zoom) ? j.zoom : 1,
                    pan: {
                        x: a.is.plainObject(j.pan) && a.is.number(j.pan.x) ? j.pan.x : 0,
                        y: a.is.plainObject(j.pan) && a.is.number(j.pan.y) ? j.pan.y : 0
                    },
                    animation: {
                        current: [],
                        queue: []
                    },
                    hasCompoundNodes: !1,
                    deferredExecQueue: []
                },
                m = j.selectionType;
            void 0 === m || "additive" !== m && "single" !== m ? l.selectionType = "single" : l.selectionType = m, a.is.number(j.minZoom) && a.is.number(j.maxZoom) && j.minZoom < j.maxZoom ? (l.minZoom = j.minZoom, l.maxZoom = j.maxZoom) : a.is.number(j.minZoom) && void 0 === j.maxZoom ? l.minZoom = j.minZoom : a.is.number(j.maxZoom) && void 0 === j.minZoom && (l.maxZoom = j.maxZoom);
            var n = function(b) {
                    for (var c = !1, d = 0; d < o.length; d++) {
                        var e = o[d];
                        if (a.is.promise(e)) {
                            c = !0;
                            break
                        }
                    }
                    return c ? a.Promise.all(o).then(b) : void b(o)
                },
                o = [j.style, j.elements];
            n(function(b) {
                var c = b[0],
                    d = b[1];
                l.styleEnabled && e.setStyle(c), e.initRenderer(a.util.extend({
                    hideEdgesOnViewport: j.hideEdgesOnViewport,
                    hideLabelsOnViewport: j.hideLabelsOnViewport,
                    textureOnViewport: j.textureOnViewport,
                    wheelSensitivity: a.is.number(j.wheelSensitivity) && j.wheelSensitivity > 0 ? j.wheelSensitivity : 1,
                    motionBlur: void 0 === j.motionBlur ? !0 : j.motionBlur,
                    motionBlurOpacity: void 0 === j.motionBlurOpacity ? .05 : j.motionBlurOpacity,
                    pixelRatio: a.is.number(j.pixelRatio) && j.pixelRatio > 0 ? j.pixelRatio : "auto" === j.pixelRatio ? void 0 : 1,
                    desktopTapThreshold: void 0 === j.desktopTapThreshold ? 4 : j.desktopTapThreshold,
                    touchTapThreshold: void 0 === j.touchTapThreshold ? 8 : j.touchTapThreshold
                }, j.renderer)), j.initrender && (e.on("initrender", j.initrender), e.on("initrender", function() {
                    e._private.initrender = !0
                })), e.load(d, function() {
                    e.startAnimationLoop(), e._private.ready = !0, a.is.fn(j.ready) && e.on("ready", j.ready);
                    for (var b = 0; b < h.length; b++) {
                        var c = h[b];
                        e.on("ready", c)
                    }
                    g && (g.readies = []), e.trigger("ready")
                }, j.done)
            })
        }, a.corefn = a.Core.prototype, a.fn.core({
            isReady: function() {
                return this._private.ready
            },
            ready: function(a) {
                this.isReady() ? this.trigger("ready", [], a) : this.on("ready", a)
            },
            initrender: function() {
                return this._private.initrender
            },
            destroy: function() {
                this.notify({
                    type: "destroy"
                });
                var a = this.container(),
                    b = a.parentNode;
                if (b) try {
                    b.removeChild(a)
                } catch (c) {}
                return this
            },
            getElementById: function(b) {
                var c = this._private.id2index[b];
                return void 0 !== c ? this._private.elements[c] : new a.Collection(this)
            },
            selectionType: function() {
                return this._private.selectionType
            },
            hasCompoundNodes: function() {
                return this._private.hasCompoundNodes
            },
            styleEnabled: function() {
                return this._private.styleEnabled
            },
            addToPool: function(a) {
                for (var b = this._private.elements, c = this._private.id2index, d = 0; d < a.length; d++) {
                    var e = a[d],
                        f = e._private.data.id,
                        g = c[f],
                        h = void 0 !== g;
                    h || (g = b.length, b.push(e), c[f] = g, e._private.index = g)
                }
                return this
            },
            removeFromPool: function(a) {
                for (var b = this._private.elements, c = this._private.id2index, d = 0; d < a.length; d++) {
                    var e = a[d],
                        f = e._private.data.id,
                        g = c[f],
                        h = void 0 !== g;
                    if (h) {
                        this._private.id2index[f] = void 0, b.splice(g, 1);
                        for (var i = g; i < b.length; i++) {
                            var j = b[i]._private.data.id;
                            c[j]--, b[i]._private.index--
                        }
                    }
                }
            },
            container: function() {
                return this._private.container
            },
            options: function() {
                return a.util.copy(this._private.options)
            },
            json: function(a) {
                var b = {},
                    c = this;
                return b.elements = {}, c.elements().each(function(a, c) {
                    var d = c.group();
                    b.elements[d] || (b.elements[d] = []), b.elements[d].push(c.json())
                }), this._private.styleEnabled && (b.style = c.style().json()), b.zoomingEnabled = c._private.zoomingEnabled, b.userZoomingEnabled = c._private.userZoomingEnabled, b.zoom = c._private.zoom, b.minZoom = c._private.minZoom, b.maxZoom = c._private.maxZoom, b.panningEnabled = c._private.panningEnabled, b.userPanningEnabled = c._private.userPanningEnabled, b.pan = c._private.pan, b.boxSelectionEnabled = c._private.boxSelectionEnabled, b.layout = c._private.options.layout, b.renderer = c._private.options.renderer, b.hideEdgesOnViewport = c._private.options.hideEdgesOnViewport, b.hideLabelsOnViewport = c._private.options.hideLabelsOnViewport, b.textureOnViewport = c._private.options.textureOnViewport, b.wheelSensitivity = c._private.options.wheelSensitivity, b.motionBlur = c._private.options.motionBlur, b
            },
            defer: function(a) {
                var b = this,
                    c = b._private,
                    d = c.deferredExecQueue;
                d.push(a), c.deferredTimeout || (c.deferredTimeout = setTimeout(function() {
                    for (; d.length > 0;) d.shift()();
                    c.deferredTimeout = null
                }, 0))
            }
        })
    }(cytoscape, "undefined" == typeof window ? null : window), function(a, b) {
        "use strict";

        function c(a) {
            var b = !document || "interactive" !== document.readyState && "complete" !== document.readyState ? c : a;
            setTimeout(b, 9, a)
        }
        a.fn.core({
            add: function(b) {
                var c, d = this;
                if (a.is.elementOrCollection(b)) {
                    var e = b;
                    if (e._private.cy === d) c = e.restore();
                    else {
                        for (var f = [], g = 0; g < e.length; g++) {
                            var h = e[g];
                            f.push(h.json())
                        }
                        c = new a.Collection(d, f)
                    }
                } else if (a.is.array(b)) {
                    var f = b;
                    c = new a.Collection(d, f)
                } else if (a.is.plainObject(b) && (a.is.array(b.nodes) || a.is.array(b.edges))) {
                    for (var i = b, f = [], j = ["nodes", "edges"], g = 0, k = j.length; k > g; g++) {
                        var l = j[g],
                            m = i[l];
                        if (a.is.array(m))
                            for (var n = 0, o = m.length; o > n; n++) {
                                var p = m[n];
                                p.group = l, f.push(p)
                            }
                    }
                    c = new a.Collection(d, f)
                } else {
                    var p = b;
                    c = new a.Element(d, p).collection()
                }
                return c
            },
            remove: function(b) {
                if (a.is.elementOrCollection(b)) b = b;
                else if (a.is.string(b)) {
                    var c = b;
                    b = this.$(c)
                }
                return b.remove()
            },
            load: function(d, e, f) {
                function g() {
                    h.one("layoutready", function(a) {
                        h.notifications(!0), h.trigger(a), h.notify({
                            type: "load",
                            collection: h.elements()
                        }), h.one("load", e), h.trigger("load")
                    }).one("layoutstop", function() {
                        h.one("done", f), h.trigger("done")
                    });
                    var b = a.util.extend({}, h._private.options.layout);
                    b.eles = h.$(), h.layout(b)
                }
                var h = this;
                h.notifications(!1);
                var i = h.elements();
                return i.length > 0 && i.remove(), null != d && (a.is.plainObject(d) || a.is.array(d)) && h.add(d), b ? c(g) : g(), this
            }
        })
    }(cytoscape, "undefined" == typeof window ? null : window), function(a, b) {
        "use strict";
        a.fn.core({
            animated: a.define.animated(),
            clearQueue: a.define.clearQueue(),
            delay: a.define.delay(),
            animate: a.define.animate(),
            stop: a.define.stop(),
            addToAnimationPool: function(a) {
                var b = this;
                b.styleEnabled() && b._private.aniEles.merge(a)
            },
            startAnimationLoop: function() {
                function c() {
                    a.util.requestAnimationFrame(function(a) {
                        d(a), c()
                    })
                }

                function d(b) {
                    function c(c, d) {
                        var i = c._private.animation.current,
                            j = c._private.animation.queue,
                            k = !1;
                        if (0 === i.length) {
                            var l = j.length > 0 ? j.shift() : null;
                            l && (l.callTime = b, i.push(l))
                        }
                        for (var m = [], n = i.length - 1; n >= 0; n--) {
                            var o = i[n];
                            o.started || (e(c, o), h = !0), f(c, o, b, d), o.done && (m.push(o), i.splice(n, 1)), k = !0
                        }
                        for (var n = 0; n < m.length; n++) {
                            var o = m[n],
                                p = o.params.complete;
                            a.is.fn(p) && p.apply(c, [b])
                        }
                        return d || 0 !== i.length || 0 !== j.length || g.push(c), k
                    }
                    b = +new Date;
                    for (var d = i._private.aniEles, g = [], h = !1, j = 0; j < d.length; j++) {
                        var k = d[j];
                        c(k)
                    }
                    var l = c(i, !0);
                    if (d.length > 0 || l) {
                        var m;
                        if (d.length > 0) {
                            var n = d.updateCompoundBounds();
                            m = n.length > 0 ? d.add(n) : d
                        }
                        i.notify({
                            type: h ? "style" : "draw",
                            collection: m
                        })
                    }
                    d.unmerge(g)
                }

                function e(b, c) {
                    var d = a.is.core(b),
                        e = !d,
                        f = b,
                        g = i._private.style;
                    if (e) var h = f._private.position,
                        j = {
                            x: h.x,
                            y: h.y
                        },
                        k = g.getValueStyle(f);
                    if (d) var l = i._private.pan,
                        m = {
                            x: l.x,
                            y: l.y
                        },
                        n = i._private.zoom;
                    c.started = !0, c.startTime = Date.now(), c.startPosition = j, c.startStyle = k, c.startPan = m, c.startZoom = n
                }

                function f(b, c, d, e) {
                    var f, j = i._private.style,
                        k = c.properties,
                        l = c.params,
                        m = c.startTime,
                        n = !e;
                    if (f = 0 === c.duration ? 1 : Math.min(1, (d - m) / c.duration), 0 > f ? f = 0 : f > 1 && (f = 1), null == k.delay) {
                        var o = c.startPosition,
                            p = k.position,
                            q = b._private.position;
                        p && n && (g(o.x, p.x) && (q.x = h(o.x, p.x, f)), g(o.y, p.y) && (q.y = h(o.y, p.y, f)));
                        var r = c.startPan,
                            s = k.pan,
                            t = b._private.pan,
                            u = null != s && e;
                        u && (g(r.x, s.x) && (t.x = h(r.x, s.x, f)), g(r.y, s.y) && (t.y = h(r.y, s.y, f)), b.trigger("pan"));
                        var v = c.startZoom,
                            w = k.zoom,
                            x = null != w && e;
                        x && (g(v, w) && (b._private.zoom = h(v, w, f)), b.trigger("zoom")), (u || x) && b.trigger("viewport");
                        var y = k.style || k.css;
                        if (y && n)
                            for (var z = 0; z < y.length; z++) {
                                var A = y[z].name,
                                    B = y[z],
                                    C = B,
                                    D = c.startStyle[A],
                                    E = h(D, C, f);
                                j.overrideBypass(b, A, E)
                            }
                    }
                    return a.is.fn(l.step) && l.step.apply(b, [d]), f >= 1 && (c.done = !0), f
                }

                function g(b, c) {
                    return null == b || null == c ? !1 : a.is.number(b) && a.is.number(c) ? !0 : b && c ? !0 : !1
                }

                function h(b, c, d) {
                    0 > d ? d = 0 : d > 1 && (d = 1);
                    var e, f;
                    if (e = null != b.pxValue || null != b.value ? null != b.pxValue ? b.pxValue : b.value : b, f = null != c.pxValue || null != c.value ? null != c.pxValue ? c.pxValue : c.value : c, a.is.number(e) && a.is.number(f)) return e + (f - e) * d;
                    if (a.is.number(e[0]) && a.is.number(f[0])) {
                        var g = e,
                            h = f,
                            i = function(a, b) {
                                var c = b - a,
                                    e = a;
                                return Math.round(d * c + e)
                            },
                            j = i(g[0], h[0]),
                            k = i(g[1], h[1]),
                            l = i(g[2], h[2]);
                        return [j, k, l]
                    }
                    return void 0
                }
                var i = this;
                i.styleEnabled() && b && c()
            }
        })
    }(cytoscape, "undefined" == typeof window ? null : window), function(a) {
        "use strict";
        a.fn.core({
            data: a.define.data({
                field: "data",
                bindingEvent: "data",
                allowBinding: !0,
                allowSetting: !0,
                settingEvent: "data",
                settingTriggersEvent: !0,
                triggerFnName: "trigger",
                allowGetting: !0
            }),
            removeData: a.define.removeData({
                field: "data",
                event: "data",
                triggerFnName: "trigger",
                triggerEvent: !0
            }),
            scratch: a.define.data({
                field: "scratch",
                allowBinding: !1,
                allowSetting: !0,
                settingTriggersEvent: !1,
                allowGetting: !0
            }),
            removeScratch: a.define.removeData({
                field: "scratch",
                triggerEvent: !1
            })
        })
    }(cytoscape), function(a) {
        "use strict";
        a.fn.core({
            on: a.define.on(),
            one: a.define.on({
                unbindSelfOnTrigger: !0
            }),
            once: a.define.on({
                unbindAllBindersOnTrigger: !0
            }),
            off: a.define.off(),
            trigger: a.define.trigger()
        }), a.define.eventAliasesOn(a.corefn)
    }(cytoscape), function(a) {
        "use strict";
        a.fn.core({
            png: function(a) {
                var b = this._private.renderer;
                return a = a || {}, b.png(a)
            },
            jpg: function(a) {
                var b = this._private.renderer;
                return a = a || {}, a.bg = a.bg || "#fff", b.jpg(a)
            }
        }), a.corefn.jpeg = a.corefn.jpg
    }(cytoscape), function(a) {
        "use strict";
        a.fn.core({
            layout: function(b) {
                var c;
                return null == b && (b = a.util.extend({}, this._private.options.layout), b.eles = this.$()), c = this.initLayout(b), c.run(), this
            },
            makeLayout: function(a) {
                return this.initLayout(a)
            },
            initLayout: function(b) {
                if (null == b) return void a.util.error("Layout options must be specified to make a layout");
                if (null == b.name) return void a.util.error("A `name` must be specified to make a layout");
                var c = b.name,
                    d = a.extension("layout", c);
                if (null == d) return void a.util.error("Can not apply layout: No such layout `" + c + "` found; did you include its JS file?");
                b.eles = null != b.eles ? b.eles : this.$(), a.is.string(b.eles) && (b.eles = this.$(b.eles));
                var e = new d(a.util.extend({}, b, {
                    cy: this
                }));
                return a.is.plainObject(e._private) || (e._private = {}), e._private.cy = this, e._private.listeners = [], e
            }
        }), a.corefn.createLayout = a.corefn.makeLayout
    }(cytoscape), function(a) {
        "use strict";
        a.fn.core({
            notify: function(a) {
                if (this._private.batchingNotify) {
                    var b = this._private.batchNotifyEles,
                        c = this._private.batchNotifyTypes;
                    if (a.collection)
                        for (var d = 0; d < a.collection.length; d++) {
                            var e = a.collection[d];
                            b.ids[e._private.id] || b.push(e)
                        }
                    return void(c.ids[a.type] || c.push(a.type))
                }
                if (this._private.notificationsEnabled) {
                    var f = this.renderer();
                    f.notify(a)
                }
            },
            notifications: function(a) {
                var b = this._private;
                return void 0 === a ? b.notificationsEnabled : void(b.notificationsEnabled = a ? !0 : !1)
            },
            noNotifications: function(a) {
                this.notifications(!1), a(), this.notifications(!0)
            },
            startBatch: function() {
                var a = this._private;
                return a.batchingStyle = a.batchingNotify = !0, a.batchStyleEles = [], a.batchNotifyEles = [], a.batchNotifyTypes = [], a.batchStyleEles.ids = {}, a.batchNotifyEles.ids = {}, a.batchNotifyTypes.ids = {}, this
            },
            endBatch: function() {
                var b = this._private;
                return b.batchingStyle = !1, new a.Collection(this, b.batchStyleEles).updateStyle(), b.batchingNotify = !1, this.notify({
                    type: b.batchNotifyTypes,
                    collection: b.batchNotifyEles
                }), this
            },
            batch: function(a) {
                return this.startBatch(), a(), this.endBatch(), this
            },
            batchData: function(a) {
                var b = this;
                return this.batch(function() {
                    for (var c in a) {
                        var d = a[c],
                            e = b.getElementById(c);
                        e.data(d)
                    }
                })
            }
        })
    }(cytoscape), function(a) {
        "use strict";
        a.fn.core({
            renderTo: function(a, b, c, d) {
                var e = this._private.renderer;
                return e.renderTo(a, b, c, d), this
            },
            renderer: function() {
                return this._private.renderer
            },
            forceRender: function() {
                return this.notify({
                    type: "draw"
                }), this
            },
            resize: function() {
                return this.notify({
                    type: "resize"
                }), this.trigger("resize"), this
            },
            initRenderer: function(b) {
                var c = this,
                    d = a.extension("renderer", b.name);
                return null == d ? void a.util.error("Can not initialise: No such renderer `%s` found; did you include its JS file?", b.name) : void(this._private.renderer = new d(a.util.extend({}, b, {
                    cy: c,
                    style: c._private.style
                })))
            },
            triggerOnRender: function() {
                for (var a = this._private.onRenders, b = 0; b < a.length; b++) {
                    var c = a[b];
                    c()
                }
                return this
            },
            onRender: function(a) {
                return this._private.onRenders.push(a), this
            },
            offRender: function(a) {
                var b = this._private.onRenders;
                if (null == a) return this._private.onRenders = [], this;
                for (var c = 0; c < b.length; c++) {
                    var d = b[c];
                    if (a === d) {
                        b.splice(c, 1);
                        break
                    }
                }
                return this
            }
        })
    }(cytoscape), function(a) {
        "use strict";
        a.fn.core({
            collection: function(b) {
                return a.is.string(b) ? this.$(b) : a.is.elementOrCollection(b) ? b.collection() : a.is.array(b) ? new a.Collection(this, b) : new a.Collection(this)
            },
            nodes: function(a) {
                var b = this.$(function() {
                    return this.isNode()
                });
                return a ? b.filter(a) : b
            },
            edges: function(a) {
                var b = this.$(function() {
                    return this.isEdge()
                });
                return a ? b.filter(a) : b
            },
            $: function(b) {
                var c = new a.Collection(this, this._private.elements);
                return b ? c.filter(b) : c
            }
        }), a.corefn.elements = a.corefn.filter = a.corefn.$
    }(cytoscape), function(a) {
        "use strict";
        a.fn.core({
            style: function(a) {
                if (a) {
                    var b = this.setStyle(a);
                    b.update()
                }
                return this._private.style
            },
            setStyle: function(b) {
                var c = this._private;
                return a.is.stylesheet(b) ? c.style = b.generateStyle(this) : a.is.array(b) ? c.style = a.style.fromJson(this, b) : a.is.string(b) ? c.style = a.style.fromString(this, b) : c.style = new a.Style(this), c.style
            }
        })
    }(cytoscape), function(a) {
        "use strict";
        a.fn.core({
            autolock: function(a) {
                return void 0 === a ? this._private.autolock : (this._private.autolock = a ? !0 : !1, this)
            },
            autoungrabify: function(a) {
                return void 0 === a ? this._private.autoungrabify : (this._private.autoungrabify = a ? !0 : !1, this)
            },
            autounselectify: function(a) {
                return void 0 === a ? this._private.autounselectify : (this._private.autounselectify = a ? !0 : !1, this)
            },
            panningEnabled: function(a) {
                return void 0 === a ? this._private.panningEnabled : (this._private.panningEnabled = a ? !0 : !1, this)
            },
            userPanningEnabled: function(a) {
                return void 0 === a ? this._private.userPanningEnabled : (this._private.userPanningEnabled = a ? !0 : !1, this)
            },
            zoomingEnabled: function(a) {
                return void 0 === a ? this._private.zoomingEnabled : (this._private.zoomingEnabled = a ? !0 : !1, this)
            },
            userZoomingEnabled: function(a) {
                return void 0 === a ? this._private.userZoomingEnabled : (this._private.userZoomingEnabled = a ? !0 : !1, this)
            },
            boxSelectionEnabled: function(a) {
                return void 0 === a ? this._private.boxSelectionEnabled : (this._private.boxSelectionEnabled = a ? !0 : !1, this)
            },
            pan: function() {
                var b, c, d, e, f, g = arguments,
                    h = this._private.pan;
                switch (g.length) {
                    case 0:
                        return h;
                    case 1:
                        if (a.is.string(g[0])) return b = g[0], h[b];
                        if (a.is.plainObject(g[0])) {
                            if (!this._private.panningEnabled) return this;
                            d = g[0], e = d.x, f = d.y, a.is.number(e) && (h.x = e), a.is.number(f) && (h.y = f), this.trigger("pan viewport")
                        }
                        break;
                    case 2:
                        if (!this._private.panningEnabled) return this;
                        b = g[0], c = g[1], "x" !== b && "y" !== b || !a.is.number(c) || (h[b] = c), this.trigger("pan viewport")
                }
                return this.notify({
                    type: "viewport"
                }), this
            },
            panBy: function(b) {
                var c, d, e, f, g, h = arguments,
                    i = this._private.pan;
                if (!this._private.panningEnabled) return this;
                switch (h.length) {
                    case 1:
                        a.is.plainObject(h[0]) && (e = h[0], f = e.x, g = e.y, a.is.number(f) && (i.x += f), a.is.number(g) && (i.y += g), this.trigger("pan viewport"));
                        break;
                    case 2:
                        c = h[0], d = h[1], "x" !== c && "y" !== c || !a.is.number(d) || (i[c] += d), this.trigger("pan viewport")
                }
                return this.notify({
                    type: "viewport"
                }), this
            },
            fit: function(a, b) {
                var c = this.getFitViewport(a, b);
                if (c) {
                    var d = this._private;
                    d.zoom = c.zoom, d.pan = c.pan, this.trigger("pan zoom viewport"), this.notify({
                        type: "viewport"
                    })
                }
                return this
            },
            getFitViewport: function(b, c) {
                if (a.is.number(b) && void 0 === c && (c = b, b = void 0), this._private.panningEnabled && this._private.zoomingEnabled) {
                    var d;
                    if (a.is.string(b)) {
                        var e = b;
                        b = this.$(e)
                    } else if (a.is.boundingBox(b)) {
                        var f = b;
                        d = {
                            x1: f.x1,
                            y1: f.y1,
                            x2: f.x2,
                            y2: f.y2
                        }, d.w = d.x2 - d.x1, d.h = d.y2 - d.y1
                    } else a.is.elementOrCollection(b) || (b = this.elements());
                    d = d || b.boundingBox();
                    var g, h = this.width(),
                        i = this.height();
                    if (c = a.is.number(c) ? c : 0, !isNaN(h) && !isNaN(i) && h > 0 && i > 0 && !isNaN(d.w) && !isNaN(d.h) && d.w > 0 && d.h > 0) {
                        g = Math.min((h - 2 * c) / d.w, (i - 2 * c) / d.h), g = g > this._private.maxZoom ? this._private.maxZoom : g, g = g < this._private.minZoom ? this._private.minZoom : g;
                        var j = {
                            x: (h - g * (d.x1 + d.x2)) / 2,
                            y: (i - g * (d.y1 + d.y2)) / 2
                        };
                        return {
                            zoom: g,
                            pan: j
                        }
                    }
                }
            },
            minZoom: function(b) {
                return void 0 === b ? this._private.minZoom : (a.is.number(b) && (this._private.minZoom = b), this)
            },
            maxZoom: function(b) {
                return void 0 === b ? this._private.maxZoom : (a.is.number(b) && (this._private.maxZoom = b), this)
            },
            zoom: function(b) {
                var c, d;
                if (void 0 === b) return this._private.zoom;
                if (a.is.number(b)) d = b;
                else if (a.is.plainObject(b)) {
                    if (d = b.level, b.position) {
                        var e = b.position,
                            f = this._private.pan,
                            g = this._private.zoom;
                        c = {
                            x: e.x * g + f.x,
                            y: e.y * g + f.y
                        }
                    } else b.renderedPosition && (c = b.renderedPosition);
                    if (c && !this._private.panningEnabled) return this
                }
                if (!this._private.zoomingEnabled) return this;
                if (!a.is.number(d) || c && (!a.is.number(c.x) || !a.is.number(c.y))) return this;
                if (d = d > this._private.maxZoom ? this._private.maxZoom : d, d = d < this._private.minZoom ? this._private.minZoom : d, c) {
                    var h = this._private.pan,
                        i = this._private.zoom,
                        j = d,
                        k = {
                            x: -j / i * (c.x - h.x) + c.x,
                            y: -j / i * (c.y - h.y) + c.y
                        };
                    this._private.zoom = d, this._private.pan = k;
                    var l = h.x !== k.x || h.y !== k.y;
                    this.trigger(" zoom " + (l ? " pan " : "") + " viewport ")
                } else this._private.zoom = d, this.trigger("zoom viewport");
                return this.notify({
                    type: "viewport"
                }), this
            },
            viewport: function(b) {
                var c = this._private,
                    d = !0,
                    e = !0,
                    f = [],
                    g = !1,
                    h = !1;
                if (!b) return this;
                if (a.is.number(b.zoom) || (d = !1), a.is.plainObject(b.pan) || (e = !1), !d && !e) return this;
                if (d) {
                    var i = b.zoom;
                    i < c.minZoom || i > c.maxZoom || !c.zoomingEnabled ? g = !0 : (c.zoom = i, f.push("zoom"))
                }
                if (e && (!g || !b.cancelOnFailedZoom) && c.panningEnabled) {
                    var j = b.pan;
                    a.is.number(j.x) && (c.pan.x = j.x, h = !1), a.is.number(j.y) && (c.pan.y = j.y, h = !1), h || f.push("pan")
                }
                return f.length > 0 && (f.push("viewport"), this.trigger(f.join(" ")), this.notify({
                    type: "viewport"
                })), this
            },
            center: function(a) {
                var b = this.getCenterPan(a);
                return b && (this._private.pan = b, this.trigger("pan viewport"), this.notify({
                    type: "viewport"
                })), this
            },
            getCenterPan: function(b, c) {
                if (this._private.panningEnabled) {
                    if (a.is.string(b)) {
                        var d = b;
                        b = this.elements(d)
                    } else a.is.elementOrCollection(b) || (b = this.elements());
                    var e = b.boundingBox(),
                        f = this.width(),
                        g = this.height();
                    c = void 0 === c ? this._private.zoom : c;
                    var h = {
                        x: (f - c * (e.x1 + e.x2)) / 2,
                        y: (g - c * (e.y1 + e.y2)) / 2
                    };
                    return h
                }
            },
            reset: function() {
                return this._private.panningEnabled && this._private.zoomingEnabled ? (this.viewport({
                    pan: {
                        x: 0,
                        y: 0
                    },
                    zoom: 1
                }), this) : this
            },
            width: function() {
                var a = this._private.container;
                return a ? a.clientWidth : 1
            },
            height: function() {
                var a = this._private.container;
                return a ? a.clientHeight : 1
            },
            extent: function() {
                var a = this._private.pan,
                    b = this._private.zoom,
                    c = this.renderedExtent(),
                    d = {
                        x1: (c.x1 - a.x) / b,
                        x2: (c.x2 - a.x) / b,
                        y1: (c.y1 - a.y) / b,
                        y2: (c.y2 - a.y) / b
                    };
                return d.w = d.x2 - d.x1, d.h = d.y2 - d.y1, d
            },
            renderedExtent: function() {
                var a = this.width(),
                    b = this.height();
                return {
                    x1: 0,
                    y1: 0,
                    x2: a,
                    y2: b,
                    w: a,
                    h: b
                }
            }
        }), a.corefn.centre = a.corefn.center, a.corefn.autolockNodes = a.corefn.autolock, a.corefn.autoungrabifyNodes = a.corefn.autoungrabify
    }(cytoscape), function(a) {
        "use strict";
        a.fn.collection = a.fn.eles = function(b, c) {
            for (var d in b) {
                var e = b[d];
                a.Collection.prototype[d] = e
            }
        };
        var b = {
            prefix: {
                nodes: "n",
                edges: "e"
            },
            id: {
                nodes: 0,
                edges: 0
            },
            generate: function(b, c, d) {
                var e = a.is.element(c) ? c._private : c,
                    f = e.group,
                    g = null != d ? d : this.prefix[f] + this.id[f];
                if (b.getElementById(g).empty()) this.id[f]++;
                else
                    for (; !b.getElementById(g).empty();) g = this.prefix[f] + ++this.id[f];
                return g
            }
        };
        a.Element = function(b, c, d) {
            if (!(this instanceof a.Element)) return new a.Element(b, c, d);
            var e = this;
            if (d = void 0 === d || d ? !0 : !1, void 0 === b || void 0 === c || !a.is.core(b)) return void a.util.error("An element must have a core reference and parameters set");
            if ("nodes" !== c.group && "edges" !== c.group) return void a.util.error("An element must be of type `nodes` or `edges`; you specified `" + c.group + "`");
            if (this.length = 1, this[0] = this, this._private = {
                    cy: b,
                    single: !0,
                    data: c.data || {},
                    position: c.position || {},
                    autoWidth: void 0,
                    autoHeight: void 0,
                    listeners: [],
                    group: c.group,
                    style: {},
                    rstyle: {},
                    styleCxts: [],
                    removed: !0,
                    selected: c.selected ? !0 : !1,
                    selectable: void 0 === c.selectable ? !0 : c.selectable ? !0 : !1,
                    locked: c.locked ? !0 : !1,
                    grabbed: !1,
                    grabbable: void 0 === c.grabbable ? !0 : c.grabbable ? !0 : !1,
                    active: !1,
                    classes: {},
                    animation: {
                        current: [],
                        queue: []
                    },
                    rscratch: {},
                    scratch: c.scratch || {},
                    edges: [],
                    children: []
                }, c.renderedPosition) {
                var f = c.renderedPosition,
                    g = b.pan(),
                    h = b.zoom();
                this._private.position = {
                    x: (f.x - g.x) / h,
                    y: (f.y - g.y) / h
                }
            }
            if (a.is.string(c.classes))
                for (var i = c.classes.split(/\s+/), j = 0, k = i.length; k > j; j++) {
                    var l = i[j];
                    l && "" !== l && (e._private.classes[l] = !0)
                }
            c.css && b.style().applyBypass(this, c.css), (void 0 === d || d) && this.restore()
        }, a.Collection = function(c, d, e) {
            if (!(this instanceof a.Collection)) return new a.Collection(c, d);
            if (void 0 === c || !a.is.core(c)) return void a.util.error("A collection must have a reference to the core");
            var f = {},
                g = {},
                h = !1;
            if (d) {
                if (d.length > 0 && a.is.plainObject(d[0]) && !a.is.element(d[0])) {
                    h = !0;
                    for (var i = [], j = {}, k = 0, l = d.length; l > k; k++) {
                        var m = d[k];
                        null == m.data && (m.data = {});
                        var n = m.data;
                        if (null == n.id) n.id = b.generate(c, m);
                        else if (0 !== c.getElementById(n.id).length || j[n.id]) continue;
                        var o = new a.Element(c, m, !1);
                        i.push(o), j[n.id] = !0
                    }
                    d = i
                }
            } else d = [];
            this.length = 0;
            for (var k = 0, l = d.length; l > k; k++) {
                var p = d[k];
                if (p) {
                    var q = p._private.data.id;
                    (!e || e.unique && !f[q]) && (f[q] = p, g[q] = this.length, this[this.length] = p, this.length++)
                }
            }
            this._private = {
                cy: c,
                ids: f,
                indexes: g
            }, h && this.restore()
        }, a.elefn = a.elesfn = a.Element.prototype = a.Collection.prototype, a.elesfn.cy = function() {
            return this._private.cy
        }, a.elesfn.element = function() {
            return this[0]
        }, a.elesfn.collection = function() {
            return a.is.collection(this) ? this : new a.Collection(this._private.cy, [this])
        }, a.elesfn.unique = function() {
            return new a.Collection(this._private.cy, this, {
                unique: !0
            })
        }, a.elesfn.getElementById = function(b) {
            var c = this._private.cy,
                d = this._private.ids[b];
            return d ? d : a.Collection(c)
        }, a.elesfn.json = function() {
            var b = this.element();
            if (null == b) return void 0;
            var c = b._private,
                d = a.util.copy({
                    data: c.data,
                    position: c.position,
                    group: c.group,
                    bypass: c.bypass,
                    removed: c.removed,
                    selected: c.selected,
                    selectable: c.selectable,
                    locked: c.locked,
                    grabbed: c.grabbed,
                    grabbable: c.grabbable,
                    classes: ""
                }),
                e = [];
            for (var f in c.classes) c.classes[f] && e.push(f);
            for (var g = 0; g < e.length; g++) {
                var f = e[g];
                d.classes += f + (g < e.length - 1 ? " " : "")
            }
            return d
        }, a.elesfn.jsons = function() {
            for (var a = [], b = 0; b < this.length; b++) {
                var c = this[b],
                    d = c.json();
                a.push(d)
            }
            return a
        }, a.elesfn.clone = function() {
            for (var b = this.cy(), c = [], d = 0; d < this.length; d++) {
                var e = this[d],
                    f = e.json(),
                    g = new a.Element(b, f, !1);
                c.push(g)
            }
            return new a.Collection(b, c)
        }, a.elesfn.copy = a.elesfn.clone, a.elesfn.restore = function(c) {
            var d = this,
                e = [],
                f = d.cy();
            void 0 === c && (c = !0);
            for (var g = [], h = [], i = [], j = 0, k = 0, l = 0, m = d.length; m > l; l++) {
                var n = d[l];
                n.isNode() ? (h.push(n), j++) : (i.push(n), k++)
            }
            g = h.concat(i);
            for (var l = 0, m = g.length; m > l; l++) {
                var n = g[l];
                if (n.removed()) {
                    var o = n._private,
                        p = o.data;
                    if (void 0 === p.id) p.id = b.generate(f, n);
                    else {
                        if (a.is.emptyString(p.id) || !a.is.string(p.id)) {
                            a.util.error("Can not create element with invalid string ID `" + p.id + "`");
                            continue
                        }
                        if (0 !== f.getElementById(p.id).length) {
                            a.util.error("Can not create second element with ID `" + p.id + "`");
                            continue
                        }
                    }
                    var q = p.id;
                    if (n.isEdge()) {
                        for (var r = n, s = ["source", "target"], t = s.length, u = !1, v = 0; t > v; v++) {
                            var w = s[v],
                                x = p[w];
                            null == x || "" === x ? (a.util.error("Can not create edge `" + q + "` with unspecified " + w), u = !0) : f.getElementById(x).empty() && (a.util.error("Can not create edge `" + q + "` with nonexistant " + w + " `" + x + "`"), u = !0)
                        }
                        if (u) continue;
                        var y = f.getElementById(p.source),
                            z = f.getElementById(p.target);
                        y._private.edges.push(r), z._private.edges.push(r), r._private.source = y, r._private.target = z
                    }
                    o.ids = {}, o.ids[q] = n, o.removed = !1, f.addToPool(n), e.push(n)
                }
            }
            for (var l = 0; j > l; l++) {
                var A = g[l],
                    p = A._private.data,
                    B = A._private.data.parent,
                    C = null != B;
                if (C) {
                    var D = f.getElementById(B);
                    if (D.empty()) p.parent = void 0;
                    else {
                        for (var E = !1, F = D; !F.empty();) {
                            if (A.same(F)) {
                                E = !0, p.parent = void 0;
                                break
                            }
                            F = F.parent()
                        }
                        E || (D[0]._private.children.push(A), A._private.parent = D[0], f._private.hasCompoundNodes = !0)
                    }
                }
            }
            if (e = new a.Collection(f, e), e.length > 0) {
                var G = e.add(e.connectedNodes()).add(e.parent());
                G.updateStyle(c), c ? e.rtrigger("add") : e.trigger("add")
            }
            return d
        }, a.elesfn.removed = function() {
            var a = this[0];
            return a && a._private.removed
        }, a.elesfn.inside = function() {
            var a = this[0];
            return a && !a._private.removed
        }, a.elesfn.remove = function(b) {
            function c(a) {
                for (var b = a._private.edges, c = 0; c < b.length; c++) e(b[c])
            }

            function d(a) {
                for (var b = a._private.children, c = 0; c < b.length; c++) e(b[c])
            }

            function e(a) {
                var b = k[a.id()];
                b || (k[a.id()] = !0, a.isNode() ? (j.push(a), c(a), d(a)) : j.unshift(a))
            }

            function f(a, b) {
                for (var c = a._private.edges, d = 0; d < c.length; d++) {
                    var e = c[d];
                    if (b === e) {
                        c.splice(d, 1);
                        break
                    }
                }
            }

            function g(a, b) {
                b = b[0], a = a[0];
                for (var c = a._private.children, d = 0; d < c.length; d++)
                    if (c[d][0] === b[0]) {
                        c.splice(d, 1);
                        break
                    }
            }
            var h = this,
                i = [],
                j = [],
                k = {},
                l = h._private.cy;
            void 0 === b && (b = !0);
            for (var m = 0, n = h.length; n > m; m++) {
                var o = h[m];
                e(o)
            }
            for (var m = 0; m < j.length; m++) {
                var o = j[m];
                if (o._private.removed = !0, l.removeFromPool(o), i.push(o), o.isEdge()) {
                    var p = o.source()[0],
                        q = o.target()[0];
                    f(p, o), f(q, o)
                } else {
                    var r = o.parent();
                    0 !== r.length && g(r, o)
                }
            }
            var s = l._private.elements;
            l._private.hasCompoundNodes = !1;
            for (var m = 0; m < s.length; m++) {
                var o = s[m];
                if (o.isParent()) {
                    l._private.hasCompoundNodes = !0;
                    break
                }
            }
            var t = new a.Collection(this.cy(), i);
            t.size() > 0 && (b && this.cy().notify({
                type: "remove",
                collection: t
            }), t.trigger("remove"));
            for (var u = {}, m = 0; m < j.length; m++) {
                var o = j[m],
                    v = "nodes" === o._private.group,
                    w = o._private.data.parent;
                if (v && void 0 !== w && !u[w]) {
                    u[w] = !0;
                    var r = l.getElementById(w);
                    r && 0 !== r.length && !r._private.removed && 0 === r.children().length && r.updateStyle()
                }
            }
            return this
        }, a.elesfn.move = function(a) {
            var b = this._private.cy;
            if (void 0 !== a.source || void 0 !== a.target) {
                var c = a.source,
                    d = a.target,
                    e = b.getElementById(c).length > 0,
                    f = b.getElementById(d).length > 0;
                if (e || f) {
                    var g = this.jsons();
                    this.remove();
                    for (var h = 0; h < g.length; h++) {
                        var i = g[h];
                        "edges" === i.group && (e && (i.data.source = c), f && (i.data.target = d))
                    }
                    return b.add(g)
                }
            } else if (void 0 !== a.parent) {
                var j = a.parent,
                    k = null === j || b.getElementById(j).length > 0;
                if (k) {
                    var g = this.jsons(),
                        l = this.descendants(),
                        m = l.merge(l.add(this).connectedEdges());
                    this.remove();
                    for (var h = 0; h < this.length; h++) {
                        var i = g[h];
                        "nodes" === i.group && (i.data.parent = null === j ? void 0 : j)
                    }
                }
                return b.add(g).merge(m.restore())
            }
            return this
        }
    }(cytoscape), function(a) {
        "use strict";
        a.fn.eles({
            stdBreadthFirstSearch: function(b) {
                return b = a.util.extend({}, b, {
                    std: !0
                }), this.breadthFirstSearch(b)
            },
            breadthFirstSearch: function(b, c, d) {
                var e, f, g;
                a.is.plainObject(b) && !a.is.elementOrCollection(b) && (e = b, b = e.roots, c = e.visit, d = e.directed, f = e.std, g = e.thisArg), d = 2 !== arguments.length || a.is.fn(c) ? d : c, c = a.is.fn(c) ? c : function() {};
                for (var h, i = this._private.cy, j = a.is.string(b) ? this.filter(b) : b, k = [], l = [], m = {}, n = {}, o = {}, p = 0, q = this.nodes(), r = this.edges(), s = 0; s < j.length; s++) j[s].isNode() && (k.unshift(j[s]), o[j[s].id()] = !0, l.push(j[s]), n[j[s].id()] = 0);
                for (; 0 !== k.length;) {
                    var t, j = k.shift(),
                        u = n[j.id()],
                        v = m[j.id()],
                        w = null == v ? void 0 : v.connectedNodes().not(j)[0];
                    if (t = f ? c.call(g, j, v, w, p++, u) : c.call(j, p++, u, j, v, w), t === !0) {
                        h = j;
                        break
                    }
                    if (t === !1) break;
                    for (var x = j.connectedEdges(d ? function() {
                            return this.data("source") === j.id()
                        } : void 0).intersect(r), s = 0; s < x.length; s++) {
                        var y = x[s],
                            z = y.connectedNodes(function() {
                                return this.id() !== j.id()
                            }).intersect(q);
                        0 === z.length || o[z.id()] || (z = z[0], k.push(z), o[z.id()] = !0, n[z.id()] = n[j.id()] + 1, l.push(z), m[z.id()] = y)
                    }
                }
                for (var A = [], s = 0; s < l.length; s++) {
                    var B = l[s],
                        C = m[B.id()];
                    C && A.push(C), A.push(B)
                }
                return {
                    path: new a.Collection(i, A, {
                        unique: !0
                    }),
                    found: new a.Collection(i, h, {
                        unique: !0
                    })
                }
            },
            stdDepthFirstSearch: function(b) {
                return b = a.util.extend({}, b, {
                    std: !0
                }), this.depthFirstSearch(b)
            },
            depthFirstSearch: function(b, c, d) {
                var e, f, g;
                a.is.plainObject(b) && !a.is.elementOrCollection(b) && (e = b, b = e.roots, c = e.visit, d = e.directed, f = e.std, g = e.thisArg), d = 2 !== arguments.length || a.is.fn(c) ? d : c, c = a.is.fn(c) ? c : function() {};
                for (var h, i = this._private.cy, j = a.is.string(b) ? this.filter(b) : b, k = [], l = [], m = {}, n = {}, o = {}, p = 0, q = this.edges(), r = this.nodes(), s = 0; s < j.length; s++) j[s].isNode() && (k.push(j[s]), l.push(j[s]), n[j[s].id()] = 0);
                for (; 0 !== k.length;) {
                    var j = k.pop();
                    if (!o[j.id()]) {
                        o[j.id()] = !0;
                        var t, u = n[j.id()],
                            v = m[j.id()],
                            w = null == v ? void 0 : v.connectedNodes().not(j)[0];
                        if (t = f ? c.call(g, j, v, w, p++, u) : c.call(j, p++, u, j, v, w), t === !0) {
                            h = j;
                            break
                        }
                        if (t === !1) break;
                        for (var x = j.connectedEdges(d ? function() {
                                return this.data("source") === j.id()
                            } : void 0).intersect(q), s = 0; s < x.length; s++) {
                            var y = x[s],
                                z = y.connectedNodes(function() {
                                    return this.id() !== j.id()
                                }).intersect(r);
                            0 === z.length || o[z.id()] || (z = z[0], k.push(z), n[z.id()] = n[j.id()] + 1, l.push(z), m[z.id()] = y)
                        }
                    }
                }
                for (var A = [], s = 0; s < l.length; s++) {
                    var B = l[s],
                        C = m[B.id()];
                    C && A.push(C), A.push(B)
                }
                return {
                    path: new a.Collection(i, A, {
                        unique: !0
                    }),
                    found: new a.Collection(i, h, {
                        unique: !0
                    })
                }
            },
            kruskal: function(b) {
                function c(a) {
                    for (var b = 0; b < e.length; b++) {
                        var c = e[b];
                        if (c.anySame(a)) return {
                            eles: c,
                            index: b
                        }
                    }
                }
                b = a.is.fn(b) ? b : function() {
                    return 1
                };
                for (var d = new a.Collection(this._private.cy, []), e = [], f = this.nodes(), g = 0; g < f.length; g++) e.push(f[g].collection());
                for (var h = this.edges(), i = h.toArray().sort(function(a, c) {
                        var d = b.call(a, a),
                            e = b.call(c, c);
                        return d - e
                    }), g = 0; g < i.length; g++) {
                    var j = i[g],
                        k = j.source()[0],
                        l = j.target()[0],
                        m = c(k),
                        n = c(l);
                    m.index !== n.index && (d = d.add(j), e[m.index] = m.eles.add(n.eles), e.splice(n.index, 1))
                }
                return f.add(d)
            },
            dijkstra: function(b, c, d) {
                var e;
                a.is.plainObject(b) && !a.is.elementOrCollection(b) && (e = b, b = e.root, c = e.weight, d = e.directed);
                var f = this._private.cy;
                c = a.is.fn(c) ? c : function() {
                    return 1
                };
                for (var g = a.is.string(b) ? this.filter(b)[0] : b[0], h = {}, i = {}, j = {}, k = this.edges().filter(function() {
                        return !this.isLoop()
                    }), l = this.nodes(), m = [], n = 0; n < l.length; n++) h[l[n].id()] = l[n].same(g) ? 0 : 1 / 0, m.push(l[n]);
                var o = function(a) {
                    return h[a.id()]
                };
                m = new a.Collection(f, m);
                for (var p = a.Minheap(f, m, o), q = function(a, b) {
                        for (var e, f = (d ? a.edgesTo(b) : a.edgesWith(b)).intersect(k), g = 1 / 0, h = 0; h < f.length; h++) {
                            var i = f[h],
                                j = c.apply(i, [i]);
                            (g > j || !e) && (g = j, e = i)
                        }
                        return {
                            edge: e,
                            dist: g
                        }
                    }; p.size() > 0;) {
                    var r = p.pop(),
                        s = r.value,
                        t = r.id,
                        u = f.getElementById(t);
                    if (j[t] = s, s === Math.Infinite) break;
                    for (var v = u.neighborhood().intersect(l), n = 0; n < v.length; n++) {
                        var w = v[n],
                            x = w.id(),
                            y = q(u, w),
                            z = s + y.dist;
                        z < p.getValueById(x) && (p.edit(x, z), i[x] = {
                            node: u,
                            edge: y.edge
                        })
                    }
                }
                return {
                    distanceTo: function(b) {
                        var c = a.is.string(b) ? l.filter(b)[0] : b[0];
                        return j[c.id()]
                    },
                    pathTo: function(b) {
                        var c = a.is.string(b) ? l.filter(b)[0] : b[0],
                            d = [],
                            e = c;
                        if (c.length > 0)
                            for (d.unshift(c); i[e.id()];) {
                                var g = i[e.id()];
                                d.unshift(g.edge), d.unshift(g.node), e = g.node
                            }
                        return new a.Collection(f, d)
                    }
                }
            }
        }), a.elesfn.bfs = a.elesfn.breadthFirstSearch, a.elesfn.dfs = a.elesfn.depthFirstSearch, a.elesfn.stdBfs = a.elesfn.stdBreadthFirstSearch, a.elesfn.stdDfs = a.elesfn.stdDepthFirstSearch
    }(cytoscape), function(a) {
        "use strict";
        a.fn.eles({
            aStar: function(b) {
                b = b || {};
                var c = function(a, b, d, f) {
                        if (a == b) return f.push(e.getElementById(b)), f;
                        if (b in d) {
                            var g = d[b],
                                h = n[b];
                            return f.push(e.getElementById(b)), f.push(e.getElementById(h)), c(a, g, d, f)
                        }
                        return void 0
                    },
                    d = function(a, b) {
                        if (0 === a.length) return void 0;
                        for (var c = 0, d = b[a[0]], e = 1; e < a.length; e++) {
                            var f = b[a[e]];
                            d > f && (d = f, c = e)
                        }
                        return c
                    },
                    e = this._private.cy;
                if (null == b || null == b.root) return void 0;
                var f = a.is.string(b.root) ? this.filter(b.root)[0] : b.root[0];
                if (null == b.goal) return void 0;
                var g = a.is.string(b.goal) ? this.filter(b.goal)[0] : b.goal[0];
                if (null != b.heuristic && a.is.fn(b.heuristic)) var h = b.heuristic;
                else var h = function() {
                    return 0
                };
                if (null != b.weight && a.is.fn(b.weight)) var i = b.weight;
                else var i = function(a) {
                    return 1
                };
                if (null != b.directed) var j = b.directed;
                else var j = !1;
                var k = [],
                    l = [f.id()],
                    m = {},
                    n = {},
                    o = {},
                    p = {};
                o[f.id()] = 0, p[f.id()] = h(f);
                for (var q = this.edges().stdFilter(function(a) {
                        return !a.isLoop()
                    }), r = this.nodes(), s = 0; l.length > 0;) {
                    var t = d(l, p),
                        u = e.getElementById(l[t]);
                    if (s++, u.id() == g.id()) {
                        var v = c(f.id(), g.id(), m, []);
                        return v.reverse(), {
                            found: !0,
                            distance: o[u.id()],
                            path: new a.Collection(e, v),
                            steps: s
                        }
                    }
                    k.push(u.id()), l.splice(t, 1);
                    var w = u.connectedEdges();
                    j && (w = w.stdFilter(function(a) {
                        return a.data("source") === u.id()
                    })), w = w.intersect(q);
                    for (var x = 0; x < w.length; x++) {
                        var y = w[x],
                            z = y.connectedNodes().stdFilter(function(a) {
                                return a.id() !== u.id()
                            }).intersect(r);
                        if (-1 == k.indexOf(z.id())) {
                            var A = o[u.id()] + i.apply(y, [y]); - 1 != l.indexOf(z.id()) ? A < o[z.id()] && (o[z.id()] = A, p[z.id()] = A + h(z), m[z.id()] = u.id()) : (o[z.id()] = A, p[z.id()] = A + h(z), l.push(z.id()), m[z.id()] = u.id(), n[z.id()] = y.id())
                        }
                    }
                }
                return {
                    found: !1,
                    distance: void 0,
                    path: void 0,
                    steps: s
                }
            },
            floydWarshall: function(b) {
                b = b || {};
                var c = this._private.cy;
                if (null != b.weight && a.is.fn(b.weight)) var d = b.weight;
                else var d = function(a) {
                    return 1
                };
                if (null != b.directed) var e = b.directed;
                else var e = !1;
                for (var f = this.edges().stdFilter(function(a) {
                        return !a.isLoop()
                    }), g = this.nodes(), h = g.length, i = {}, j = 0; h > j; j++) i[g[j].id()] = j;
                for (var k = [], j = 0; h > j; j++) {
                    for (var l = new Array(h), m = 0; h > m; m++) j == m ? l[m] = 0 : l[m] = 1 / 0;
                    k.push(l)
                }
                var n = [],
                    o = [],
                    p = function(a) {
                        for (var b = 0; h > b; b++) {
                            for (var c = new Array(h), d = 0; h > d; d++) c[d] = void 0;
                            a.push(c)
                        }
                    };
                p(n), p(o);
                for (var j = 0; j < f.length; j++) {
                    var q = i[f[j].source().id()],
                        r = i[f[j].target().id()],
                        s = d.apply(f[j], [f[j]]);
                    k[q][r] > s && (k[q][r] = s, n[q][r] = r, o[q][r] = f[j])
                }
                if (!e)
                    for (var j = 0; j < f.length; j++) {
                        var q = i[f[j].target().id()],
                            r = i[f[j].source().id()],
                            s = d.apply(f[j], [f[j]]);
                        k[q][r] > s && (k[q][r] = s, n[q][r] = r, o[q][r] = f[j])
                    }
                for (var t = 0; h > t; t++)
                    for (var j = 0; h > j; j++)
                        for (var m = 0; h > m; m++) k[j][t] + k[t][m] < k[j][m] && (k[j][m] = k[j][t] + k[t][m], n[j][m] = n[j][t]);
                for (var u = [], j = 0; h > j; j++) u.push(g[j].id());
                var v = {
                    distance: function(b, d) {
                        if (a.is.string(b)) var e = c.filter(b)[0].id();
                        else var e = b.id();
                        if (a.is.string(d)) var f = c.filter(d)[0].id();
                        else var f = d.id();
                        return k[i[e]][i[f]]
                    },
                    path: function(b, d) {
                        var e = function(a, b, d, e, f) {
                            if (a === b) return c.getElementById(e[a]);
                            if (void 0 === d[a][b]) return void 0;
                            for (var g = [c.getElementById(e[a])], h = a; a !== b;) {
                                h = a, a = d[a][b];
                                var i = f[h][a];
                                g.push(i), g.push(c.getElementById(e[a]))
                            }
                            return g
                        };
                        if (a.is.string(b)) var f = c.filter(b)[0].id();
                        else var f = b.id();
                        if (a.is.string(d)) var g = c.filter(d)[0].id();
                        else var g = d.id();
                        var h = e(i[f], i[g], n, u, o);
                        return new a.Collection(c, h)
                    }
                };
                return v
            },
            bellmanFord: function(b) {
                if (b = b || {}, null != b.weight && a.is.fn(b.weight)) var c = b.weight;
                else var c = function(a) {
                    return 1
                };
                if (null != b.directed) var d = b.directed;
                else var d = !1;
                if (null == b.root) return void a.util.error("options.root required");
                if (a.is.string(b.root)) var e = this.filter(b.root)[0];
                else var e = b.root[0];
                for (var f = this._private.cy, g = this.edges().stdFilter(function(a) {
                        return !a.isLoop()
                    }), h = this.nodes(), i = h.length, j = {}, k = 0; i > k; k++) j[h[k].id()] = k;
                for (var l = [], m = [], n = [], k = 0; i > k; k++) h[k].id() === e.id() ? l[k] = 0 : l[k] = 1 / 0, m[k] = void 0;
                for (var o = !1, k = 1; i > k; k++) {
                    o = !1;
                    for (var p = 0; p < g.length; p++) {
                        var q = j[g[p].source().id()],
                            r = j[g[p].target().id()],
                            s = c.apply(g[p], [g[p]]),
                            t = l[q] + s;
                        if (t < l[r] && (l[r] = t, m[r] = q, n[r] = g[p], o = !0), !d) {
                            var t = l[r] + s;
                            t < l[q] && (l[q] = t, m[q] = r, n[q] = g[p], o = !0)
                        }
                    }
                    if (!o) break
                }
                if (o)
                    for (var p = 0; p < g.length; p++) {
                        var q = j[g[p].source().id()],
                            r = j[g[p].target().id()],
                            s = c.apply(g[p], [g[p]]);
                        if (l[q] + s < l[r]) return a.util.error("Error: graph contains a negative weigth cycle!"), {
                            pathTo: void 0,
                            distanceTo: void 0,
                            hasNegativeWeightCycle: !0
                        }
                    }
                for (var u = [], k = 0; i > k; k++) u.push(h[k].id());
                var v = {
                    distanceTo: function(b) {
                        if (a.is.string(b)) var c = f.filter(b)[0].id();
                        else var c = b.id();
                        return l[j[c]]
                    },
                    pathTo: function(b) {
                        var c = function(a, b, c, d, e, g) {
                            for (;;) {
                                if (e.push(f.getElementById(d[c])), e.push(g[c]), b === c) return e;
                                var h = a[c];
                                if ("undefined" == typeof h) return void 0;
                                c = h
                            }
                        };
                        if (a.is.string(b)) var d = f.filter(b)[0].id();
                        else var d = b.id();
                        var g = [],
                            h = c(m, j[e.id()], j[d], u, g, n);
                        return null != h && h.reverse(), new a.Collection(f, h)
                    },
                    hasNegativeWeightCycle: !1
                };
                return v
            },
            kargerStein: function(b) {
                b = b || {};
                var c = function(a, b, c) {
                        for (var d = c[a], e = d[1], f = d[2], g = b[e], h = b[f], i = c.filter(function(a) {
                                return b[a[1]] === g && b[a[2]] === h ? !1 : b[a[1]] === h && b[a[2]] === g ? !1 : !0
                            }), j = 0; j < i.length; j++) {
                            var k = i[j];
                            k[1] === h ? (i[j] = k.slice(0), i[j][1] = g) : k[2] === h && (i[j] = k.slice(0), i[j][2] = g)
                        }
                        for (var j = 0; j < b.length; j++) b[j] === h && (b[j] = g);
                        return i
                    },
                    d = function(a, b, e, f) {
                        if (f >= e) return b;
                        var g = Math.floor(Math.random() * b.length),
                            h = c(g, a, b);
                        return d(a, h, e - 1, f)
                    },
                    e = this._private.cy,
                    f = this.edges().stdFilter(function(a) {
                        return !a.isLoop()
                    }),
                    g = this.nodes(),
                    h = g.length,
                    i = f.length,
                    j = Math.ceil(Math.pow(Math.log(h) / Math.LN2, 2)),
                    k = Math.floor(h / Math.sqrt(2));
                if (2 > h) return void a.util.error("At least 2 nodes are required for KargerSteing algorithm!");
                for (var l = {}, m = 0; h > m; m++) l[g[m].id()] = m;
                for (var n = [], m = 0; i > m; m++) {
                    var o = f[m];
                    n.push([m, l[o.source().id()], l[o.target().id()]])
                }
                for (var p, q = 1 / 0, r = [], m = 0; h > m; m++) r.push(m);
                for (var s = 0; j >= s; s++) {
                    var t = r.slice(0),
                        u = d(t, n, h, k),
                        v = t.slice(0),
                        w = d(t, u, k, 2),
                        x = d(v, u, k, 2);
                    w.length <= x.length && w.length < q ? (q = w.length, p = [w, t]) : x.length <= w.length && x.length < q && (q = x.length, p = [x, v])
                }
                for (var y = p[0].map(function(a) {
                        return f[a[0]]
                    }), z = [], A = [], B = p[1][0], m = 0; m < p[1].length; m++) {
                    var C = p[1][m];
                    C === B ? z.push(g[m]) : A.push(g[m])
                }
                var D = {
                    cut: new a.Collection(e, y),
                    partition1: new a.Collection(e, z),
                    partition2: new a.Collection(e, A)
                };
                return D
            },
            pageRank: function(b) {
                b = b || {};
                var c = function(a) {
                    for (var b = a.length, c = 0, d = 0; b > d; d++) c += a[d];
                    for (var d = 0; b > d; d++) a[d] = a[d] / c
                };
                if (null != b && null != b.dampingfactor) var d = b.dampingFactor;
                else var d = .8;
                if (null != b && null != b.precision) var e = b.precision;
                else var e = 1e-6;
                if (null != b && null != b.iterations) var f = b.iterations;
                else var f = 200;
                if (null != b && null != b.weight && a.is.fn(b.weight)) var g = b.weight;
                else var g = function(a) {
                    return 1
                };
                for (var h = this._private.cy, i = this.edges().stdFilter(function(a) {
                        return !a.isLoop()
                    }), j = this.nodes(), k = j.length, l = i.length, m = {}, n = 0; k > n; n++) m[j[n].id()] = n;
                for (var o = [], p = [], q = (1 - d) / k, n = 0; k > n; n++) {
                    for (var r = [], s = 0; k > s; s++) r.push(0);
                    o.push(r), p.push(0)
                }
                for (var n = 0; l > n; n++) {
                    var t = i[n],
                        u = m[t.source().id()],
                        v = m[t.target().id()],
                        w = g.apply(t, [t]);
                    o[v][u] += w, p[u] += w
                }
                for (var x = 1 / k + q, s = 0; k > s; s++)
                    if (0 === p[s])
                        for (var n = 0; k > n; n++) o[n][s] = x;
                    else
                        for (var n = 0; k > n; n++) o[n][s] = o[n][s] / p[s] + q;
                for (var y, z = [], A = [], n = 0; k > n; n++) z.push(1), A.push(0);
                for (var B = 0; f > B; B++) {
                    for (var C = A.slice(0), n = 0; k > n; n++)
                        for (var s = 0; k > s; s++) C[n] += o[n][s] * z[s];
                    c(C), y = z, z = C;
                    for (var D = 0, n = 0; k > n; n++) D += Math.pow(y[n] - z[n], 2);
                    if (e > D) break
                }
                var E = {
                    rank: function(b) {
                        if (a.is.string(b)) var c = h.filter(b)[0].id();
                        else var c = b.id();
                        return z[m[c]]
                    }
                };
                return E
            },
            degreeCentralityNormalized: function(b) {
                if (b = b || {}, null != b.directed) var c = b.directed;
                else var c = !1;
                var d = this.nodes(),
                    e = d.length;
                if (c) {
                    for (var f = {}, g = {}, h = 0, i = 0, j = 0; e > j; j++) {
                        var k = d[j],
                            l = this.degreeCentrality(a.util.extend({}, b, {
                                root: k
                            }));
                        h < l.indegree && (h = l.indegree), i < l.outdegree && (i = l.outdegree), f[k.id()] = l.indegree, g[k.id()] = l.outdegree
                    }
                    return {
                        indegree: function(b) {
                            if (a.is.string(b)) var b = cy.filter(b)[0].id();
                            else var b = b.id();
                            return f[b] / h
                        },
                        outdegree: function(b) {
                            if (a.is.string(b)) var b = cy.filter(b)[0].id();
                            else var b = b.id();
                            return g[b] / i
                        }
                    }
                }
                for (var m = {}, n = 0, j = 0; e > j; j++) {
                    var k = d[j],
                        l = this.degreeCentrality(a.util.extend({}, b, {
                            root: k
                        }));
                    n < l.degree && (n = l.degree), m[k.id()] = l.degree
                }
                return {
                    degree: function(b) {
                        if (a.is.string(b)) var b = cy.filter(b)[0].id();
                        else var b = b.id();
                        return m[b] / n
                    }
                }
            },
            degreeCentrality: function(b) {
                b = b || {};
                var c = this;
                if (null == b || null == b.root) return void 0;
                var d = a.is.string(b.root) ? this.filter(b.root)[0] : b.root[0];
                if (null != b.weight && a.is.fn(b.weight)) var e = b.weight;
                else var e = function(a) {
                    return 1
                };
                if (null != b.directed) var f = b.directed;
                else var f = !1;
                if (null != b.alpha && a.is.number(b.alpha)) var g = b.alpha;
                else g = 0;
                if (f) {
                    for (var h = d.connectedEdges('edge[target = "' + d.id() + '"]').intersection(c), i = d.connectedEdges('edge[source = "' + d.id() + '"]').intersection(c), j = h.length, k = i.length, l = 0, m = 0, n = 0; n < h.length; n++) {
                        var o = h[n];
                        l += e.apply(o, [o])
                    }
                    for (var n = 0; n < i.length; n++) {
                        var o = i[n];
                        m += e.apply(o, [o])
                    }
                    return {
                        indegree: Math.pow(j, 1 - g) * Math.pow(l, g),
                        outdegree: Math.pow(k, 1 - g) * Math.pow(m, g)
                    }
                }
                for (var p = d.connectedEdges().intersection(c), q = p.length, r = 0, n = 0; n < p.length; n++) {
                    var o = p[n];
                    r += e.apply(o, [o])
                }
                return {
                    degree: Math.pow(q, 1 - g) * Math.pow(r, g)
                }
            },
            closenessCentralityNormalized: function(b) {
                b = b || {};
                var c = b.harmonic;
                void 0 === c && (c = !0);
                for (var d = {}, e = 0, f = this.nodes(), g = this.floydWarshall({
                        weight: b.weight,
                        directed: b.directed
                    }), h = 0; h < f.length; h++) {
                    for (var i = 0, j = 0; j < f.length; j++)
                        if (h != j) {
                            var k = g.distance(f[h], f[j]);
                            i += c ? 1 / k : k
                        }
                    c || (i = 1 / i), i > e && (e = i), d[f[h].id()] = i
                }
                return {
                    closeness: function(b) {
                        if (a.is.string(b)) var b = cy.filter(b)[0].id();
                        else var b = b.id();
                        return d[b] / e
                    }
                }
            },
            closenessCentrality: function(b) {
                if (b = b || {}, null == b.root) return void a.util.error("options.root required");
                if (a.is.string(b.root)) var c = this.filter(b.root)[0];
                else var c = b.root[0];
                if (null != b.weight && a.is.fn(b.weight)) var d = b.weight;
                else var d = function() {
                    return 1
                };
                if (null != b.directed && a.is.bool(b.directed)) var e = b.directed;
                else var e = !1;
                var f = b.harmonic;
                void 0 === f && (f = !0);
                for (var g = this.dijkstra({
                        root: c,
                        weight: d,
                        directed: e
                    }), h = 0, i = this.nodes(), j = 0; j < i.length; j++)
                    if (i[j].id() != c.id()) {
                        var k = g.distanceTo(i[j]);
                        h += f ? 1 / k : k
                    }
                return f ? h : 1 / h
            },
            betweennessCentrality: function(b) {
                if (b = b || {}, null != b.weight && a.is.fn(b.weight)) var c = b.weight,
                    d = !0;
                else var d = !1;
                if (null != b.directed && a.is.bool(b.directed)) var e = b.directed;
                else var e = !1;
                for (var f = function(a, b) {
                        a.unshift(b);
                        for (var c = 0; p[a[c]] < p[a[c + 1]] && c < a.length - 1; c++) {
                            var d = a[c];
                            a[c] = a[c + 1], a[c + 1] = d
                        }
                    }, g = this._private.cy, h = this.nodes(), i = {}, j = {}, k = 0; k < h.length; k++) e ? i[h[k].id()] = h[k].outgoers("node") : i[h[k].id()] = h[k].openNeighborhood("node");
                for (var k = 0; k < h.length; k++) j[h[k].id()] = 0;
                for (var l = 0; l < h.length; l++) {
                    for (var m = [], n = {}, o = {}, p = {}, q = [], k = 0; k < h.length; k++) n[h[k].id()] = [], o[h[k].id()] = 0, p[h[k].id()] = Number.POSITIVE_INFINITY;
                    for (o[h[l].id()] = 1, p[h[l].id()] = 0, q.unshift(h[l].id()); q.length > 0;) {
                        var r = q.pop();
                        m.push(r), d ? i[r].forEach(function(a) {
                            if (g.$("#" + r).edgesTo(a).length > 0) var b = g.$("#" + r).edgesTo(a)[0];
                            else var b = a.edgesTo("#" + r)[0];
                            var d = c.apply(b, [b]);
                            p[a.id()] > p[r] + d && (p[a.id()] = p[r] + d, q.indexOf(a.id()) < 0 ? f(q, a.id()) : (q.splice(q.indexOf(a.id()), 1), f(q, a.id())), o[a.id()] = 0, n[a.id()] = []), p[a.id()] == p[r] + d && (o[a.id()] = o[a.id()] + o[r], n[a.id()].push(r))
                        }) : i[r].forEach(function(a) {
                            p[a.id()] == Number.POSITIVE_INFINITY && (q.unshift(a.id()), p[a.id()] = p[r] + 1), p[a.id()] == p[r] + 1 && (o[a.id()] = o[a.id()] + o[r], n[a.id()].push(r))
                        })
                    }
                    for (var s = {}, k = 0; k < h.length; k++) s[h[k].id()] = 0;
                    for (; m.length > 0;) {
                        var t = m.pop();
                        n[t].forEach(function(a) {
                            s[a] = s[a] + o[a] / o[t] * (1 + s[t]), t != h[l].id() && (j[t] = j[t] + s[t])
                        })
                    }
                }
                var u = 0;
                for (var v in j) u < j[v] && (u = j[v]);
                var w = {
                    betweenness: function(b) {
                        if (a.is.string(b)) var b = g.filter(b)[0].id();
                        else var b = b.id();
                        return j[b]
                    },
                    betweennessNormalized: function(b) {
                        if (a.is.string(b)) var b = g.filter(b)[0].id();
                        else var b = b.id();
                        return j[b] / u
                    }
                };
                return w.betweennessNormalised = w.betweennessNormalized, w
            }
        }), a.elesfn.dc = a.elesfn.degreeCentrality, a.elesfn.dcn = a.elesfn.degreeCentralityNormalised = a.elesfn.degreeCentralityNormalized, a.elesfn.cc = a.elesfn.closenessCentrality, a.elesfn.ccn = a.elesfn.closenessCentralityNormalised = a.elesfn.closenessCentralityNormalized, a.elesfn.bc = a.elesfn.betweennessCentrality
    }(cytoscape), function(a) {
        "use strict";
        a.fn.eles({
            animated: a.define.animated(),
            clearQueue: a.define.clearQueue(),
            delay: a.define.delay(),
            animate: a.define.animate(),
            stop: a.define.stop()
        })
    }(cytoscape), function(a) {
        "use strict";
        a.fn.eles({
            addClass: function(b) {
                b = b.split(/\s+/);
                for (var c = this, d = [], e = 0; e < b.length; e++) {
                    var f = b[e];
                    if (!a.is.emptyString(f))
                        for (var g = 0; g < c.length; g++) {
                            var h = c[g],
                                i = h._private.classes[f];
                            h._private.classes[f] = !0, i || d.push(h)
                        }
                }
                return d.length > 0 && new a.Collection(this._private.cy, d).updateStyle().trigger("class"), c
            },
            hasClass: function(a) {
                var b = this[0];
                return null != b && b._private.classes[a] ? !0 : !1
            },
            toggleClass: function(b, c) {
                for (var d = b.split(/\s+/), e = this, f = [], g = 0, h = e.length; h > g; g++)
                    for (var i = e[g], j = 0; j < d.length; j++) {
                        var k = d[j];
                        if (!a.is.emptyString(k)) {
                            var l = i._private.classes[k],
                                m = c || void 0 === c && !l;
                            m ? (i._private.classes[k] = !0, l || f.push(i)) : (i._private.classes[k] = !1, l && f.push(i))
                        }
                    }
                return f.length > 0 && new a.Collection(this._private.cy, f).updateStyle().trigger("class"), e
            },
            removeClass: function(b) {
                b = b.split(/\s+/);
                for (var c = this, d = [], e = 0; e < c.length; e++)
                    for (var f = c[e], g = 0; g < b.length; g++) {
                        var h = b[g];
                        if (h && "" !== h) {
                            var i = f._private.classes[h];
                            f._private.classes[h] = void 0, i && d.push(f)
                        }
                    }
                return d.length > 0 && new a.Collection(c._private.cy, d).updateStyle(), c.trigger("class"), c
            },
            flashClass: function(a, b) {
                var c = this;
                if (null == b) b = 250;
                else if (0 === b) return c;
                return c.addClass(a), setTimeout(function() {
                    c.removeClass(a)
                }, b), c
            }
        })
    }(cytoscape), function(a) {
        "use strict";
        a.fn.eles({
            allAre: function(a) {
                return this.filter(a).length === this.length
            },
            is: function(a) {
                return this.filter(a).length > 0
            },
            some: function(a, b) {
                for (var c = 0; c < this.length; c++) {
                    var d = b ? a.apply(b, [this[c], c, this]) : a(this[c], c, this);
                    if (d) return !0
                }
                return !1
            },
            every: function(a, b) {
                for (var c = 0; c < this.length; c++) {
                    var d = b ? a.apply(b, [this[c], c, this]) : a(this[c], c, this);
                    if (!d) return !1
                }
                return !0
            },
            same: function(a) {
                return a = this.cy().collection(a), this.length !== a.length ? !1 : this.intersect(a).length === this.length
            },
            anySame: function(a) {
                return a = this.cy().collection(a), this.intersect(a).length > 0
            },
            allAreNeighbors: function(a) {
                return a = this.cy().collection(a), this.neighborhood().intersect(a).length === a.length
            }
        }), a.elesfn.allAreNeighbours = a.elesfn.allAreNeighbors
    }(cytoscape), function(a) {
        "use strict";
        a.fn.eles({
            parent: function(b) {
                for (var c = [], d = this._private.cy, e = 0; e < this.length; e++) {
                    var f = this[e],
                        g = d.getElementById(f._private.data.parent);
                    g.size() > 0 && c.push(g)
                }
                return new a.Collection(d, c, {
                    unique: !0
                }).filter(b)
            },
            parents: function(b) {
                for (var c = [], d = this.parent(); d.nonempty();) {
                    for (var e = 0; e < d.length; e++) {
                        var f = d[e];
                        c.push(f)
                    }
                    d = d.parent()
                }
                return new a.Collection(this.cy(), c, {
                    unique: !0
                }).filter(b)
            },
            commonAncestors: function(a) {
                for (var b, c = 0; c < this.length; c++) {
                    var d = this[c],
                        e = d.parents();
                    b = b || e, b = b.intersect(e)
                }
                return b.filter(a)
            },
            orphans: function(a) {
                return this.stdFilter(function(a) {
                    return a.isNode() && a.parent().empty()
                }).filter(a)
            },
            nonorphans: function(a) {
                return this.stdFilter(function(a) {
                    return a.isNode() && a.parent().nonempty()
                }).filter(a)
            },
            children: function(b) {
                for (var c = [], d = 0; d < this.length; d++) {
                    var e = this[d];
                    c = c.concat(e._private.children)
                }
                return new a.Collection(this.cy(), c, {
                    unique: !0
                }).filter(b)
            },
            siblings: function(a) {
                return this.parent().children().not(this).filter(a)
            },
            isParent: function() {
                var a = this[0];
                return a ? 0 !== a._private.children.length : void 0
            },
            isChild: function() {
                var a = this[0];
                return a ? void 0 !== a._private.data.parent && 0 !== a.parent().length : void 0
            },
            descendants: function(b) {
                function c(a) {
                    for (var b = 0; b < a.length; b++) {
                        var e = a[b];
                        d.push(e), e.children().nonempty() && c(e.children())
                    }
                }
                var d = [];
                return c(this.children()), new a.Collection(this.cy(), d, {
                    unique: !0
                }).filter(b)
            }
        }), a.elesfn.ancestors = a.elesfn.parents
    }(cytoscape), function(a) {
        "use strict";
        var b = 1,
            c = 0;
        a.fn.eles({
            data: a.define.data({
                field: "data",
                bindingEvent: "data",
                allowBinding: !0,
                allowSetting: !0,
                settingEvent: "data",
                settingTriggersEvent: !0,
                triggerFnName: "trigger",
                allowGetting: !0,
                immutableKeys: {
                    id: !0,
                    source: !0,
                    target: !0,
                    parent: !0
                },
                updateStyle: !0
            }),
            removeData: a.define.removeData({
                field: "data",
                event: "data",
                triggerFnName: "trigger",
                triggerEvent: !0,
                immutableKeys: {
                    id: !0,
                    source: !0,
                    target: !0,
                    parent: !0
                },
                updateStyle: !0
            }),
            scratch: a.define.data({
                field: "scratch",
                bindingEvent: "scratch",
                allowBinding: !0,
                allowSetting: !0,
                settingEvent: "scratch",
                settingTriggersEvent: !0,
                triggerFnName: "trigger",
                allowGetting: !0,
                updateStyle: !0
            }),
            removeScratch: a.define.removeData({
                field: "scratch",
                event: "scratch",
                triggerFnName: "trigger",
                triggerEvent: !0,
                updateStyle: !0
            }),
            rscratch: a.define.data({
                field: "rscratch",
                allowBinding: !1,
                allowSetting: !0,
                settingTriggersEvent: !1,
                allowGetting: !0
            }),
            removeRscratch: a.define.removeData({
                field: "rscratch",
                triggerEvent: !1
            }),
            id: function() {
                var a = this[0];
                return a ? a._private.data.id : void 0
            },
            position: a.define.data({
                field: "position",
                bindingEvent: "position",
                allowBinding: !0,
                allowSetting: !0,
                settingEvent: "position",
                settingTriggersEvent: !0,
                triggerFnName: "rtrigger",
                allowGetting: !0,
                validKeys: ["x", "y"],
                onSet: function(a) {
                    var b = a.updateCompoundBounds();
                    b.rtrigger("position")
                },
                canSet: function(a) {
                    return !a.locked()
                }
            }),
            silentPosition: a.define.data({
                field: "position",
                bindingEvent: "position",
                allowBinding: !1,
                allowSetting: !0,
                settingEvent: "position",
                settingTriggersEvent: !1,
                triggerFnName: "trigger",
                allowGetting: !0,
                validKeys: ["x", "y"],
                onSet: function(a) {
                    a.updateCompoundBounds()
                },
                canSet: function(a) {
                    return !a.locked()
                }
            }),
            positions: function(b, c) {
                if (a.is.plainObject(b)) this.position(b);
                else if (a.is.fn(b)) {
                    for (var d = b, e = 0; e < this.length; e++) {
                        var f = this[e],
                            b = d.apply(f, [e, f]);
                        if (b && !f.locked()) {
                            var g = f._private.position;
                            g.x = b.x, g.y = b.y
                        }
                    }
                    var h = this.updateCompoundBounds(),
                        i = h.length > 0 ? this.add(h) : this;
                    c ? i.trigger("position") : i.rtrigger("position")
                }
                return this
            },
            silentPositions: function(a) {
                return this.positions(a, !0)
            },
            updateCompoundBounds: function() {
                function b(a) {
                    var b = a.children(),
                        c = a._private.style,
                        e = "include" === c["compound-sizing-wrt-labels"].value,
                        f = b.boundingBox({
                            includeLabels: e,
                            includeEdges: !0
                        }),
                        g = {
                            top: c["padding-top"].pxValue,
                            bottom: c["padding-bottom"].pxValue,
                            left: c["padding-left"].pxValue,
                            right: c["padding-right"].pxValue
                        },
                        h = a._private.position,
                        i = !1;
                    "auto" === c.width.value && (a._private.autoWidth = f.w + g.left + g.right, h.x = (f.x1 + f.x2 - g.left + g.right) / 2, i = !0), "auto" === c.height.value && (a._private.autoHeight = f.h + g.top + g.bottom, h.y = (f.y1 + f.y2 - g.top + g.bottom) / 2, i = !0), i && d.push(a)
                }
                var c = this.cy();
                if (!c.styleEnabled() || !c.hasCompoundNodes()) return c.collection();
                for (var d = [], e = this.parent(); e.nonempty();) {
                    for (var f = 0; f < e.length; f++) {
                        var g = e[f];
                        b(g)
                    }
                    e = e.parent()
                }
                return new a.Collection(c, d)
            },
            renderedPosition: function(b, c) {
                var d = this[0],
                    e = this.cy(),
                    f = e.zoom(),
                    g = e.pan(),
                    h = a.is.plainObject(b) ? b : void 0,
                    i = void 0 !== h || void 0 !== c && a.is.string(b);
                if (d && d.isNode()) {
                    if (!i) {
                        var j = d._private.position;
                        return h = {
                            x: j.x * f + g.x,
                            y: j.y * f + g.y
                        }, void 0 === b ? h : h[b]
                    }
                    for (var k = 0; k < this.length; k++) {
                        var d = this[k];
                        void 0 !== c ? d._private.position[b] = (c - g[b]) / f : void 0 !== h && (d._private.position = {
                            x: (h.x - g.x) / f,
                            y: (h.y - g.y) / f
                        })
                    }
                    this.rtrigger("position")
                } else if (!i) return void 0;
                return this
            },
            relativePosition: function(b, c) {
                var d = this[0],
                    e = this.cy(),
                    f = a.is.plainObject(b) ? b : void 0,
                    g = void 0 !== f || void 0 !== c && a.is.string(b),
                    h = e.hasCompoundNodes();
                if (d && d.isNode()) {
                    if (!g) {
                        var i = d._private.position,
                            j = h ? d.parent() : null,
                            k = j && j.length > 0,
                            l = k;
                        k && (j = j[0]);
                        var m = l ? j._private.position : {
                            x: 0,
                            y: 0
                        };
                        return f = {
                            x: i.x - m.x,
                            y: i.y - m.y
                        }, void 0 === b ? f : f[b]
                    }
                    for (var n = 0; n < this.length; n++) {
                        var d = this[n],
                            j = h ? d.parent() : null,
                            k = j && j.length > 0,
                            l = k;
                        k && (j = j[0]);
                        var m = l ? j._private.position : {
                            x: 0,
                            y: 0
                        };
                        void 0 !== c ? d._private.position[b] = c + m[b] : void 0 !== f && (d._private.position = {
                            x: f.x + m.x,
                            y: f.y + m.y
                        })
                    }
                    this.rtrigger("position")
                } else if (!g) return void 0;
                return this
            },
            width: function() {
                var a = this[0],
                    b = a._private.cy,
                    c = b._private.styleEnabled;
                if (a) {
                    if (c) {
                        var d = a._private.style.width;
                        return "auto" === d.strValue ? a._private.autoWidth : d.pxValue
                    }
                    return 1
                }
            },
            outerWidth: function() {
                var a = this[0],
                    d = a._private.cy,
                    e = d._private.styleEnabled;
                if (a) {
                    if (e) {
                        var f = a._private.style,
                            g = "auto" === f.width.strValue ? a._private.autoWidth : f.width.pxValue,
                            h = f["border-width"] ? f["border-width"].pxValue * b + c : 0;
                        return g + h
                    }
                    return 1
                }
            },
            renderedWidth: function() {
                var a = this[0];
                if (a) {
                    var b = a.width();
                    return b * this.cy().zoom()
                }
            },
            renderedOuterWidth: function() {
                var a = this[0];
                if (a) {
                    var b = a.outerWidth();
                    return b * this.cy().zoom()
                }
            },
            height: function() {
                var a = this[0],
                    b = a._private.cy,
                    c = b._private.styleEnabled;
                if (a && "nodes" === a._private.group) {
                    if (c) {
                        var d = a._private.style.height;
                        return "auto" === d.strValue ? a._private.autoHeight : d.pxValue
                    }
                    return 1
                }
            },
            outerHeight: function() {
                var a = this[0],
                    d = a._private.cy,
                    e = d._private.styleEnabled;
                if (a && "nodes" === a._private.group) {
                    if (!e) return 1;
                    var f = a._private.style,
                        g = "auto" === f.height.strValue ? a._private.autoHeight : f.height.pxValue,
                        h = f["border-width"] ? f["border-width"].pxValue * b + c : 0;
                    return g + h
                }
            },
            renderedHeight: function() {
                var a = this[0];
                if (a && "nodes" === a._private.group) {
                    var b = a.height();
                    return b * this.cy().zoom()
                }
            },
            renderedOuterHeight: function() {
                var a = this[0];
                if (a && "nodes" === a._private.group) {
                    var b = a.outerHeight();
                    return b * this.cy().zoom()
                }
            },
            renderedBoundingBox: function(a) {
                var b = this.boundingBox(a),
                    c = this.cy(),
                    d = c.zoom(),
                    e = c.pan(),
                    f = b.x1 * d + e.x,
                    g = b.x2 * d + e.x,
                    h = b.y1 * d + e.y,
                    i = b.y2 * d + e.y;
                return {
                    x1: f,
                    x2: g,
                    y1: h,
                    y2: i,
                    w: g - f,
                    h: i - h
                }
            },
            boundingBox: function(a) {
                var b = this,
                    c = b._private.cy,
                    d = c._private,
                    e = d.styleEnabled;
                a = a || {};
                var f = void 0 === a.includeNodes ? !0 : a.includeNodes,
                    g = void 0 === a.includeEdges ? !0 : a.includeEdges,
                    h = void 0 === a.includeLabels ? !0 : a.includeLabels;
                e && d.renderer.recalculateRenderedStyle(this);
                for (var i = 1 / 0, j = -(1 / 0), k = 1 / 0, l = -(1 / 0), m = 0; m < b.length; m++) {
                    var n, o, p, q, r, s, t = b[m],
                        u = t._private,
                        v = u.style,
                        w = e ? u.style.display.value : "element",
                        x = "nodes" === u.group,
                        y = !1;
                    if ("none" !== w) {
                        if (x && f) {
                            y = !0;
                            var z = u.position;
                            r = z.x, s = z.y;
                            var A = t.outerWidth(),
                                B = A / 2,
                                C = t.outerHeight(),
                                D = C / 2;
                            n = r - B, o = r + B, p = s - D, q = s + D, i = i > n ? n : i, j = o > j ? o : j, k = k > p ? p : k, l = q > l ? q : l
                        } else if (t.isEdge() && g) {
                            y = !0;
                            var E = u.source,
                                F = E._private,
                                G = F.position,
                                H = u.target,
                                I = H._private,
                                J = I.position,
                                K = u.rstyle || {};
                            if (n = G.x, o = J.x, p = G.y, q = J.y, n > o) {
                                var L = n;
                                n = o, o = L
                            }
                            if (p > q) {
                                var L = p;
                                p = q, q = L
                            }
                            if (i = i > n ? n : i, j = o > j ? o : j, k = k > p ? p : k, l = q > l ? q : l, e)
                                for (var M = K.bezierPts || [], A = v.width.pxValue, N = A / 2, O = 0; O < M.length; O++) {
                                    var P = M[O];
                                    n = P.x - N, o = P.x + N, p = P.y - N, q = P.y + N, i = i > n ? n : i, j = o > j ? o : j, k = k > p ? p : k, l = q > l ? q : l
                                }
                            if (e && "haystack" === v["curve-style"].strValue) {
                                var Q = u.rscratch.haystackPts;
                                if (n = Q[0], p = Q[1], o = Q[2], q = Q[3], n > o) {
                                    var L = n;
                                    n = o, o = L
                                }
                                if (p > q) {
                                    var L = p;
                                    p = q, q = L
                                }
                                i = i > n ? n : i, j = o > j ? o : j, k = k > p ? p : k, l = q > l ? q : l
                            }
                        }
                        if (e) {
                            var v = t._private.style,
                                K = t._private.rstyle,
                                R = v.content.strValue,
                                S = v["font-size"],
                                T = v["text-halign"],
                                U = v["text-valign"],
                                V = K.labelWidth,
                                W = K.labelHeight,
                                X = K.labelX,
                                Y = K.labelY;
                            if (y && h && R && S && null != W && null != V && null != X && null != Y && T && U) {
                                var Z, $, _, aa, ba = W,
                                    ca = V;
                                if (t.isEdge()) Z = X - ca / 2, $ = X + ca / 2, _ = Y - ba / 2, aa = Y + ba / 2;
                                else {
                                    switch (T.value) {
                                        case "left":
                                            Z = X - ca, $ = X;
                                            break;
                                        case "center":
                                            Z = X - ca / 2, $ = X + ca / 2;
                                            break;
                                        case "right":
                                            Z = X, $ = X + ca
                                    }
                                    switch (U.value) {
                                        case "top":
                                            _ = Y - ba, aa = Y;
                                            break;
                                        case "center":
                                            _ = Y - ba / 2, aa = Y + ba / 2;
                                            break;
                                        case "bottom":
                                            _ = Y, aa = Y + ba
                                    }
                                }
                                i = i > Z ? Z : i, j = $ > j ? $ : j, k = k > _ ? _ : k, l = aa > l ? aa : l
                            }
                        }
                    }
                }
                var da = function(a) {
                    return a === 1 / 0 || a === -(1 / 0) ? 0 : a
                };
                return i = da(i), j = da(j), k = da(k), l = da(l), {
                    x1: i,
                    x2: j,
                    y1: k,
                    y2: l,
                    w: j - i,
                    h: l - k
                }
            }
        });
        var d = a.elesfn;
        d.attr = d.data, d.removeAttr = d.removeData, d.modelPosition = d.point = d.position, d.modelPositions = d.points = d.positions,
            d.renderedPoint = d.renderedPosition, d.relativePoint = d.relativePosition, d.boundingbox = d.boundingBox, d.renderedBoundingbox = d.renderedBoundingBox
    }(cytoscape), function(a) {
        "use strict";

        function b(a) {
            return function(b) {
                var c = this;
                if (void 0 === b && (b = !0), 0 !== c.length && c.isNode() && !c.removed()) {
                    for (var d = 0, e = c[0], f = e._private.edges, g = 0; g < f.length; g++) {
                        var h = f[g];
                        (b || !h.isLoop()) && (d += a(e, h))
                    }
                    return d
                }
            }
        }

        function c(a, b) {
            return function(c) {
                for (var d, e = this.nodes(), f = 0; f < e.length; f++) {
                    var g = e[f],
                        h = g[a](c);
                    void 0 === h || void 0 !== d && !b(h, d) || (d = h)
                }
                return d
            }
        }
        a.fn.eles({
            degree: b(function(a, b) {
                return b.source().same(b.target()) ? 2 : 1
            }),
            indegree: b(function(a, b) {
                return b.target().same(a) ? 1 : 0
            }),
            outdegree: b(function(a, b) {
                return b.source().same(a) ? 1 : 0
            })
        }), a.fn.eles({
            minDegree: c("degree", function(a, b) {
                return b > a
            }),
            maxDegree: c("degree", function(a, b) {
                return a > b
            }),
            minIndegree: c("indegree", function(a, b) {
                return b > a
            }),
            maxIndegree: c("indegree", function(a, b) {
                return a > b
            }),
            minOutdegree: c("outdegree", function(a, b) {
                return b > a
            }),
            maxOutdegree: c("outdegree", function(a, b) {
                return a > b
            })
        }), a.fn.eles({
            totalDegree: function(a) {
                for (var b = 0, c = this.nodes(), d = 0; d < c.length; d++) b += c[d].degree(a);
                return b
            }
        })
    }(cytoscape), function(a) {
        "use strict";
        a.fn.eles({
            on: a.define.on(),
            one: a.define.on({
                unbindSelfOnTrigger: !0
            }),
            once: a.define.on({
                unbindAllBindersOnTrigger: !0
            }),
            off: a.define.off(),
            trigger: a.define.trigger(),
            rtrigger: function(a, b) {
                return 0 !== this.length ? (this.cy().notify({
                    type: a,
                    collection: this
                }), this.trigger(a, b), this) : void 0
            }
        }), a.define.eventAliasesOn(a.elesfn)
    }(cytoscape), function(a) {
        "use strict";
        a.fn.eles({
            nodes: function(a) {
                return this.filter(function(a, b) {
                    return b.isNode()
                }).filter(a)
            },
            edges: function(a) {
                return this.filter(function(a, b) {
                    return b.isEdge()
                }).filter(a)
            },
            filter: function(b) {
                var c = this._private.cy;
                if (a.is.fn(b)) {
                    for (var d = [], e = 0; e < this.length; e++) {
                        var f = this[e];
                        b.apply(f, [e, f]) && d.push(f)
                    }
                    return new a.Collection(c, d)
                }
                return a.is.string(b) || a.is.elementOrCollection(b) ? new a.Selector(b).filter(this) : void 0 === b ? this : new a.Collection(c)
            },
            not: function(b) {
                var c = this._private.cy;
                if (b) {
                    a.is.string(b) && (b = this.filter(b));
                    for (var d = [], e = 0; e < this.length; e++) {
                        var f = this[e],
                            g = b._private.ids[f.id()];
                        g || d.push(f)
                    }
                    return new a.Collection(c, d)
                }
                return this
            },
            absoluteComplement: function() {
                var a = this._private.cy;
                return a.elements().not(this)
            },
            intersect: function(b) {
                var c = this._private.cy;
                if (a.is.string(b)) {
                    var d = b;
                    return this.filter(d)
                }
                for (var e = [], f = this, g = b, h = this.length < b.length, i = h ? g._private.ids : f._private.ids, j = h ? f : g, k = 0; k < j.length; k++) {
                    var l = j[k]._private.data.id,
                        m = i[l];
                    m && e.push(m)
                }
                return new a.Collection(c, e)
            },
            xor: function(b) {
                var c = this._private.cy;
                a.is.string(b) && (b = c.$(b));
                var d = [],
                    e = this,
                    f = b,
                    g = function(a, b) {
                        for (var c = 0; c < a.length; c++) {
                            var e = a[c],
                                f = e._private.data.id,
                                g = b._private.ids[f];
                            g || d.push(e)
                        }
                    };
                return g(e, f), g(f, e), new a.Collection(c, d)
            },
            diff: function(b) {
                var c = this._private.cy;
                a.is.string(b) && (b = c.$(b));
                var d = [],
                    e = [],
                    f = [],
                    g = this,
                    h = b,
                    i = function(a, b, c) {
                        for (var d = 0; d < a.length; d++) {
                            var e = a[d],
                                g = e._private.data.id,
                                h = b._private.ids[g];
                            h ? f.push(e) : c.push(e)
                        }
                    };
                return i(g, h, d), i(h, g, e), {
                    left: new a.Collection(c, d, {
                        unique: !0
                    }),
                    right: new a.Collection(c, e, {
                        unique: !0
                    }),
                    both: new a.Collection(c, f, {
                        unique: !0
                    })
                }
            },
            add: function(b) {
                var c = this._private.cy;
                if (!b) return this;
                if (a.is.string(b)) {
                    var d = b;
                    b = c.elements(d)
                }
                for (var e = [], f = 0; f < this.length; f++) e.push(this[f]);
                for (var f = 0; f < b.length; f++) {
                    var g = !this._private.ids[b[f].id()];
                    g && e.push(b[f])
                }
                return new a.Collection(c, e)
            },
            merge: function(b) {
                var c = this._private,
                    d = c.cy;
                if (!b) return this;
                if (a.is.string(b)) {
                    var e = b;
                    b = d.elements(e)
                }
                for (var f = 0; f < b.length; f++) {
                    var g = b[f],
                        h = g.id(),
                        i = !c.ids[h];
                    if (i) {
                        var j = this.length++;
                        this[j] = g, c.ids[h] = g, c.indexes[h] = j
                    }
                }
                return this
            },
            unmergeOne: function(a) {
                a = a[0];
                var b = this._private,
                    c = a.id(),
                    d = b.indexes[c];
                if (null == d) return this;
                this[d] = void 0, b.ids[c] = void 0, b.indexes[c] = void 0;
                var e = d === this.length - 1;
                if (this.length > 1 && !e) {
                    var f = this.length - 1,
                        g = this[f];
                    this[f] = void 0, this[d] = g, b.indexes[g.id()] = d
                }
                return this.length--, this
            },
            unmerge: function(b) {
                var c = this._private.cy;
                if (!b) return this;
                if (a.is.string(b)) {
                    var d = b;
                    b = c.elements(d)
                }
                for (var e = 0; e < b.length; e++) this.unmergeOne(b[e]);
                return this
            },
            map: function(a, b) {
                for (var c = [], d = this, e = 0; e < d.length; e++) {
                    var f = d[e],
                        g = b ? a.apply(b, [f, e, d]) : a(f, e, d);
                    c.push(g)
                }
                return c
            },
            stdFilter: function(b, c) {
                for (var d = [], e = this, f = this._private.cy, g = 0; g < e.length; g++) {
                    var h = e[g],
                        i = c ? b.apply(c, [h, g, e]) : b(h, g, e);
                    i && d.push(h)
                }
                return new a.Collection(f, d)
            },
            max: function(a, b) {
                for (var c, d = -(1 / 0), e = this, f = 0; f < e.length; f++) {
                    var g = e[f],
                        h = b ? a.apply(b, [g, f, e]) : a(g, f, e);
                    h > d && (d = h, c = g)
                }
                return {
                    value: d,
                    ele: c
                }
            },
            min: function(a, b) {
                for (var c, d = 1 / 0, e = this, f = 0; f < e.length; f++) {
                    var g = e[f],
                        h = b ? a.apply(b, [g, f, e]) : a(g, f, e);
                    d > h && (d = h, c = g)
                }
                return {
                    value: d,
                    ele: c
                }
            }
        });
        var b = a.elesfn;
        b.u = b["|"] = b["+"] = b.union = b.or = b.add, b["\\"] = b["!"] = b["-"] = b.difference = b.relativeComplement = b.not, b.n = b["&"] = b["."] = b.and = b.intersection = b.intersect, b["^"] = b["(+)"] = b["(-)"] = b.symmetricDifference = b.symdiff = b.xor, b.fnFilter = b.filterFn = b.stdFilter, b.complement = b.abscomp = b.absoluteComplement
    }(cytoscape), function(a) {
        "use strict";
        a.fn.eles({
            isNode: function() {
                return "nodes" === this.group()
            },
            isEdge: function() {
                return "edges" === this.group()
            },
            isLoop: function() {
                return this.isEdge() && this.source().id() === this.target().id()
            },
            isSimple: function() {
                return this.isEdge() && this.source().id() !== this.target().id()
            },
            group: function() {
                var a = this[0];
                return a ? a._private.group : void 0
            }
        })
    }(cytoscape), function(a) {
        "use strict";
        a.fn.eles({
            each: function(b) {
                if (a.is.fn(b))
                    for (var c = 0; c < this.length; c++) {
                        var d = this[c],
                            e = b.apply(d, [c, d]);
                        if (e === !1) break
                    }
                return this
            },
            forEach: function(b, c) {
                if (a.is.fn(b))
                    for (var d = 0; d < this.length; d++) {
                        var e = this[d],
                            f = c ? b.apply(c, [e, d, this]) : b(e, d, this);
                        if (f === !1) break
                    }
                return this
            },
            toArray: function() {
                for (var a = [], b = 0; b < this.length; b++) a.push(this[b]);
                return a
            },
            slice: function(b, c) {
                var d = [],
                    e = this.length;
                null == c && (c = e), null == b && (b = 0), 0 > b && (b = e + b), 0 > c && (c = e + c);
                for (var f = b; f >= 0 && c > f && e > f; f++) d.push(this[f]);
                return new a.Collection(this.cy(), d)
            },
            size: function() {
                return this.length
            },
            eq: function(b) {
                return this[b] || new a.Collection(this.cy())
            },
            first: function() {
                return this[0] || new a.Collection(this.cy())
            },
            last: function() {
                return this[this.length - 1] || new a.Collection(this.cy())
            },
            empty: function() {
                return 0 === this.length
            },
            nonempty: function() {
                return !this.empty()
            },
            sort: function(b) {
                if (!a.is.fn(b)) return this;
                var c = this.cy(),
                    d = this.toArray().sort(b);
                return new a.Collection(c, d)
            },
            sortByZIndex: function() {
                return this.sort(a.Collection.zIndexSort)
            },
            zDepth: function() {
                var a = this[0];
                if (!a) return void 0;
                var b = a._private,
                    c = b.group;
                if ("nodes" === c) {
                    var d = b.data.parent ? a.parents().size() : 0;
                    return a.isParent() ? d : Number.MAX_VALUE
                }
                var e = b.source,
                    f = b.target,
                    g = e.zDepth(),
                    h = f.zDepth();
                return Math.max(g, h, 0)
            }
        }), a.Collection.zIndexSort = function(a, b) {
            var c = a.cy(),
                d = a._private,
                e = b._private,
                f = d.style["z-index"].value - e.style["z-index"].value,
                g = 0,
                h = 0,
                i = c.hasCompoundNodes(),
                j = "nodes" === d.group,
                k = "edges" === d.group,
                l = "nodes" === e.group,
                m = "edges" === e.group;
            i && (g = a.zDepth(), h = b.zDepth());
            var n = g - h,
                o = 0 === n;
            return o ? j && m ? 1 : k && l ? -1 : 0 === f ? d.index - e.index : f : n
        }
    }(cytoscape), function(a) {
        "use strict";
        a.fn.eles({
            layoutPositions: function(b, c, d) {
                var e = this.nodes(),
                    f = this.cy();
                if (b.trigger({
                        type: "layoutstart",
                        layout: b
                    }), c.animate) {
                    for (var g = 0; g < e.length; g++) {
                        var h = e[g],
                            i = g === e.length - 1,
                            j = d.call(h, g, h),
                            k = h.position();
                        a.is.number(k.x) && a.is.number(k.y) || h.silentPosition({
                            x: 0,
                            y: 0
                        }), h.animate({
                            position: j
                        }, {
                            duration: c.animationDuration,
                            step: i ? function() {
                                c.fit && f.fit(c.eles, c.padding)
                            } : void 0,
                            complete: i ? function() {
                                null != c.zoom && f.zoom(c.zoom), c.pan && f.pan(c.pan), c.fit && f.fit(c.eles, c.padding), b.one("layoutstop", c.stop), b.trigger({
                                    type: "layoutstop",
                                    layout: b
                                })
                            } : void 0
                        })
                    }
                    b.one("layoutready", c.ready), b.trigger({
                        type: "layoutready",
                        layout: b
                    })
                } else e.positions(d), c.fit && f.fit(c.eles, c.padding), null != c.zoom && f.zoom(c.zoom), c.pan && f.pan(c.pan), b.one("layoutready", c.ready), b.trigger({
                    type: "layoutready",
                    layout: b
                }), b.one("layoutstop", c.stop), b.trigger({
                    type: "layoutstop",
                    layout: b
                });
                return this
            },
            layout: function(b) {
                var c = this.cy();
                return c.layout(a.util.extend({}, b, {
                    eles: this
                })), this
            },
            makeLayout: function(b) {
                var c = this.cy();
                return c.makeLayout(a.util.extend({}, b, {
                    eles: this
                }))
            }
        }), a.elesfn.createLayout = a.elesfn.makeLayout
    }(cytoscape), function(a) {
        "use strict";
        a.fn.eles({
            updateStyle: function(a) {
                var b = this._private.cy;
                if (!b.styleEnabled()) return this;
                if (b._private.batchingStyle) {
                    for (var c = b._private.batchStyleEles, d = 0; d < this.length; d++) {
                        var e = this[d];
                        c.ids[e._private.id] || c.push(e)
                    }
                    return this
                }
                var f = b.style();
                a = a || void 0 === a ? !0 : !1, f.apply(this);
                var g = this.updateCompoundBounds(),
                    h = g.length > 0 ? this.add(g) : this;
                return a ? h.rtrigger("style") : h.trigger("style"), this
            },
            updateMappers: function(a) {
                var b = this._private.cy,
                    c = b.style();
                if (a = a || void 0 === a ? !0 : !1, !b.styleEnabled()) return this;
                c.updateMappers(this);
                var d = this.updateCompoundBounds(),
                    e = d.length > 0 ? this.add(d) : this;
                return a ? e.rtrigger("style") : e.trigger("style"), this
            },
            renderedCss: function(a) {
                var b = this.cy();
                if (!b.styleEnabled()) return this;
                var c = this[0];
                if (c) {
                    var d = c.cy().style().getRenderedStyle(c);
                    return void 0 === a ? d : d[a]
                }
            },
            css: function(b, c) {
                var d = this.cy();
                if (!d.styleEnabled()) return this;
                var e = !1,
                    f = d.style();
                if (a.is.plainObject(b)) {
                    var g = b;
                    f.applyBypass(this, g, e);
                    var h = this.updateCompoundBounds(),
                        i = h.length > 0 ? this.add(h) : this;
                    i.rtrigger("style")
                } else if (a.is.string(b)) {
                    if (void 0 === c) {
                        var j = this[0];
                        return j ? j._private.style[b].strValue : void 0
                    }
                    f.applyBypass(this, b, c, e);
                    var h = this.updateCompoundBounds(),
                        i = h.length > 0 ? this.add(h) : this;
                    i.rtrigger("style")
                } else if (void 0 === b) {
                    var j = this[0];
                    return j ? f.getRawStyle(j) : void 0
                }
                return this
            },
            removeCss: function(a) {
                var b = this.cy();
                if (!b.styleEnabled()) return this;
                var c = !1,
                    d = b.style(),
                    e = this;
                if (void 0 === a)
                    for (var f = 0; f < e.length; f++) {
                        var g = e[f];
                        d.removeAllBypasses(g, c)
                    } else {
                        a = a.split(/\s+/);
                        for (var f = 0; f < e.length; f++) {
                            var g = e[f];
                            d.removeBypasses(g, a, c)
                        }
                    }
                var h = this.updateCompoundBounds(),
                    i = h.length > 0 ? this.add(h) : this;
                return i.rtrigger("style"), this
            },
            show: function() {
                return this.css("display", "element"), this
            },
            hide: function() {
                return this.css("display", "none"), this
            },
            visible: function() {
                var a = this.cy();
                if (!a.styleEnabled()) return !0;
                var b = this[0],
                    c = a.hasCompoundNodes();
                if (b) {
                    var d = b._private.style;
                    if ("visible" !== d.visibility.value || "element" !== d.display.value) return !1;
                    if ("nodes" === b._private.group) {
                        if (!c) return !0;
                        var e = b._private.data.parent ? b.parents() : null;
                        if (e)
                            for (var f = 0; f < e.length; f++) {
                                var g = e[f],
                                    h = g._private.style,
                                    i = h.visibility.value,
                                    j = h.display.value;
                                if ("visible" !== i || "element" !== j) return !1
                            }
                        return !0
                    }
                    var k = b._private.source,
                        l = b._private.target;
                    return k.visible() && l.visible()
                }
            },
            hidden: function() {
                var a = this[0];
                return a ? !a.visible() : void 0
            },
            effectiveOpacity: function() {
                var a = this.cy();
                if (!a.styleEnabled()) return 1;
                var b = a.hasCompoundNodes(),
                    c = this[0];
                if (c) {
                    var d = c._private,
                        e = d.style.opacity.value;
                    if (!b) return e;
                    var f = d.data.parent ? c.parents() : null;
                    if (f)
                        for (var g = 0; g < f.length; g++) {
                            var h = f[g],
                                i = h._private.style.opacity.value;
                            e = i * e
                        }
                    return e
                }
            },
            transparent: function() {
                var a = this.cy();
                if (!a.styleEnabled()) return !1;
                var b = this[0],
                    c = b.cy().hasCompoundNodes();
                return b ? c ? 0 === b.effectiveOpacity() : 0 === b._private.style.opacity.value : void 0
            },
            isFullAutoParent: function() {
                var a = this.cy();
                if (!a.styleEnabled()) return !1;
                var b = this[0];
                if (b) {
                    var c = "auto" === b._private.style.width.value,
                        d = "auto" === b._private.style.height.value;
                    return b.isParent() && c && d
                }
            },
            backgrounding: function() {
                var a = this.cy();
                if (!a.styleEnabled()) return !1;
                var b = this[0];
                return b._private.backgrounding ? !0 : !1
            }
        }), a.elesfn.bypass = a.elesfn.style = a.elesfn.css, a.elesfn.renderedStyle = a.elesfn.renderedCss, a.elesfn.removeBypass = a.elesfn.removeStyle = a.elesfn.removeCss
    }(cytoscape), function(a) {
        "use strict";

        function b(b) {
            return function() {
                var c = arguments,
                    d = [];
                if (2 === c.length) {
                    var e = c[0],
                        f = c[1];
                    this.bind(b.event, e, f)
                } else if (1 === c.length) {
                    var f = c[0];
                    this.bind(b.event, f)
                } else if (0 === c.length) {
                    for (var g = 0; g < this.length; g++) {
                        var h = this[g],
                            i = !b.ableField || h._private[b.ableField],
                            j = h._private[b.field] != b.value;
                        if (b.overrideAble) {
                            var k = b.overrideAble(h);
                            if (void 0 !== k && (i = k, !k)) return this
                        }
                        i && (h._private[b.field] = b.value, j && d.push(h))
                    }
                    var l = a.Collection(this.cy(), d);
                    l.updateStyle(), l.trigger(b.event)
                }
                return this
            }
        }

        function c(c) {
            a.elesfn[c.field] = function() {
                var a = this[0];
                if (a) {
                    if (c.overrideField) {
                        var b = c.overrideField(a);
                        if (void 0 !== b) return b
                    }
                    return a._private[c.field]
                }
            }, a.elesfn[c.on] = b({
                event: c.on,
                field: c.field,
                ableField: c.ableField,
                overrideAble: c.overrideAble,
                value: !0
            }), a.elesfn[c.off] = b({
                event: c.off,
                field: c.field,
                ableField: c.ableField,
                overrideAble: c.overrideAble,
                value: !1
            })
        }
        c({
            field: "locked",
            overrideField: function(a) {
                return a.cy().autolock() ? !0 : void 0
            },
            on: "lock",
            off: "unlock"
        }), c({
            field: "grabbable",
            overrideField: function(a) {
                return a.cy().autoungrabify() ? !1 : void 0
            },
            on: "grabify",
            off: "ungrabify"
        }), c({
            field: "selected",
            ableField: "selectable",
            overrideAble: function(a) {
                return a.cy().autounselectify() ? !1 : void 0
            },
            on: "select",
            off: "unselect"
        }), c({
            field: "selectable",
            overrideField: function(a) {
                return a.cy().autounselectify() ? !1 : void 0
            },
            on: "selectify",
            off: "unselectify"
        }), a.elesfn.deselect = a.elesfn.unselect, a.elesfn.grabbed = function() {
            var a = this[0];
            return a ? a._private.grabbed : void 0
        }, c({
            field: "active",
            on: "activate",
            off: "unactivate"
        }), a.elesfn.inactive = function() {
            var a = this[0];
            return a ? !a._private.active : void 0
        }
    }(cytoscape), function(a) {
        "use strict";

        function b(b) {
            return function(c) {
                for (var d = [], e = this._private.cy, f = 0; f < this.length; f++) {
                    var g = this[f],
                        h = g._private[b.attr];
                    h && d.push(h)
                }
                return new a.Collection(e, d, {
                    unique: !0
                }).filter(c)
            }
        }

        function c(b) {
            return function(c) {
                var d = [],
                    e = this._private.cy,
                    f = b || {};
                a.is.string(c) && (c = e.$(c));
                for (var g = this._private.ids, h = c._private.ids, i = 0; i < c.length; i++)
                    for (var j = c[i]._private.edges, k = 0; k < j.length; k++) {
                        var l = j[k],
                            m = l._private.data,
                            n = g[m.source] && h[m.target],
                            o = h[m.source] && g[m.target],
                            p = n || o;
                        if (p) {
                            if (f.thisIs) {
                                if ("source" === f.thisIs && !n) continue;
                                if ("target" === f.thisIs && !o) continue
                            }
                            d.push(l)
                        }
                    }
                return new a.Collection(e, d, {
                    unique: !0
                })
            }
        }

        function d(b) {
            var c = {
                codirected: !1
            };
            return b = a.util.extend({}, c, b),
                function(c) {
                    for (var d = this._private.cy, e = [], f = this.edges(), g = b, h = 0; h < f.length; h++)
                        for (var i = f[h], j = i.source()[0], k = j.id(), l = i.target()[0], m = l.id(), n = j._private.edges, o = 0; o < n.length; o++) {
                            var p = n[o],
                                q = p._private.data,
                                r = q.target,
                                s = q.source,
                                t = r === m && s === k,
                                u = k === r && m === s;
                            (g.codirected && t || !g.codirected && (t || u)) && e.push(p)
                        }
                    return new a.Collection(d, e, {
                        unique: !0
                    }).filter(c)
                }
        }
        a.fn.eles({
            roots: function(b) {
                for (var c = this, d = [], e = 0; e < c.length; e++) {
                    var f = c[e];
                    if (f.isNode()) {
                        var g = f.connectedEdges(function() {
                            return this.data("target") === f.id() && this.data("source") !== f.id()
                        }).length > 0;
                        g || d.push(f)
                    }
                }
                return new a.Collection(this._private.cy, d, {
                    unique: !0
                }).filter(b)
            },
            leaves: function(b) {
                for (var c = this, d = [], e = 0; e < c.length; e++) {
                    var f = c[e];
                    if (f.isNode()) {
                        var g = f.connectedEdges(function() {
                            return this.data("source") === f.id() && this.data("target") !== f.id()
                        }).length > 0;
                        g || d.push(f)
                    }
                }
                return new a.Collection(this._private.cy, d, {
                    unique: !0
                }).filter(b)
            },
            outgoers: function(b) {
                for (var c = this, d = [], e = 0; e < c.length; e++) {
                    var f = c[e],
                        g = f.id();
                    if (f.isNode())
                        for (var h = f._private.edges, i = 0; i < h.length; i++) {
                            var j = h[i],
                                k = j._private.data.source,
                                l = j._private.data.target;
                            k === g && l !== g && (d.push(j), d.push(j.target()[0]))
                        }
                }
                return new a.Collection(this._private.cy, d, {
                    unique: !0
                }).filter(b)
            },
            successors: function(b) {
                for (var c = this, d = [], e = {};;) {
                    var f = c.outgoers();
                    if (0 === f.length) break;
                    for (var g = !1, h = 0; h < f.length; h++) {
                        var i = f[h],
                            j = i.id();
                        e[j] || (e[j] = !0, d.push(i), g = !0)
                    }
                    if (!g) break;
                    c = f
                }
                return new a.Collection(this._private.cy, d, {
                    unique: !0
                }).filter(b)
            },
            incomers: function(b) {
                for (var c = this, d = [], e = 0; e < c.length; e++) {
                    var f = c[e],
                        g = f.id();
                    if (f.isNode())
                        for (var h = f._private.edges, i = 0; i < h.length; i++) {
                            var j = h[i],
                                k = j._private.data.source,
                                l = j._private.data.target;
                            l === g && k !== g && (d.push(j), d.push(j.source()[0]))
                        }
                }
                return new a.Collection(this._private.cy, d, {
                    unique: !0
                }).filter(b)
            },
            predecessors: function(b) {
                for (var c = this, d = [], e = {};;) {
                    var f = c.incomers();
                    if (0 === f.length) break;
                    for (var g = !1, h = 0; h < f.length; h++) {
                        var i = f[h],
                            j = i.id();
                        e[j] || (e[j] = !0, d.push(i), g = !0)
                    }
                    if (!g) break;
                    c = f
                }
                return new a.Collection(this._private.cy, d, {
                    unique: !0
                }).filter(b)
            }
        }), a.fn.eles({
            neighborhood: function(b) {
                for (var c = [], d = this._private.cy, e = this.nodes(), f = 0; f < e.length; f++)
                    for (var g = e[f], h = g.connectedEdges(), i = 0; i < h.length; i++) {
                        var j = h[i],
                            k = j.connectedNodes().not(g);
                        k.length > 0 && c.push(k[0]), c.push(j[0])
                    }
                return new a.Collection(d, c, {
                    unique: !0
                }).filter(b)
            },
            closedNeighborhood: function(a) {
                return this.neighborhood().add(this).filter(a)
            },
            openNeighborhood: function(a) {
                return this.neighborhood(a)
            }
        }), a.elesfn.neighbourhood = a.elesfn.neighborhood, a.elesfn.closedNeighbourhood = a.elesfn.closedNeighborhood, a.elesfn.openNeighbourhood = a.elesfn.openNeighborhood, a.fn.eles({
            source: function(a) {
                var b, c = this[0];
                return c && (b = c._private.source), b && a ? b.filter(a) : b
            },
            target: function(a) {
                var b, c = this[0];
                return c && (b = c._private.target), b && a ? b.filter(a) : b
            },
            sources: b({
                attr: "source"
            }),
            targets: b({
                attr: "target"
            })
        }), a.fn.eles({
            edgesWith: c(),
            edgesTo: c({
                thisIs: "source"
            })
        }), a.fn.eles({
            connectedEdges: function(b) {
                for (var c = [], d = this._private.cy, e = this, f = 0; f < e.length; f++) {
                    var g = e[f];
                    if (g.isNode())
                        for (var h = g._private.edges, i = 0; i < h.length; i++) {
                            var j = h[i];
                            c.push(j)
                        }
                }
                return new a.Collection(d, c, {
                    unique: !0
                }).filter(b)
            },
            connectedNodes: function(b) {
                for (var c = [], d = this._private.cy, e = this, f = 0; f < e.length; f++) {
                    var g = e[f];
                    g.isEdge() && (c.push(g.source()[0]), c.push(g.target()[0]))
                }
                return new a.Collection(d, c, {
                    unique: !0
                }).filter(b)
            },
            parallelEdges: d(),
            codirectedEdges: d({
                codirected: !0
            })
        })
    }(cytoscape), function(a) {
        "use strict";
        a.fn.eles({
            fit: function() {},
            center: function() {}
        })
    }(cytoscape), function(a) {
        "use strict";
        a.Minheap = function(b, c, d) {
            return new a.Heap(b, c, a.Heap.minHeapComparator, d)
        }, a.Maxheap = function(b, c, d) {
            return new a.Heap(b, c, a.Heap.maxHeapComparator, d)
        }, a.Heap = function(b, c, d, e) {
            if ("undefined" != typeof d && "undefined" != typeof c) {
                "undefined" == typeof e && (e = a.Heap.idFn);
                var f, g, h, i = [],
                    j = {},
                    k = [],
                    l = 0;
                for (c = this.getArgumentAsCollection(c, b), h = c.length, l = 0; h > l; l += 1) {
                    if (i.push(e.call(b, c[l], l, c)), f = c[l].id(), j.hasOwnProperty(f)) throw "ERROR: Multiple items with the same id found: " + f;
                    j[f] = l, k.push(f)
                }
                for (this._private = {
                        cy: b,
                        heap: i,
                        pointers: j,
                        elements: k,
                        comparator: d,
                        extractor: e,
                        length: h
                    }, l = Math.floor(h / 2); l >= 0; l -= 1) g = this.heapify(l);
                return g
            }
        }, a.Heap.idFn = function(a) {
            return a.id()
        }, a.Heap.minHeapComparator = function(a, b) {
            return a >= b
        }, a.Heap.maxHeapComparator = function(a, b) {
            return b >= a
        }, a.fn.heap = function(b, c) {
            for (var d in b) {
                var e = b[d];
                a.Heap.prototype[d] = e
            }
        }, a.heapfn = a.Heap.prototype, a.heapfn.size = function() {
            return this._private.length
        }, a.heapfn.getArgumentAsCollection = function(b, c) {
            var d;
            if ("undefined" == typeof c && (c = this._private.cy), a.is.elementOrCollection(b)) d = b;
            else {
                for (var e = [], f = [].concat.apply([], [b]), g = 0; g < f.length; g++) {
                    var h = f[g],
                        i = c.getElementById(h);
                    i.length > 0 && e.push(i)
                }
                d = new a.Collection(c, e)
            }
            return d
        }, a.heapfn.isHeap = function() {
            var a, b, c, d, e, f = this._private.heap,
                g = f.length,
                h = this._private.comparator;
            for (a = 0; g > a; a += 1)
                if (b = 2 * a + 1, c = b + 1, d = g > b ? h(f[b], f[a]) : !0, e = g > c ? h(f[c], f[a]) : !0, !d || !e) return !1;
            return !0
        }, a.heapfn.heapSwap = function(a, b) {
            var c = this._private.heap,
                d = this._private.pointers,
                e = this._private.elements,
                f = c[a],
                g = e[a],
                h = e[a],
                i = e[b];
            c[a] = c[b], e[a] = e[b], d[h] = b, d[i] = a, c[b] = f, e[b] = g
        }, a.heapfn.heapify = function(a, b) {
            var c, d, e, f, g, h, i, j = 0,
                k = !1;
            for ("undefined" == typeof b && (b = !0), c = this._private.heap, j = c.length, h = this._private.comparator, d = a; !k;) b ? (e = 2 * d + 1, f = e + 1, g = d, j > e && !h(c[e], c[g]) && (g = e), j > f && !h(c[f], c[g]) && (g = f), k = g === d, k || (this.heapSwap(g, d), d = g)) : (i = Math.floor((d - 1) / 2), g = d, k = 0 > i || h(c[g], c[i]), k || (this.heapSwap(g, i), d = i))
        }, a.heapfn.insert = function(a) {
            var b, c, d, e, f, g = this.getArgumentAsCollection(a),
                h = g.length;
            for (f = 0; h > f; f += 1) {
                if (b = g[f], c = this._private.heap.length, d = this._private.extractor(b), e = b.id(), this._private.pointers.hasOwnProperty(e)) throw "ERROR: Multiple items with the same id found: " + e;
                this._private.heap.push(d), this._private.elements.push(e), this._private.pointers[e] = c, this.heapify(c, !1)
            }
            this._private.length = this._private.heap.length
        }, a.heapfn.getValueById = function(a) {
            if (this._private.pointers.hasOwnProperty(a)) {
                var b = this._private.pointers[a];
                return this._private.heap[b]
            }
        }, a.heapfn.contains = function(a) {
            for (var b = this.getArgumentAsCollection(a), c = 0; c < b.length; c += 1) {
                var d = b[c].id();
                if (!this._private.pointers.hasOwnProperty(d)) return !1
            }
            return !0
        }, a.heapfn.top = function() {
            return this._private.length > 0 ? {
                value: this._private.heap[0],
                id: this._private.elements[0]
            } : void 0
        }, a.heapfn.pop = function() {
            if (this._private.length > 0) {
                var a, b, c, d = this.top(),
                    e = this._private.length - 1;
                return this.heapSwap(0, e), a = this._private.elements[e], b = this._private.heap[e], c = a, this._private.heap.pop(), this._private.elements.pop(), this._private.length = this._private.heap.length, this._private.pointers[c] = void 0, this.heapify(0), d
            }
        }, a.heapfn.findDirectionHeapify = function(a) {
            var b = Math.floor((a - 1) / 2),
                c = this._private.heap,
                d = 0 > b || this._private.comparator(c[a], c[b]);
            this.heapify(a, d)
        }, a.heapfn.edit = function(b, c) {
            for (var d = this.getArgumentAsCollection(b), e = 0; e < d.length; e += 1) {
                var f = d[e].id(),
                    g = this._private.pointers[f],
                    h = this._private.heap[g];
                a.is.number(c) ? this._private.heap[g] = c : a.is.fn(c) && (this._private.heap[g] = c.call(this._private.cy, h, g)), this.findDirectionHeapify(g)
            }
        }, a.heapfn.remove = function(a) {
            for (var b = this.getArgumentAsCollection(a), c = 0; c < b.length; c += 1) {
                var d, e, f, g = b[c].id(),
                    h = this._private.pointers[g],
                    i = this._private.length - 1;
                h !== i && this.heapSwap(h, i), d = this._private.elements[i], e = this._private.heap[i], f = d, this._private.heap.pop(), this._private.elements.pop(), this._private.length = this._private.heap.length, this._private.pointers[f] = void 0, this.findDirectionHeapify(h)
            }
            return e
        }
    }(cytoscape), function(a) {
        "use strict";

        function b(a) {
            this.options = a, this.data = {
                select: [void 0, void 0, void 0, void 0, 0],
                renderer: this,
                cy: a.cy,
                container: a.cy.container(),
                canvases: new Array(b.CANVAS_LAYERS),
                contexts: new Array(b.CANVAS_LAYERS),
                canvasNeedsRedraw: new Array(b.CANVAS_LAYERS),
                bufferCanvases: new Array(b.BUFFER_COUNT),
                bufferContexts: new Array(b.CANVAS_LAYERS)
            }, this.hoverData = {
                down: null,
                last: null,
                downTime: null,
                triggerMode: null,
                dragging: !1,
                initialPan: [null, null],
                capture: !1
            }, this.timeoutData = {
                panTimeout: null
            }, this.dragData = {
                possibleDragElements: []
            }, this.touchData = {
                start: null,
                capture: !1,
                startPosition: [null, null, null, null, null, null],
                singleTouchStartTime: null,
                singleTouchMoved: !0,
                now: [null, null, null, null, null, null],
                earlier: [null, null, null, null, null, null]
            }, this.zoomData = {
                freeToZoom: !1,
                lastPointerX: null
            }, this.redraws = 0, this.showFps = a.showFps, this.bindings = [], this.data.canvasContainer = document.createElement("div");
            var c = this.data.canvasContainer.style;
            c.position = "absolute", c.zIndex = "0", c.overflow = "hidden", this.data.container.appendChild(this.data.canvasContainer);
            for (var d = 0; d < b.CANVAS_LAYERS; d++) this.data.canvases[d] = document.createElement("canvas"), this.data.contexts[d] = this.data.canvases[d].getContext("2d"), this.data.canvases[d].style.position = "absolute", this.data.canvases[d].setAttribute("data-id", "layer" + d), this.data.canvases[d].style.zIndex = String(b.CANVAS_LAYERS - d), this.data.canvasContainer.appendChild(this.data.canvases[d]), this.data.canvasNeedsRedraw[d] = !1;
            this.data.topCanvas = this.data.canvases[0], this.data.canvases[b.NODE].setAttribute("data-id", "layer" + b.NODE + "-node"), this.data.canvases[b.SELECT_BOX].setAttribute("data-id", "layer" + b.SELECT_BOX + "-selectbox"), this.data.canvases[b.DRAG].setAttribute("data-id", "layer" + b.DRAG + "-drag");
            for (var d = 0; d < b.BUFFER_COUNT; d++) this.data.bufferCanvases[d] = document.createElement("canvas"), this.data.bufferContexts[d] = this.data.bufferCanvases[d].getContext("2d"), this.data.bufferCanvases[d].style.position = "absolute", this.data.bufferCanvases[d].setAttribute("data-id", "buffer" + d), this.data.bufferCanvases[d].style.zIndex = String(-d - 1), this.data.bufferCanvases[d].style.visibility = "hidden";
            this.hideEdgesOnViewport = a.hideEdgesOnViewport, this.hideLabelsOnViewport = a.hideLabelsOnViewport, this.textureOnViewport = a.textureOnViewport, this.wheelSensitivity = a.wheelSensitivity, this.motionBlurEnabled = a.motionBlur, this.forcedPixelRatio = a.pixelRatio, this.motionBlur = !0, this.motionBlurOpacity = a.motionBlurOpacity, this.motionBlurTransparency = 1 - this.motionBlurOpacity, this.motionBlurPxRatio = 1, this.mbPxRBlurry = 1, this.minMbLowQualFrames = 4, this.fullQualityMb = !1, this.clearedForMotionBlur = [], this.desktopTapThreshold = a.desktopTapThreshold, this.desktopTapThreshold2 = a.desktopTapThreshold * a.desktopTapThreshold, this.touchTapThreshold = a.touchTapThreshold, this.touchTapThreshold2 = a.touchTapThreshold * a.touchTapThreshold, this.tapholdDuration = 500, this.load()
        }
        b.CANVAS_LAYERS = 3, b.SELECT_BOX = 0, b.DRAG = 1, b.NODE = 2, b.BUFFER_COUNT = 3, b.TEXTURE_BUFFER = 0, b.MOTIONBLUR_BUFFER_NODE = 1, b.MOTIONBLUR_BUFFER_DRAG = 2, b.panOrBoxSelectDelay = 400;
        var c = "undefined" != typeof Path2D;
        b.usePaths = function() {
            return c
        }, b.prototype.notify = function(c) {
            var d;
            d = a.is.array(c.type) ? c.type : [c.type];
            for (var e = 0; e < d.length; e++) {
                var f = d[e];
                switch (f) {
                    case "destroy":
                        return void this.destroy();
                    case "add":
                    case "remove":
                    case "load":
                        this.updateNodesCache(), this.updateEdgesCache();
                        break;
                    case "viewport":
                        this.data.canvasNeedsRedraw[b.SELECT_BOX] = !0;
                        break;
                    case "style":
                        this.updateCachedZSortedEles()
                }("load" === f || "resize" === f) && (this.invalidateContainerClientCoordsCache(), this.matchCanvasSize(this.data.container))
            }
            this.data.canvasNeedsRedraw[b.NODE] = !0, this.data.canvasNeedsRedraw[b.DRAG] = !0, this.redraw()
        }, b.prototype.destroy = function() {
            this.destroyed = !0;
            for (var a = 0; a < this.bindings.length; a++) {
                var b = this.bindings[a],
                    c = b;
                c.target.removeEventListener(c.event, c.handler, c.useCapture)
            }
            if (this.removeObserver && this.removeObserver.disconnect(), this.labelCalcDiv) try {
                document.body.removeChild(this.labelCalcDiv)
            } catch (d) {}
        };
        for (var d in a.math) b.prototype[d] = a.math[d];
        a("renderer", "canvas", b)
    }(cytoscape), function(a) {
        "use strict";
        var b = a("renderer", "canvas"),
            c = b.prototype,
            d = b.arrowShapes = {};
        b.arrowShapeHeight = .3;
        var e = function(a, b, c, d, e, f, g, h) {
                var i = c - e / 2,
                    j = c + e / 2,
                    k = d - f / 2,
                    l = d + f / 2;
                return a >= i && j >= a && b >= k && l >= b
            },
            f = function(a, b, c, d, e) {
                d = -d;
                var f = a * Math.cos(d) - b * Math.sin(d),
                    g = a * Math.sin(d) + b * Math.cos(d),
                    h = f * c,
                    i = g * c,
                    j = h + e.x,
                    k = i + e.y;
                return {
                    x: j,
                    y: k
                }
            };
        d.arrow = {
            _points: [-.15, -.3, 0, 0, .15, -.3],
            collide: function(b, c, e, f, g, h, i, j) {
                var k = d.arrow._points;
                return a.math.pointInsidePolygon(b, c, k, e, f, g, h, i, j)
            },
            roughCollide: e,
            draw: function(a, b, c, e) {
                for (var g = d.arrow._points, h = 0; h < g.length / 2; h++) {
                    var i = f(g[2 * h], g[2 * h + 1], b, c, e);
                    a.lineTo(i.x, i.y)
                }
            },
            spacing: function(a) {
                return 0
            },
            gap: function(a) {
                return 2 * a._private.style.width.pxValue
            }
        }, d.triangle = d.arrow, d["triangle-backcurve"] = {
            _ctrlPt: [0, -.15],
            collide: function(b, c, e, f, g, h, i, j) {
                var k = d.triangle._points;
                return a.math.pointInsidePolygon(b, c, k, e, f, g, h, i, j)
            },
            roughCollide: e,
            draw: function(a, b, c, e) {
                for (var g, h = d.triangle._points, i = 0; i < h.length / 2; i++) {
                    var j = f(h[2 * i], h[2 * i + 1], b, c, e);
                    0 === i && (g = j), a.lineTo(j.x, j.y)
                }
                var k = this._ctrlPt,
                    l = f(k[0], k[1], b, c, e);
                a.quadraticCurveTo(l.x, l.y, g.x, g.y)
            },
            spacing: function(a) {
                return 0
            },
            gap: function(a) {
                return 2 * a._private.style.width.pxValue
            }
        }, d["triangle-tee"] = {
            _points: [-.15, -.3, 0, 0, .15, -.3, -.15, -.3],
            _pointsTee: [-.15, -.4, -.15, -.5, .15, -.5, .15, -.4],
            collide: function(b, c, e, f, g, h, i, j) {
                var k = d["triangle-tee"]._points,
                    l = d["triangle-tee"]._pointsTee,
                    m = a.math.pointInsidePolygon(b, c, l, e, f, g, h, i, j) || a.math.pointInsidePolygon(b, c, k, e, f, g, h, i, j);
                return m
            },
            roughCollide: e,
            draw: function(a, b, c, e) {
                for (var g = d["triangle-tee"]._points, h = 0; h < g.length / 2; h++) {
                    var i = f(g[2 * h], g[2 * h + 1], b, c, e);
                    a.lineTo(i.x, i.y)
                }
                var j = d["triangle-tee"]._pointsTee,
                    k = f(j[0], j[1], b, c, e);
                a.moveTo(k.x, k.y);
                for (var h = 0; h < j.length / 2; h++) {
                    var i = f(j[2 * h], j[2 * h + 1], b, c, e);
                    a.lineTo(i.x, i.y)
                }
            },
            spacing: function(a) {
                return 0
            },
            gap: function(a) {
                return 2 * a._private.style.width.pxValue
            }
        }, d["half-triangle-overshot"] = {
            _points: [0, -.25, -.5, -.25, .5, .25],
            leavePathOpen: !0,
            matchEdgeWidth: !0,
            collide: function(b, c, d, e, f, g, h, i) {
                var j = this._points;
                return a.math.pointInsidePolygon(b, c, j, d, e, f, g, h, i)
            },
            roughCollide: e,
            draw: function(a, b, c, d) {
                for (var e = this._points, g = 0; g < e.length / 2; g++) {
                    var h = f(e[2 * g], e[2 * g + 1], b, c, d);
                    a.lineTo(h.x, h.y)
                }
            },
            spacing: function(a) {
                return 0
            },
            gap: function(a) {
                return 2 * a._private.style.width.pxValue
            }
        }, d.none = {
            collide: function(a, b, c, d, e, f, g, h) {
                return !1
            },
            roughCollide: function(a, b, c, d, e, f, g, h) {
                return !1
            },
            draw: function(a) {},
            spacing: function(a) {
                return 0
            },
            gap: function(a) {
                return 0
            }
        }, d.circle = {
            _baseRadius: .15,
            collide: function(a, b, c, e, f, g, h, i) {
                if (f != g) {
                    var j = (g + i) / (f + i);
                    return b /= j, e /= j, Math.pow(c - a, 2) + Math.pow(e - b, 2) <= Math.pow((f + i) * d.circle._baseRadius, 2)
                }
                return Math.pow(c - a, 2) + Math.pow(e - b, 2) <= Math.pow((f + i) * d.circle._baseRadius, 2)
            },
            roughCollide: e,
            draw: function(a, b, c, e) {
                a.arc(e.x, e.y, d.circle._baseRadius * b, 0, 2 * Math.PI, !1)
            },
            spacing: function(a) {
                return c.getArrowWidth(a._private.style.width.pxValue) * d.circle._baseRadius
            },
            gap: function(a) {
                return 2 * a._private.style.width.pxValue
            }
        }, d.inhibitor = {
            _points: [-.25, 0, -.25, -.1, .25, -.1, .25, 0],
            collide: function(b, c, e, f, g, h, i, j) {
                var k = d.inhibitor._points;
                return a.math.pointInsidePolygon(b, c, k, e, f, g, h, i, j)
            },
            roughCollide: e,
            draw: function(a, b, c, e) {
                for (var g = d.inhibitor._points, h = 0; h < g.length / 2; h++) {
                    var i = f(g[2 * h], g[2 * h + 1], b, c, e);
                    a.lineTo(i.x, i.y)
                }
            },
            spacing: function(a) {
                return 1
            },
            gap: function(a) {
                return 1
            }
        }, d.tee = d.inhibitor, d.square = {
            _points: [-.15, 0, .15, 0, .15, -.3, -.15, -.3],
            collide: function(b, c, e, f, g, h, i, j) {
                var k = d.square._points;
                return a.math.pointInsidePolygon(b, c, k, e, f, g, h, i, j)
            },
            roughCollide: e,
            draw: function(a, b, c, e) {
                for (var g = d.square._points, h = 0; h < g.length / 2; h++) {
                    var i = f(g[2 * h], g[2 * h + 1], b, c, e);
                    a.lineTo(i.x, i.y)
                }
            },
            spacing: function(a) {
                return 0
            },
            gap: function(a) {
                return 2 * a._private.style.width.pxValue
            }
        }, d.diamond = {
            _points: [-.15, -.15, 0, -.3, .15, -.15, 0, 0],
            collide: function(b, c, e, f, g, h, i, j) {
                var k = d.diamond._points;
                return a.math.pointInsidePolygon(b, c, k, e, f, g, h, i, j)
            },
            roughCollide: e,
            draw: function(a, b, c, e) {
                for (var g = d.diamond._points, h = 0; h < g.length / 2; h++) {
                    var i = f(g[2 * h], g[2 * h + 1], b, c, e);
                    a.lineTo(i.x, i.y)
                }
            },
            spacing: function(a) {
                return 0
            },
            gap: function(a) {
                return a._private.style.width.pxValue
            }
        }
    }(cytoscape), function(a) {
        "use strict";
        var b = a("renderer", "canvas"),
            c = b.prototype;
        c.getCachedNodes = function() {
            var a = this.data,
                b = this.data.cy;
            return null == a.cache && (a.cache = {}), null == a.cache.cachedNodes && (a.cache.cachedNodes = b.nodes()), a.cache.cachedNodes
        }, c.updateNodesCache = function() {
            var a = this.data,
                b = this.data.cy;
            null == a.cache && (a.cache = {}), a.cache.cachedNodes = b.nodes()
        }, c.getCachedEdges = function() {
            var a = this.data,
                b = this.data.cy;
            return null == a.cache && (a.cache = {}), null == a.cache.cachedEdges && (a.cache.cachedEdges = b.edges()), a.cache.cachedEdges
        }, c.updateEdgesCache = function() {
            var a = this.data,
                b = this.data.cy;
            null == a.cache && (a.cache = {}), a.cache.cachedEdges = b.edges()
        }
    }(cytoscape), function(a) {
        "use strict";
        var b = a("renderer", "canvas"),
            c = b.prototype;
        c.projectIntoViewport = function(a, b) {
            var c = this.findContainerClientCoords(),
                d = c[0],
                e = c[1],
                f = a - d,
                g = b - e;
            return f -= this.data.cy.pan().x, g -= this.data.cy.pan().y, f /= this.data.cy.zoom(), g /= this.data.cy.zoom(), [f, g]
        }, c.findContainerClientCoords = function() {
            var a = this.data.container,
                b = this.containerBB = this.containerBB || a.getBoundingClientRect();
            return [b.left, b.top, b.right - b.left, b.bottom - b.top]
        }, c.invalidateContainerClientCoordsCache = function() {
            this.containerBB = null
        }, c.findNearestElement = function(c, d, e, f) {
            function g(a) {
                var f = a.outerWidth() + 2 * o,
                    g = a.outerHeight() + 2 * o,
                    h = f / 2,
                    j = g / 2,
                    l = a._private.position;
                if (l.x - h <= c && c <= l.x + h && l.y - j <= d && d <= l.y + j) {
                    var m = !e || a.visible() && !a.transparent();
                    if (e && !m) return;
                    var n = b.nodeShapes[i.getNodeShape(a)];
                    a._private.style["border-width"].pxValue / 2;
                    n.checkPoint(c, d, 0, f, g, l.x, l.y) && k.push(a)
                }
            }

            function h(f) {
                var h, j, l = f._private.rscratch,
                    o = f._private.style,
                    p = o.width.pxValue / 2 + n,
                    q = p * p,
                    r = 2 * p,
                    s = f._private.source,
                    t = f._private.target,
                    u = !1,
                    v = function() {
                        if (void 0 !== j) return j;
                        if (!e) return j = !0, !0;
                        var a = f.visible() && !f.transparent();
                        return a ? (j = !0, !0) : (j = !1, !1)
                    };
                if ("self" === l.edgeType || "compound" === l.edgeType)((u = a.math.inBezierVicinity(c, d, l.startX, l.startY, l.cp2ax, l.cp2ay, l.selfEdgeMidX, l.selfEdgeMidY, q)) && v() && q > (h = a.math.sqDistanceToQuadraticBezier(c, d, l.startX, l.startY, l.cp2ax, l.cp2ay, l.selfEdgeMidX, l.selfEdgeMidY)) || (u = a.math.inBezierVicinity(c, d, l.selfEdgeMidX, l.selfEdgeMidY, l.cp2cx, l.cp2cy, l.endX, l.endY, q)) && v() && q > (h = a.math.sqDistanceToQuadraticBezier(c, d, l.selfEdgeMidX, l.selfEdgeMidY, l.cp2cx, l.cp2cy, l.endX, l.endY))) && k.push(f);
                else if ("haystack" === l.edgeType) {
                    var w = o["haystack-radius"].value,
                        x = w / 2,
                        y = t._private.position,
                        z = t.width(),
                        A = t.height(),
                        B = s._private.position,
                        C = s.width(),
                        D = s.height(),
                        E = B.x + l.source.x * C * x,
                        F = B.y + l.source.y * D * x,
                        G = y.x + l.target.x * z * x,
                        H = y.y + l.target.y * A * x;
                    (u = a.math.inLineVicinity(c, d, E, F, G, H, r)) && v() && q > (h = a.math.sqDistanceToFiniteLine(c, d, E, F, G, H)) && k.push(f)
                } else "straight" === l.edgeType ? (u = a.math.inLineVicinity(c, d, l.startX, l.startY, l.endX, l.endY, r)) && v() && q > (h = a.math.sqDistanceToFiniteLine(c, d, l.startX, l.startY, l.endX, l.endY)) && k.push(f) : "bezier" === l.edgeType && (u = a.math.inBezierVicinity(c, d, l.startX, l.startY, l.cp2x, l.cp2y, l.endX, l.endY, q)) && v() && q > (h = a.math.sqDistanceToQuadraticBezier(c, d, l.startX, l.startY, l.cp2x, l.cp2y, l.endX, l.endY)) && k.push(f);
                if (u && v() && 0 === k.length || k[k.length - 1] !== f) {
                    var I = b.arrowShapes[o["source-arrow-shape"].value],
                        J = b.arrowShapes[o["target-arrow-shape"].value],
                        s = s || f._private.source,
                        t = t || f._private.target,
                        y = t._private.position,
                        B = s._private.position,
                        K = i.getArrowWidth(o.width.pxValue),
                        L = i.getArrowHeight(o.width.pxValue),
                        M = K,
                        N = L;
                    (I.roughCollide(c, d, l.arrowStartX, l.arrowStartY, K, L, [l.arrowStartX - B.x, l.arrowStartY - B.y], n) && I.collide(c, d, l.arrowStartX, l.arrowStartY, K, L, [l.arrowStartX - B.x, l.arrowStartY - B.y], n) || J.roughCollide(c, d, l.arrowEndX, l.arrowEndY, M, N, [l.arrowEndX - y.x, l.arrowEndY - y.y], n) && J.collide(c, d, l.arrowEndX, l.arrowEndY, M, N, [l.arrowEndX - y.x, l.arrowEndY - y.y], n)) && k.push(f)
                }
                m && k.length > 0 && k[k.length - 1] === f && (g(s), g(t))
            }
            for (var i = this, j = this.getCachedZSortedEles(), k = [], l = this.data.cy.zoom(), m = this.data.cy.hasCompoundNodes(), n = (f ? 24 : 8) / l, o = (f ? 8 : 2) / l, p = j.length - 1; p >= 0; p--) {
                var q = j[p];
                if (k.length > 0) break;
                "nodes" === q._private.group ? g(j[p]) : h(j[p])
            }
            return k.length > 0 ? k[k.length - 1] : null
        }, c.getAllInBox = function(c, d, e, f) {
            var g = this.getCachedNodes(),
                h = this.getCachedEdges(),
                i = [],
                j = Math.min(c, e),
                k = Math.max(c, e),
                l = Math.min(d, f),
                m = Math.max(d, f);
            c = j, e = k, d = l, f = m;
            for (var n, o = 0; o < g.length; o++) {
                var p = g[o]._private.position,
                    q = this.getNodeShape(g[o]),
                    r = this.getNodeWidth(g[o]),
                    s = this.getNodeHeight(g[o]),
                    t = g[o]._private.style["border-width"].pxValue / 2,
                    u = b.nodeShapes[q];
                u.intersectBox(c, d, e, f, r, s, p.x, p.y, t) && i.push(g[o])
            }
            for (var o = 0; o < h.length; o++) {
                var v = h[o]._private.rscratch;
                if ("self" == h[o]._private.rscratch.edgeType && ((n = a.math.boxInBezierVicinity(c, d, e, f, v.startX, v.startY, v.cp2ax, v.cp2ay, v.endX, v.endY, h[o]._private.style.width.pxValue)) && (2 == n || 1 == n && a.math.checkBezierInBox(c, d, e, f, v.startX, v.startY, v.cp2ax, v.cp2ay, v.endX, v.endY, h[o]._private.style.width.pxValue)) || (n = a.math.boxInBezierVicinity(c, d, e, f, v.startX, v.startY, v.cp2cx, v.cp2cy, v.endX, v.endY, h[o]._private.style.width.pxValue)) && (2 == n || 1 == n && a.math.checkBezierInBox(c, d, e, f, v.startX, v.startY, v.cp2cx, v.cp2cy, v.endX, v.endY, h[o]._private.style.width.pxValue))) && i.push(h[o]), "bezier" == v.edgeType && (n = a.math.boxInBezierVicinity(c, d, e, f, v.startX, v.startY, v.cp2x, v.cp2y, v.endX, v.endY, h[o]._private.style.width.pxValue)) && (2 == n || 1 == n && a.math.checkBezierInBox(c, d, e, f, v.startX, v.startY, v.cp2x, v.cp2y, v.endX, v.endY, h[o]._private.style.width.pxValue)) && i.push(h[o]), "straight" == v.edgeType && (n = a.math.boxInBezierVicinity(c, d, e, f, v.startX, v.startY, .5 * v.startX + .5 * v.endX, .5 * v.startY + .5 * v.endY, v.endX, v.endY, h[o]._private.style.width.pxValue)) && (2 == n || 1 == n && a.math.checkStraightEdgeInBox(c, d, e, f, v.startX, v.startY, v.endX, v.endY, h[o]._private.style.width.pxValue)) && i.push(h[o]), "haystack" == v.edgeType) {
                    var w = h[o].target()[0],
                        x = w.position(),
                        y = h[o].source()[0],
                        z = y.position(),
                        A = z.x + v.source.x,
                        B = z.y + v.source.y,
                        C = x.x + v.target.x,
                        D = x.y + v.target.y,
                        E = A >= c && e >= A && B >= d && f >= B,
                        F = C >= c && e >= C && D >= d && f >= D;
                    E && F && i.push(h[o])
                }
            }
            return i
        }, c.getNodeWidth = function(a) {
            return a.width()
        }, c.getNodeHeight = function(a) {
            return a.height()
        }, c.getNodeShape = function(a) {
            var b = a._private.style.shape.value;
            return a.isParent() ? "rectangle" === b || "roundrectangle" === b ? b : "rectangle" : b
        }, c.getNodePadding = function(a) {
            var b = a._private.style["padding-left"].pxValue,
                c = a._private.style["padding-right"].pxValue,
                d = a._private.style["padding-top"].pxValue,
                e = a._private.style["padding-bottom"].pxValue;
            return isNaN(b) && (b = 0), isNaN(c) && (c = 0), isNaN(d) && (d = 0), isNaN(e) && (e = 0), {
                left: b,
                right: c,
                top: d,
                bottom: e
            }
        }, c.zOrderSort = a.Collection.zIndexSort, c.updateCachedZSortedEles = function() {
            this.getCachedZSortedEles(!0)
        }, c.getCachedZSortedEles = function(a) {
            var b = this.lastZOrderCachedNodes,
                c = this.lastZOrderCachedEdges,
                d = this.getCachedNodes(),
                e = this.getCachedEdges(),
                f = [];
            if (!a && b && c && b === d && c === e) f = this.cachedZSortedEles;
            else {
                for (var g = 0; g < d.length; g++) {
                    var h = d[g];
                    (h.animated() || h.visible() && !h.transparent()) && f.push(h)
                }
                for (var g = 0; g < e.length; g++) {
                    var i = e[g];
                    (i.animated() || i.visible() && !i.transparent()) && f.push(i)
                }
                f.sort(this.zOrderSort), this.cachedZSortedEles = f
            }
            return this.lastZOrderCachedNodes = d, this.lastZOrderCachedEdges = e, f
        }, c.projectBezier = function(b) {
            function c(a) {
                f.push({
                    x: d(a[0], a[2], a[4], .05),
                    y: d(a[1], a[3], a[5], .05)
                }), f.push({
                    x: d(a[0], a[2], a[4], .25),
                    y: d(a[1], a[3], a[5], .25)
                }), f.push({
                    x: d(a[0], a[2], a[4], .4),
                    y: d(a[1], a[3], a[5], .4)
                });
                var b = {
                    x: d(a[0], a[2], a[4], .5),
                    y: d(a[1], a[3], a[5], .5)
                };
                f.push(b), "self" === e.edgeType || "compound" === e.edgeType ? (e.midX = e.selfEdgeMidX, e.midY = e.selfEdgeMidY) : (e.midX = b.x, e.midY = b.y), f.push({
                    x: d(a[0], a[2], a[4], .6),
                    y: d(a[1], a[3], a[5], .6)
                }), f.push({
                    x: d(a[0], a[2], a[4], .75),
                    y: d(a[1], a[3], a[5], .75)
                }), f.push({
                    x: d(a[0], a[2], a[4], .95),
                    y: d(a[1], a[3], a[5], .95)
                })
            }
            var d = a.math.qbezierAt,
                e = b._private.rscratch,
                f = b._private.rstyle.bezierPts = [];
            "self" === e.edgeType ? (c([e.startX, e.startY, e.cp2ax, e.cp2ay, e.selfEdgeMidX, e.selfEdgeMidY]), c([e.selfEdgeMidX, e.selfEdgeMidY, e.cp2cx, e.cp2cy, e.endX, e.endY])) : "bezier" === e.edgeType && c([e.startX, e.startY, e.cp2x, e.cp2y, e.endX, e.endY])
        }, c.recalculateNodeLabelProjection = function(a) {
            var b = a._private.style.content.strValue;
            if (b && !b.match(/^\s+$/)) {
                var c, d, e = a.outerWidth(),
                    f = a.outerHeight(),
                    g = a._private.position,
                    h = a._private.style["text-halign"].strValue,
                    i = a._private.style["text-valign"].strValue,
                    j = a._private.rscratch,
                    k = a._private.rstyle;
                switch (h) {
                    case "left":
                        c = g.x - e / 2;
                        break;
                    case "right":
                        c = g.x + e / 2;
                        break;
                    default:
                        c = g.x
                }
                switch (i) {
                    case "top":
                        d = g.y - f / 2;
                        break;
                    case "bottom":
                        d = g.y + f / 2;
                        break;
                    default:
                        d = g.y
                }
                j.labelX = c, j.labelY = d, k.labelX = c, k.labelY = d, this.applyLabelDimensions(a)
            }
        }, c.recalculateEdgeLabelProjection = function(b) {
            var c = b._private.style.content.strValue;
            if (c && !c.match(/^\s+$/)) {
                var d, e, f, g, h = b._private,
                    i = h.rscratch,
                    j = h.rstyle;
                if ("self" == i.edgeType) f = i.selfEdgeMidX, g = i.selfEdgeMidY;
                else if ("straight" == i.edgeType) f = (i.startX + i.endX) / 2, g = (i.startY + i.endY) / 2;
                else if ("bezier" == i.edgeType) f = a.math.qbezierAt(i.startX, i.cp2x, i.endX, .5), g = a.math.qbezierAt(i.startY, i.cp2y, i.endY, .5);
                else if ("haystack" == i.edgeType) {
                    var k = i.haystackPts;
                    f = (k[0] + k[2]) / 2, g = (k[1] + k[3]) / 2
                }
                d = f, e = g, i.labelX = d, i.labelY = e, j.labelX = d, j.labelY = e, this.applyLabelDimensions(b)
            }
        }, c.applyLabelDimensions = function(a) {
            var b = a._private.rscratch,
                c = a._private.rstyle,
                d = this.getLabelText(a),
                e = this.calculateLabelDimensions(a, d);
            c.labelWidth = e.width, b.labelWidth = e.width, c.labelHeight = e.height, b.labelHeight = e.height
        }, c.getLabelText = function(a) {
            var b = a._private.style,
                c = a._private.style.content.strValue,
                d = b["text-transform"].value,
                e = a._private.rscratch;
            if ("none" == d || ("uppercase" == d ? c = c.toUpperCase() : "lowercase" == d && (c = c.toLowerCase())), "wrap" === b["text-wrap"].value) {
                if (e.labelWrapKey === e.labelKey) return e.labelWrapCachedText;
                for (var f = c.split("\n"), g = b["text-max-width"].pxValue, h = [], i = 0; i < f.length; i++) {
                    var j = f[i],
                        k = this.calculateLabelDimensions(a, j, "line=" + j),
                        l = k.width;
                    if (l > g) {
                        for (var m = j.split(/\s+/), n = "", o = 0; o < m.length; o++) {
                            var p = m[o],
                                q = 0 === n.length ? p : n + " " + p,
                                r = this.calculateLabelDimensions(a, q, "testLine=" + q),
                                s = r.width;
                            g >= s ? n += p + " " : (h.push(n), n = p + " ")
                        }
                        n.match(/^\s+$/) || h.push(n)
                    } else h.push(j)
                }
                e.labelWrapCachedLines = h, e.labelWrapCachedText = c = h.join("\n"), e.labelWrapKey = e.labelKey
            }
            return c
        }, c.calculateLabelDimensions = function(a, b, c) {
            var d = this,
                e = a._private.style,
                f = e["font-style"].strValue,
                g = e["font-size"].pxValue + "px",
                h = e["font-family"].strValue,
                i = e["font-weight"].strValue,
                j = a._private.labelKey;
            c && (j += "$@$" + c);
            var k = d.labelDimCache || (d.labelDimCache = {});
            if (k[j]) return k[j];
            var l = this.labelCalcDiv;
            l || (l = this.labelCalcDiv = document.createElement("div"), document.body.appendChild(l));
            var m = l.style;
            return m.fontFamily = h, m.fontStyle = f, m.fontSize = g, m.fontWeight = i, m.position = "absolute", m.left = "-9999px", m.top = "-9999px", m.zIndex = "-1", m.visibility = "hidden", m.pointerEvents = "none", m.padding = "0", m.lineHeight = "1", "wrap" === e["text-wrap"].value ? m.whiteSpace = "pre" : m.whiteSpace = "normal", l.textContent = b, k[j] = {
                width: l.clientWidth,
                height: l.clientHeight
            }, k[j]
        }, c.recalculateRenderedStyle = function(a) {
            for (var b = [], c = [], d = {}, e = 0; e < a.length; e++) {
                var f = a[e],
                    g = f._private,
                    h = g.style,
                    i = g.rscratch,
                    j = g.rstyle,
                    k = g.data.id,
                    l = null != i.boundingBoxKey && g.boundingBoxKey === i.boundingBoxKey,
                    m = null != i.labelKey && g.labelKey === i.labelKey,
                    n = l && m;
                if ("nodes" === f._private.group) {
                    var o = g.position,
                        p = null != j.nodeX && null != j.nodeY && o.x === j.nodeX && o.y === j.nodeY,
                        q = null != j.nodeW && j.nodeW === h.width.pxValue,
                        r = null != j.nodeH && j.nodeH === h.height.pxValue;
                    p && n && q && r || c.push(f), j.nodeX = o.x, j.nodeY = o.y, j.nodeW = h.width.pxValue, j.nodeH = h.height.pxValue
                } else {
                    var s = f._private.source._private.position,
                        t = f._private.target._private.position,
                        u = null != j.srcX && null != j.srcY && s.x === j.srcX && s.y === j.srcY,
                        v = null != j.tgtX && null != j.tgtY && t.x === j.tgtX && t.y === j.tgtY,
                        w = u && v;
                    if (!w || !n) {
                        var x = g.style["curve-style"].value;
                        if ("bezier" === x) {
                            if (!d[k]) {
                                b.push(f), d[k] = !0;
                                for (var y = f.parallelEdges(), e = 0; e < y.length; e++) {
                                    var z = y[e],
                                        A = z._private.data.id;
                                    d[A] || (b.push(z), d[A] = !0)
                                }
                            }
                        } else b.push(f)
                    }
                    j.srcX = s.x, j.srcY = s.y, j.tgtX = t.x, j.tgtY = t.y
                }
                i.boundingBoxKey = g.boundingBoxKey, i.labelKey = g.labelKey
            }
            this.recalculateEdgeProjections(b), this.recalculateLabelProjections(c, b)
        }, c.recalculateLabelProjections = function(a, b) {
            for (var c = 0; c < a.length; c++) this.recalculateNodeLabelProjection(a[c]);
            for (var c = 0; c < b.length; c++) this.recalculateEdgeLabelProjection(b[c])
        }, c.recalculateEdgeProjections = function(a) {
            this.findEdgeControlPoints(a)
        }, c.findEdgeControlPoints = function(c) {
            if (c && 0 !== c.length) {
                for (var d, e = this.data.cy, f = e.hasCompoundNodes(), g = {}, h = [], i = [], j = 0; j < c.length; j++) {
                    var k = c[j],
                        l = k._private.style,
                        m = "unbundled-bezier" === l["curve-style"].value;
                    if ("none" !== l.display.value)
                        if ("haystack" !== l["curve-style"].value) {
                            var n = k._private.data.source,
                                o = k._private.data.target;
                            d = n > o ? o + "-" + n : n + "-" + o, m && (d = "unbundled" + k._private.data.id), null == g[d] && (g[d] = [], h.push(d)), g[d].push(k), m && (g[d].hasUnbundled = !0)
                        } else i.push(k)
                }
                for (var p, q, r, s, t, u, v, w, x, y, z, A, B, C, D = 0; D < h.length; D++) {
                    d = h[D];
                    var E = g[d];
                    if (E.sort(function(a, b) {
                            return a._private.index - b._private.index
                        }), p = E[0]._private.source, q = E[0]._private.target, p._private.data.id > q._private.data.id) {
                        var F = p;
                        p = q, q = F
                    }
                    if (r = p._private.position, s = q._private.position, t = this.getNodeWidth(p), u = this.getNodeHeight(p), v = this.getNodeWidth(q), w = this.getNodeHeight(q), x = b.nodeShapes[this.getNodeShape(p)], y = b.nodeShapes[this.getNodeShape(q)], z = p._private.style["border-width"].pxValue, A = q._private.style["border-width"].pxValue, C = !1, E.length > 1 && p !== q || E.hasUnbundled) {
                        var G = x.intersectLine(r.x, r.y, t, u, s.x, s.y, z / 2),
                            H = y.intersectLine(s.x, s.y, v, w, r.x, r.y, A / 2),
                            I = {
                                x1: G[0],
                                x2: H[0],
                                y1: G[1],
                                y2: H[1]
                            },
                            J = H[1] - G[1],
                            K = H[0] - G[0],
                            L = Math.sqrt(K * K + J * J),
                            M = {
                                x: K,
                                y: J
                            },
                            N = {
                                x: M.x / L,
                                y: M.y / L
                            };
                        B = {
                            x: -N.y,
                            y: N.x
                        }, (y.checkPoint(G[0], G[1], A / 2, v, w, s.x, s.y) || x.checkPoint(H[0], H[1], z / 2, t, u, r.x, r.y)) && (B = {}, C = !0)
                    }
                    for (var k, O, j = 0; j < E.length; j++) {
                        k = E[j], O = k._private.rscratch;
                        var P = O.lastEdgeIndex,
                            Q = j,
                            R = O.lastNumEdges,
                            S = E.length,
                            T = k._private.style,
                            U = T["control-point-step-size"].pxValue,
                            V = void 0 !== T["control-point-distance"] ? T["control-point-distance"].pxValue : void 0,
                            W = T["control-point-weight"].value,
                            m = "unbundled-bezier" === T["curve-style"].value,
                            X = k._private.source !== p;
                        X && m && (V *= -1);
                        var Y = O.lastSrcCtlPtX,
                            Z = r.x,
                            $ = O.lastSrcCtlPtY,
                            _ = r.y,
                            aa = O.lastSrcCtlPtW,
                            ba = p.outerWidth(),
                            ca = O.lastSrcCtlPtH,
                            da = p.outerHeight(),
                            ea = O.lastTgtCtlPtX,
                            fa = s.x,
                            ga = O.lastTgtCtlPtY,
                            ha = s.y,
                            ia = O.lastTgtCtlPtW,
                            ja = q.outerWidth(),
                            ka = O.lastTgtCtlPtH,
                            la = q.outerHeight(),
                            ma = O.lastW,
                            na = T["control-point-step-size"].pxValue;
                        if (C ? O.badBezier = !0 : O.badBezier = !1, Y !== Z || $ !== _ || aa !== ba || ca !== da || ea !== fa || ga !== ha || ia !== ja || ka !== la || ma !== na || !(P === Q && R === S || m)) {
                            if (O.lastSrcCtlPtX = Z, O.lastSrcCtlPtY = _, O.lastSrcCtlPtW = ba, O.lastSrcCtlPtH = da, O.lastTgtCtlPtX = fa, O.lastTgtCtlPtY = ha, O.lastTgtCtlPtW = ja, O.lastTgtCtlPtH = la, O.lastEdgeIndex = Q, O.lastNumEdges = S, O.lastWidth = na, p === q) {
                                O.edgeType = "self";
                                var oa = j,
                                    pa = U;
                                m && (oa = 0, pa = V), O.cp2ax = r.x, O.cp2ay = r.y - (1 + Math.pow(u, 1.12) / 100) * pa * (oa / 3 + 1), O.cp2cx = r.x - (1 + Math.pow(t, 1.12) / 100) * pa * (oa / 3 + 1), O.cp2cy = r.y, O.selfEdgeMidX = (O.cp2ax + O.cp2cx) / 2, O.selfEdgeMidY = (O.cp2ay + O.cp2cy) / 2
                            } else if (f && (p.isParent() || p.isChild() || q.isParent() || q.isChild()) && (p.parents().anySame(q) || q.parents().anySame(p))) {
                                O.edgeType = "compound", O.badBezier = !1;
                                var oa = j,
                                    pa = U;
                                m && (oa = 0, pa = V);
                                var qa = 50,
                                    ra = {
                                        x: r.x - t / 2,
                                        y: r.y - u / 2
                                    },
                                    sa = {
                                        x: s.x - v / 2,
                                        y: s.y - w / 2
                                    },
                                    ta = 1;
                                O.cp2ax = ra.x, O.compoundStretchA = Math.max(ta, Math.log(.01 * t)), O.cp2ay = ra.y - (1 + Math.pow(qa, 1.12) / 100) * pa * (oa / 3 + 1) * O.compoundStretchA, O.compoundStretchB = Math.max(ta, Math.log(.01 * v)), O.cp2cx = sa.x - (1 + Math.pow(qa, 1.12) / 100) * pa * (oa / 3 + 1) * O.compoundStretchB, O.cp2cy = sa.y, O.selfEdgeMidX = (O.cp2ax + O.cp2cx) / 2, O.selfEdgeMidY = (O.cp2ay + O.cp2cy) / 2
                            } else if (E.length % 2 !== 1 || j !== Math.floor(E.length / 2) || m) {
                                var ua, va = (.5 - E.length / 2 + j) * U,
                                    wa = a.math.signum(va);
                                ua = m ? V : void 0 !== V ? wa * V : void 0;
                                var xa = void 0 !== ua ? ua : va,
                                    ya = 1 - W,
                                    za = W;
                                X && (ya = W, za = 1 - W);
                                var Aa = {
                                    x: I.x1 * ya + I.x2 * za,
                                    y: I.y1 * ya + I.y2 * za
                                };
                                O.edgeType = "bezier", O.cp2x = Aa.x + B.x * xa, O.cp2y = Aa.y + B.y * xa
                            } else O.edgeType = "straight";
                            this.findEndpoints(k);
                            var Ba = !a.is.number(O.startX) || !a.is.number(O.startY),
                                Ca = !a.is.number(O.arrowStartX) || !a.is.number(O.arrowStartY),
                                Da = !a.is.number(O.endX) || !a.is.number(O.endY),
                                Ea = !a.is.number(O.arrowEndX) || !a.is.number(O.arrowEndY),
                                Fa = 3,
                                Ga = this.getArrowWidth(k._private.style.width.pxValue) * b.arrowShapeHeight,
                                Ha = Fa * Ga,
                                Ia = a.math.distance({
                                    x: O.cp2x,
                                    y: O.cp2y
                                }, {
                                    x: O.startX,
                                    y: O.startY
                                }),
                                Ja = Ha > Ia,
                                Ka = a.math.distance({
                                    x: O.cp2x,
                                    y: O.cp2y
                                }, {
                                    x: O.endX,
                                    y: O.endY
                                }),
                                La = Ha > Ka;
                            if ("bezier" === O.edgeType) {
                                var Ma = !1;
                                if (Ba || Ca || Ja) {
                                    Ma = !0;
                                    var Na = {
                                            x: O.cp2x - r.x,
                                            y: O.cp2y - r.y
                                        },
                                        Oa = Math.sqrt(Na.x * Na.x + Na.y * Na.y),
                                        Pa = {
                                            x: Na.x / Oa,
                                            y: Na.y / Oa
                                        },
                                        Qa = Math.max(t, u),
                                        Ra = {
                                            x: O.cp2x + 2 * Pa.x * Qa,
                                            y: O.cp2y + 2 * Pa.y * Qa
                                        },
                                        Sa = x.intersectLine(r.x, r.y, t, u, Ra.x, Ra.y, z / 2);
                                    Ja ? (O.cp2x = O.cp2x + Pa.x * (Ha - Ia), O.cp2y = O.cp2y + Pa.y * (Ha - Ia)) : (O.cp2x = Sa[0] + Pa.x * Ha, O.cp2y = Sa[1] + Pa.y * Ha)
                                }
                                if (Da || Ea || La) {
                                    Ma = !0;
                                    var Na = {
                                            x: O.cp2x - s.x,
                                            y: O.cp2y - s.y
                                        },
                                        Oa = Math.sqrt(Na.x * Na.x + Na.y * Na.y),
                                        Pa = {
                                            x: Na.x / Oa,
                                            y: Na.y / Oa
                                        },
                                        Qa = Math.max(t, u),
                                        Ra = {
                                            x: O.cp2x + 2 * Pa.x * Qa,
                                            y: O.cp2y + 2 * Pa.y * Qa
                                        },
                                        Ta = y.intersectLine(s.x, s.y, v, w, Ra.x, Ra.y, A / 2);
                                    La ? (O.cp2x = O.cp2x + Pa.x * (Ha - Ka), O.cp2y = O.cp2y + Pa.y * (Ha - Ka)) : (O.cp2x = Ta[0] + Pa.x * Ha, O.cp2y = Ta[1] + Pa.y * Ha)
                                }
                                Ma && this.findEndpoints(k)
                            } else "straight" === O.edgeType && (O.midX = (Z + fa) / 2, O.midY = (_ + ha) / 2);
                            this.projectBezier(k), this.recalculateEdgeLabelProjection(k)
                        }
                    }
                }
                for (var j = 0; j < i.length; j++) {
                    var k = i[j],
                        Ua = k._private,
                        Va = Ua.rscratch,
                        O = Va;
                    if (!Va.haystack) {
                        var Wa = 2 * Math.random() * Math.PI;
                        Va.source = {
                            x: Math.cos(Wa),
                            y: Math.sin(Wa)
                        };
                        var Wa = 2 * Math.random() * Math.PI;
                        Va.target = {
                            x: Math.cos(Wa),
                            y: Math.sin(Wa)
                        }
                    }
                    var p = Ua.source,
                        q = Ua.target,
                        r = p._private.position,
                        s = q._private.position,
                        t = p.width(),
                        v = q.width(),
                        u = p.height(),
                        w = q.height(),
                        Qa = l["haystack-radius"].value,
                        Xa = Qa / 2;
                    O.haystackPts = [O.source.x * t * Xa + r.x, O.source.y * u * Xa + r.y, O.target.x * v * Xa + s.x, O.target.y * w * Xa + s.y], Va.edgeType = "haystack", Va.haystack = !0, this.recalculateEdgeLabelProjection(k)
                }
                return g
            }
        }, c.findEndpoints = function(c) {
            var d, e = c.source()[0],
                f = c.target()[0],
                g = c._private.style["target-arrow-shape"].value,
                h = c._private.style["source-arrow-shape"].value,
                i = f._private.style["border-width"].pxValue,
                j = e._private.style["border-width"].pxValue,
                k = c._private.rscratch;
            if ("self" == k.edgeType || "compound" == k.edgeType) {
                var l = [k.cp2cx, k.cp2cy];
                d = b.nodeShapes[this.getNodeShape(f)].intersectLine(f._private.position.x, f._private.position.y, this.getNodeWidth(f), this.getNodeHeight(f), l[0], l[1], i / 2);
                var m = a.math.shortenIntersection(d, l, b.arrowShapes[g].spacing(c)),
                    n = a.math.shortenIntersection(d, l, b.arrowShapes[g].gap(c));
                k.endX = n[0], k.endY = n[1], k.arrowEndX = m[0], k.arrowEndY = m[1];
                var l = [k.cp2ax, k.cp2ay];
                d = b.nodeShapes[this.getNodeShape(e)].intersectLine(e._private.position.x, e._private.position.y, this.getNodeWidth(e), this.getNodeHeight(e), l[0], l[1], j / 2);
                var o = a.math.shortenIntersection(d, l, b.arrowShapes[h].spacing(c)),
                    p = a.math.shortenIntersection(d, l, b.arrowShapes[h].gap(c));
                k.startX = p[0], k.startY = p[1], k.arrowStartX = o[0], k.arrowStartY = o[1]
            } else if ("straight" == k.edgeType) {
                d = b.nodeShapes[this.getNodeShape(f)].intersectLine(f._private.position.x, f._private.position.y, this.getNodeWidth(f), this.getNodeHeight(f), e.position().x, e.position().y, i / 2), 0 === d.length ? k.noArrowPlacement = !0 : k.noArrowPlacement = !1;
                var m = a.math.shortenIntersection(d, [e.position().x, e.position().y], b.arrowShapes[g].spacing(c)),
                    n = a.math.shortenIntersection(d, [e.position().x, e.position().y], b.arrowShapes[g].gap(c));
                k.endX = n[0], k.endY = n[1], k.arrowEndX = m[0], k.arrowEndY = m[1], d = b.nodeShapes[this.getNodeShape(e)].intersectLine(e._private.position.x, e._private.position.y, this.getNodeWidth(e), this.getNodeHeight(e), f.position().x, f.position().y, j / 2), 0 === d.length ? k.noArrowPlacement = !0 : k.noArrowPlacement = !1;
                var o = a.math.shortenIntersection(d, [f.position().x, f.position().y], b.arrowShapes[h].spacing(c)),
                    p = a.math.shortenIntersection(d, [f.position().x, f.position().y], b.arrowShapes[h].gap(c));
                k.startX = p[0], k.startY = p[1], k.arrowStartX = o[0], k.arrowStartY = o[1], a.is.number(k.startX) && a.is.number(k.startY) && a.is.number(k.endX) && a.is.number(k.endY) ? k.badLine = !1 : k.badLine = !0
            } else if ("bezier" == k.edgeType) {
                var l = [k.cp2x, k.cp2y];
                d = b.nodeShapes[this.getNodeShape(f)].intersectLine(f._private.position.x, f._private.position.y, this.getNodeWidth(f), this.getNodeHeight(f), l[0], l[1], i / 2);
                var m = a.math.shortenIntersection(d, l, b.arrowShapes[g].spacing(c)),
                    n = a.math.shortenIntersection(d, l, b.arrowShapes[g].gap(c));
                k.endX = n[0], k.endY = n[1], k.arrowEndX = m[0], k.arrowEndY = m[1], d = b.nodeShapes[this.getNodeShape(e)].intersectLine(e._private.position.x, e._private.position.y, this.getNodeWidth(e), this.getNodeHeight(e), l[0], l[1], j / 2);
                var o = a.math.shortenIntersection(d, l, b.arrowShapes[h].spacing(c)),
                    p = a.math.shortenIntersection(d, l, b.arrowShapes[h].gap(c));
                k.startX = p[0], k.startY = p[1], k.arrowStartX = o[0], k.arrowStartY = o[1]
            } else if (k.isArcEdge) return
        }, c.findEdges = function(a) {
            for (var b = this.getCachedEdges(), c = {}, d = [], e = 0; e < a.length; e++) c[a[e]._private.data.id] = a[e];
            for (var e = 0; e < b.length; e++)(c[b[e]._private.data.source] || c[b[e]._private.data.target]) && d.push(b[e]);
            return d
        }, c.getArrowWidth = c.getArrowHeight = function(a) {
            var b = this.arrowWidthCache = this.arrowWidthCache || {},
                c = b[a];
            return c ? c : (c = Math.max(Math.pow(13.37 * a, .9), 29), b[a] = c, c)
        }
    }(cytoscape), function(a) {
        "use strict";
        var b = a("renderer", "canvas"),
            c = b.prototype;
        c.drawEdge = function(a, c, d) {
            var e = c._private.rscratch,
                f = b.usePaths();
            if (!e.badBezier && ("bezier" !== e.edgeType && "straight" !== e.edgeType || !isNaN(e.startX))) {
                var g = c._private.style;
                if (!(g.width.pxValue <= 0)) {
                    var h = g["overlay-padding"].pxValue,
                        i = g["overlay-opacity"].value,
                        j = g["overlay-color"].value;
                    if (d) {
                        if (0 === i) return;
                        this.strokeStyle(a, j[0], j[1], j[2], i), a.lineCap = "round", "self" != c._private.rscratch.edgeType || f || (a.lineCap = "butt")
                    } else {
                        var k = g["line-color"].value;
                        this.strokeStyle(a, k[0], k[1], k[2], g.opacity.value), a.lineCap = "butt"
                    }
                    var l, m, n, o;
                    n = l = c._private.source, o = m = c._private.target;
                    var p = g.width.pxValue + (d ? 2 * h : 0),
                        q = d ? "solid" : g["line-style"].value;
                    a.lineWidth = p;
                    var r = g["shadow-blur"].pxValue,
                        s = g["shadow-opacity"].value,
                        t = g["shadow-color"].value,
                        u = g["shadow-offset-x"].pxValue,
                        v = g["shadow-offset-y"].pxValue;
                    if (this.shadowStyle(a, t, d ? 0 : s, r, u, v), "haystack" === e.edgeType) this.drawStyledEdge(c, a, e.haystackPts, q, p);
                    else if ("self" === e.edgeType || "compound" === e.edgeType) {
                        var w = c._private.rscratch,
                            x = [w.startX, w.startY, w.cp2ax, w.cp2ay, w.selfEdgeMidX, w.selfEdgeMidY, w.selfEdgeMidX, w.selfEdgeMidY, w.cp2cx, w.cp2cy, w.endX, w.endY];
                        this.drawStyledEdge(c, a, x, q, p)
                    } else if ("straight" === e.edgeType) {
                        var y = m._private.position.x - l._private.position.x,
                            z = m._private.position.y - l._private.position.y,
                            A = e.endX - e.startX,
                            B = e.endY - e.startY;
                        if (0 > y * A + z * B) e.straightEdgeTooShort = !0;
                        else {
                            var w = e;
                            this.drawStyledEdge(c, a, [w.startX, w.startY, w.endX, w.endY], q, p), e.straightEdgeTooShort = !1
                        }
                    } else {
                        var w = e;
                        this.drawStyledEdge(c, a, [w.startX, w.startY, w.cp2x, w.cp2y, w.endX, w.endY], q, p)
                    }
                    "haystack" === e.edgeType ? this.drawArrowheads(a, c, d) : e.noArrowPlacement !== !0 && void 0 !== e.startX && this.drawArrowheads(a, c, d), this.shadowStyle(a, "transparent", 0)
                }
            }
        }, c.drawStyledEdge = function(a, c, d, e, f) {
            var g, h = a._private.rscratch,
                i = c,
                j = !1,
                k = b.usePaths();
            if (k) {
                for (var l = d, m = h.pathCacheKey && l.length === h.pathCacheKey.length, n = m, o = 0; n && o < l.length; o++) h.pathCacheKey[o] !== l[o] && (n = !1);
                n ? (g = c = h.pathCache, j = !0) : (g = c = new Path2D, h.pathCacheKey = l, h.pathCache = g)
            }
            if (i.setLineDash) switch (e) {
                case "dotted":
                    i.setLineDash([1, 1]);
                    break;
                case "dashed":
                    i.setLineDash([6, 3]);
                    break;
                case "solid":
                    i.setLineDash([])
            }
            j || (c.beginPath && c.beginPath(), c.moveTo(d[0], d[1]), 6 !== d.length || h.badBezier ? 12 !== d.length || h.badBezier ? 4 !== d.length || h.badLine || c.lineTo(d[2], d[3]) : (c.quadraticCurveTo(d[2], d[3], d[4], d[5]), c.quadraticCurveTo(d[8], d[9], d[10], d[11])) : c.quadraticCurveTo(d[2], d[3], d[4], d[5])), c = i, k ? c.stroke(g) : c.stroke(), c.setLineDash && c.setLineDash([])
        }, c.drawArrowheads = function(a, b, c) {
            function d(c, d, e, f, g) {
                var h = p[c + "-arrow-shape"].value;
                if ("none" !== h) {
                    var i = a.globalCompositeOperation,
                        j = "hollow" === p[c + "-arrow-fill"].value ? "both" : "filled",
                        k = p[c + "-arrow-fill"].value;
                    "half-triangle-overshot" === h && (k = "hollow", j = "hollow"), (1 !== p.opacity.value || "hollow" === k) && (a.globalCompositeOperation = "destination-out", l.fillStyle(a, 255, 255, 255, 1), l.strokeStyle(a, 255, 255, 255, 1), l.drawArrowShape(b, c, a, j, p.width.pxValue, p[c + "-arrow-shape"].value, d, e, f, g), a.globalCompositeOperation = i);
                    var m = p[c + "-arrow-color"].value;
                    l.fillStyle(a, m[0], m[1], m[2], p.opacity.value), l.strokeStyle(a, m[0], m[1], m[2], p.opacity.value), l.drawArrowShape(b, c, a, k, p.width.pxValue, p[c + "-arrow-shape"].value, d, e, f, g)
                }
            }
            if (!c) {
                var e, f, g, h, i, j, k = b._private.rscratch,
                    l = this,
                    m = "haystack" === k.edgeType,
                    n = b.source().position(),
                    o = b.target().position();
                m ? (g = k.haystackPts[0], h = k.haystackPts[1], i = k.haystackPts[2], j = k.haystackPts[3]) : (g = k.arrowStartX, h = k.arrowStartY, i = k.arrowEndX, j = k.arrowEndY);
                var p = b._private.style;
                e = g - n.x, f = h - n.y, m || isNaN(g) || isNaN(h) || isNaN(e) || isNaN(f) || d("source", g, h, e, f);
                var q = k.midX,
                    r = k.midY;
                m && (q = (g + i) / 2, r = (h + j) / 2), e = g - i, f = h - j, "self" === k.edgeType && (e = 1, f = -1), isNaN(q) || isNaN(r) || d("mid-target", q, r, e, f), e *= -1, f *= -1, isNaN(q) || isNaN(r) || d("mid-source", q, r, e, f), e = i - o.x, f = j - o.y, m || isNaN(i) || isNaN(j) || isNaN(e) || isNaN(f) || d("target", i, j, e, f)
            }
        }, c.drawArrowShape = function(a, c, d, e, f, g, h, i, j, k) {
            var l, m = b.usePaths(),
                n = a._private.rscratch,
                o = !1,
                p = d,
                q = {
                    x: h,
                    y: i
                },
                r = Math.asin(k / Math.sqrt(j * j + k * k));
            0 > j ? r += Math.PI / 2 : r = -(Math.PI / 2 + r);
            var s = this.getArrowWidth(f),
                t = b.arrowShapes[g];
            if (m) {
                var u = s + "$" + g + "$" + r + "$" + h + "$" + i;
                n.arrowPathCacheKey = n.arrowPathCacheKey || {}, n.arrowPathCache = n.arrowPathCache || {};
                var v = n.arrowPathCacheKey[c] === u;
                v ? (l = d = n.arrowPathCache[c], o = !0) : (l = d = new Path2D, n.arrowPathCacheKey[c] = u, n.arrowPathCache[c] = l)
            }
            d.beginPath && d.beginPath(), o || t.draw(d, s, r, q), !t.leavePathOpen && d.closePath && d.closePath(), d = p, ("filled" === e || "both" === e) && (m ? d.fill(l) : d.fill()), ("hollow" === e || "both" === e) && (d.lineWidth = t.matchEdgeWidth ? f : 1, d.lineJoin = "miter", m ? d.stroke(l) : d.stroke())
        }
    }(cytoscape), function(a) {
        "use strict";
        var b = a("renderer", "canvas"),
            c = b.prototype;
        c.getCachedImage = function(a, b) {
            var c = this,
                d = c.imageCache = c.imageCache || {};
            if (d[a] && d[a].image) return d[a].image;
            var e = d[a] = d[a] || {},
                f = e.image = new Image;
            return f.addEventListener("load", b), f.src = a, f
        }, c.safeDrawImage = function(a, c, d, e, f, g, h, i, j, k) {
            var l = this;
            try {
                a.drawImage(c, d, e, f, g, h, i, j, k)
            } catch (m) {
                l.data.canvasNeedsRedraw[b.NODE] = !0, l.data.canvasNeedsRedraw[b.DRAG] = !0, l.drawingImage = !0, l.redraw()
            }
        }, c.drawInscribedImage = function(a, c, d) {
            var e = this,
                f = d._private.position.x,
                g = d._private.position.y,
                h = d._private.style,
                i = h["background-fit"].value,
                j = h["background-position-x"],
                k = h["background-position-y"],
                l = h["background-repeat"].value,
                m = d.width(),
                n = d.height(),
                o = d._private.rscratch,
                p = h["background-clip"].value,
                q = "node" === p,
                r = h["background-image-opacity"].value,
                s = c.width,
                t = c.height;
            if (0 !== s && 0 !== t) {
                var u = h["background-width"];
                "auto" !== u.value && (s = "%" === u.units ? u.value / 100 * m : u.pxValue);
                var v = h["background-height"];
                if ("auto" !== v.value && (t = "%" === v.units ? v.value / 100 * n : v.pxValue), 0 !== s && 0 !== t) {
                    if ("contain" === i) {
                        var w = Math.min(m / s, n / t);
                        s *= w, t *= w
                    } else if ("cover" === i) {
                        var w = Math.max(m / s, n / t);
                        s *= w, t *= w
                    }
                    var x = f - m / 2;
                    x += "%" === j.units ? (m - s) * j.value / 100 : j.pxValue;
                    var y = g - n / 2;
                    y += "%" === k.units ? (n - t) * k.value / 100 : k.pxValue, o.pathCache && (x -= f, y -= g, f = 0, g = 0);
                    var z = a.globalAlpha;
                    if (a.globalAlpha = r, "no-repeat" === l) q && (a.save(), o.pathCache ? a.clip(o.pathCache) : (b.nodeShapes[e.getNodeShape(d)].drawPath(a, f, g, m, n), a.clip())), e.safeDrawImage(a, c, 0, 0, c.width, c.height, x, y, s, t), q && a.restore();
                    else {
                        var A = a.createPattern(c, l);
                        a.fillStyle = A, b.nodeShapes[e.getNodeShape(d)].drawPath(a, f, g, m, n), a.translate(x, y), a.fill(), a.translate(-x, -y)
                    }
                    a.globalAlpha = z
                }
            }
        }
    }(cytoscape), function(a) {
        "use strict";

        function b(a, b, c, d, e, f) {
            var f = f || 5;
            a.beginPath(), a.moveTo(b + f, c), a.lineTo(b + d - f, c), a.quadraticCurveTo(b + d, c, b + d, c + f), a.lineTo(b + d, c + e - f), a.quadraticCurveTo(b + d, c + e, b + d - f, c + e), a.lineTo(b + f, c + e), a.quadraticCurveTo(b, c + e, b, c + e - f), a.lineTo(b, c + f), a.quadraticCurveTo(b, c, b + f, c), a.closePath(), a.fill()
        }
        var c = a("renderer", "canvas"),
            d = c.prototype;
        d.drawEdgeText = function(b, c) {
            var d = c._private.style.content.strValue;
            if (d && !d.match(/^\s+$/) && (!this.hideEdgesOnViewport || !(this.dragData.didDrag || this.pinching || this.hoverData.dragging || this.data.wheel || this.swipePanning))) {
                var e = c._private.style["font-size"].pxValue * c.cy().zoom(),
                    f = c._private.style["min-zoomed-font-size"].pxValue;
                if (!(f > e)) {
                    b.textAlign = "center", b.textBaseline = "middle";
                    var g = c._private.rscratch;
                    if (a.is.number(g.labelX) && a.is.number(g.labelY)) {
                        var h, i, j, k = c._private.style,
                            l = "autorotate" === k["edge-text-rotation"].strValue;
                        if (l) {
                            switch (g.edgeType) {
                                case "haystack":
                                    i = g.haystackPts[2] - g.haystackPts[0], j = g.haystackPts[3] - g.haystackPts[1];
                                    break;
                                default:
                                    i = g.endX - g.startX, j = g.endY - g.startY
                            }
                            h = Math.atan(j / i), b.translate(g.labelX, g.labelY), b.rotate(h), this.drawText(b, c, 0, 0), b.rotate(-h), b.translate(-g.labelX, -g.labelY)
                        } else this.drawText(b, c, g.labelX, g.labelY)
                    }
                }
            }
        }, d.drawNodeText = function(b, c) {
            var d = c._private.style.content.strValue;
            if (d && !d.match(/^\s+$/)) {
                var e = c._private.style["font-size"].pxValue * c.cy().zoom(),
                    f = c._private.style["min-zoomed-font-size"].pxValue;
                if (!(f > e)) {
                    var g = c._private.style["text-halign"].strValue,
                        h = c._private.style["text-valign"].strValue,
                        i = c._private.rscratch;
                    if (a.is.number(i.labelX) && a.is.number(i.labelY)) {
                        switch (g) {
                            case "left":
                                b.textAlign = "right";
                                break;
                            case "right":
                                b.textAlign = "left";
                                break;
                            default:
                                b.textAlign = "center"
                        }
                        switch (h) {
                            case "top":
                                b.textBaseline = "bottom";
                                break;
                            case "bottom":
                                b.textBaseline = "top";
                                break;
                            default:
                                b.textBaseline = "middle"
                        }
                        this.drawText(b, c, i.labelX, i.labelY)
                    }
                }
            }
        }, d.getFontCache = function(a) {
            var b;
            this.fontCaches = this.fontCaches || [];
            for (var c = 0; c < this.fontCaches.length; c++)
                if (b = this.fontCaches[c], b.context === a) return b;
            return b = {
                context: a
            }, this.fontCaches.push(b), b
        }, d.setupTextStyle = function(a, b) {
            var c = b.effectiveOpacity(),
                d = b._private.style,
                e = d["font-style"].strValue,
                f = d["font-size"].pxValue + "px",
                g = d["font-family"].strValue,
                h = d["font-weight"].strValue,
                i = d["text-opacity"].value * d.opacity.value * c,
                j = d["text-outline-opacity"].value * i,
                k = d.color.value,
                l = d["text-outline-color"].value,
                m = d["text-shadow-blur"].pxValue,
                n = d["text-shadow-opacity"].value,
                o = d["text-shadow-color"].value,
                p = d["text-shadow-offset-x"].pxValue,
                q = d["text-shadow-offset-y"].pxValue,
                r = b._private.fontKey,
                s = this.getFontCache(a);
            s.key !== r && (a.font = e + " " + h + " " + f + " " + g, s.key = r);
            var t = this.getLabelText(b);
            return a.lineJoin = "round", this.fillStyle(a, k[0], k[1], k[2], i), this.strokeStyle(a, l[0], l[1], l[2], j), this.shadowStyle(a, o, n, m, p, q), t
        }, d.drawText = function(a, c, d, e) {
            var f = c._private,
                g = f.style,
                h = f.rstyle,
                i = f.rscratch,
                j = c.effectiveOpacity();
            if (0 !== j && 0 !== g["text-opacity"].value) {
                var k = this.setupTextStyle(a, c),
                    l = g["text-halign"].value,
                    m = g["text-valign"].value;
                if (c.isEdge() && (l = "center", m = "center"), null != k && !isNaN(d) && !isNaN(e)) {
                    var n = g["text-background-opacity"].value,
                        o = g["text-border-opacity"].value,
                        p = g["text-border-width"].pxValue;
                    if (n > 0 || p > 0 && o > 0) {
                        var q = 4 + p / 2;
                        c.isNode() && ("top" === m ? e -= q : "bottom" === m && (e += q), "left" === l ? d -= q : "right" === l && (d += q));
                        var r = h.labelWidth,
                            s = h.labelHeight,
                            t = d;
                        l && ("center" == l ? t -= r / 2 : "left" == l && (t -= r));
                        var u = e;
                        if (c.isNode() ? "top" == m ? u -= s : "center" == m && (u -= s / 2) : u -= s / 2, "autorotate" === g["edge-text-rotation"].strValue ? (e = 0, r += 4, t = d - r / 2, u = e - s / 2) : (t -= q, u -= q, s += 2 * q, r += 2 * q), n > 0) {
                            var v = a.fillStyle,
                                w = g["text-background-color"].value;
                            a.fillStyle = "rgba(" + w[0] + "," + w[1] + "," + w[2] + "," + n * j + ")";
                            var x = g["text-background-shape"].strValue;
                            "roundrectangle" == x ? b(a, t, u, r, s, 2) : a.fillRect(t, u, r, s), a.fillStyle = v
                        }
                        if (p > 0 && o > 0) {
                            var y = a.strokeStyle,
                                z = a.lineWidth,
                                A = g["text-border-color"].value,
                                B = g["text-border-style"].value;
                            if (a.strokeStyle = "rgba(" + A[0] + "," + A[1] + "," + A[2] + "," + o * j + ")", a.lineWidth = p, a.setLineDash) switch (B) {
                                case "dotted":
                                    a.setLineDash([1, 1]);
                                    break;
                                case "dashed":
                                    a.setLineDash([4, 2]);
                                    break;
                                case "double":
                                    a.lineWidth = p / 4, a.setLineDash([]);
                                    break;
                                case "solid":
                                    a.setLineDash([])
                            }
                            if (a.strokeRect(t, u, r, s), "double" === B) {
                                var C = p / 2;
                                a.strokeRect(t + C, u + C, r - 2 * C, s - 2 * C)
                            }
                            a.setLineDash && a.setLineDash([]), a.lineWidth = z, a.strokeStyle = y
                        }
                    }
                    var D = 2 * g["text-outline-width"].pxValue;
                    if (D > 0 && (a.lineWidth = D), "wrap" === g["text-wrap"].value) {
                        var E = i.labelWrapCachedLines,
                            F = h.labelHeight / E.length;
                        switch (m) {
                            case "top":
                                e -= (E.length - 1) * F;
                                break;
                            case "bottom":
                                break;
                            default:
                            case "center":
                                e -= (E.length - 1) * F / 2
                        }
                        for (var G = 0; G < E.length; G++) D > 0 && a.strokeText(E[G], d, e), a.fillText(E[G], d, e), e += F
                    } else D > 0 && a.strokeText(k, d, e), a.fillText(k, d, e);
                    this.shadowStyle(a, "transparent", 0)
                }
            }
        }
    }(cytoscape), function(a) {
        "use strict";
        var b = a("renderer", "canvas"),
            c = b.prototype;
        c.drawNode = function(a, c, d) {
            var e, f, g = this,
                h = c._private.style,
                i = c._private.rscratch,
                j = c._private,
                k = j.position;
            if (void 0 !== k.x && void 0 !== k.y) {
                var l, m = b.usePaths(),
                    n = a,
                    o = !1,
                    p = h["overlay-padding"].pxValue,
                    q = h["overlay-opacity"].value,
                    r = h["overlay-color"].value;
                if (!d || 0 !== q) {
                    var s = c.effectiveOpacity();
                    if (0 !== s)
                        if (e = this.getNodeWidth(c), f = this.getNodeHeight(c), a.lineWidth = h["border-width"].pxValue, void 0 !== d && d) q > 0 && (this.fillStyle(a, r[0], r[1], r[2], q), b.nodeShapes.roundrectangle.drawPath(a, c._private.position.x, c._private.position.y, e + 2 * p, f + 2 * p), a.fill());
                        else {
                            var t, u = h["background-image"].value[2] || h["background-image"].value[1];
                            if (void 0 !== u) {
                                t = this.getCachedImage(u, function() {
                                    g.data.canvasNeedsRedraw[b.NODE] = !0, g.data.canvasNeedsRedraw[b.DRAG] = !0, g.drawingImage = !0, g.redraw()
                                });
                                var v = j.backgrounding;
                                j.backgrounding = !t.complete, v !== j.backgrounding && c.updateStyle(!1)
                            }
                            var w = h["background-color"].value,
                                x = h["border-color"].value,
                                y = h["border-style"].value;
                            this.fillStyle(a, w[0], w[1], w[2], h["background-opacity"].value * s), this.strokeStyle(a, x[0], x[1], x[2], h["border-opacity"].value * s);
                            var z = h["shadow-blur"].pxValue,
                                A = h["shadow-opacity"].value,
                                B = h["shadow-color"].value,
                                C = h["shadow-offset-x"].pxValue,
                                D = h["shadow-offset-y"].pxValue;
                            if (this.shadowStyle(a, B, A, z, C, D), a.lineJoin = "miter", a.setLineDash) switch (y) {
                                case "dotted":
                                    a.setLineDash([1, 1]);
                                    break;
                                case "dashed":
                                    a.setLineDash([4, 2]);
                                    break;
                                case "solid":
                                case "double":
                                    a.setLineDash([])
                            }
                            var E = h.shape.strValue;
                            if (m) {
                                var F = E + "$" + e + "$" + f;
                                a.translate(k.x, k.y), i.pathCacheKey === F ? (l = a = i.pathCache, o = !0) : (l = a = new Path2D, i.pathCacheKey = F, i.pathCache = l)
                            }
                            if (!o) {
                                var G = k;
                                m && (G = {
                                    x: 0,
                                    y: 0
                                }), b.nodeShapes[this.getNodeShape(c)].drawPath(a, G.x, G.y, e, f)
                            }
                            a = n, m ? a.fill(l) : a.fill(), this.shadowStyle(a, "transparent", 0), void 0 !== u && t.complete && this.drawInscribedImage(a, t, c);
                            var H = h["background-blacken"].value,
                                I = h["border-width"].pxValue;
                            if (this.hasPie(c) && (this.drawPie(a, c, s), (0 !== H || 0 !== I) && (m || b.nodeShapes[this.getNodeShape(c)].drawPath(a, k.x, k.y, e, f))), H > 0 ? (this.fillStyle(a, 0, 0, 0, H), m ? a.fill(l) : a.fill()) : 0 > H && (this.fillStyle(a, 255, 255, 255, -H), m ? a.fill(l) : a.fill()), I > 0 && (m ? a.stroke(l) : a.stroke(), "double" === y)) {
                                a.lineWidth = h["border-width"].pxValue / 3;
                                var J = a.globalCompositeOperation;
                                a.globalCompositeOperation = "destination-out", m ? a.stroke(l) : a.stroke(), a.globalCompositeOperation = J
                            }
                            m && a.translate(-k.x, -k.y), a.setLineDash && a.setLineDash([])
                        }
                }
            }
        }, c.hasPie = function(a) {
            return a = a[0], a._private.hasPie
        }, c.drawPie = function(c, d, e) {
            d = d[0];
            var f = d._private,
                g = f.style,
                h = g["pie-size"],
                i = this.getNodeWidth(d),
                j = this.getNodeHeight(d),
                k = f.position.x,
                l = f.position.y,
                m = Math.min(i, j) / 2,
                n = 0,
                o = b.usePaths();
            o && (k = 0, l = 0), "%" === h.units ? m = m * h.value / 100 : void 0 !== h.pxValue && (m = h.pxValue / 2);
            for (var p = 1; p <= a.style.pieBackgroundN; p++) {
                var q = g["pie-" + p + "-background-size"].value,
                    r = g["pie-" + p + "-background-color"].value,
                    s = g["pie-" + p + "-background-opacity"].value * e,
                    t = q / 100;
                t + n > 1 && (t = 1 - n);
                var u = 1.5 * Math.PI + 2 * Math.PI * n,
                    v = 2 * Math.PI * t,
                    w = u + v;
                0 === q || n >= 1 || n + t > 1 || (c.beginPath(), c.moveTo(k, l), c.arc(k, l, m, u, w), c.closePath(), this.fillStyle(c, r[0], r[1], r[2], s), c.fill(), n += t)
            }
        }
    }(cytoscape), function(a) {
        "use strict";
        var b = a("renderer", "canvas"),
            c = b,
            d = b.prototype;
        d.getPixelRatio = function() {
            var a = this.data.contexts[0];
            if (null != this.forcedPixelRatio) return this.forcedPixelRatio;
            var b = a.backingStorePixelRatio || a.webkitBackingStorePixelRatio || a.mozBackingStorePixelRatio || a.msBackingStorePixelRatio || a.oBackingStorePixelRatio || a.backingStorePixelRatio || 1;
            return (window.devicePixelRatio || 1) / b
        }, d.paintCache = function(a) {
            for (var b, c = this.paintCaches = this.paintCaches || [], d = !0, e = 0; e < c.length; e++)
                if (b = c[e], b.context === a) {
                    d = !1;
                    break
                }
            return d && (b = {
                context: a
            }, c.push(b)), b
        }, d.fillStyle = function(a, b, c, d, e) {
            a.fillStyle = "rgba(" + b + "," + c + "," + d + "," + e + ")"
        }, d.strokeStyle = function(a, b, c, d, e) {
            a.strokeStyle = "rgba(" + b + "," + c + "," + d + "," + e + ")"
        }, d.shadowStyle = function(a, b, c, d, e, f) {
            var g = this.data.cy.zoom(),
                h = this.paintCache(a);
            (0 !== h.shadowOpacity || 0 !== c) && (h.shadowOpacity = c, c > 0 ? (a.shadowBlur = d * g, a.shadowColor = "rgba(" + b[0] + "," + b[1] + "," + b[2] + "," + c + ")", a.shadowOffsetX = e * g, a.shadowOffsetY = f * g) : (a.shadowBlur = 0, a.shadowColor = "transparent"))
        }, d.matchCanvasSize = function(a) {
            var d = this.data,
                e = a.clientWidth,
                f = a.clientHeight,
                g = this.getPixelRatio(),
                h = this.motionBlurPxRatio;
            (a === this.data.bufferCanvases[c.MOTIONBLUR_BUFFER_NODE] || a === this.data.bufferCanvases[c.MOTIONBLUR_BUFFER_DRAG]) && (g = h);
            var i, j = e * g,
                k = f * g;
            if (j !== this.canvasWidth || k !== this.canvasHeight) {
                this.fontCaches = null;
                var l = d.canvasContainer;
                l.style.width = e + "px", l.style.height = f + "px";
                for (var m = 0; m < b.CANVAS_LAYERS; m++) i = d.canvases[m], (i.width !== j || i.height !== k) && (i.width = j, i.height = k, i.style.width = e + "px", i.style.height = f + "px");
                for (var m = 0; m < b.BUFFER_COUNT; m++) i = d.bufferCanvases[m], (i.width !== j || i.height !== k) && (i.width = j, i.height = k, i.style.width = e + "px", i.style.height = f + "px");
                this.textureMult = 1, 1 >= g && (i = d.bufferCanvases[b.TEXTURE_BUFFER], this.textureMult = 2, i.width = j * this.textureMult, i.height = k * this.textureMult), this.canvasWidth = j, this.canvasHeight = k
            }
        }, d.renderTo = function(a, b, c, d) {
            this.redraw({
                forcedContext: a,
                forcedZoom: b,
                forcedPan: c,
                drawAllLayers: !0,
                forcedPxRatio: d
            })
        }, d.timeToRender = function() {
            return this.redrawTotalTime / this.redrawCount
        }, b.minRedrawLimit = 1e3 / 60, b.maxRedrawLimit = 1e3, b.motionBlurDelay = 100, d.redraw = function(d) {
            function e() {
                function d(a, b, c, d, e) {
                    var f = a.globalCompositeOperation;
                    a.globalCompositeOperation = "destination-out", k.fillStyle(a, 255, 255, 255, k.motionBlurTransparency), a.fillRect(b, c, d, e), a.globalCompositeOperation = f
                }

                function e(a, b) {
                    var e, h, l, m;
                    k.clearingMotionBlur || a !== n.bufferContexts[c.MOTIONBLUR_BUFFER_NODE] && a !== n.bufferContexts[c.MOTIONBLUR_BUFFER_DRAG] ? (e = B, h = z, l = k.canvasWidth, m = k.canvasHeight) : (e = {
                        x: A.x * r,
                        y: A.y * r
                    }, h = y * r, l = k.canvasWidth * r, m = k.canvasHeight * r), a.setTransform(1, 0, 0, 1, 0, 0), "motionBlur" === b ? d(a, 0, 0, l, m) : f || void 0 !== b && !b || a.clearRect(0, 0, l, m), g || (a.translate(e.x, e.y), a.scale(h, h)), j && a.translate(j.x, j.y), i && a.scale(i, i)
                }

                function u(a, b) {
                    for (var c = a.eles, d = 0; d < c.length; d++) {
                        var e = c[d];
                        e.isNode() ? (k.drawNode(b, e), P || k.drawNodeText(b, e), k.drawNode(b, e, !0)) : O || (k.drawEdge(b, e), P || k.drawEdgeText(b, e), k.drawEdge(b, e, !0))
                    }
                }
                k.textureDrawLastFrame && !p && (o[c.NODE] = !0, o[c.SELECT_BOX] = !0);
                var w = k.getCachedEdges(),
                    x = m.style()._private.coreStyle,
                    y = m.zoom(),
                    z = void 0 !== i ? i : y,
                    A = m.pan(),
                    B = {
                        x: A.x,
                        y: A.y
                    },
                    D = {
                        zoom: y,
                        pan: {
                            x: A.x,
                            y: A.y
                        }
                    },
                    E = k.prevViewport,
                    F = void 0 === E || D.zoom !== E.zoom || D.pan.x !== E.pan.x || D.pan.y !== E.pan.y;
                F || t && !s || (k.motionBlurPxRatio = 1), j && (B = j), z *= l, B.x *= l, B.y *= l;
                var G = {
                    drag: {
                        nodes: [],
                        edges: [],
                        eles: []
                    },
                    nondrag: {
                        nodes: [],
                        edges: [],
                        eles: []
                    }
                };
                if (p || (k.textureDrawLastFrame = !1), p) {
                    k.textureDrawLastFrame = !0;
                    var H;
                    if (!k.textureCache) {
                        k.textureCache = {}, H = k.textureCache.bb = m.elements().boundingBox(), k.textureCache.texture = k.data.bufferCanvases[b.TEXTURE_BUFFER];
                        var I = k.data.bufferContexts[b.TEXTURE_BUFFER];
                        I.setTransform(1, 0, 0, 1, 0, 0), I.clearRect(0, 0, k.canvasWidth * k.textureMult, k.canvasHeight * k.textureMult), k.redraw({
                            forcedContext: I,
                            drawOnlyNodeLayer: !0,
                            forcedPxRatio: l * k.textureMult
                        });
                        var D = k.textureCache.viewport = {
                            zoom: m.zoom(),
                            pan: m.pan(),
                            width: k.canvasWidth,
                            height: k.canvasHeight
                        };
                        D.mpan = {
                            x: (0 - D.pan.x) / D.zoom,
                            y: (0 - D.pan.y) / D.zoom
                        }
                    }
                    o[c.DRAG] = !1, o[c.NODE] = !1;
                    var J = n.contexts[c.NODE],
                        K = k.textureCache.texture,
                        D = k.textureCache.viewport;
                    H = k.textureCache.bb, J.setTransform(1, 0, 0, 1, 0, 0), q ? d(J, 0, 0, D.width, D.height) : J.clearRect(0, 0, D.width, D.height);
                    var L = x["outside-texture-bg-color"].value,
                        M = x["outside-texture-bg-opacity"].value;
                    k.fillStyle(J, L[0], L[1], L[2], M), J.fillRect(0, 0, D.width, D.height);
                    var y = m.zoom();
                    e(J, !1), J.clearRect(D.mpan.x, D.mpan.y, D.width / D.zoom / l, D.height / D.zoom / l), J.drawImage(K, D.mpan.x, D.mpan.y, D.width / D.zoom / l, D.height / D.zoom / l)
                } else k.textureOnViewport && !f && (k.textureCache = null);
                var N = k.pinching || k.hoverData.dragging || k.swipePanning || k.data.wheelZooming || k.hoverData.draggingEles,
                    O = k.hideEdgesOnViewport && N,
                    P = k.hideLabelsOnViewport && N;
                if (o[c.DRAG] || o[c.NODE] || g || h) {
                    O || k.findEdgeControlPoints(w);
                    for (var Q = k.getCachedZSortedEles(), R = m.extent(), S = 0; S < Q.length; S++) {
                        var T, U = Q[S],
                            H = f ? null : U.boundingBox(),
                            V = f ? !0 : a.math.boundingBoxesIntersect(R, H);
                        V && (T = U._private.rscratch.inDragLayer ? G.drag : G.nondrag, T.eles.push(U))
                    }
                }
                var W = [];
                if (W[c.NODE] = !o[c.NODE] && q && !k.clearedForMotionBlur[c.NODE] || k.clearingMotionBlur, W[c.NODE] && (k.clearedForMotionBlur[c.NODE] = !0), W[c.DRAG] = !o[c.DRAG] && q && !k.clearedForMotionBlur[c.DRAG] || k.clearingMotionBlur, W[c.DRAG] && (k.clearedForMotionBlur[c.DRAG] = !0), o[c.NODE] || g || h || W[c.NODE]) {
                    var X = q && !W[c.NODE] && 1 !== r,
                        J = f || (X ? k.data.bufferContexts[c.MOTIONBLUR_BUFFER_NODE] : n.contexts[c.NODE]),
                        Y = q && !X ? "motionBlur" : void 0;
                    e(J, Y), u(G.nondrag, J), g || q || (o[c.NODE] = !1)
                }
                if (!h && (o[c.DRAG] || g || W[c.DRAG])) {
                    var X = q && !W[c.DRAG] && 1 !== r,
                        J = f || (X ? k.data.bufferContexts[c.MOTIONBLUR_BUFFER_DRAG] : n.contexts[c.DRAG]);
                    e(J, q && !X ? "motionBlur" : void 0), u(G.drag, J), g || q || (o[c.DRAG] = !1)
                }
                if (k.showFps || !h && o[c.SELECT_BOX] && !g) {
                    var J = f || n.contexts[c.SELECT_BOX];
                    if (e(J), 1 == n.select[4] && (k.hoverData.selecting || k.touchData.selecting)) {
                        var y = n.cy.zoom(),
                            Z = x["selection-box-border-width"].value / y;
                        J.lineWidth = Z, J.fillStyle = "rgba(" + x["selection-box-color"].value[0] + "," + x["selection-box-color"].value[1] + "," + x["selection-box-color"].value[2] + "," + x["selection-box-opacity"].value + ")", J.fillRect(n.select[0], n.select[1], n.select[2] - n.select[0], n.select[3] - n.select[1]), Z > 0 && (J.strokeStyle = "rgba(" + x["selection-box-border-color"].value[0] + "," + x["selection-box-border-color"].value[1] + "," + x["selection-box-border-color"].value[2] + "," + x["selection-box-opacity"].value + ")", J.strokeRect(n.select[0], n.select[1], n.select[2] - n.select[0], n.select[3] - n.select[1]))
                    }
                    if (n.bgActivePosistion && !k.hoverData.selecting) {
                        var y = n.cy.zoom(),
                            $ = n.bgActivePosistion;
                        J.fillStyle = "rgba(" + x["active-bg-color"].value[0] + "," + x["active-bg-color"].value[1] + "," + x["active-bg-color"].value[2] + "," + x["active-bg-opacity"].value + ")", J.beginPath(), J.arc($.x, $.y, x["active-bg-size"].pxValue / y, 0, 2 * Math.PI), J.fill()
                    }
                    var _ = k.averageRedrawTime;
                    if (k.showFps && _) {
                        _ = Math.round(_);
                        var aa = Math.round(1e3 / _);
                        J.setTransform(1, 0, 0, 1, 0, 0), J.fillStyle = "rgba(255, 0, 0, 0.75)", J.strokeStyle = "rgba(255, 0, 0, 0.75)", J.lineWidth = 1, J.fillText("1 frame = " + _ + " ms = " + aa + " fps", 0, 20);
                        var ba = 60;
                        J.strokeRect(0, 30, 250, 20), J.fillRect(0, 30, 250 * Math.min(aa / ba, 1), 20)
                    }
                    g || (o[c.SELECT_BOX] = !1)
                }
                if (q && 1 !== r) {
                    var ca = n.contexts[c.NODE],
                        da = k.data.bufferCanvases[c.MOTIONBLUR_BUFFER_NODE],
                        ea = n.contexts[c.DRAG],
                        fa = k.data.bufferCanvases[c.MOTIONBLUR_BUFFER_DRAG],
                        ga = function(a, b, c) {
                            a.setTransform(1, 0, 0, 1, 0, 0), c || !v ? a.clearRect(0, 0, k.canvasWidth, k.canvasHeight) : d(a, 0, 0, k.canvasWidth, k.canvasHeight);
                            var e = r;
                            a.drawImage(b, 0, 0, k.canvasWidth * e, k.canvasHeight * e, 0, 0, k.canvasWidth, k.canvasHeight)
                        };
                    (o[c.NODE] || W[c.NODE]) && (ga(ca, da, W[c.NODE]), o[c.NODE] = !1), (o[c.DRAG] || W[c.DRAG]) && (ga(ea, fa, W[c.DRAG]), o[c.DRAG] = !1)
                }
                var ha = Date.now();
                void 0 === k.averageRedrawTime && (k.averageRedrawTime = ha - C), void 0 === k.redrawCount && (k.redrawCount = 0), k.redrawCount++, void 0 === k.redrawTotalTime && (k.redrawTotalTime = 0), k.redrawTotalTime += ha - C, k.lastRedrawTime = ha - C, k.averageRedrawTime = k.averageRedrawTime / 2 + (ha - C) / 2, k.currentlyDrawing = !1, k.prevViewport = D, k.clearingMotionBlur && (k.clearingMotionBlur = !1, k.motionBlurCleared = !0, k.motionBlur = !0), q && (k.motionBlurTimeout = setTimeout(function() {
                    k.motionBlurTimeout = null, k.clearedForMotionBlur[c.NODE] = !1, k.clearedForMotionBlur[c.DRAG] = !1, k.motionBlur = !1, k.clearingMotionBlur = !p, k.mbFrames = 0, o[c.NODE] = !0, o[c.DRAG] = !0, k.redraw()
                }, b.motionBlurDelay)), k.drawingImage = !1
            }
            d = d || {};
            var f = d.forcedContext,
                g = d.drawAllLayers,
                h = d.drawOnlyNodeLayer,
                i = d.forcedZoom,
                j = d.forcedPan,
                k = this,
                l = void 0 === d.forcedPxRatio ? this.getPixelRatio() : d.forcedPxRatio,
                m = k.data.cy,
                n = k.data,
                o = n.canvasNeedsRedraw,
                p = k.textureOnViewport && !f && (k.pinching || k.hoverData.dragging || k.swipePanning || k.data.wheelZooming),
                q = void 0 !== d.motionBlur ? d.motionBlur : k.motionBlur,
                r = k.motionBlurPxRatio,
                s = m.hasCompoundNodes(),
                t = k.hoverData.draggingEles,
                u = k.hoverData.selecting || k.touchData.selecting ? !0 : !1;
            q = q && !f && k.motionBlurEnabled && !u;
            var v = q;
            !f && k.motionBlurTimeout && clearTimeout(k.motionBlurTimeout), !f && this.redrawTimeout && clearTimeout(this.redrawTimeout), this.redrawTimeout = null, void 0 === this.averageRedrawTime && (this.averageRedrawTime = 0);
            var w = b.minRedrawLimit,
                x = b.maxRedrawLimit,
                y = this.averageRedrawTime;
            y = w > y ? w : y, y = x > y ? y : x, void 0 === this.lastDrawTime && (this.lastDrawTime = 0);
            var z = Date.now(),
                A = z - this.lastDrawTime,
                B = A >= y;
            if (!f && !k.clearingMotionBlur) {
                if (!B || this.currentlyDrawing) return void(this.redrawTimeout = setTimeout(function() {
                    k.redraw()
                }, y));
                this.lastDrawTime = z, this.currentlyDrawing = !0
            }
            q && (null == k.mbFrames && (k.mbFrames = 0), k.drawingImage || k.mbFrames++, k.mbFrames < 3 && (v = !1), k.mbFrames > k.minMbLowQualFrames && (k.motionBlurPxRatio = k.mbPxRBlurry)), k.clearingMotionBlur && (k.motionBlurPxRatio = 1);
            var C = Date.now();
            f ? e() : a.util.requestAnimationFrame(e), f || k.initrender || (k.initrender = !0, m.trigger("initrender")), f || m.triggerOnRender()
        }
    }(cytoscape), function(a) {
        "use strict";
        var b = a("renderer", "canvas"),
            c = b.prototype;
        c.drawPolygonPath = function(a, b, c, d, e, f) {
            var g = d / 2,
                h = e / 2;
            a.beginPath && a.beginPath(), a.moveTo(b + g * f[0], c + h * f[1]);
            for (var i = 1; i < f.length / 2; i++) a.lineTo(b + g * f[2 * i], c + h * f[2 * i + 1]);
            a.closePath()
        }, c.drawPolygon = function(a, b, c, d, e, f) {
            this.drawPolygonPath(a, b, c, d, e, f), a.fill()
        }, c.drawRoundRectanglePath = function(b, c, d, e, f, g) {
            var h = e / 2,
                i = f / 2,
                j = a.math.getRoundRectangleRadius(e, f);
            b.beginPath && b.beginPath(), b.moveTo(c, d - i), b.arcTo(c + h, d - i, c + h, d, j), b.arcTo(c + h, d + i, c, d + i, j), b.arcTo(c - h, d + i, c - h, d, j), b.arcTo(c - h, d - i, c, d - i, j), b.lineTo(c, d - i), b.closePath()
        }, c.drawRoundRectangle = function(a, b, c, d, e, f) {
            this.drawRoundRectanglePath(a, b, c, d, e, f), a.fill()
        }
    }(cytoscape), function(a) {
        "use strict";
        var b = a("renderer", "canvas"),
            c = b.prototype;
        c.createBuffer = function(a, b) {
            var c = document.createElement("canvas");
            return c.width = a, c.height = b, [c, c.getContext("2d")]
        }, c.bufferCanvasImage = function(b) {
            var c = this.data,
                d = c.cy,
                e = d.elements().boundingBox(),
                f = b.full ? Math.ceil(e.w) : this.data.container.clientWidth,
                g = b.full ? Math.ceil(e.h) : this.data.container.clientHeight,
                h = 1;
            if (void 0 !== b.scale) f *= b.scale, g *= b.scale, h = b.scale;
            else if (a.is.number(b.maxWidth) || a.is.number(b.maxHeight)) {
                var i = 1 / 0,
                    j = 1 / 0;
                a.is.number(b.maxWidth) && (i = h * b.maxWidth / f), a.is.number(b.maxHeight) && (j = h * b.maxHeight / g), h = Math.min(i, j), f *= h, g *= h
            }
            var k = document.createElement("canvas");
            k.width = f, k.height = g, k.style.width = f + "px", k.style.height = g + "px";
            var l = k.getContext("2d");
            if (f > 0 && g > 0)
                if (l.clearRect(0, 0, f, g), b.bg && (l.fillStyle = b.bg, l.rect(0, 0, f, g), l.fill()), l.globalCompositeOperation = "source-over", b.full) this.redraw({
                    forcedContext: l,
                    drawAllLayers: !0,
                    forcedZoom: h,
                    forcedPan: {
                        x: -e.x1 * h,
                        y: -e.y1 * h
                    },
                    forcedPxRatio: 1
                });
                else {
                    var m = d.pan(),
                        n = {
                            x: m.x * h,
                            y: m.y * h
                        },
                        o = d.zoom() * h;
                    this.redraw({
                        forcedContext: l,
                        drawAllLayers: !0,
                        forcedZoom: o,
                        forcedPan: n,
                        forcedPxRatio: 1
                    })
                }
            return k
        }, c.png = function(a) {
            return this.bufferCanvasImage(a).toDataURL("image/png")
        }, c.jpg = function(a) {
            return this.bufferCanvasImage(a).toDataURL("image/jpeg")
        }
    }(cytoscape), function(a) {
        "use strict";
        var b = a("renderer", "canvas"),
            c = b,
            d = c.prototype;
        d.registerBinding = function(a, b, c, d) {
            this.bindings.push({
                target: a,
                event: b,
                handler: c,
                useCapture: d
            }), a.addEventListener(b, c, d)
        }, d.nodeIsDraggable = function(a) {
            return 0 !== a._private.style.opacity.value && "visible" == a._private.style.visibility.value && "element" == a._private.style.display.value && !a.locked() && a.grabbable() ? !0 : !1
        }, d.load = function() {
            var b = this,
                d = function(a) {
                    var c;
                    if (a.addToList && b.data.cy.hasCompoundNodes()) {
                        if (!a.addToList.hasId) {
                            a.addToList.hasId = {};
                            for (var d = 0; d < a.addToList.length; d++) {
                                var e = a.addToList[d];
                                a.addToList.hasId[e.id()] = !0
                            }
                        }
                        c = a.addToList.hasId
                    }
                    return c || {}
                },
                e = function(a, b) {
                    if (a._private.cy.hasCompoundNodes() && (null != b.inDragLayer || null != b.addToList))
                        for (var c = d(b), e = a.descendants(), f = 0; f < e.size(); f++) {
                            var g = e[f],
                                h = g._private;
                            b.inDragLayer && (h.rscratch.inDragLayer = !0), b.addToList && !c[g.id()] && (b.addToList.push(g), c[g.id()] = !0, h.grabbed = !0);
                            for (var i = h.edges, j = 0; b.inDragLayer && j < i.length; j++) i[j]._private.rscratch.inDragLayer = !0
                        }
                },
                f = function(a, b) {
                    var c = a._private,
                        f = d(b);
                    b.inDragLayer && (c.rscratch.inDragLayer = !0), b.addToList && !f[a.id()] && (b.addToList.push(a), f[a.id()] = !0, c.grabbed = !0);
                    for (var g = c.edges, i = 0; b.inDragLayer && i < g.length; i++) g[i]._private.rscratch.inDragLayer = !0;
                    e(a, b), h(a, {
                        inDragLayer: b.inDragLayer
                    })
                },
                g = function(a) {
                    if (a)
                        for (var b = 0; b < a.length; b++) {
                            var c = a[b]._private;
                            if ("nodes" === c.group) {
                                c.rscratch.inDragLayer = !1, c.grabbed = !1;
                                for (var d = c.edges, e = 0; e < d.length; e++) d[e]._private.rscratch.inDragLayer = !1;
                                h(a[b], {
                                    inDragLayer: !1
                                })
                            } else "edges" === c.group && (c.rscratch.inDragLayer = !1)
                        }
                },
                h = function(a, b) {
                    if (null != b.inDragLayer || null != b.addToList) {
                        var c = a;
                        if (a._private.cy.hasCompoundNodes()) {
                            for (; c.parent().nonempty();) c = c.parent()[0];
                            if (c != a) {
                                for (var e = c.descendants().merge(c).unmerge(a).unmerge(a.descendants()), f = e.connectedEdges(), g = d(b), h = 0; h < e.size(); h++) void 0 !== b.inDragLayer && (e[h]._private.rscratch.inDragLayer = b.inDragLayer), b.addToList && !g[e[h].id()] && (b.addToList.push(e[h]), g[e[h].id()] = !0, e[h]._private.grabbed = !0);
                                for (var i = 0; void 0 !== b.inDragLayer && i < f.length; i++) f[i]._private.rscratch.inDragLayer = b.inDragLayer
                            }
                        }
                    }
                };
            "undefined" != typeof MutationObserver ? (b.removeObserver = new MutationObserver(function(a) {
                for (var c = 0; c < a.length; c++) {
                    var d = a[c],
                        e = d.removedNodes;
                    if (e)
                        for (var f = 0; f < e.length; f++) {
                            var g = e[f];
                            if (g === b.data.container) {
                                b.destroy();
                                break
                            }
                        }
                }
            }), b.removeObserver.observe(b.data.container.parentNode, {
                childList: !0
            })) : b.registerBinding(b.data.container, "DOMNodeRemoved", function(a) {
                b.destroy()
            }), b.registerBinding(window, "resize", a.util.debounce(function(a) {
                b.invalidateContainerClientCoordsCache(), b.matchCanvasSize(b.data.container), b.data.canvasNeedsRedraw[c.NODE] = !0, b.redraw()
            }, 100));
            for (var i = function(a) {
                    b.registerBinding(a, "scroll", function(a) {
                        b.invalidateContainerClientCoordsCache()
                    })
                }, j = b.data.cy.container(); i(j), j.parentNode;) j = j.parentNode;
            b.registerBinding(b.data.container, "contextmenu", function(a) {
                a.preventDefault()
            });
            var k = function() {
                return 0 !== b.data.select[4]
            };
            b.registerBinding(b.data.container, "mousedown", function(d) {
                d.preventDefault(), b.hoverData.capture = !0, b.hoverData.which = d.which;
                var e = b.data.cy,
                    g = b.projectIntoViewport(d.clientX, d.clientY),
                    h = b.data.select,
                    i = b.findNearestElement(g[0], g[1], !0, !1),
                    j = b.dragData.possibleDragElements;
                b.hoverData.mdownPos = g;
                var k = b.data.canvasNeedsRedraw,
                    l = function() {
                        b.hoverData.tapholdCancelled = !1, clearTimeout(b.hoverData.tapholdTimeout), b.hoverData.tapholdTimeout = setTimeout(function() {
                            if (!b.hoverData.tapholdCancelled) {
                                var c = b.hoverData.down;
                                c ? c.trigger(new a.Event(d, {
                                    type: "taphold",
                                    cyPosition: {
                                        x: g[0],
                                        y: g[1]
                                    }
                                })) : e.trigger(new a.Event(d, {
                                    type: "taphold",
                                    cyPosition: {
                                        x: g[0],
                                        y: g[1]
                                    }
                                }))
                            }
                        }, b.tapholdDuration)
                    };
                if (3 == d.which) {
                    b.hoverData.cxtStarted = !0;
                    var m = new a.Event(d, {
                        type: "cxttapstart",
                        cyPosition: {
                            x: g[0],
                            y: g[1]
                        }
                    });
                    i ? (i.activate(), i.trigger(m), b.hoverData.down = i) : e.trigger(m), b.hoverData.downTime = (new Date).getTime(), b.hoverData.cxtDragged = !1
                } else if (1 == d.which) {
                    if (i && i.activate(), null != i) {
                        if (b.nodeIsDraggable(i)) {
                            var n = new a.Event(d, {
                                type: "grab",
                                cyPosition: {
                                    x: g[0],
                                    y: g[1]
                                }
                            });
                            if (i.isNode() && !i.selected()) j = b.dragData.possibleDragElements = [], f(i, {
                                addToList: j
                            }), i.trigger(n);
                            else if (i.isNode() && i.selected()) {
                                j = b.dragData.possibleDragElements = [];
                                for (var o = e.$(function() {
                                        return this.isNode() && this.selected()
                                    }), p = 0; p < o.length; p++) b.nodeIsDraggable(o[p]) && f(o[p], {
                                    addToList: j
                                });
                                i.trigger(n)
                            }
                            k[c.NODE] = !0, k[c.DRAG] = !0
                        }
                        i.trigger(new a.Event(d, {
                            type: "mousedown",
                            cyPosition: {
                                x: g[0],
                                y: g[1]
                            }
                        })).trigger(new a.Event(d, {
                            type: "tapstart",
                            cyPosition: {
                                x: g[0],
                                y: g[1]
                            }
                        })).trigger(new a.Event(d, {
                            type: "vmousedown",
                            cyPosition: {
                                x: g[0],
                                y: g[1]
                            }
                        }))
                    } else null == i && e.trigger(new a.Event(d, {
                        type: "mousedown",
                        cyPosition: {
                            x: g[0],
                            y: g[1]
                        }
                    })).trigger(new a.Event(d, {
                        type: "tapstart",
                        cyPosition: {
                            x: g[0],
                            y: g[1]
                        }
                    })).trigger(new a.Event(d, {
                        type: "vmousedown",
                        cyPosition: {
                            x: g[0],
                            y: g[1]
                        }
                    }));
                    if (b.hoverData.down = i, b.hoverData.downTime = (new Date).getTime(), null == i || i.isEdge()) {
                        h[4] = 1;
                        var q = Math.max(0, c.panOrBoxSelectDelay - (+new Date - b.hoverData.downTime));
                        clearTimeout(b.bgActiveTimeout), e.boxSelectionEnabled() || i && i.isEdge() ? b.bgActiveTimeout = setTimeout(function() {
                            i && i.unactivate(), b.data.bgActivePosistion = {
                                x: g[0],
                                y: g[1]
                            }, b.hoverData.dragging = !0, k[c.SELECT_BOX] = !0, b.redraw()
                        }, q) : (b.data.bgActivePosistion = {
                            x: g[0],
                            y: g[1]
                        }, k[c.SELECT_BOX] = !0, b.redraw())
                    }
                    l()
                }
                h[0] = h[2] = g[0], h[1] = h[3] = g[1]
            }, !1), b.registerBinding(window, "mousemove", a.util.throttle(function(d) {
                var e = !1,
                    g = b.hoverData.capture;
                if (!g) {
                    var h = b.findContainerClientCoords();
                    if (!(d.clientX > h[0] && d.clientX < h[0] + b.canvasWidth && d.clientY > h[1] && d.clientY < h[1] + b.canvasHeight)) return;
                    for (var i = b.data.container, j = d.target, k = j.parentNode, l = !1; k;) {
                        if (k === i) {
                            l = !0;
                            break
                        }
                        k = k.parentNode
                    }
                    if (!l) return
                }
                var m = b.data.cy,
                    n = m.zoom(),
                    o = b.projectIntoViewport(d.clientX, d.clientY),
                    p = b.data.select,
                    q = b.data.canvasNeedsRedraw,
                    r = null;
                b.hoverData.draggingEles || (r = b.findNearestElement(o[0], o[1], !0, !1));
                var s = b.hoverData.last,
                    t = b.hoverData.down,
                    u = [o[0] - p[2], o[1] - p[3]],
                    v = b.dragData.possibleDragElements,
                    w = p[2] - p[0],
                    x = w * w,
                    y = p[3] - p[1],
                    z = y * y,
                    A = x + z,
                    B = A * n * n;
                b.hoverData.tapholdCancelled = !0;
                var C = function() {
                    var a = b.hoverData.dragDelta = b.hoverData.dragDelta || [];
                    0 === a.length ? (a.push(u[0]), a.push(u[1])) : (a[0] += u[0], a[1] += u[1])
                };
                if (e = !0, null != r ? r.trigger(new a.Event(d, {
                        type: "mousemove",
                        cyPosition: {
                            x: o[0],
                            y: o[1]
                        }
                    })).trigger(new a.Event(d, {
                        type: "vmousemove",
                        cyPosition: {
                            x: o[0],
                            y: o[1]
                        }
                    })).trigger(new a.Event(d, {
                        type: "tapdrag",
                        cyPosition: {
                            x: o[0],
                            y: o[1]
                        }
                    })) : null == r && m.trigger(new a.Event(d, {
                        type: "mousemove",
                        cyPosition: {
                            x: o[0],
                            y: o[1]
                        }
                    })).trigger(new a.Event(d, {
                        type: "vmousemove",
                        cyPosition: {
                            x: o[0],
                            y: o[1]
                        }
                    })).trigger(new a.Event(d, {
                        type: "tapdrag",
                        cyPosition: {
                            x: o[0],
                            y: o[1]
                        }
                    })), 3 === b.hoverData.which) {
                    var D = new a.Event(d, {
                        type: "cxtdrag",
                        cyPosition: {
                            x: o[0],
                            y: o[1]
                        }
                    });
                    t ? t.trigger(D) : m.trigger(D), b.hoverData.cxtDragged = !0, b.hoverData.cxtOver && r === b.hoverData.cxtOver || (b.hoverData.cxtOver && b.hoverData.cxtOver.trigger(new a.Event(d, {
                        type: "cxtdragout",
                        cyPosition: {
                            x: o[0],
                            y: o[1]
                        }
                    })), b.hoverData.cxtOver = r, r && r.trigger(new a.Event(d, {
                        type: "cxtdragover",
                        cyPosition: {
                            x: o[0],
                            y: o[1]
                        }
                    })))
                } else if (b.hoverData.dragging) {
                    if (e = !0, m.panningEnabled() && m.userPanningEnabled()) {
                        var E;
                        if (b.hoverData.justStartedPan) {
                            var F = b.hoverData.mdownPos;
                            E = {
                                x: (o[0] - F[0]) * n,
                                y: (o[1] - F[1]) * n
                            }, b.hoverData.justStartedPan = !1
                        } else E = {
                            x: u[0] * n,
                            y: u[1] * n
                        };
                        m.panBy(E), b.hoverData.dragged = !0
                    }
                    o = b.projectIntoViewport(d.clientX, d.clientY)
                } else if (1 == p[4] && (null == t || t.isEdge()) && (!m.boxSelectionEnabled() || +new Date - b.hoverData.downTime >= c.panOrBoxSelectDelay) && !b.hoverData.selecting && B >= b.desktopTapThreshold2 && m.panningEnabled() && m.userPanningEnabled()) b.hoverData.dragging = !0, b.hoverData.selecting = !1, b.hoverData.justStartedPan = !0, p[4] = 0;
                else {
                    if (m.boxSelectionEnabled() && !b.hoverData.dragging && Math.pow(p[2] - p[0], 2) + Math.pow(p[3] - p[1], 2) > 7 && p[4] && (clearTimeout(b.bgActiveTimeout), b.data.bgActivePosistion = void 0, b.hoverData.selecting = !0, q[c.SELECT_BOX] = !0, b.redraw()), t && t.isEdge() && t.active() && t.unactivate(), r != s && (s && (s.trigger(new a.Event(d, {
                            type: "mouseout",
                            cyPosition: {
                                x: o[0],
                                y: o[1]
                            }
                        })), s.trigger(new a.Event(d, {
                            type: "tapdragout",
                            cyPosition: {
                                x: o[0],
                                y: o[1]
                            }
                        }))), r && (r.trigger(new a.Event(d, {
                            type: "mouseover",
                            cyPosition: {
                                x: o[0],
                                y: o[1]
                            }
                        })), r.trigger(new a.Event(d, {
                            type: "tapdragover",
                            cyPosition: {
                                x: o[0],
                                y: o[1]
                            }
                        }))), b.hoverData.last = r), t && t.isNode() && b.nodeIsDraggable(t))
                        if (B >= b.desktopTapThreshold2) {
                            var G = !b.dragData.didDrag;
                            G && (q[c.NODE] = !0), b.dragData.didDrag = !0;
                            for (var H = [], I = 0; I < v.length; I++) {
                                var J = v[I];
                                if (b.hoverData.draggingEles || f(J, {
                                        inDragLayer: !0
                                    }), J.isNode() && b.nodeIsDraggable(J) && J.grabbed()) {
                                    var K = J._private.position;
                                    if (H.push(J), a.is.number(u[0]) && a.is.number(u[1]) && (K.x += u[0], K.y += u[1], G)) {
                                        var L = b.hoverData.dragDelta;
                                        a.is.number(L[0]) && a.is.number(L[1]) && (K.x += L[0], K.y += L[1])
                                    }
                                }
                            }
                            b.hoverData.draggingEles = !0;
                            var M = new a.Collection(m, H);
                            M.updateCompoundBounds(), M.trigger("position drag"), q[c.DRAG] = !0, b.redraw()
                        } else C();
                    e = !0
                }
                return p[2] = o[0], p[3] = o[1], e ? (d.stopPropagation && d.stopPropagation(), d.preventDefault && d.preventDefault(), !1) : void 0
            }, 1e3 / 30, {
                trailing: !0
            }), !1), b.registerBinding(window, "mouseup", function(d) {
                var e = b.hoverData.capture;
                if (e) {
                    b.hoverData.capture = !1;
                    var f = b.data.cy,
                        h = b.projectIntoViewport(d.clientX, d.clientY),
                        i = b.data.select,
                        j = b.findNearestElement(h[0], h[1], !0, !1),
                        k = b.dragData.possibleDragElements,
                        l = b.hoverData.down,
                        m = d.shiftKey,
                        n = b.data.canvasNeedsRedraw;
                    if (b.data.bgActivePosistion && (n[c.SELECT_BOX] = !0, b.redraw()), b.hoverData.tapholdCancelled = !0, b.data.bgActivePosistion = void 0, clearTimeout(b.bgActiveTimeout), l && l.unactivate(), 3 === b.hoverData.which) {
                        var o = new a.Event(d, {
                            type: "cxttapend",
                            cyPosition: {
                                x: h[0],
                                y: h[1]
                            }
                        });
                        if (l ? l.trigger(o) : f.trigger(o), !b.hoverData.cxtDragged) {
                            var p = new a.Event(d, {
                                type: "cxttap",
                                cyPosition: {
                                    x: h[0],
                                    y: h[1]
                                }
                            });
                            l ? l.trigger(p) : f.trigger(p)
                        }
                        b.hoverData.cxtDragged = !1, b.hoverData.which = null
                    } else {
                        if (null != l || b.dragData.didDrag || b.hoverData.dragged || (f.$(function() {
                                return this.selected()
                            }).unselect(), k.length > 0 && (n[c.NODE] = !0), b.dragData.possibleDragElements = k = []), null != j ? j.trigger(new a.Event(d, {
                                type: "mouseup",
                                cyPosition: {
                                    x: h[0],
                                    y: h[1]
                                }
                            })).trigger(new a.Event(d, {
                                type: "tapend",
                                cyPosition: {
                                    x: h[0],
                                    y: h[1]
                                }
                            })).trigger(new a.Event(d, {
                                type: "vmouseup",
                                cyPosition: {
                                    x: h[0],
                                    y: h[1]
                                }
                            })) : null == j && f.trigger(new a.Event(d, {
                                type: "mouseup",
                                cyPosition: {
                                    x: h[0],
                                    y: h[1]
                                }
                            })).trigger(new a.Event(d, {
                                type: "tapend",
                                cyPosition: {
                                    x: h[0],
                                    y: h[1]
                                }
                            })).trigger(new a.Event(d, {
                                type: "vmouseup",
                                cyPosition: {
                                    x: h[0],
                                    y: h[1]
                                }
                            })), b.dragData.didDrag || b.hoverData.dragged || (null != j ? j.trigger(new a.Event(d, {
                                type: "click",
                                cyPosition: {
                                    x: h[0],
                                    y: h[1]
                                }
                            })).trigger(new a.Event(d, {
                                type: "tap",
                                cyPosition: {
                                    x: h[0],
                                    y: h[1]
                                }
                            })).trigger(new a.Event(d, {
                                type: "vclick",
                                cyPosition: {
                                    x: h[0],
                                    y: h[1]
                                }
                            })) : null == j && f.trigger(new a.Event(d, {
                                type: "click",
                                cyPosition: {
                                    x: h[0],
                                    y: h[1]
                                }
                            })).trigger(new a.Event(d, {
                                type: "tap",
                                cyPosition: {
                                    x: h[0],
                                    y: h[1]
                                }
                            })).trigger(new a.Event(d, {
                                type: "vclick",
                                cyPosition: {
                                    x: h[0],
                                    y: h[1]
                                }
                            }))), j != l || b.dragData.didDrag || null != j && j._private.selectable && (b.hoverData.dragging || ("additive" === f.selectionType() || m ? j.selected() ? j.unselect() : j.select() : m || (f.$(":selected").unmerge(j).unselect(), j.select())), n[c.NODE] = !0), b.hoverData.selecting && f.boxSelectionEnabled() && Math.pow(i[2] - i[0], 2) + Math.pow(i[3] - i[1], 2) > 7 && i[4]) {
                            var q = [],
                                r = b.getAllInBox(i[0], i[1], i[2], i[3]);
                            n[c.SELECT_BOX] = !0, r.length > 0 && (n[c.NODE] = !0);
                            for (var s = 0; s < r.length; s++) r[s]._private.selectable && q.push(r[s]);
                            var t = new a.Collection(f, q);
                            "additive" === f.selectionType() ? t.select() : (m || f.$(":selected").unmerge(t).unselect(), t.select()), b.redraw()
                        }
                        b.hoverData.dragging && (b.hoverData.dragging = !1, n[c.SELECT_BOX] = !0, n[c.NODE] = !0, b.redraw()), i[4] || (n[c.DRAG] = !0, n[c.NODE] = !0, g(k), l && l.trigger("free"))
                    }
                    i[4] = 0, b.hoverData.down = null, b.hoverData.cxtStarted = !1, b.hoverData.draggingEles = !1, b.hoverData.selecting = !1, b.dragData.didDrag = !1, b.hoverData.dragged = !1, b.hoverData.dragDelta = []
                }
            }, !1);
            var l = function(a) {
                if (!b.scrollingPage) {
                    var d = b.data.cy,
                        e = b.projectIntoViewport(a.clientX, a.clientY),
                        f = [e[0] * d.zoom() + d.pan().x, e[1] * d.zoom() + d.pan().y];
                    if (b.hoverData.draggingEles || b.hoverData.dragging || b.hoverData.cxtStarted || k()) return void a.preventDefault();
                    if (d.panningEnabled() && d.userPanningEnabled() && d.zoomingEnabled() && d.userZoomingEnabled()) {
                        a.preventDefault(), b.data.wheelZooming = !0, clearTimeout(b.data.wheelTimeout), b.data.wheelTimeout = setTimeout(function() {
                            b.data.wheelZooming = !1, b.data.canvasNeedsRedraw[c.NODE] = !0, b.redraw()
                        }, 150);
                        var g = a.deltaY / -250 || a.wheelDeltaY / 1e3 || a.wheelDelta / 1e3;
                        g *= b.wheelSensitivity;
                        var h = 1 === a.deltaMode;
                        h && (g *= 33), d.zoom({
                            level: d.zoom() * Math.pow(10, g),
                            renderedPosition: {
                                x: f[0],
                                y: f[1]
                            }
                        })
                    }
                }
            };
            b.registerBinding(b.data.container, "wheel", l, !0), b.registerBinding(window, "scroll", function(a) {
                b.scrollingPage = !0, clearTimeout(b.scrollingPageTimeout), b.scrollingPageTimeout = setTimeout(function() {
                    b.scrollingPage = !1
                }, 250)
            }, !0), b.registerBinding(b.data.container, "mouseout", function(c) {
                var d = b.projectIntoViewport(c.clientX, c.clientY);
                b.data.cy.trigger(new a.Event(c, {
                    type: "mouseout",
                    cyPosition: {
                        x: d[0],
                        y: d[1]
                    }
                }))
            }, !1), b.registerBinding(b.data.container, "mouseover", function(c) {
                var d = b.projectIntoViewport(c.clientX, c.clientY);
                b.data.cy.trigger(new a.Event(c, {
                    type: "mouseover",
                    cyPosition: {
                        x: d[0],
                        y: d[1]
                    }
                }))
            }, !1);
            var m, n, o, p, q, r, s, t, u, v, w, x, y, z = function(a, b, c, d) {
                    return Math.sqrt((c - a) * (c - a) + (d - b) * (d - b))
                },
                A = function(a, b, c, d) {
                    return (c - a) * (c - a) + (d - b) * (d - b)
                };
            b.registerBinding(b.data.container, "touchstart", function(d) {
                clearTimeout(this.threeFingerSelectTimeout), d.target !== b.data.link && d.preventDefault(), b.touchData.capture = !0, b.data.bgActivePosistion = void 0;
                var e = b.data.cy,
                    g = b.getCachedNodes(),
                    h = b.getCachedEdges(),
                    i = b.touchData.now,
                    j = b.touchData.earlier,
                    k = b.data.canvasNeedsRedraw;
                if (d.touches[0]) {
                    var l = b.projectIntoViewport(d.touches[0].clientX, d.touches[0].clientY);
                    i[0] = l[0], i[1] = l[1]
                }
                if (d.touches[1]) {
                    var l = b.projectIntoViewport(d.touches[1].clientX, d.touches[1].clientY);
                    i[2] = l[0], i[3] = l[1]
                }
                if (d.touches[2]) {
                    var l = b.projectIntoViewport(d.touches[2].clientX, d.touches[2].clientY);
                    i[4] = l[0], i[5] = l[1]
                }
                if (d.touches[1]) {
                    var B = function(a) {
                        for (var b = 0; b < a.length; b++) a[b]._private.grabbed = !1, a[b]._private.rscratch.inDragLayer = !1, a[b].active() && a[b].unactivate()
                    };
                    B(g), B(h);
                    var C = b.findContainerClientCoords();
                    u = C[0], v = C[1], w = C[2], x = C[3], m = d.touches[0].clientX - u, n = d.touches[0].clientY - v, o = d.touches[1].clientX - u, p = d.touches[1].clientY - v, y = m >= 0 && w >= m && o >= 0 && w >= o && n >= 0 && x >= n && p >= 0 && x >= p;
                    var D = e.pan(),
                        E = e.zoom();
                    q = z(m, n, o, p), r = A(m, n, o, p), s = [(m + o) / 2, (n + p) / 2], t = [(s[0] - D.x) / E, (s[1] - D.y) / E];
                    var F = 200,
                        G = F * F;
                    if (G > r && !d.touches[2]) {
                        var H = b.findNearestElement(i[0], i[1], !0, !0),
                            I = b.findNearestElement(i[2], i[3], !0, !0);
                        return H && H.isNode() ? (H.activate().trigger(new a.Event(d, {
                            type: "cxttapstart",
                            cyPosition: {
                                x: i[0],
                                y: i[1]
                            }
                        })), b.touchData.start = H) : I && I.isNode() ? (I.activate().trigger(new a.Event(d, {
                            type: "cxttapstart",
                            cyPosition: {
                                x: i[0],
                                y: i[1]
                            }
                        })), b.touchData.start = I) : (e.trigger(new a.Event(d, {
                            type: "cxttapstart",
                            cyPosition: {
                                x: i[0],
                                y: i[1]
                            }
                        })), b.touchData.start = null), b.touchData.start && (b.touchData.start._private.grabbed = !1), b.touchData.cxt = !0, b.touchData.cxtDragged = !1, b.data.bgActivePosistion = void 0, void b.redraw()
                    }
                }
                if (d.touches[2]);
                else if (d.touches[1]);
                else if (d.touches[0]) {
                    var J = b.findNearestElement(i[0], i[1], !0, !0);
                    if (null != J) {
                        if (J.activate(), b.touchData.start = J, J.isNode() && b.nodeIsDraggable(J)) {
                            var K = b.dragData.touchDragEles = [];
                            if (k[c.NODE] = !0, k[c.DRAG] = !0, J.selected())
                                for (var L = e.$(function() {
                                        return this.isNode() && this.selected()
                                    }), M = 0; M < L.length; M++) {
                                    var N = L[M];
                                    b.nodeIsDraggable(N) && f(N, {
                                        addToList: K
                                    })
                                } else f(J, {
                                    addToList: K
                                });
                            J.trigger(new a.Event(d, {
                                type: "grab",
                                cyPosition: {
                                    x: i[0],
                                    y: i[1]
                                }
                            }))
                        }
                        J.trigger(new a.Event(d, {
                            type: "touchstart",
                            cyPosition: {
                                x: i[0],
                                y: i[1]
                            }
                        })).trigger(new a.Event(d, {
                            type: "tapstart",
                            cyPosition: {
                                x: i[0],
                                y: i[1]
                            }
                        })).trigger(new a.Event(d, {
                            type: "vmousdown",
                            cyPosition: {
                                x: i[0],
                                y: i[1]
                            }
                        }))
                    }
                    null == J && (e.trigger(new a.Event(d, {
                        type: "touchstart",
                        cyPosition: {
                            x: i[0],
                            y: i[1]
                        }
                    })).trigger(new a.Event(d, {
                        type: "tapstart",
                        cyPosition: {
                            x: i[0],
                            y: i[1]
                        }
                    })).trigger(new a.Event(d, {
                        type: "vmousedown",
                        cyPosition: {
                            x: i[0],
                            y: i[1]
                        }
                    })), b.data.bgActivePosistion = {
                        x: l[0],
                        y: l[1]
                    }, k[c.SELECT_BOX] = !0, b.redraw());
                    for (var O = 0; O < i.length; O++) j[O] = i[O], b.touchData.startPosition[O] = i[O];
                    b.touchData.singleTouchMoved = !1, b.touchData.singleTouchStartTime = +new Date, clearTimeout(b.touchData.tapholdTimeout), b.touchData.tapholdTimeout = setTimeout(function() {
                        b.touchData.singleTouchMoved !== !1 || b.pinching || (b.touchData.start ? b.touchData.start.trigger(new a.Event(d, {
                            type: "taphold",
                            cyPosition: {
                                x: i[0],
                                y: i[1]
                            }
                        })) : (b.data.cy.trigger(new a.Event(d, {
                            type: "taphold",
                            cyPosition: {
                                x: i[0],
                                y: i[1]
                            }
                        })), e.$(":selected").unselect()))
                    }, b.tapholdDuration)
                }
            }, !1), b.registerBinding(window, "touchmove", a.util.throttle(function(d) {
                var e = b.data.select,
                    g = b.touchData.capture;
                g && d.preventDefault();
                var h = b.data.cy,
                    i = b.touchData.now,
                    j = b.touchData.earlier,
                    k = h.zoom(),
                    l = b.data.canvasNeedsRedraw;
                if (d.touches[0]) {
                    var s = b.projectIntoViewport(d.touches[0].clientX, d.touches[0].clientY);
                    i[0] = s[0], i[1] = s[1]
                }
                if (d.touches[1]) {
                    var s = b.projectIntoViewport(d.touches[1].clientX, d.touches[1].clientY);
                    i[2] = s[0], i[3] = s[1]
                }
                if (d.touches[2]) {
                    var s = b.projectIntoViewport(d.touches[2].clientX, d.touches[2].clientY);
                    i[4] = s[0], i[5] = s[1]
                }
                for (var w = [], x = 0; x < i.length; x++) w[x] = i[x] - j[x];
                var B = b.touchData.startPosition,
                    C = i[0] - B[0],
                    D = C * C,
                    E = i[1] - B[1],
                    F = E * E,
                    G = D + F,
                    H = G * k * k;
                if (g && b.touchData.cxt) {
                    var I = d.touches[0].clientX - u,
                        J = d.touches[0].clientY - v,
                        K = d.touches[1].clientX - u,
                        L = d.touches[1].clientY - v,
                        M = A(I, J, K, L),
                        N = M / r,
                        O = 150,
                        P = O * O,
                        Q = 1.5,
                        R = Q * Q;
                    if (N >= R || M >= P) {
                        b.touchData.cxt = !1, b.touchData.start && (b.touchData.start.unactivate(), b.touchData.start = null), b.data.bgActivePosistion = void 0, l[c.SELECT_BOX] = !0;
                        var S = new a.Event(d, {
                            type: "cxttapend",
                            cyPosition: {
                                x: i[0],
                                y: i[1]
                            }
                        });
                        b.touchData.start ? b.touchData.start.trigger(S) : h.trigger(S)
                    }
                }
                if (g && b.touchData.cxt) {
                    var S = new a.Event(d, {
                        type: "cxtdrag",
                        cyPosition: {
                            x: i[0],
                            y: i[1]
                        }
                    });
                    b.data.bgActivePosistion = void 0, l[c.SELECT_BOX] = !0, b.touchData.start ? b.touchData.start.trigger(S) : h.trigger(S), b.touchData.start && (b.touchData.start._private.grabbed = !1), b.touchData.cxtDragged = !0;
                    var T = b.findNearestElement(i[0], i[1], !0, !0);
                    b.touchData.cxtOver && T === b.touchData.cxtOver || (b.touchData.cxtOver && b.touchData.cxtOver.trigger(new a.Event(d, {
                        type: "cxtdragout",
                        cyPosition: {
                            x: i[0],
                            y: i[1]
                        }
                    })), b.touchData.cxtOver = T, T && T.trigger(new a.Event(d, {
                        type: "cxtdragover",
                        cyPosition: {
                            x: i[0],
                            y: i[1]
                        }
                    })))
                } else if (g && d.touches[2] && h.boxSelectionEnabled()) b.data.bgActivePosistion = void 0, clearTimeout(this.threeFingerSelectTimeout), this.lastThreeTouch = +new Date, b.touchData.selecting = !0, l[c.SELECT_BOX] = !0, e && 0 !== e.length && void 0 !== e[0] ? (e[2] = (i[0] + i[2] + i[4]) / 3, e[3] = (i[1] + i[3] + i[5]) / 3) : (e[0] = (i[0] + i[2] + i[4]) / 3, e[1] = (i[1] + i[3] + i[5]) / 3, e[2] = (i[0] + i[2] + i[4]) / 3 + 1, e[3] = (i[1] + i[3] + i[5]) / 3 + 1), e[4] = 1, b.touchData.selecting = !0, b.redraw();
                else if (g && d.touches[1] && h.zoomingEnabled() && h.panningEnabled() && h.userZoomingEnabled() && h.userPanningEnabled()) {
                    b.data.bgActivePosistion = void 0, l[c.SELECT_BOX] = !0;
                    var U = b.dragData.touchDragEles;
                    if (U) {
                        l[c.DRAG] = !0;
                        for (var V = 0; V < U.length; V++) U[V]._private.grabbed = !1, U[V]._private.rscratch.inDragLayer = !1
                    }
                    var I = d.touches[0].clientX - u,
                        J = d.touches[0].clientY - v,
                        K = d.touches[1].clientX - u,
                        L = d.touches[1].clientY - v,
                        W = z(I, J, K, L),
                        X = W / q;
                    if (1 != X && y) {
                        var Y = I - m,
                            Z = J - n,
                            $ = K - o,
                            _ = L - p,
                            aa = (Y + $) / 2,
                            ba = (Z + _) / 2,
                            ca = h.zoom(),
                            da = ca * X,
                            ea = h.pan(),
                            fa = t[0] * ca + ea.x,
                            ga = t[1] * ca + ea.y,
                            ha = {
                                x: -da / ca * (fa - ea.x - aa) + fa,
                                y: -da / ca * (ga - ea.y - ba) + ga
                            };
                        if (b.touchData.start) {
                            var U = b.dragData.touchDragEles;
                            if (U)
                                for (var V = 0; V < U.length; V++) {
                                    var ia = U[V]._private;
                                    ia.grabbed = !1, ia.rscratch.inDragLayer = !1
                                }
                            var ja = b.touchData.start._private;
                            ja.active = !1, ja.grabbed = !1, ja.rscratch.inDragLayer = !1, l[c.DRAG] = !0, b.touchData.start.trigger("free").trigger("unactivate")
                        }
                        h.viewport({
                            zoom: da,
                            pan: ha,
                            cancelOnFailedZoom: !0
                        }), q = W, m = I, n = J, o = K, p = L, b.pinching = !0
                    }
                    if (d.touches[0]) {
                        var s = b.projectIntoViewport(d.touches[0].clientX, d.touches[0].clientY);
                        i[0] = s[0], i[1] = s[1]
                    }
                    if (d.touches[1]) {
                        var s = b.projectIntoViewport(d.touches[1].clientX, d.touches[1].clientY);
                        i[2] = s[0], i[3] = s[1]
                    }
                    if (d.touches[2]) {
                        var s = b.projectIntoViewport(d.touches[2].clientX, d.touches[2].clientY);
                        i[4] = s[0], i[5] = s[1]
                    }
                } else if (d.touches[0]) {
                    var ka = b.touchData.start,
                        la = b.touchData.last,
                        T = T || b.findNearestElement(i[0], i[1], !0, !0);
                    if (null != ka && "nodes" == ka._private.group && b.nodeIsDraggable(ka))
                        if (H >= b.touchTapThreshold2) {
                            for (var U = b.dragData.touchDragEles, ma = 0; ma < U.length; ma++) {
                                var na = U[ma];
                                if (b.nodeIsDraggable(na) && na.isNode() && na.grabbed()) {
                                    b.dragData.didDrag = !0;
                                    var oa = na._private.position,
                                        pa = !b.hoverData.draggingEles;
                                    if (a.is.number(w[0]) && a.is.number(w[1]) && (oa.x += w[0], oa.y += w[1]), pa) {
                                        f(na, {
                                            inDragLayer: !0
                                        }), l[c.NODE] = !0;
                                        var qa = b.touchData.dragDelta;
                                        a.is.number(qa[0]) && a.is.number(qa[1]) && (oa.x += qa[0], oa.y += qa[1])
                                    }
                                }
                            }
                            var ra = new a.Collection(h, na);
                            ra.updateCompoundBounds(), ra.trigger("position drag"), b.hoverData.draggingEles = !0, l[c.DRAG] = !0, b.touchData.startPosition[0] == j[0] && b.touchData.startPosition[1] == j[1] && (l[c.NODE] = !0), b.redraw()
                        } else {
                            var qa = b.touchData.dragDelta = b.touchData.dragDelta || [];
                            0 === qa.length ? (qa.push(w[0]), qa.push(w[1])) : (qa[0] += w[0], qa[1] += w[1])
                        }
                    null != ka && (ka.trigger(new a.Event(d, {
                        type: "touchmove",
                        cyPosition: {
                            x: i[0],
                            y: i[1]
                        }
                    })), ka.trigger(new a.Event(d, {
                        type: "tapdrag",
                        cyPosition: {
                            x: i[0],
                            y: i[1]
                        }
                    })), ka.trigger(new a.Event(d, {
                        type: "vmousemove",
                        cyPosition: {
                            x: i[0],
                            y: i[1]
                        }
                    }))), null == ka && (null != T && (T.trigger(new a.Event(d, {
                        type: "touchmove",
                        cyPosition: {
                            x: i[0],
                            y: i[1]
                        }
                    })), T.trigger(new a.Event(d, {
                        type: "tapdrag",
                        cyPosition: {
                            x: i[0],
                            y: i[1]
                        }
                    })), T.trigger(new a.Event(d, {
                        type: "vmousemove",
                        cyPosition: {
                            x: i[0],
                            y: i[1]
                        }
                    }))), null == T && (h.trigger(new a.Event(d, {
                        type: "touchmove",
                        cyPosition: {
                            x: i[0],
                            y: i[1]
                        }
                    })), h.trigger(new a.Event(d, {
                        type: "tapdrag",
                        cyPosition: {
                            x: i[0],
                            y: i[1]
                        }
                    })), h.trigger(new a.Event(d, {
                        type: "vmousemove",
                        cyPosition: {
                            x: i[0],
                            y: i[1]
                        }
                    })))), T != la && (la && la.trigger(new a.Event(d, {
                        type: "tapdragout",
                        cyPosition: {
                            x: i[0],
                            y: i[1]
                        }
                    })), T && T.trigger(new a.Event(d, {
                        type: "tapdragover",
                        cyPosition: {
                            x: i[0],
                            y: i[1]
                        }
                    }))), b.touchData.last = T;
                    for (var V = 0; V < i.length; V++) i[V] && b.touchData.startPosition[V] && Math.abs(i[V] - b.touchData.startPosition[V]) > 4 && (b.touchData.singleTouchMoved = !0);
                    if (g && (null == ka || ka.isEdge()) && h.panningEnabled() && h.userPanningEnabled()) {
                        b.swipePanning ? h.panBy({
                            x: w[0] * k,
                            y: w[1] * k
                        }) : H >= b.touchTapThreshold2 && (b.swipePanning = !0, h.panBy({
                            x: C * k,
                            y: E * k
                        })), ka && (ka.unactivate(), b.data.bgActivePosistion || (b.data.bgActivePosistion = {
                            x: i[0],
                            y: i[1]
                        }), l[c.SELECT_BOX] = !0, b.touchData.start = null);
                        var s = b.projectIntoViewport(d.touches[0].clientX, d.touches[0].clientY);
                        i[0] = s[0], i[1] = s[1]
                    }
                }
                for (var x = 0; x < i.length; x++) j[x] = i[x]
            }, 1e3 / 30, {
                trailing: !0
            }), !1), b.registerBinding(window, "touchcancel", function(a) {
                var c = b.touchData.start;
                b.touchData.capture = !1, c && c.unactivate()
            }), b.registerBinding(window, "touchend", function(d) {
                var e = b.touchData.start,
                    f = b.touchData.capture;
                if (f) {
                    b.touchData.capture = !1, d.preventDefault();
                    var h = b.data.select;
                    b.swipePanning = !1, b.hoverData.draggingEles = !1;
                    var i = b.data.cy,
                        j = i.zoom(),
                        k = b.touchData.now,
                        l = b.touchData.earlier,
                        m = b.data.canvasNeedsRedraw;
                    if (d.touches[0]) {
                        var n = b.projectIntoViewport(d.touches[0].clientX, d.touches[0].clientY);
                        k[0] = n[0], k[1] = n[1]
                    }
                    if (d.touches[1]) {
                        var n = b.projectIntoViewport(d.touches[1].clientX, d.touches[1].clientY);
                        k[2] = n[0], k[3] = n[1]
                    }
                    if (d.touches[2]) {
                        var n = b.projectIntoViewport(d.touches[2].clientX, d.touches[2].clientY);
                        k[4] = n[0], k[5] = n[1]
                    }
                    e && e.unactivate();
                    var o;
                    if (b.touchData.cxt) {
                        if (o = new a.Event(d, {
                                type: "cxttapend",
                                cyPosition: {
                                    x: k[0],
                                    y: k[1]
                                }
                            }), e ? e.trigger(o) : i.trigger(o), !b.touchData.cxtDragged) {
                            var p = new a.Event(d, {
                                type: "cxttap",
                                cyPosition: {
                                    x: k[0],
                                    y: k[1]
                                }
                            });
                            e ? e.trigger(p) : i.trigger(p)
                        }
                        return b.touchData.start && (b.touchData.start._private.grabbed = !1), b.touchData.cxt = !1, b.touchData.start = null, void b.redraw()
                    }
                    if (!d.touches[2] && i.boxSelectionEnabled() && b.touchData.selecting) {
                        b.touchData.selecting = !1, clearTimeout(this.threeFingerSelectTimeout);
                        var q = [],
                            r = b.getAllInBox(h[0], h[1], h[2], h[3]);
                        h[0] = void 0, h[1] = void 0, h[2] = void 0, h[3] = void 0, h[4] = 0, m[c.SELECT_BOX] = !0;
                        for (var s = 0; s < r.length; s++) r[s]._private.selectable && q.push(r[s]);
                        var t = new a.Collection(i, q);
                        "single" === i.selectionType() && i.$(":selected").unmerge(t).unselect(), t.select(), t.length > 0 ? m[c.NODE] = !0 : b.redraw()
                    }
                    var u = !1;
                    if (null != e && (e._private.active = !1, u = !0, e.unactivate()), d.touches[2]) b.data.bgActivePosistion = void 0, m[c.SELECT_BOX] = !0;
                    else if (d.touches[1]);
                    else if (d.touches[0]);
                    else if (!d.touches[0]) {
                        b.data.bgActivePosistion = void 0, m[c.SELECT_BOX] = !0;
                        var v = b.dragData.touchDragEles;
                        if (null != e) {
                            var w = e._private.grabbed;
                            g(v), m[c.DRAG] = !0, m[c.NODE] = !0, w && e.trigger("free"), e.trigger(new a.Event(d, {
                                type: "touchend",
                                cyPosition: {
                                    x: k[0],
                                    y: k[1]
                                }
                            })).trigger(new a.Event(d, {
                                type: "tapend",
                                cyPosition: {
                                    x: k[0],
                                    y: k[1]
                                }
                            })).trigger(new a.Event(d, {
                                type: "vmouseup",
                                cyPosition: {
                                    x: k[0],
                                    y: k[1]
                                }
                            })), e.unactivate(), b.touchData.start = null
                        } else {
                            var x = b.findNearestElement(k[0], k[1], !0, !0);
                            null != x && x.trigger(new a.Event(d, {
                                type: "touchend",
                                cyPosition: {
                                    x: k[0],
                                    y: k[1]
                                }
                            })).trigger(new a.Event(d, {
                                type: "tapend",
                                cyPosition: {
                                    x: k[0],
                                    y: k[1]
                                }
                            })).trigger(new a.Event(d, {
                                type: "vmouseup",
                                cyPosition: {
                                    x: k[0],
                                    y: k[1]
                                }
                            })), null == x && i.trigger(new a.Event(d, {
                                type: "touchend",
                                cyPosition: {
                                    x: k[0],
                                    y: k[1]
                                }
                            })).trigger(new a.Event(d, {
                                type: "tapend",
                                cyPosition: {
                                    x: k[0],
                                    y: k[1]
                                }
                            })).trigger(new a.Event(d, {
                                type: "vmouseup",
                                cyPosition: {
                                    x: k[0],
                                    y: k[1]
                                }
                            }))
                        }
                        var y = b.touchData.startPosition[0] - k[0],
                            z = y * y,
                            A = b.touchData.startPosition[1] - k[1],
                            B = A * A,
                            C = z + B,
                            D = C * j * j;
                        null != e && !b.dragData.didDrag && e._private.selectable && D < b.touchTapThreshold2 && !b.pinching && ("single" === i.selectionType() ? (i.$(":selected").unmerge(e).unselect(), e.select()) : e.selected() ? e.unselect() : e.select(), u = !0, m[c.NODE] = !0), b.touchData.singleTouchMoved === !1 && (e ? e.trigger(new a.Event(d, {
                            type: "tap",
                            cyPosition: {
                                x: k[0],
                                y: k[1]
                            }
                        })).trigger(new a.Event(d, {
                            type: "vclick",
                            cyPosition: {
                                x: k[0],
                                y: k[1]
                            }
                        })) : i.trigger(new a.Event(d, {
                            type: "tap",
                            cyPosition: {
                                x: k[0],
                                y: k[1]
                            }
                        })).trigger(new a.Event(d, {
                            type: "vclick",
                            cyPosition: {
                                x: k[0],
                                y: k[1]
                            }
                        }))), b.touchData.singleTouchMoved = !0
                    }
                    for (var E = 0; E < k.length; E++) l[E] = k[E];
                    b.dragData.didDrag = !1, 0 === d.touches.length && (b.touchData.dragDelta = []), u && e && e.updateStyle(!1), d.touches.length < 2 && (b.pinching = !1, m[c.NODE] = !0, b.redraw())
                }
            }, !1)
        }
    }(cytoscape), function(a) {
        "use strict";

        function b(b, c) {
            f[b] = {
                points: c,
                draw: function(a, c, e, g, h) {
                    d.drawPolygon(a, c, e, g, h, f[b].points)
                },
                drawPath: function(a, c, e, g, h) {
                    d.drawPolygonPath(a, c, e, g, h, f[b].points)
                },
                intersectLine: function(c, d, e, g, h, i, j) {
                    return a.math.polygonIntersectLine(h, i, f[b].points, c, d, e / 2, g / 2, j)
                },
                intersectBox: function(c, d, e, g, h, i, j, k, l) {
                    var m = f[b].points;
                    return a.math.boxIntersectPolygon(c, d, e, g, m, h, i, j, k, [0, -1], l)
                },
                checkPoint: function(c, d, e, g, h, i, j) {
                    return a.math.pointInsidePolygon(c, d, f[b].points, i, j, g, h, [0, -1], e)
                }
            }
        }
        for (var c = a("renderer", "canvas"), d = c.prototype, e = c.usePaths(), f = c.nodeShapes = {}, g = Math.sin(0), h = Math.cos(0), i = {}, j = {}, k = .1, l = 0 * Math.PI; l < 2 * Math.PI; l += k) i[l] = Math.sin(l), j[l] = Math.cos(l);
        f.ellipse = {
            draw: function(a, b, c, d, e) {
                f.ellipse.drawPath(a, b, c, d, e), a.fill()
            },
            drawPath: function(a, b, c, d, f) {
                if (e) {
                    a.beginPath && a.beginPath();
                    for (var l, m, n = d / 2, o = f / 2, p = 0 * Math.PI; p < 2 * Math.PI; p += k) l = b - n * i[p] * g + n * j[p] * h, m = c + o * j[p] * g + o * i[p] * h, 0 === p ? a.moveTo(l, m) : a.lineTo(l, m);
                    a.closePath()
                } else a.beginPath && a.beginPath(), a.translate(b, c), a.scale(d / 2, f / 2), a.arc(0, 0, 1, 0, 2 * Math.PI * .999, !1), a.closePath(), a.scale(2 / d, 2 / f), a.translate(-b, -c)
            },
            intersectLine: function(b, c, d, e, f, g, h) {
                var i = a.math.intersectLineEllipse(f, g, b, c, d / 2 + h, e / 2 + h);
                return i
            },
            intersectBox: function(b, c, d, e, f, g, h, i, j) {
                return a.math.boxIntersectEllipse(b, c, d, e, j, f, g, h, i)
            },
            checkPoint: function(a, b, c, d, e, f, g) {
                return a -= f, b -= g, a /= d / 2 + c, b /= e / 2 + c, Math.pow(a, 2) + Math.pow(b, 2) <= 1
            }
        }, b("triangle", a.math.generateUnitNgonPointsFitToSquare(3, 0)), b("square", a.math.generateUnitNgonPointsFitToSquare(4, 0)), f.rectangle = f.square, f.roundrectangle = {
            points: a.math.generateUnitNgonPointsFitToSquare(4, 0),
            draw: function(a, b, c, e, f) {
                d.drawRoundRectangle(a, b, c, e, f, 10)
            },
            drawPath: function(a, b, c, e, f) {
                d.drawRoundRectanglePath(a, b, c, e, f, 10)
            },
            intersectLine: function(b, c, d, e, f, g, h) {
                return a.math.roundRectangleIntersectLine(f, g, b, c, d, e, h)
            },
            intersectBox: function(b, c, d, e, f, g, h, i, j) {
                return a.math.roundRectangleIntersectBox(b, c, d, e, f, g, h, i, j)
            },
            checkPoint: function(b, c, d, e, g, h, i) {
                var j = a.math.getRoundRectangleRadius(e, g);
                if (a.math.pointInsidePolygon(b, c, f.roundrectangle.points, h, i, e, g - 2 * j, [0, -1], d)) return !0;
                if (a.math.pointInsidePolygon(b, c, f.roundrectangle.points, h, i, e - 2 * j, g, [0, -1], d)) return !0;
                var k = function(a, b, c, d, e, f, g) {
                    return a -= c, b -= d, a /= e / 2 + g, b /= f / 2 + g, Math.pow(a, 2) + Math.pow(b, 2) <= 1
                };
                return k(b, c, h - e / 2 + j, i - g / 2 + j, 2 * j, 2 * j, d) ? !0 : k(b, c, h + e / 2 - j, i - g / 2 + j, 2 * j, 2 * j, d) ? !0 : k(b, c, h + e / 2 - j, i + g / 2 - j, 2 * j, 2 * j, d) ? !0 : k(b, c, h - e / 2 + j, i + g / 2 - j, 2 * j, 2 * j, d) ? !0 : !1
            }
        }, b("diamond", [0, 1, 1, 0, 0, -1, -1, 0]), b("pentagon", a.math.generateUnitNgonPointsFitToSquare(5, 0)), b("hexagon", a.math.generateUnitNgonPointsFitToSquare(6, 0)), b("heptagon", a.math.generateUnitNgonPointsFitToSquare(7, 0)), b("octagon", a.math.generateUnitNgonPointsFitToSquare(8, 0));
        var m = new Array(20),
            n = a.math.generateUnitNgonPoints(5, 0),
            o = a.math.generateUnitNgonPoints(5, Math.PI / 5),
            p = .5 * (3 - Math.sqrt(5));
        p *= 1.57;
        for (var l = 0; l < o.length / 2; l++) o[2 * l] *= p, o[2 * l + 1] *= p;
        for (var l = 0; 5 > l; l++) m[4 * l] = n[2 * l], m[4 * l + 1] = n[2 * l + 1], m[4 * l + 2] = o[2 * l], m[4 * l + 3] = o[2 * l + 1];
        m = a.math.fitPolygonToSquare(m), b("star", m), b("vee", [-1, -1, 0, -.333, 1, -1, 0, 1]), b("rhomboid", [-1, -1, .333, -1, 1, 1, -.333, 1])
    }(cytoscape), function(a) {
        "use strict";

        function b(b) {
            this._private = {}, this._private.options = a.util.extend({}, c, b)
        }
        var c = {
            animate: !0,
            maxSimulationTime: 4e3,
            fit: !0,
            padding: 30,
            boundingBox: void 0,
            ungrabifyWhileSimulating: !1,
            ready: void 0,
            stop: void 0,
            repulsion: void 0,
            stiffness: void 0,
            friction: void 0,
            gravity: !0,
            fps: void 0,
            precision: void 0,
            nodeMass: void 0,
            edgeLength: void 0,
            stepSize: .1,
            stableEnergy: function(a) {
                var b = a;
                return b.max <= .5 || b.mean <= .3
            },
            infinite: !1
        };
        b.prototype.run = function() {
            var b = this,
                c = this._private.options;
            return a.util.require("arbor", function(d) {
                function e(a, b) {
                    return null == b ? void 0 : "function" == typeof b ? b.apply(a, [a._private.data, {
                        nodes: j.length,
                        edges: k.length,
                        element: a
                    }]) : b
                }

                function f(a) {
                    if (!a.isFullAutoParent()) {
                        var b = a._private.data.id,
                            d = e(a, c.nodeMass),
                            f = a._private.locked,
                            g = a.position(),
                            h = n.fromScreen({
                                x: g.x,
                                y: g.y
                            });
                        a.scratch().arbor = n.addNode(b, {
                            element: a,
                            mass: d,
                            fixed: f,
                            x: f && h ? h.x : void 0,
                            y: f && h ? h.y : void 0
                        })
                    }
                }

                function g(a) {
                    var b = a.source().id(),
                        d = a.target().id(),
                        f = e(a, c.edgeLength);
                    a.scratch().arbor = n.addEdge(b, d, {
                        length: f
                    })
                }
                var h = c.cy,
                    i = c.eles,
                    j = i.nodes().not(":parent"),
                    k = i.edges(),
                    l = a.util.makeBoundingBox(c.boundingBox ? c.boundingBox : {
                        x1: 0,
                        y1: 0,
                        w: h.width(),
                        h: h.height()
                    }),
                    m = !1;
                if (b.trigger({
                        type: "layoutstart",
                        layout: b
                    }), void 0 !== c.liveUpdate && (c.animate = c.liveUpdate), i.nodes().size() <= 1) return c.fit && h.reset(), i.nodes().position({
                    x: Math.round((l.x1 + l.x2) / 2),
                    y: Math.round((l.y1 + l.y2) / 2)
                }), b.one("layoutready", c.ready), b.trigger({
                    type: "layoutready",
                    layout: b
                }), b.one("layoutstop", c.stop), void b.trigger({
                    type: "layoutstop",
                    layout: b
                });
                var n = b._private.system = d.ParticleSystem();
                n.parameters({
                    repulsion: c.repulsion,
                    stiffness: c.stiffness,
                    friction: c.friction,
                    gravity: c.gravity,
                    fps: c.fps,
                    dt: c.dt,
                    precision: c.precision
                }), c.animate && c.fit && h.fit(l, c.padding);
                var o, p = 250,
                    q = !1,
                    r = +new Date,
                    s = {
                        init: function(a) {},
                        redraw: function() {
                            var a = n.energy();
                            if (!c.infinite && null != c.stableEnergy && null != a && a.n > 0 && c.stableEnergy(a)) return void b.stop();
                            c.infinite || p == 1 / 0 || (clearTimeout(o), o = setTimeout(z, p));
                            var d = h.collection();
                            n.eachNode(function(a, b) {
                                var c = a.data,
                                    e = c.element;
                                null != e && (e.locked() || e.grabbed() || (e.silentPosition({
                                    x: l.x1 + b.x,
                                    y: l.y1 + b.y
                                }), d.merge(e)))
                            }), c.animate && d.length > 0 && (m = !0, d.rtrigger("position"), c.fit && h.fit(c.padding), r = +new Date, m = !1), q || (q = !0, b.one("layoutready", c.ready), b.trigger({
                                type: "layoutready",
                                layout: b
                            }))
                        }
                    };
                n.renderer = s, n.screenSize(l.w, l.h), n.screenPadding(c.padding, c.padding, c.padding, c.padding), n.screenStep(c.stepSize);
                var t;
                j.on("grab free position", t = function(a) {
                    if (!m) {
                        var b = this.position(),
                            e = n.fromScreen(b);
                        if (e) {
                            var f = d.Point(e.x, e.y),
                                g = c.padding;
                            switch (l.x1 + g <= b.x && b.x <= l.x2 - g && l.y1 + g <= b.y && b.y <= l.y2 - g && (this.scratch().arbor.p = f), a.type) {
                                case "grab":
                                    this.scratch().arbor.fixed = !0;
                                    break;
                                case "free":
                                    this.scratch().arbor.fixed = !1
                            }
                        }
                    }
                });
                var u;
                j.on("lock unlock", u = function(a) {
                    node.scratch().arbor.fixed = node.locked()
                });
                var v;
                i.on("remove", v = function(a) {});
                var w;
                h.on("add", "*", w = function() {});
                var x;
                h.on("resize", x = function() {
                    if (null == c.boundingBox && null != b._private.system) {
                        var a = h.width(),
                            d = h.height();
                        n.screenSize(a, d)
                    }
                }), j.each(function(a, b) {
                    f(b)
                }), k.each(function(a, b) {
                    g(b)
                });
                var y = j.filter(":grabbable");
                c.ungrabifyWhileSimulating && y.ungrabify();
                var z = b._private.doneHandler = function() {
                    b._private.doneHandler = null, c.animate || (c.fit && h.reset(), j.rtrigger("position")), j.off("grab free position", t), j.off("lock unlock", u), i.off("remove", v), h.off("add", "*", w), h.off("resize", x), c.ungrabifyWhileSimulating && y.grabify(), b.one("layoutstop", c.stop), b.trigger({
                        type: "layoutstop",
                        layout: b
                    })
                };
                n.start(), !c.infinite && null != c.maxSimulationTime && c.maxSimulationTime > 0 && c.maxSimulationTime !== 1 / 0 && setTimeout(function() {
                    b.stop()
                }, c.maxSimulationTime)
            }), this
        }, b.prototype.stop = function() {
            return null != this._private.system && this._private.system.stop(), this._private.doneHandler && this._private.doneHandler(), this
        }, a("layout", "arbor", b)
    }(cytoscape), function(a) {
        "use strict";

        function b(b) {
            this.options = a.util.extend({}, c, b)
        }
        var c = {
            fit: !0,
            directed: !1,
            padding: 30,
            circle: !1,
            spacingFactor: 1.75,
            boundingBox: void 0,
            avoidOverlap: !0,
            roots: void 0,
            maximalAdjustments: 0,
            animate: !1,
            animationDuration: 500,
            ready: void 0,
            stop: void 0
        };
        b.prototype.run = function() {
            var b, c = this.options,
                d = c,
                e = c.cy,
                f = d.eles,
                g = f.nodes().not(":parent"),
                h = f,
                i = a.util.makeBoundingBox(d.boundingBox ? d.boundingBox : {
                    x1: 0,
                    y1: 0,
                    w: e.width(),
                    h: e.height()
                });
            if (a.is.elementOrCollection(d.roots)) b = d.roots;
            else if (a.is.array(d.roots)) {
                for (var j = [], k = 0; k < d.roots.length; k++) {
                    var l = d.roots[k],
                        m = e.getElementById(l);
                    j.push(m)
                }
                b = new a.Collection(e, j)
            } else if (a.is.string(d.roots)) b = e.$(d.roots);
            else if (d.directed) b = g.roots();
            else {
                for (var n = [], o = g; o.length > 0;) {
                    var p = e.collection();
                    f.bfs({
                        roots: o[0],
                        visit: function(a, b, c, d, e) {
                            p = p.add(c)
                        },
                        directed: !1
                    }), o = o.not(p), n.push(p)
                }
                b = e.collection();
                for (var k = 0; k < n.length; k++) {
                    var q = n[k],
                        r = q.maxDegree(!1),
                        s = q.filter(function() {
                            return this.degree(!1) === r
                        });
                    b = b.add(s)
                }
            }
            var t = [],
                u = {},
                v = {},
                w = {},
                x = {},
                y = {};
            h.bfs({
                roots: b,
                directed: d.directed,
                visit: function(a, b, c, d, e) {
                    var f = this[0],
                        g = f.id();
                    if (t[b] || (t[b] = []), t[b].push(f), u[g] = !0, v[g] = b, w[g] = e, x[g] = d, e) {
                        var h = e.id(),
                            i = y[h] = y[h] || [];
                        i.push(c)
                    }
                }
            });
            for (var z = [], k = 0; k < g.length; k++) {
                var m = g[k];
                u[m.id()] || z.push(m)
            }
            for (var A = 3 * z.length, B = 0; 0 !== z.length && A > B;) {
                for (var C = z.shift(), D = C.neighborhood().nodes(), E = !1, k = 0; k < D.length; k++) {
                    var F = v[D[k].id()];
                    if (void 0 !== F) {
                        t[F].push(C), E = !0;
                        break
                    }
                }
                E || z.push(C), B++
            }
            for (; 0 !== z.length;) {
                var C = z.shift(),
                    E = !1;
                E || (0 === t.length && t.push([]), t[0].push(C))
            }
            var G = function() {
                for (var a = 0; a < t.length; a++)
                    for (var b = t[a], c = 0; c < b.length; c++) {
                        var d = b[c];
                        d._private.scratch.breadthfirst = {
                            depth: a,
                            index: c
                        }
                    }
            };
            G();
            for (var H = function(a) {
                    for (var b, c = a.connectedEdges(function() {
                            return this.data("target") === a.id()
                        }), d = a._private.scratch.breadthfirst, e = 0, f = 0; f < c.length; f++) {
                        var g = c[f],
                            h = g.source()[0],
                            i = h._private.scratch.breadthfirst;
                        d.depth <= i.depth && e < i.depth && (e = i.depth, b = h)
                    }
                    return b
                }, I = 0; I < d.maximalAdjustments; I++) {
                for (var J = t.length, K = [], k = 0; J > k; k++)
                    for (var F = t[k], L = F.length, M = 0; L > M; M++) {
                        var m = F[M],
                            N = m._private.scratch.breadthfirst,
                            O = H(m);
                        O && (N.intEle = O, K.push(m))
                    }
                for (var k = 0; k < K.length; k++) {
                    var m = K[k],
                        N = m._private.scratch.breadthfirst,
                        O = N.intEle,
                        P = O._private.scratch.breadthfirst;
                    t[N.depth].splice(N.index, 1);
                    for (var Q = P.depth + 1; Q > t.length - 1;) t.push([]);
                    t[Q].push(m), N.depth = Q, N.index = t[Q].length - 1
                }
                G()
            }
            var R = 0;
            if (d.avoidOverlap) {
                for (var k = 0; k < g.length; k++) {
                    var S = g[k].outerWidth(),
                        T = g[k].outerHeight();
                    R = Math.max(R, S, T)
                }
                R *= d.spacingFactor
            }
            for (var U = {}, V = function(a) {
                    if (U[a.id()]) return U[a.id()];
                    for (var b = a._private.scratch.breadthfirst.depth, c = a.neighborhood().nodes().not(":parent"), d = 0, e = 0, f = 0; f < c.length; f++) {
                        var g = c[f],
                            h = g._private.scratch.breadthfirst,
                            i = h.index,
                            j = h.depth,
                            k = t[j].length;
                        (b > j || 0 === b) && (d += i / k, e++)
                    }
                    return e = Math.max(1, e), d /= e, 0 === e && (d = void 0), U[a.id()] = d, d
                }, W = function(a, b) {
                    var c = V(a),
                        d = V(b);
                    return c - d
                }, X = 0; 3 > X; X++) {
                for (var k = 0; k < t.length; k++) t[k] = t[k].sort(W);
                G()
            }
            for (var Y = 0, k = 0; k < t.length; k++) Y = Math.max(t[k].length, Y);
            for (var Z = {
                    x: i.x1 + i.w / 2,
                    y: i.x1 + i.h / 2
                }, $ = function(a, b) {
                    var c = a._private.scratch.breadthfirst,
                        e = c.depth,
                        f = c.index,
                        g = t[e].length,
                        h = Math.max(i.w / (g + 1), R),
                        j = Math.max(i.h / (t.length + 1), R),
                        k = Math.min(i.w / 2 / t.length, i.h / 2 / t.length);
                    if (k = Math.max(k, R), d.circle) {
                        if (d.circle) {
                            var l = k * e + k - (t.length > 0 && t[0].length <= 3 ? k / 2 : 0),
                                m = 2 * Math.PI / t[e].length * f;
                            return 0 === e && 1 === t[0].length && (l = 1), {
                                x: Z.x + l * Math.cos(m),
                                y: Z.y + l * Math.sin(m)
                            }
                        }
                        return {
                            x: Z.x + (f + 1 - (g + 1) / 2) * h,
                            y: (e + 1) * j
                        }
                    }
                    var n = {
                        x: Z.x + (f + 1 - (g + 1) / 2) * h,
                        y: (e + 1) * j
                    };
                    return b ? n : n
                }, _ = {}, k = t.length - 1; k >= 0; k--)
                for (var F = t[k], M = 0; M < F.length; M++) {
                    var C = F[M];
                    _[C.id()] = $(C, k === t.length - 1)
                }
            return g.layoutPositions(this, d, function() {
                return _[this.id()]
            }), this
        }, a("layout", "breadthfirst", b)
    }(cytoscape), function(a) {
        "use strict";

        function b(b) {
            this.options = a.util.extend({}, c, b)
        }
        var c = {
            fit: !0,
            padding: 30,
            boundingBox: void 0,
            avoidOverlap: !0,
            radius: void 0,
            startAngle: 1.5 * Math.PI,
            counterclockwise: !1,
            sort: void 0,
            animate: !1,
            animationDuration: 500,
            ready: void 0,
            stop: void 0
        };
        b.prototype.run = function() {
            var b = this.options,
                c = b,
                d = b.cy,
                e = c.eles,
                f = e.nodes().not(":parent");
            c.sort && (f = f.sort(c.sort));
            for (var g, h = a.util.makeBoundingBox(c.boundingBox ? c.boundingBox : {
                    x1: 0,
                    y1: 0,
                    w: d.width(),
                    h: d.height()
                }), i = {
                    x: h.x1 + h.w / 2,
                    y: h.y1 + h.h / 2
                }, j = c.startAngle, k = 2 * Math.PI / f.length, l = 0, m = 0; m < f.length; m++) {
                var n = f[m].outerWidth(),
                    o = f[m].outerHeight();
                l = Math.max(l, n, o)
            }
            if (g = a.is.number(c.radius) ? c.radius : f.length <= 1 ? 0 : Math.min(h.h, h.w) / 2 - l, f.length > 1 && c.avoidOverlap) {
                l *= 1.75;
                var k = 2 * Math.PI / f.length,
                    p = Math.cos(k) - Math.cos(0),
                    q = Math.sin(k) - Math.sin(0),
                    r = Math.sqrt(l * l / (p * p + q * q));
                g = Math.max(r, g)
            }
            var s = function(a, b) {
                var d = g * Math.cos(j),
                    e = g * Math.sin(j),
                    f = {
                        x: i.x + d,
                        y: i.y + e
                    };
                return j = c.counterclockwise ? j - k : j + k, f
            };
            return f.layoutPositions(this, c, s), this
        }, a("layout", "circle", b)
    }(cytoscape), function(a) {
        "use strict";

        function b(b) {
            this.options = a.util.extend(!0, {}, c, b)
        }
        var c = {
            animate: !0,
            refresh: 1,
            maxSimulationTime: 4e3,
            ungrabifyWhileSimulating: !1,
            fit: !0,
            padding: 30,
            boundingBox: void 0,
            ready: function() {},
            stop: function() {},
            randomize: !1,
            avoidOverlap: !0,
            handleDisconnected: !0,
            nodeSpacing: function(a) {
                return 10
            },
            flow: void 0,
            alignment: void 0,
            edgeLength: void 0,
            edgeSymDiffLength: void 0,
            edgeJaccardLength: void 0,
            unconstrIter: void 0,
            userConstIter: void 0,
            allConstIter: void 0,
            infinite: !1
        };
        b.prototype.run = function() {
            var b = this,
                c = this.options;
            return b.manuallyStopped = !1, a.util.require("cola", function(d) {
                var e = c.cy,
                    f = c.eles,
                    g = f.nodes(),
                    h = f.edges(),
                    i = !1,
                    j = a.util.makeBoundingBox(c.boundingBox ? c.boundingBox : {
                        x1: 0,
                        y1: 0,
                        w: e.width(),
                        h: e.height()
                    }),
                    k = function(b, c) {
                        if (a.is.fn(b)) {
                            var d = b;
                            return d.apply(c, [c])
                        }
                        return b
                    },
                    l = function() {
                        for (var b = {
                                min: 1 / 0,
                                max: -(1 / 0)
                            }, d = {
                                min: 1 / 0,
                                max: -(1 / 0)
                            }, f = 0; f < g.length; f++) {
                            var h = g[f],
                                l = h._private.scratch.cola;
                            if (b.min = Math.min(b.min, l.x || 0), b.max = Math.max(b.max, l.x || 0), d.min = Math.min(d.min, l.y || 0), d.max = Math.max(d.max, l.y || 0), !l.updatedDims) {
                                var m = h.boundingBox(),
                                    o = k(c.nodeSpacing, h);
                                l.width = m.w + 2 * o, l.height = m.h + 2 * o
                            }
                        }
                        g.positions(function(c, e) {
                            var f, g = e._private.scratch.cola;
                            return e.grabbed() || e.isParent() || (f = {
                                x: j.x1 + g.x - b.min,
                                y: j.y1 + g.y - d.min
                            }, a.is.number(f.x) && a.is.number(f.y) || (f = void 0)), f
                        }), g.updateCompoundBounds(), i || (n(), i = !0), c.fit && e.fit(c.padding)
                    },
                    m = function() {
                        c.ungrabifyWhileSimulating && r.grabify(), g.off("grab free position", s), g.off("lock unlock", t), b.one("layoutstop", c.stop), b.trigger({
                            type: "layoutstop",
                            layout: b
                        })
                    },
                    n = function() {
                        b.one("layoutready", c.ready), b.trigger({
                            type: "layoutready",
                            layout: b
                        })
                    },
                    o = c.refresh,
                    p = 1;
                c.refresh < 0 ? (p = Math.abs(c.refresh), o = 1) : o = Math.max(1, o);
                var q = b.adaptor = d.adaptor({
                    trigger: function(a) {
                        var b = d.EventType ? d.EventType.tick : null,
                            e = d.EventType ? d.EventType.end : null;
                        switch (a.type) {
                            case "tick":
                            case b:
                                c.animate && l();
                                break;
                            case "end":
                            case e:
                                l(), c.infinite || m()
                        }
                    },
                    kick: function() {
                        var d = function() {
                                if (b.manuallyStopped) return m(), !0;
                                var a = q.tick();
                                return a && c.infinite && q.resume(), a
                            },
                            e = function() {
                                for (var a, b = 0; o > b && !a; b++) a = a || d();
                                return a
                            };
                        if (c.animate) {
                            var f = function() {
                                e() || a.util.requestAnimationFrame(f)
                            };
                            a.util.requestAnimationFrame(f)
                        } else
                            for (; !d(););
                    },
                    on: function(a, b) {},
                    drag: function() {}
                });
                b.adaptor = q;
                var r = g.filter(":grabbable");
                c.ungrabifyWhileSimulating && r.ungrabify();
                var s;
                g.on("grab free position", s = function(b) {
                    var c = this,
                        d = c._private.scratch.cola,
                        e = c._private.position;
                    switch (c.grabbed() ? (d.x = e.x - j.x1, d.y = e.y - j.y1, q.dragstart(d)) : a.is.number(d.x) && a.is.number(d.y) && (e.x = d.x + j.x1, e.y = d.y + j.y1), b.type) {
                        case "grab":
                            q.dragstart(d), q.resume();
                            break;
                        case "free":
                            q.dragend(d)
                    }
                });
                var t;
                g.on("lock unlock", t = function(a) {
                    var b = this,
                        c = b._private.scratch.cola;
                    b.locked() ? q.dragstart(c) : q.dragend(c)
                });
                var u = g.stdFilter(function(a) {
                    return !a.isParent()
                });
                if (q.nodes(u.map(function(a, b) {
                        var d = k(c.nodeSpacing, a),
                            e = a.position(),
                            f = a.boundingBox(),
                            g = a._private.scratch.cola = {
                                x: c.randomize || void 0 === e.x ? Math.round(Math.random() * j.w) : e.x,
                                y: c.randomize || void 0 === e.y ? Math.round(Math.random() * j.h) : e.y,
                                width: f.w + 2 * d,
                                height: f.h + 2 * d,
                                index: b
                            };
                        return g
                    })), c.alignment) {
                    var v = [],
                        w = [];
                    u.forEach(function(a) {
                        var b = k(c.alignment, a),
                            d = a._private.scratch.cola,
                            e = d.index;
                        b && (null != b.x && v.push({
                            node: e,
                            offset: b.x
                        }), null != b.y && w.push({
                            node: e,
                            offset: b.y
                        }))
                    });
                    var x = [];
                    v.length > 0 && x.push({
                        type: "alignment",
                        axis: "x",
                        offsets: v
                    }), w.length > 0 && x.push({
                        type: "alignment",
                        axis: "y",
                        offsets: w
                    }), q.constraints(x)
                }
                q.groups(g.stdFilter(function(a) {
                    return a.isParent()
                }).map(function(a, b) {
                    var d = a._private.style,
                        e = k(c.nodeSpacing, a),
                        f = d["padding-left"].pxValue + e,
                        g = d["padding-right"].pxValue + e,
                        h = d["padding-top"].pxValue + e,
                        i = d["padding-bottom"].pxValue + e;
                    return a._private.scratch.cola = {
                        index: b,
                        padding: Math.max(f, g, h, i),
                        leaves: a.descendants().stdFilter(function(a) {
                            return !a.isParent()
                        }).map(function(a) {
                            return a[0]._private.scratch.cola.index
                        })
                    }, a
                }).map(function(a) {
                    return a._private.scratch.cola.groups = a.descendants().stdFilter(function(a) {
                        return a.isParent()
                    }).map(function(a) {
                        return a._private.scratch.cola.index
                    }), a._private.scratch.cola
                }));
                var y, z;
                null != c.edgeLength ? (y = c.edgeLength, z = "linkDistance") : null != c.edgeSymDiffLength ? (y = c.edgeSymDiffLength, z = "symmetricDiffLinkLengths") : null != c.edgeJaccardLength ? (y = c.edgeJaccardLength, z = "jaccardLinkLengths") : (y = 100, z = "linkDistance");
                var A = function(a) {
                    return a.calcLength
                };
                if (q.links(h.stdFilter(function(a) {
                        return !a.source().isParent() && !a.target().isParent()
                    }).map(function(a, b) {
                        var c = a._private.scratch.cola = {
                            source: a.source()[0]._private.scratch.cola.index,
                            target: a.target()[0]._private.scratch.cola.index
                        };
                        return null != y && (c.calcLength = k(y, a)), c
                    })), q.size([j.w, j.h]), null != y && q[z](A), c.flow) {
                    var B, C = "y",
                        D = 50;
                    a.is.string(c.flow) ? B = {
                        axis: c.flow,
                        minSeparation: D
                    } : a.is.number(c.flow) ? B = {
                        axis: C,
                        minSeparation: c.flow
                    } : a.is.plainObject(c.flow) ? (B = c.flow, B.axis = B.axis || C, B.minSeparation = null != B.minSeparation ? B.minSeparation : D) : B = {
                        axis: C,
                        minSeparation: D
                    }, q.flowLayout(B.axis, B.minSeparation)
                }
                b.trigger({
                    type: "layoutstart",
                    layout: b
                }), q.avoidOverlaps(c.avoidOverlap).handleDisconnected(c.handleDisconnected).start(c.unconstrIter, c.userConstIter, c.allConstIter), c.infinite || setTimeout(function() {
                    b.manuallyStopped || q.stop()
                }, c.maxSimulationTime)
            }), this
        }, b.prototype.stop = function() {
            return this.adaptor && (this.manuallyStopped = !0, this.adaptor.stop()), this
        }, a("layout", "cola", b)
    }(cytoscape), function(a) {
        "use strict";

        function b(b) {
            this.options = a.util.extend({}, c, b)
        }
        var c = {
            fit: !0,
            padding: 30,
            startAngle: 1.5 * Math.PI,
            counterclockwise: !1,
            minNodeSpacing: 10,
            boundingBox: void 0,
            avoidOverlap: !0,
            height: void 0,
            width: void 0,
            concentric: function(a) {
                return a.degree()
            },
            levelWidth: function(a) {
                return a.maxDegree() / 4
            },
            animate: !1,
            animationDuration: 500,
            ready: void 0,
            stop: void 0
        };
        b.prototype.run = function() {
            for (var b = this.options, c = b, d = b.cy, e = c.eles, f = e.nodes().not(":parent"), g = a.util.makeBoundingBox(c.boundingBox ? c.boundingBox : {
                    x1: 0,
                    y1: 0,
                    w: d.width(),
                    h: d.height()
                }), h = {
                    x: g.x1 + g.w / 2,
                    y: g.y1 + g.h / 2
                }, i = [], j = c.startAngle, k = 0, l = 0; l < f.length; l++) {
                var m, n = f[l];
                m = c.concentric.apply(n, [n]), i.push({
                    value: m,
                    node: n
                }), n._private.scratch.concentric = m
            }
            f.updateStyle();
            for (var l = 0; l < f.length; l++) {
                var n = f[l];
                k = Math.max(k, n.outerWidth(), n.outerHeight())
            }
            i.sort(function(a, b) {
                return b.value - a.value
            });
            for (var o = c.levelWidth(f), p = [
                    []
                ], q = p[0], l = 0; l < i.length; l++) {
                var r = i[l];
                if (q.length > 0) {
                    var s = Math.abs(q[0].value - r.value);
                    s >= o && (q = [], p.push(q))
                }
                q.push(r)
            }
            var t = {},
                u = 0,
                v = k + c.minNodeSpacing;
            if (!c.avoidOverlap) {
                var w = p.length > 0 && p[0].length > 1,
                    x = Math.min(g.w, g.h) / 2 - v,
                    y = x / (p.length + w ? 1 : 0);
                v = Math.min(v, y)
            }
            for (var l = 0; l < p.length; l++) {
                var z = p[l],
                    A = 2 * Math.PI / z.length;
                if (z.length > 1 && c.avoidOverlap) {
                    var B = Math.cos(A) - Math.cos(0),
                        C = Math.sin(A) - Math.sin(0),
                        D = Math.sqrt(v * v / (B * B + C * C));
                    u = Math.max(D, u)
                }
                for (var E = 0; E < z.length; E++) {
                    var r = z[E],
                        j = c.startAngle + (c.counterclockwise ? -1 : 1) * A * E,
                        F = {
                            x: h.x + u * Math.cos(j),
                            y: h.y + u * Math.sin(j)
                        };
                    t[r.node.id()] = F
                }
                u += v
            }
            return f.layoutPositions(this, c, function() {
                var a = this.id();
                return t[a]
            }), this
        }, a("layout", "concentric", b)
    }(cytoscape), function(a) {
        "use strict";

        function b(b) {
            this.options = a.util.extend({}, d, b)
        }
        var c, d = {
            ready: function() {},
            stop: function() {},
            animate: !0,
            refresh: 4,
            fit: !0,
            padding: 30,
            boundingBox: void 0,
            randomize: !0,
            debug: !1,
            nodeRepulsion: 4e5,
            nodeOverlap: 10,
            idealEdgeLength: 10,
            edgeElasticity: 100,
            nestingFactor: 5,
            gravity: 250,
            numIter: 100,
            initialTemp: 200,
            coolingFactor: .95,
            minTemp: 1
        };
        b.prototype.run = function() {
            var b = this.options,
                d = b.cy,
                f = this;
            f.stopped = !1, f.trigger({
                type: "layoutstart",
                layout: f
            }), c = !0 === b.debug ? !0 : !1;
            var g = new Date,
                l = e(d, f, b);
            c && h(l), !0 === b.randomize && i(l, d), s(l, d, b);
            var m = function(a) {
                    return f.stopped ? !1 : (k(l, d, b, a), l.temperature = l.temperature * b.coolingFactor, l.temperature < b.minTemp ? !1 : !0)
                },
                n = function() {
                    j(l, d, b), !0 === b.fit && d.fit(b.padding);
                    var a = new Date;
                    console.info("Layout took " + (a - g) + " ms"), f.one("layoutstop", b.stop), f.trigger({
                        type: "layoutstop",
                        layout: f
                    })
                };
            if (b.animate) {
                var o = 0,
                    p = function() {
                        for (var c, e = 0; e < b.refresh && o < b.numIter;) {
                            var c = m(o);
                            if (c === !1) break;
                            e++, o++
                        }
                        j(l, d, b), b.fit && d.fit(b.padding), c !== !1 && o + 1 < b.numIter ? a.util.requestAnimationFrame(p) : n()
                    };
                a.util.requestAnimationFrame(p)
            } else {
                for (var o = 0; o < b.numIter && m(o) !== !1; o++);
                n()
            }
            return this
        }, b.prototype.stop = function() {
            return this.stopped = !0, this
        };
        var e = function(b, c, d) {
                for (var e = d.eles.edges(), g = d.eles.nodes(), h = {
                        layout: c,
                        layoutNodes: [],
                        idToIndex: {},
                        nodeSize: g.size(),
                        graphSet: [],
                        indexToGraph: [],
                        layoutEdges: [],
                        edgeSize: e.size(),
                        temperature: d.initialTemp,
                        clientWidth: b.width(),
                        clientHeight: b.width(),
                        boundingBox: a.util.makeBoundingBox(d.boundingBox ? d.boundingBox : {
                            x1: 0,
                            y1: 0,
                            w: b.width(),
                            h: b.height()
                        })
                    }, i = 0; i < h.nodeSize; i++) {
                    var j = {};
                    j.id = g[i].data("id"), j.parentId = g[i].data("parent"), j.children = [], j.positionX = g[i].position("x"), j.positionY = g[i].position("y"), j.offsetX = 0, j.offsetY = 0, j.height = g[i].height(), j.width = g[i].width(), j.maxX = j.positionX + j.width / 2, j.minX = j.positionX - j.width / 2, j.maxY = j.positionY + j.height / 2, j.minY = j.positionY - j.height / 2, j.padLeft = g[i]._private.style["padding-left"].pxValue, j.padRight = g[i]._private.style["padding-right"].pxValue, j.padTop = g[i]._private.style["padding-top"].pxValue, j.padBottom = g[i]._private.style["padding-bottom"].pxValue, h.layoutNodes.push(j), h.idToIndex[j.id] = i
                }
                for (var k = [], l = 0, m = -1, n = [], i = 0; i < h.nodeSize; i++) {
                    var o = h.layoutNodes[i],
                        p = o.parentId;
                    null != p ? h.layoutNodes[h.idToIndex[p]].children.push(o.id) : (k[++m] = o.id, n.push(o.id))
                }
                for (h.graphSet.push(n); m >= l;) {
                    var q = k[l++],
                        r = h.idToIndex[q],
                        s = h.layoutNodes[r],
                        t = s.children;
                    if (t.length > 0) {
                        h.graphSet.push(t);
                        for (var i = 0; i < t.length; i++) k[++m] = t[i]
                    }
                }
                for (var i = 0; i < h.graphSet.length; i++)
                    for (var u = h.graphSet[i], v = 0; v < u.length; v++) {
                        var w = h.idToIndex[u[v]];
                        h.indexToGraph[w] = i
                    }
                for (var i = 0; i < h.edgeSize; i++) {
                    var x = e[i],
                        y = {};
                    y.id = x.data("id"), y.sourceId = x.data("source"), y.targetId = x.data("target");
                    var z = d.idealEdgeLength,
                        A = h.idToIndex[y.sourceId],
                        B = h.idToIndex[y.targetId],
                        C = h.indexToGraph[A],
                        D = h.indexToGraph[B];
                    if (C != D) {
                        for (var E = f(y.sourceId, y.targetId, h), F = h.graphSet[E], G = 0, j = h.layoutNodes[A]; - 1 === $.inArray(j.id, F);) j = h.layoutNodes[h.idToIndex[j.parentId]], G++;
                        for (j = h.layoutNodes[B]; - 1 === $.inArray(j.id, F);) j = h.layoutNodes[h.idToIndex[j.parentId]], G++;
                        z *= G * d.nestingFactor
                    }
                    y.idealLength = z, h.layoutEdges.push(y)
                }
                return h
            },
            f = function(a, b, c) {
                var d = g(a, b, 0, c);
                return 2 > d.count ? 0 : d.graph
            },
            g = function(a, b, c, d) {
                var e = d.graphSet[c];
                if (-1 < $.inArray(a, e) && -1 < $.inArray(b, e)) return {
                    count: 2,
                    graph: c
                };
                for (var f = 0, h = 0; h < e.length; h++) {
                    var i = e[h],
                        j = d.idToIndex[i],
                        k = d.layoutNodes[j].children;
                    if (0 !== k.length) {
                        var l = d.indexToGraph[d.idToIndex[k[0]]],
                            m = g(a, b, l, d);
                        if (0 !== m.count) {
                            if (1 !== m.count) return m;
                            if (f++, 2 === f) break
                        }
                    }
                }
                return {
                    count: f,
                    graph: c
                }
            },
            h = function(a) {
                if (c) {
                    console.debug("layoutNodes:");
                    for (var b = 0; b < a.nodeSize; b++) {
                        var d = a.layoutNodes[b],
                            e = "\nindex: " + b + "\nId: " + d.id + "\nChildren: " + d.children.toString() + "\nparentId: " + d.parentId + "\npositionX: " + d.positionX + "\npositionY: " + d.positionY + "\nOffsetX: " + d.offsetX + "\nOffsetY: " + d.offsetY + "\npadLeft: " + d.padLeft + "\npadRight: " + d.padRight + "\npadTop: " + d.padTop + "\npadBottom: " + d.padBottom;
                        console.debug(e)
                    }
                    console.debug("idToIndex");
                    for (var b in a.idToIndex) console.debug("Id: " + b + "\nIndex: " + a.idToIndex[b]);
                    console.debug("Graph Set");
                    for (var f = a.graphSet, b = 0; b < f.length; b++) console.debug("Set : " + b + ": " + f[b].toString());
                    for (var e = "IndexToGraph", b = 0; b < a.indexToGraph.length; b++) e += "\nIndex : " + b + " Graph: " + a.indexToGraph[b];
                    console.debug(e), e = "Layout Edges";
                    for (var b = 0; b < a.layoutEdges.length; b++) {
                        var g = a.layoutEdges[b];
                        e += "\nEdge Index: " + b + " ID: " + g.id + " SouceID: " + g.sourceId + " TargetId: " + g.targetId + " Ideal Length: " + g.idealLength
                    }
                    console.debug(e), e = "nodeSize: " + a.nodeSize, e += "\nedgeSize: " + a.edgeSize, e += "\ntemperature: " + a.temperature, console.debug(e)
                }
            },
            i = function(a, b) {
                for (var c = a.clientWidth, d = a.clientHeight, e = 0; e < a.nodeSize; e++) {
                    var f = a.layoutNodes[e];
                    f.positionX = Math.random() * c, f.positionY = Math.random() * d
                }
            },
            j = function(a, b, c) {
                var d = a.layout,
                    e = c.eles.nodes(),
                    f = a.boundingBox,
                    g = {
                        x1: 1 / 0,
                        x2: -(1 / 0),
                        y1: 1 / 0,
                        y2: -(1 / 0)
                    };
                c.boundingBox && (e.forEach(function(b) {
                    var c = a.layoutNodes[a.idToIndex[b.data("id")]];
                    g.x1 = Math.min(g.x1, c.positionX), g.x2 = Math.max(g.x2, c.positionX), g.y1 = Math.min(g.y1, c.positionY), g.y2 = Math.max(g.y2, c.positionY)
                }), g.w = g.x2 - g.x1, g.h = g.y2 - g.y1), e.positions(function(b, d) {
                    var e = a.layoutNodes[a.idToIndex[d.data("id")]];
                    if (c.boundingBox) {
                        var h = (e.positionX - g.x1) / g.w,
                            i = (e.positionY - g.y1) / g.h;
                        return {
                            x: f.x1 + h * f.w,
                            y: f.y1 + i * f.h
                        }
                    }
                    return {
                        x: e.positionX,
                        y: e.positionY
                    }
                }), !0 !== a.ready && (a.ready = !0, d.one("layoutready", c.ready), d.trigger({
                    type: "layoutready",
                    layout: this
                }))
            },
            k = function(a, b, c, d) {
                l(a, b, c), p(a, b, c), q(a, b, c), r(a, b, c), s(a, b, c)
            },
            l = function(a, b, c) {
                for (var d = 0; d < a.graphSet.length; d++)
                    for (var e = a.graphSet[d], f = e.length, g = 0; f > g; g++)
                        for (var h = a.layoutNodes[a.idToIndex[e[g]]], i = g + 1; f > i; i++) {
                            var j = a.layoutNodes[a.idToIndex[e[i]]];
                            m(h, j, a, b, c)
                        }
            },
            m = function(a, b, c, d, e) {
                var f = b.positionX - a.positionX,
                    g = b.positionY - a.positionY;
                if (0 !== f || 0 !== g) {
                    var h = o(a, b, f, g);
                    if (h > 0) var i = e.nodeOverlap * h,
                        j = Math.sqrt(f * f + g * g),
                        k = i * f / j,
                        l = i * g / j;
                    else var m = n(a, f, g),
                        p = n(b, -1 * f, -1 * g),
                        q = p.x - m.x,
                        r = p.y - m.y,
                        s = q * q + r * r,
                        j = Math.sqrt(s),
                        i = e.nodeRepulsion / s,
                        k = i * q / j,
                        l = i * r / j;
                    a.offsetX -= k, a.offsetY -= l, b.offsetX += k, b.offsetY += l
                }
            },
            n = function(a, b, c) {
                var d = a.positionX,
                    e = a.positionY,
                    f = a.height,
                    g = a.width,
                    h = c / b,
                    i = f / g,
                    j = {};
                do {
                    if (0 === b && c > 0) {
                        j.x = d, j.y = e + f / 2;
                        break
                    }
                    if (0 === b && 0 > c) {
                        j.x = d, j.y = e + f / 2;
                        break
                    }
                    if (b > 0 && h >= -1 * i && i >= h) {
                        j.x = d + g / 2,
                            j.y = e + g * c / 2 / b;
                        break
                    }
                    if (0 > b && h >= -1 * i && i >= h) {
                        j.x = d - g / 2, j.y = e - g * c / 2 / b;
                        break
                    }
                    if (c > 0 && (-1 * i >= h || h >= i)) {
                        j.x = d + f * b / 2 / c, j.y = e + f / 2;
                        break
                    }
                    if (0 > c && (-1 * i >= h || h >= i)) {
                        j.x = d - f * b / 2 / c, j.y = e - f / 2;
                        break
                    }
                } while (!1);
                return j
            },
            o = function(a, b, c, d) {
                if (c > 0) var e = a.maxX - b.minX;
                else var e = b.maxX - a.minX;
                if (d > 0) var f = a.maxY - b.minY;
                else var f = b.maxY - a.minY;
                return e >= 0 && f >= 0 ? Math.sqrt(e * e + f * f) : 0
            },
            p = function(a, b, c) {
                for (var d = 0; d < a.edgeSize; d++) {
                    var e = a.layoutEdges[d],
                        f = a.idToIndex[e.sourceId],
                        g = a.layoutNodes[f],
                        h = a.idToIndex[e.targetId],
                        i = a.layoutNodes[h],
                        j = i.positionX - g.positionX,
                        k = i.positionY - g.positionY;
                    if (0 === j && 0 === k) return;
                    var l = n(g, j, k),
                        m = n(i, -1 * j, -1 * k),
                        o = m.x - l.x,
                        p = m.y - l.y,
                        q = Math.sqrt(o * o + p * p),
                        r = Math.pow(e.idealLength - q, 2) / c.edgeElasticity;
                    if (0 !== q) var s = r * o / q,
                        t = r * p / q;
                    else var s = 0,
                        t = 0;
                    g.offsetX += s, g.offsetY += t, i.offsetX -= s, i.offsetY -= t
                }
            },
            q = function(a, b, c) {
                for (var d = 0; d < a.graphSet.length; d++) {
                    var e = a.graphSet[d],
                        f = e.length;
                    if (0 === d) var g = a.clientHeight / 2,
                        h = a.clientWidth / 2;
                    else var i = a.layoutNodes[a.idToIndex[e[0]]],
                        j = a.layoutNodes[a.idToIndex[i.parentId]],
                        g = j.positionX,
                        h = j.positionY;
                    for (var k = 0; f > k; k++) {
                        var l = a.layoutNodes[a.idToIndex[e[k]]],
                            m = g - l.positionX,
                            n = h - l.positionY,
                            o = Math.sqrt(m * m + n * n);
                        if (o > 1) {
                            var p = c.gravity * m / o,
                                q = c.gravity * n / o;
                            l.offsetX += p, l.offsetY += q
                        }
                    }
                }
            },
            r = function(a, b, c) {
                var d = [],
                    e = 0,
                    f = -1;
                for (d.push.apply(d, a.graphSet[0]), f += a.graphSet[0].length; f >= e;) {
                    var g = d[e++],
                        h = a.idToIndex[g],
                        i = a.layoutNodes[h],
                        j = i.children;
                    if (0 < j.length) {
                        for (var k = i.offsetX, l = i.offsetY, m = 0; m < j.length; m++) {
                            var n = a.layoutNodes[a.idToIndex[j[m]]];
                            n.offsetX += k, n.offsetY += l, d[++f] = j[m]
                        }
                        i.offsetX = 0, i.offsetY = 0
                    }
                }
            },
            s = function(a, b, c) {
                for (var d = 0; d < a.nodeSize; d++) {
                    var e = a.layoutNodes[d];
                    0 < e.children.length && (e.maxX = void 0, e.minX = void 0, e.maxY = void 0, e.minY = void 0)
                }
                for (var d = 0; d < a.nodeSize; d++) {
                    var e = a.layoutNodes[d];
                    if (!(0 < e.children.length)) {
                        var f = t(e.offsetX, e.offsetY, a.temperature);
                        e.positionX += f.x, e.positionY += f.y, e.offsetX = 0, e.offsetY = 0, e.minX = e.positionX - e.width, e.maxX = e.positionX + e.width, e.minY = e.positionY - e.height, e.maxY = e.positionY + e.height, u(e, a)
                    }
                }
                for (var d = 0; d < a.nodeSize; d++) {
                    var e = a.layoutNodes[d];
                    0 < e.children.length && (e.positionX = (e.maxX + e.minX) / 2, e.positionY = (e.maxY + e.minY) / 2, e.width = e.maxX - e.minX, e.height = e.maxY - e.minY)
                }
            },
            t = function(a, b, c) {
                var d = Math.sqrt(a * a + b * b);
                if (d > c) var e = {
                    x: c * a / d,
                    y: c * b / d
                };
                else var e = {
                    x: a,
                    y: b
                };
                return e
            },
            u = function(a, b) {
                var c = a.parentId;
                if (null != c) {
                    var d = b.layoutNodes[b.idToIndex[c]],
                        e = !1;
                    return (null == d.maxX || a.maxX + d.padRight > d.maxX) && (d.maxX = a.maxX + d.padRight, e = !0), (null == d.minX || a.minX - d.padLeft < d.minX) && (d.minX = a.minX - d.padLeft, e = !0), (null == d.maxY || a.maxY + d.padBottom > d.maxY) && (d.maxY = a.maxY + d.padBottom, e = !0), (null == d.minY || a.minY - d.padTop < d.minY) && (d.minY = a.minY - d.padTop, e = !0), e ? u(d, b) : void 0
                }
            };
        a("layout", "cose", b)
    }(cytoscape), function(a) {
        "use strict";

        function b(b) {
            this.options = a.util.extend(!0, {}, c, b)
        }
        var c = {
            nodeSep: void 0,
            edgeSep: void 0,
            rankSep: void 0,
            rankDir: void 0,
            minLen: function(a) {
                return 1
            },
            edgeWeight: function(a) {
                return 1
            },
            fit: !0,
            padding: 30,
            animate: !1,
            animationDuration: 500,
            boundingBox: void 0,
            ready: function() {},
            stop: function() {}
        };
        b.prototype.run = function() {
            var b = this.options,
                c = this;
            return a.util.require("dagre", function(d) {
                var e = b.cy,
                    f = b.eles,
                    g = function(b, c) {
                        return a.is.fn(c) ? c.apply(b, [b]) : c
                    },
                    h = a.util.makeBoundingBox(b.boundingBox ? b.boundingBox : {
                        x1: 0,
                        y1: 0,
                        w: e.width(),
                        h: e.height()
                    }),
                    i = new d.graphlib.Graph({
                        multigraph: !0,
                        compound: !0
                    }),
                    j = {},
                    k = function(a, b) {
                        null != b && (j[a] = b)
                    };
                k("nodesep", b.nodeSep), k("edgesep", b.edgeSep), k("ranksep", b.rankSep), k("rankdir", b.rankDir), i.setGraph(j), i.setDefaultEdgeLabel(function() {
                    return {}
                }), i.setDefaultNodeLabel(function() {
                    return {}
                });
                for (var l = f.nodes(), m = 0; m < l.length; m++) {
                    var n = l[m];
                    i.setNode(n.id(), {
                        width: n.width(),
                        height: n.height(),
                        name: n.id()
                    })
                }
                for (var m = 0; m < l.length; m++) {
                    var n = l[m];
                    n.isChild() && i.setParent(n.id(), n.parent().id())
                }
                for (var o = f.edges().stdFilter(function(a) {
                        return !a.source().isParent() && !a.target().isParent()
                    }), m = 0; m < o.length; m++) {
                    var p = o[m];
                    i.setEdge(p.source().id(), p.target().id(), {
                        minlen: g(p, b.minLen),
                        weight: g(p, b.edgeWeight),
                        name: p.id()
                    }, p.id())
                }
                d.layout(i);
                for (var q = i.nodes(), m = 0; m < q.length; m++) {
                    var r = q[m],
                        s = i.node(r);
                    e.getElementById(r).scratch().dagre = s
                }
                var t;
                b.boundingBox ? (t = {
                    x1: 1 / 0,
                    x2: -(1 / 0),
                    y1: 1 / 0,
                    y2: -(1 / 0)
                }, l.forEach(function(a) {
                    var b = a.scratch().dagre;
                    t.x1 = Math.min(t.x1, b.x), t.x2 = Math.max(t.x2, b.x), t.y1 = Math.min(t.y1, b.y), t.y2 = Math.max(t.y2, b.y)
                }), t.w = t.x2 - t.x1, t.h = t.y2 - t.y1) : t = h;
                var u = function(a) {
                    if (b.boundingBox) {
                        var c = (a.x - t.x1) / t.w,
                            d = (a.y - t.y1) / t.h;
                        return {
                            x: h.x1 + c * h.w,
                            y: h.y1 + d * h.h
                        }
                    }
                    return a
                };
                l.layoutPositions(c, b, function() {
                    var a = this.scratch().dagre;
                    return u({
                        x: a.x,
                        y: a.y
                    })
                })
            }), this
        }, a("layout", "dagre", b)
    }(cytoscape), function(a) {
        "use strict";

        function b(b) {
            this.options = a.util.extend({}, c, b)
        }
        var c = {
            fit: !0,
            padding: 30,
            boundingBox: void 0,
            avoidOverlap: !0,
            rows: void 0,
            columns: void 0,
            position: function(a) {},
            sort: void 0,
            animate: !1,
            animationDuration: 500,
            ready: void 0,
            stop: void 0
        };
        b.prototype.run = function() {
            var b = this.options,
                c = b,
                d = b.cy,
                e = c.eles,
                f = e.nodes().not(":parent");
            c.sort && (f = f.sort(c.sort));
            var g = a.util.makeBoundingBox(c.boundingBox ? c.boundingBox : {
                x1: 0,
                y1: 0,
                w: d.width(),
                h: d.height()
            });
            if (0 === g.h || 0 === g.w) f.layoutPositions(this, c, function() {
                return {
                    x: g.x1,
                    y: g.y1
                }
            });
            else {
                var h = f.size(),
                    i = Math.sqrt(h * g.h / g.w),
                    j = Math.round(i),
                    k = Math.round(g.w / g.h * i),
                    l = function(a) {
                        if (null == a) return Math.min(j, k);
                        var b = Math.min(j, k);
                        b == j ? j = a : k = a
                    },
                    m = function(a) {
                        if (null == a) return Math.max(j, k);
                        var b = Math.max(j, k);
                        b == j ? j = a : k = a
                    };
                if (null != c.rows && null != c.columns) j = c.rows, k = c.columns;
                else if (null != c.rows && null == c.columns) j = c.rows, k = Math.ceil(h / j);
                else if (null == c.rows && null != c.columns) k = c.columns, j = Math.ceil(h / k);
                else if (k * j > h) {
                    var n = l(),
                        o = m();
                    (n - 1) * o >= h ? l(n - 1) : (o - 1) * n >= h && m(o - 1)
                } else
                    for (; h > k * j;) {
                        var n = l(),
                            o = m();
                        (o + 1) * n >= h ? m(o + 1) : l(n + 1)
                    }
                var p = g.w / k,
                    q = g.h / j;
                if (c.avoidOverlap)
                    for (var r = 0; r < f.length; r++) {
                        var s = f[r],
                            t = s.outerWidth(),
                            u = s.outerHeight();
                        p = Math.max(p, t), q = Math.max(q, u)
                    }
                for (var v = {}, w = function(a, b) {
                        return v["c-" + a + "-" + b] ? !0 : !1
                    }, x = function(a, b) {
                        v["c-" + a + "-" + b] = !0
                    }, y = 0, z = 0, A = function() {
                        z++, z >= k && (z = 0, y++)
                    }, B = {}, r = 0; r < f.length; r++) {
                    var s = f[r],
                        C = c.position(s);
                    if (C && (void 0 !== C.row || void 0 !== C.col)) {
                        var D = {
                            row: C.row,
                            col: C.col
                        };
                        if (void 0 === D.col)
                            for (D.col = 0; w(D.row, D.col);) D.col++;
                        else if (void 0 === D.row)
                            for (D.row = 0; w(D.row, D.col);) D.row++;
                        B[s.id()] = D, x(D.row, D.col)
                    }
                }
                var E = function(a, b) {
                    var c, d;
                    if (b.locked() || b.isFullAutoParent()) return !1;
                    var e = B[b.id()];
                    if (e) c = e.col * p + p / 2 + g.x1, d = e.row * q + q / 2 + g.y1;
                    else {
                        for (; w(y, z);) A();
                        c = z * p + p / 2 + g.x1, d = y * q + q / 2 + g.y1, x(y, z), A()
                    }
                    return {
                        x: c,
                        y: d
                    }
                };
                f.layoutPositions(this, c, E)
            }
            return this
        }, a("layout", "grid", b)
    }(cytoscape), function(a) {
        "use strict";

        function b(b) {
            this.options = a.util.extend(!0, {}, c, b)
        }
        var c = {
            ready: function() {},
            stop: function() {}
        };
        b.prototype.run = function() {
            var a = this.options,
                b = a.eles,
                c = this;
            a.cy;
            return c.trigger("layoutstart"), b.nodes().positions(function() {
                return {
                    x: 0,
                    y: 0
                }
            }), c.one("layoutready", a.ready), c.trigger("layoutready"), c.one("layoutstop", a.stop), c.trigger("layoutstop"), this
        }, b.prototype.stop = function() {
            return this
        }, a("layout", "null", b)
    }(cytoscape), function(a) {
        "use strict";

        function b(b) {
            this.options = a.util.extend(!0, {}, c, b)
        }
        var c = {
            positions: void 0,
            zoom: void 0,
            pan: void 0,
            fit: !0,
            padding: 30,
            animate: !1,
            animationDuration: 500,
            ready: void 0,
            stop: void 0
        };
        b.prototype.run = function() {
            function b(a) {
                if (null == c.positions) return null;
                if (f) return c.positions.apply(a, [a]);
                var b = c.positions[a._private.data.id];
                return null == b ? null : b
            }
            var c = this.options,
                d = c.eles,
                e = d.nodes(),
                f = a.is.fn(c.positions);
            return e.layoutPositions(this, c, function(a, c) {
                var d = b(c);
                return c.locked() || null == d ? !1 : d
            }), this
        }, a("layout", "preset", b)
    }(cytoscape), function(a) {
        "use strict";

        function b(b) {
            this.options = a.util.extend(!0, {}, c, b)
        }
        var c = {
            fit: !0,
            padding: 30,
            boundingBox: void 0,
            animate: !1,
            animationDuration: 500,
            ready: void 0,
            stop: void 0
        };
        b.prototype.run = function() {
            var b = this.options,
                c = b.cy,
                d = b.eles,
                e = d.nodes().not(":parent"),
                f = a.util.makeBoundingBox(b.boundingBox ? b.boundingBox : {
                    x1: 0,
                    y1: 0,
                    w: c.width(),
                    h: c.height()
                }),
                g = function(a, b) {
                    return {
                        x: f.x1 + Math.round(Math.random() * f.w),
                        y: f.y1 + Math.round(Math.random() * f.h)
                    }
                };
            return e.layoutPositions(this, b, g), this
        }, a("layout", "random", b)
    }(cytoscape), function($$) {
        "use strict";

        function SpreadLayout(a) {
            this.options = $$.util.extend({}, defaults, a)
        }

        function cellCentroid(a) {
            for (var b, c, d, e = a.halfedges, f = 0, g = 0, h = 0, i = 0; i < e.length; ++i) b = e[i].getEndpoint(), c = e[i].getStartpoint(), f += b.x * c.y, f -= b.y * c.x, d = b.x * c.y - c.x * b.y, g += (b.x + c.x) * d, h += (b.y + c.y) * d;
            return f /= 2, d = 6 * f, {
                x: g / d,
                y: h / d
            }
        }

        function sitesDistance(a, b) {
            var c = a.x - b.x,
                d = a.y - b.y;
            return Math.sqrt(c * c + d * d)
        }
        var defaults = {
            animate: !0,
            ready: void 0,
            stop: void 0,
            fit: !0,
            minDist: 20,
            padding: 20,
            expandingFactor: -1,
            maxFruchtermanReingoldIterations: 50,
            maxExpandIterations: 4,
            boundingBox: void 0
        };
        SpreadLayout.prototype.run = function() {
            var layout = this,
                options = this.options;
            return $$.util.requires(["foograph", "Voronoi"], function(foograph, Voronoi) {
                function setPositions(a) {
                    for (var b = a.vertices, c = [], d = 0; d < b.length; ++d) {
                        var e = b[d];
                        c[e.id] = {
                            x: e.x,
                            y: e.y
                        }
                    }
                    nodes.positions(function(a, b) {
                        var d = b._private.data.id,
                            e = c[d];
                        return {
                            x: Math.round(simBB.x1 + e.x),
                            y: Math.round(simBB.y1 + e.y)
                        }
                    }), options.fit && cy.fit(options.padding), cy.nodes().rtrigger("position")
                }
                var cy = options.cy,
                    nodes = cy.nodes(),
                    edges = cy.edges(),
                    cWidth = cy.width(),
                    cHeight = cy.height(),
                    simulationBounds = options.boundingBox ? $$.util.makeBoundingBox(options.boundingBox) : null,
                    padding = options.padding,
                    simBBFactor = Math.max(1, .8 * Math.log(nodes.length));
                nodes.length < 100 && (simBBFactor /= 2), layout.trigger({
                    type: "layoutstart",
                    layout: layout
                });
                var simBB = {
                    x1: 0,
                    y1: 0,
                    x2: cWidth * simBBFactor,
                    y2: cHeight * simBBFactor
                };
                simulationBounds && (simBB.x1 = simulationBounds.x1, simBB.y1 = simulationBounds.y1, simBB.x2 = simulationBounds.x2, simBB.y2 = simulationBounds.y2), simBB.x1 += padding, simBB.y1 += padding, simBB.x2 -= padding, simBB.y2 -= padding;
                var width = simBB.x2 - simBB.x1,
                    height = simBB.y2 - simBB.y1,
                    startTime = Date.now();
                if (nodes.size() <= 1) {
                    nodes.positions({
                        x: Math.round((simBB.x1 + simBB.x2) / 2),
                        y: Math.round((simBB.y1 + simBB.y2) / 2)
                    }), options.fit && cy.fit(options.padding);
                    var endTime = Date.now();
                    return console.info("Layout on " + nodes.size() + " nodes took " + (endTime - startTime) + " ms"), layout.one("layoutready", options.ready), layout.trigger("layoutready"), layout.one("layoutstop", options.stop), void layout.trigger("layoutstop")
                }
                var pData = {
                    width: width,
                    height: height,
                    minDist: options.minDist,
                    expFact: options.expandingFactor,
                    expIt: 0,
                    maxExpIt: options.maxExpandIterations,
                    vertices: [],
                    edges: [],
                    startTime: startTime,
                    maxFruchtermanReingoldIterations: options.maxFruchtermanReingoldIterations
                };
                nodes.each(function(a, b) {
                    var c = this._private.data.id;
                    pData.vertices.push({
                        id: c,
                        x: 0,
                        y: 0
                    })
                }), edges.each(function() {
                    var a = this.source().id(),
                        b = this.target().id();
                    pData.edges.push({
                        src: a,
                        tgt: b
                    })
                });
                var t1 = $$.Thread();
                t1.require(foograph, "foograph"), t1.require(Voronoi), t1.require(sitesDistance), t1.require(cellCentroid);
                var didLayoutReady = !1;
                t1.on("message", function(a) {
                    var b = a.message;
                    options.animate && (setPositions(b), didLayoutReady || (layout.trigger("layoutready"), didLayoutReady = !0))
                }), layout.one("layoutready", options.ready), t1.pass(pData).run(function(pData) {
                    function checkMinDist(a) {
                        for (var b = 0, c = 0; c < a.length; ++c) {
                            var d = a[c];
                            null != d.lSite && null != d.rSite && sitesDistance(d.lSite, d.rSite) < lMinDist && ++b
                        }
                        return b
                    }
                    foograph = eval("foograph"), Voronoi = eval("Voronoi");
                    for (var lWidth = pData.width, lHeight = pData.height, lMinDist = pData.minDist, lExpFact = pData.expFact, lMaxExpIt = pData.maxExpIt, lMaxFruchtermanReingoldIterations = pData.maxFruchtermanReingoldIterations, savePositions = function() {
                            pData.width = lWidth, pData.height = lHeight, pData.expIt = expandIteration, pData.expFact = lExpFact, pData.vertices = [];
                            for (var a = 0; a < fv.length; ++a) pData.vertices.push({
                                id: fv[a].label,
                                x: fv[a].x,
                                y: fv[a].y
                            })
                        }, messagePositions = function() {
                            broadcast(pData)
                        }, frg = new foograph.Graph("FRgraph", !1), frgNodes = {}, dataVertices = pData.vertices, ni = 0; ni < dataVertices.length; ++ni) {
                        var id = dataVertices[ni].id,
                            v = new foograph.Vertex(id, Math.round(Math.random() * lHeight), Math.round(Math.random() * lHeight));
                        frgNodes[id] = v, frg.insertVertex(v)
                    }
                    for (var dataEdges = pData.edges, ei = 0; ei < dataEdges.length; ++ei) {
                        var srcNodeId = dataEdges[ei].src,
                            tgtNodeId = dataEdges[ei].tgt;
                        frg.insertEdge("", 1, frgNodes[srcNodeId], frgNodes[tgtNodeId])
                    }
                    var fv = frg.vertices,
                        iterations = lMaxFruchtermanReingoldIterations,
                        frLayoutManager = new foograph.ForceDirectedVertexLayout(lWidth, lHeight, iterations, !1, lMinDist);
                    frLayoutManager.callback = function() {
                        savePositions(), messagePositions()
                    }, frLayoutManager.layout(frg), savePositions(), messagePositions();
                    for (var voronoi = new Voronoi, bbox = {
                            xl: 0,
                            xr: lWidth,
                            yt: 0,
                            yb: lHeight
                        }, vSites = [], i = 0; i < fv.length; ++i) vSites[fv[i].label] = fv[i];
                    for (var diagram = voronoi.compute(fv, bbox), cells = diagram.cells, i = 0; i < cells.length; ++i) {
                        var cell = cells[i],
                            site = cell.site,
                            centroid = cellCentroid(cell),
                            currv = vSites[site.label];
                        currv.x = centroid.x, currv.y = centroid.y
                    }
                    0 > lExpFact && (lExpFact = Math.max(.05, Math.min(.1, lMinDist / Math.sqrt(lWidth * lHeight / fv.length) * .5)));
                    for (var prevInfractions = checkMinDist(diagram.edges), bStop = 0 >= prevInfractions, voronoiIteration = 0, expandIteration = 0; !bStop;) {
                        ++voronoiIteration;
                        for (var it = 0; 4 >= it; ++it) {
                            voronoi.recycle(diagram), diagram = voronoi.compute(fv, bbox), cells = diagram.cells;
                            for (var i = 0; i < cells.length; ++i) {
                                var cell = cells[i],
                                    site = cell.site,
                                    centroid = cellCentroid(cell),
                                    currv = vSites[site.label];
                                currv.x = centroid.x, currv.y = centroid.y
                            }
                        }
                        var currInfractions = checkMinDist(diagram.edges);
                        0 >= currInfractions ? bStop = !0 : (currInfractions >= prevInfractions || voronoiIteration >= 4) && (expandIteration >= lMaxExpIt ? bStop = !0 : (lWidth += lWidth * lExpFact, lHeight += lHeight * lExpFact, bbox = {
                            xl: 0,
                            xr: lWidth,
                            yt: 0,
                            yb: lHeight
                        }, ++expandIteration, voronoiIteration = 0)), prevInfractions = currInfractions, savePositions(), messagePositions()
                    }
                    return savePositions(), pData
                }).then(function(a) {
                    var b = a.vertices;
                    setPositions(a);
                    var c = a.startTime,
                        d = new Date;
                    console.info("Layout on " + b.length + " nodes took " + (d - c) + " ms"), layout.one("layoutstop", options.stop), options.animate || layout.trigger("layoutready"), layout.trigger("layoutstop"), t1.stop()
                })
            }), this
        }, SpreadLayout.prototype.stop = function() {}, $$("layout", "spread", SpreadLayout)
    }(cytoscape), function(a) {
        "use strict";

        function b(b) {
            this.options = a.util.extend(!0, {}, c, b)
        }
        var c = {
            animate: !0,
            maxSimulationTime: 4e3,
            ungrabifyWhileSimulating: !1,
            fit: !0,
            padding: 30,
            boundingBox: void 0,
            random: !1,
            infinite: !1,
            ready: void 0,
            stop: void 0,
            stiffness: 400,
            repulsion: 400,
            damping: .5
        };
        b.prototype.run = function() {
            var b = this,
                c = this,
                d = this.options;
            return a.util.require("Springy", function(e) {
                function f(a) {
                    var b = a.scratch("springy").model.id,
                        c = v.layout.nodePoints[b].p,
                        d = a.position(),
                        e = null != d.x && null != d.y ? r(a.position()) : {
                            x: 4 * Math.random() - 2,
                            y: 4 * Math.random() - 2
                        };
                    c.x = e.x, c.y = e.y
                }

                function g() {
                    c.stopped = !1, d.ungrabifyWhileSimulating && x.ungrabify(), v.start()
                }
                var h = !1,
                    i = d.cy;
                b.trigger({
                    type: "layoutstart",
                    layout: b
                });
                var j = d.eles,
                    k = j.nodes().not(":parent"),
                    l = j.edges(),
                    m = a.util.makeBoundingBox(d.boundingBox ? d.boundingBox : {
                        x1: 0,
                        y1: 0,
                        w: i.width(),
                        h: i.height()
                    }),
                    n = new e.Graph;
                k.each(function(a, b) {
                    b.scratch("springy", {
                        model: n.newNode({
                            element: b
                        })
                    })
                }), l.each(function(a, b) {
                    var c = b.source().scratch("springy").model,
                        d = b.target().scratch("springy").model;
                    b.scratch("springy", {
                        model: n.newEdge(c, d, {
                            element: b
                        })
                    })
                });
                var o = window.sim = new e.Layout.ForceDirected(n, d.stiffness, d.repulsion, d.damping);
                d.infinite && (o.minEnergyThreshold = -(1 / 0));
                var p = o.getBoundingBox(),
                    q = function(a) {
                        p = o.getBoundingBox();
                        var b = p.topright.subtract(p.bottomleft),
                            c = a.subtract(p.bottomleft).divide(b.x).x * m.w + m.x1,
                            d = a.subtract(p.bottomleft).divide(b.y).y * m.h + m.x1;
                        return new e.Vector(c, d)
                    },
                    r = function(a) {
                        p = o.getBoundingBox();
                        var b = p.topright.subtract(p.bottomleft),
                            c = (a.x - m.x1) / m.w * b.x + p.bottomleft.x,
                            d = (a.y - m.y1) / m.h * b.y + p.bottomleft.y;
                        return new e.Vector(c, d)
                    },
                    s = i.collection(),
                    t = i.nodes().size(),
                    u = 1,
                    v = new e.Renderer(o, function() {
                        c.stopped || s.length > 0 && d.animate && (h = !0, s.rtrigger("position"), d.fit && i.fit(d.padding), s = i.collection(), h = !1)
                    }, function(a, b, c) {}, function(a, e) {
                        if (!c.stopped) {
                            var f = q(e),
                                g = a.data.element;
                            g.locked() || g.grabbed() || (g._private.position = {
                                x: f.x,
                                y: f.y
                            }, s.merge(g)), u == t && (b.one("layoutready", d.ready), b.trigger({
                                type: "layoutready",
                                layout: b
                            })), u++
                        }
                    });
                k.each(function(a, b) {
                    d.random || f(b)
                });
                var w;
                k.on("position", w = function() {
                    h || f(this)
                });
                var x = k.filter(":grabbable");
                c.stopSystem = function() {
                    c.stopped = !0, n.filterNodes(function() {
                        return !1
                    }), d.ungrabifyWhileSimulating && x.grabify(), d.fit && i.fit(d.padding), k.off("drag position", w), b.one("layoutstop", d.stop), b.trigger({
                        type: "layoutstop",
                        layout: b
                    }), c.stopSystem = null
                }, g(), d.infinite || setTimeout(function() {
                    c.stop()
                }, d.maxSimulationTime)
            }), this
        }, b.prototype.stop = function() {
            return null != this.stopSystem && this.stopSystem(), this
        }, a("layout", "springy", b)
    }(cytoscape), function(a) {
        "use strict";

        function b(a) {
            this.options = a
        }
        b.prototype.recalculateRenderedStyle = function() {}, b.prototype.notify = function() {}, a("renderer", "null", b)
    }(cytoscape), "undefined" == typeof jQuery) throw new Error("Bootstrap requires jQuery"); + function(a) {
    "use strict";

    function b() {
        var a = document.createElement("bootstrap"),
            b = {
                WebkitTransition: "webkitTransitionEnd",
                MozTransition: "transitionend",
                OTransition: "oTransitionEnd otransitionend",
                transition: "transitionend"
            };
        for (var c in b)
            if (void 0 !== a.style[c]) return {
                end: b[c]
            }
    }
    a.fn.emulateTransitionEnd = function(b) {
        var c = !1,
            d = this;
        a(this).one(a.support.transition.end, function() {
            c = !0
        });
        var e = function() {
            c || a(d).trigger(a.support.transition.end)
        };
        return setTimeout(e, b), this
    }, a(function() {
        a.support.transition = b()
    })
}(jQuery), + function(a) {
    "use strict";
    var b = '[data-dismiss="alert"]',
        c = function(c) {
            a(c).on("click", b, this.close)
        };
    c.prototype.close = function(b) {
        function c() {
            f.trigger("closed.bs.alert").remove()
        }
        var d = a(this),
            e = d.attr("data-target");
        e || (e = d.attr("href"), e = e && e.replace(/.*(?=#[^\s]*$)/, ""));
        var f = a(e);
        b && b.preventDefault(), f.length || (f = d.hasClass("alert") ? d : d.parent()), f.trigger(b = a.Event("close.bs.alert")), b.isDefaultPrevented() || (f.removeClass("in"), a.support.transition && f.hasClass("fade") ? f.one(a.support.transition.end, c).emulateTransitionEnd(150) : c())
    };
    var d = a.fn.alert;
    a.fn.alert = function(b) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.alert");
            e || d.data("bs.alert", e = new c(this)), "string" == typeof b && e[b].call(d)
        })
    }, a.fn.alert.Constructor = c, a.fn.alert.noConflict = function() {
        return a.fn.alert = d, this
    }, a(document).on("click.bs.alert.data-api", b, c.prototype.close)
}(jQuery), + function(a) {
    "use strict";
    var b = function(c, d) {
        this.$element = a(c), this.options = a.extend({}, b.DEFAULTS, d)
    };
    b.DEFAULTS = {
        loadingText: "loading..."
    }, b.prototype.setState = function(a) {
        var b = "disabled",
            c = this.$element,
            d = c.is("input") ? "val" : "html",
            e = c.data();
        a += "Text", e.resetText || c.data("resetText", c[d]()), c[d](e[a] || this.options[a]), setTimeout(function() {
            "loadingText" == a ? c.addClass(b).attr(b, b) : c.removeClass(b).removeAttr(b)
        }, 0)
    }, b.prototype.toggle = function() {
        var a = this.$element.closest('[data-toggle="buttons"]');
        if (a.length) {
            var b = this.$element.find("input").prop("checked", !this.$element.hasClass("active")).trigger("change");
            "radio" === b.prop("type") && a.find(".active").removeClass("active")
        }
        this.$element.toggleClass("active")
    };
    var c = a.fn.button;
    a.fn.button = function(c) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.button"),
                f = "object" == typeof c && c;
            e || d.data("bs.button", e = new b(this, f)), "toggle" == c ? e.toggle() : c && e.setState(c)
        })
    }, a.fn.button.Constructor = b, a.fn.button.noConflict = function() {
        return a.fn.button = c, this
    }, a(document).on("click.bs.button.data-api", "[data-toggle^=button]", function(b) {
        var c = a(b.target);
        c.hasClass("btn") || (c = c.closest(".btn")), c.button("toggle"), b.preventDefault()
    })
}(jQuery), + function(a) {
    "use strict";
    var b = function(b, c) {
        this.$element = a(b), this.$indicators = this.$element.find(".carousel-indicators"), this.options = c, this.paused = this.sliding = this.interval = this.$active = this.$items = null, "hover" == this.options.pause && this.$element.on("mouseenter", a.proxy(this.pause, this)).on("mouseleave", a.proxy(this.cycle, this))
    };
    b.DEFAULTS = {
        interval: 5e3,
        pause: "hover",
        wrap: !0
    }, b.prototype.cycle = function(b) {
        return b || (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
    }, b.prototype.getActiveIndex = function() {
        return this.$active = this.$element.find(".item.active"), this.$items = this.$active.parent().children(), this.$items.index(this.$active)
    }, b.prototype.to = function(b) {
        var c = this,
            d = this.getActiveIndex();
        return b > this.$items.length - 1 || 0 > b ? void 0 : this.sliding ? this.$element.one("slid", function() {
            c.to(b)
        }) : d == b ? this.pause().cycle() : this.slide(b > d ? "next" : "prev", a(this.$items[b]))
    }, b.prototype.pause = function(b) {
        return b || (this.paused = !0), this.$element.find(".next, .prev").length && a.support.transition.end && (this.$element.trigger(a.support.transition.end), this.cycle(!0)), this.interval = clearInterval(this.interval), this
    }, b.prototype.next = function() {
        return this.sliding ? void 0 : this.slide("next")
    }, b.prototype.prev = function() {
        return this.sliding ? void 0 : this.slide("prev")
    }, b.prototype.slide = function(b, c) {
        var d = this.$element.find(".item.active"),
            e = c || d[b](),
            f = this.interval,
            g = "next" == b ? "left" : "right",
            h = "next" == b ? "first" : "last",
            i = this;
        if (!e.length) {
            if (!this.options.wrap) return;
            e = this.$element.find(".item")[h]()
        }
        this.sliding = !0, f && this.pause();
        var j = a.Event("slide.bs.carousel", {
            relatedTarget: e[0],
            direction: g
        });
        if (!e.hasClass("active")) {
            if (this.$indicators.length && (this.$indicators.find(".active").removeClass("active"), this.$element.one("slid", function() {
                    var b = a(i.$indicators.children()[i.getActiveIndex()]);
                    b && b.addClass("active")
                })), a.support.transition && this.$element.hasClass("slide")) {
                if (this.$element.trigger(j), j.isDefaultPrevented()) return;
                e.addClass(b), e[0].offsetWidth, d.addClass(g), e.addClass(g), d.one(a.support.transition.end, function() {
                    e.removeClass([b, g].join(" ")).addClass("active"), d.removeClass(["active", g].join(" ")), i.sliding = !1, setTimeout(function() {
                        i.$element.trigger("slid")
                    }, 0)
                }).emulateTransitionEnd(600)
            } else {
                if (this.$element.trigger(j), j.isDefaultPrevented()) return;
                d.removeClass("active"), e.addClass("active"), this.sliding = !1, this.$element.trigger("slid")
            }
            return f && this.cycle(), this
        }
    };
    var c = a.fn.carousel;
    a.fn.carousel = function(c) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.carousel"),
                f = a.extend({}, b.DEFAULTS, d.data(), "object" == typeof c && c),
                g = "string" == typeof c ? c : f.slide;
            e || d.data("bs.carousel", e = new b(this, f)), "number" == typeof c ? e.to(c) : g ? e[g]() : f.interval && e.pause().cycle()
        })
    }, a.fn.carousel.Constructor = b, a.fn.carousel.noConflict = function() {
        return a.fn.carousel = c, this
    }, a(document).on("click.bs.carousel.data-api", "[data-slide], [data-slide-to]", function(b) {
        var c, d = a(this),
            e = a(d.attr("data-target") || (c = d.attr("href")) && c.replace(/.*(?=#[^\s]+$)/, "")),
            f = a.extend({}, e.data(), d.data()),
            g = d.attr("data-slide-to");
        g && (f.interval = !1), e.carousel(f), (g = d.attr("data-slide-to")) && e.data("bs.carousel").to(g), b.preventDefault()
    }), a(window).on("load", function() {
        a('[data-ride="carousel"]').each(function() {
            var b = a(this);
            b.carousel(b.data())
        })
    })
}(jQuery), + function(a) {
    "use strict";
    var b = function(c, d) {
        this.$element = a(c), this.options = a.extend({}, b.DEFAULTS, d), this.transitioning = null, this.options.parent && (this.$parent = a(this.options.parent)), this.options.toggle && this.toggle()
    };
    b.DEFAULTS = {
        toggle: !0
    }, b.prototype.dimension = function() {
        var a = this.$element.hasClass("width");
        return a ? "width" : "height"
    }, b.prototype.show = function() {
        if (!this.transitioning && !this.$element.hasClass("in")) {
            var b = a.Event("show.bs.collapse");
            if (this.$element.trigger(b), !b.isDefaultPrevented()) {
                var c = this.$parent && this.$parent.find("> .panel > .in");
                if (c && c.length) {
                    var d = c.data("bs.collapse");
                    if (d && d.transitioning) return;
                    c.collapse("hide"), d || c.data("bs.collapse", null)
                }
                var e = this.dimension();
                this.$element.removeClass("collapse").addClass("collapsing")[e](0), this.transitioning = 1;
                var f = function() {
                    this.$element.removeClass("collapsing").addClass("in")[e]("auto"), this.transitioning = 0, this.$element.trigger("shown.bs.collapse")
                };
                if (!a.support.transition) return f.call(this);
                var g = a.camelCase(["scroll", e].join("-"));
                this.$element.one(a.support.transition.end, a.proxy(f, this)).emulateTransitionEnd(350)[e](this.$element[0][g])
            }
        }
    }, b.prototype.hide = function() {
        if (!this.transitioning && this.$element.hasClass("in")) {
            var b = a.Event("hide.bs.collapse");
            if (this.$element.trigger(b), !b.isDefaultPrevented()) {
                var c = this.dimension();
                this.$element[c](this.$element[c]())[0].offsetHeight, this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"), this.transitioning = 1;
                var d = function() {
                    this.transitioning = 0, this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")
                };
                return a.support.transition ? void this.$element[c](0).one(a.support.transition.end, a.proxy(d, this)).emulateTransitionEnd(350) : d.call(this)
            }
        }
    }, b.prototype.toggle = function() {
        this[this.$element.hasClass("in") ? "hide" : "show"]()
    };
    var c = a.fn.collapse;
    a.fn.collapse = function(c) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.collapse"),
                f = a.extend({}, b.DEFAULTS, d.data(), "object" == typeof c && c);
            e || d.data("bs.collapse", e = new b(this, f)), "string" == typeof c && e[c]()
        })
    }, a.fn.collapse.Constructor = b, a.fn.collapse.noConflict = function() {
        return a.fn.collapse = c, this
    }, a(document).on("click.bs.collapse.data-api", "[data-toggle=collapse]", function(b) {
        var c, d = a(this),
            e = d.attr("data-target") || b.preventDefault() || (c = d.attr("href")) && c.replace(/.*(?=#[^\s]+$)/, ""),
            f = a(e),
            g = f.data("bs.collapse"),
            h = g ? "toggle" : d.data(),
            i = d.attr("data-parent"),
            j = i && a(i);
        g && g.transitioning || (j && j.find('[data-toggle=collapse][data-parent="' + i + '"]').not(d).addClass("collapsed"), d[f.hasClass("in") ? "addClass" : "removeClass"]("collapsed")), f.collapse(h)
    })
}(jQuery), + function(a) {
    "use strict";

    function b() {
        a(d).remove(), a(e).each(function(b) {
            var d = c(a(this));
            d.hasClass("open") && (d.trigger(b = a.Event("hide.bs.dropdown")), b.isDefaultPrevented() || d.removeClass("open").trigger("hidden.bs.dropdown"))
        })
    }

    function c(b) {
        var c = b.attr("data-target");
        c || (c = b.attr("href"), c = c && /#/.test(c) && c.replace(/.*(?=#[^\s]*$)/, ""));
        var d = c && a(c);
        return d && d.length ? d : b.parent()
    }
    var d = ".dropdown-backdrop",
        e = "[data-toggle=dropdown]",
        f = function(b) {
            a(b).on("click.bs.dropdown", this.toggle)
        };
    f.prototype.toggle = function(d) {
        var e = a(this);
        if (!e.is(".disabled, :disabled")) {
            var f = c(e),
                g = f.hasClass("open");
            if (b(), !g) {
                if ("ontouchstart" in document.documentElement && !f.closest(".navbar-nav").length && a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click", b), f.trigger(d = a.Event("show.bs.dropdown")), d.isDefaultPrevented()) return;
                f.toggleClass("open").trigger("shown.bs.dropdown"), e.focus()
            }
            return !1
        }
    }, f.prototype.keydown = function(b) {
        if (/(38|40|27)/.test(b.keyCode)) {
            var d = a(this);
            if (b.preventDefault(), b.stopPropagation(), !d.is(".disabled, :disabled")) {
                var f = c(d),
                    g = f.hasClass("open");
                if (!g || g && 27 == b.keyCode) return 27 == b.which && f.find(e).focus(), d.click();
                var h = a("[role=menu] li:not(.divider):visible a", f);
                if (h.length) {
                    var i = h.index(h.filter(":focus"));
                    38 == b.keyCode && i > 0 && i--, 40 == b.keyCode && i < h.length - 1 && i++, ~i || (i = 0), h.eq(i).focus()
                }
            }
        }
    };
    var g = a.fn.dropdown;
    a.fn.dropdown = function(b) {
        return this.each(function() {
            var c = a(this),
                d = c.data("dropdown");
            d || c.data("dropdown", d = new f(this)), "string" == typeof b && d[b].call(c)
        })
    }, a.fn.dropdown.Constructor = f, a.fn.dropdown.noConflict = function() {
        return a.fn.dropdown = g, this
    }, a(document).on("click.bs.dropdown.data-api", b).on("click.bs.dropdown.data-api", ".dropdown form", function(a) {
        a.stopPropagation()
    }).on("click.bs.dropdown.data-api", e, f.prototype.toggle).on("keydown.bs.dropdown.data-api", e + ", [role=menu]", f.prototype.keydown)
}(jQuery), + function(a) {
    "use strict";
    var b = function(b, c) {
        this.options = c, this.$element = a(b), this.$backdrop = this.isShown = null, this.options.remote && this.$element.load(this.options.remote)
    };
    b.DEFAULTS = {
        backdrop: !0,
        keyboard: !0,
        show: !0
    }, b.prototype.toggle = function(a) {
        return this[this.isShown ? "hide" : "show"](a)
    }, b.prototype.show = function(b) {
        var c = this,
            d = a.Event("show.bs.modal", {
                relatedTarget: b
            });
        this.$element.trigger(d), this.isShown || d.isDefaultPrevented() || (this.isShown = !0, this.escape(), this.$element.on("click.dismiss.modal", '[data-dismiss="modal"]', a.proxy(this.hide, this)), this.backdrop(function() {
            var d = a.support.transition && c.$element.hasClass("fade");
            c.$element.parent().length || c.$element.appendTo(document.body), c.$element.show(), d && c.$element[0].offsetWidth, c.$element.addClass("in").attr("aria-hidden", !1), c.enforceFocus();
            var e = a.Event("shown.bs.modal", {
                relatedTarget: b
            });
            d ? c.$element.find(".modal-dialog").one(a.support.transition.end, function() {
                c.$element.focus().trigger(e)
            }).emulateTransitionEnd(300) : c.$element.focus().trigger(e)
        }))
    }, b.prototype.hide = function(b) {
        b && b.preventDefault(), b = a.Event("hide.bs.modal"), this.$element.trigger(b), this.isShown && !b.isDefaultPrevented() && (this.isShown = !1, this.escape(), a(document).off("focusin.bs.modal"), this.$element.removeClass("in").attr("aria-hidden", !0).off("click.dismiss.modal"), a.support.transition && this.$element.hasClass("fade") ? this.$element.one(a.support.transition.end, a.proxy(this.hideModal, this)).emulateTransitionEnd(300) : this.hideModal())
    }, b.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.focus()
        }, this))
    }, b.prototype.escape = function() {
        this.isShown && this.options.keyboard ? this.$element.on("keyup.dismiss.bs.modal", a.proxy(function(a) {
            27 == a.which && this.hide()
        }, this)) : this.isShown || this.$element.off("keyup.dismiss.bs.modal")
    }, b.prototype.hideModal = function() {
        var a = this;
        this.$element.hide(), this.backdrop(function() {
            a.removeBackdrop(), a.$element.trigger("hidden.bs.modal")
        })
    }, b.prototype.removeBackdrop = function() {
        this.$backdrop && this.$backdrop.remove(), this.$backdrop = null
    }, b.prototype.backdrop = function(b) {
        var c = this.$element.hasClass("fade") ? "fade" : "";
        if (this.isShown && this.options.backdrop) {
            var d = a.support.transition && c;
            if (this.$backdrop = a('<div class="modal-backdrop ' + c + '" />').appendTo(document.body), this.$element.on("click.dismiss.modal", a.proxy(function(a) {
                    a.target === a.currentTarget && ("static" == this.options.backdrop ? this.$element[0].focus.call(this.$element[0]) : this.hide.call(this))
                }, this)), d && this.$backdrop[0].offsetWidth, this.$backdrop.addClass("in"), !b) return;
            d ? this.$backdrop.one(a.support.transition.end, b).emulateTransitionEnd(150) : b()
        } else !this.isShown && this.$backdrop ? (this.$backdrop.removeClass("in"), a.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one(a.support.transition.end, b).emulateTransitionEnd(150) : b()) : b && b()
    };
    var c = a.fn.modal;
    a.fn.modal = function(c, d) {
        return this.each(function() {
            var e = a(this),
                f = e.data("bs.modal"),
                g = a.extend({}, b.DEFAULTS, e.data(), "object" == typeof c && c);
            f || e.data("bs.modal", f = new b(this, g)), "string" == typeof c ? f[c](d) : g.show && f.show(d)
        })
    }, a.fn.modal.Constructor = b, a.fn.modal.noConflict = function() {
        return a.fn.modal = c, this
    }, a(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', function(b) {
        var c = a(this),
            d = c.attr("href"),
            e = a(c.attr("data-target") || d && d.replace(/.*(?=#[^\s]+$)/, "")),
            f = e.data("modal") ? "toggle" : a.extend({
                remote: !/#/.test(d) && d
            }, e.data(), c.data());
        b.preventDefault(), e.modal(f, this).one("hide", function() {
            c.is(":visible") && c.focus()
        })
    }), a(document).on("show.bs.modal", ".modal", function() {
        a(document.body).addClass("modal-open")
    }).on("hidden.bs.modal", ".modal", function() {
        a(document.body).removeClass("modal-open")
    })
}(jQuery), + function(a) {
    "use strict";
    var b = function(a, b) {
        this.type = this.options = this.enabled = this.timeout = this.hoverState = this.$element = null, this.init("tooltip", a, b)
    };
    b.DEFAULTS = {
        animation: !0,
        placement: "top",
        selector: !1,
        template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
        trigger: "hover focus",
        title: "",
        delay: 0,
        html: !1,
        container: !1
    }, b.prototype.init = function(b, c, d) {
        this.enabled = !0, this.type = b, this.$element = a(c), this.options = this.getOptions(d);
        for (var e = this.options.trigger.split(" "), f = e.length; f--;) {
            var g = e[f];
            if ("click" == g) this.$element.on("click." + this.type, this.options.selector, a.proxy(this.toggle, this));
            else if ("manual" != g) {
                var h = "hover" == g ? "mouseenter" : "focus",
                    i = "hover" == g ? "mouseleave" : "blur";
                this.$element.on(h + "." + this.type, this.options.selector, a.proxy(this.enter, this)), this.$element.on(i + "." + this.type, this.options.selector, a.proxy(this.leave, this))
            }
        }
        this.options.selector ? this._options = a.extend({}, this.options, {
            trigger: "manual",
            selector: ""
        }) : this.fixTitle()
    }, b.prototype.getDefaults = function() {
        return b.DEFAULTS
    }, b.prototype.getOptions = function(b) {
        return b = a.extend({}, this.getDefaults(), this.$element.data(), b), b.delay && "number" == typeof b.delay && (b.delay = {
            show: b.delay,
            hide: b.delay
        }), b
    }, b.prototype.getDelegateOptions = function() {
        var b = {},
            c = this.getDefaults();
        return this._options && a.each(this._options, function(a, d) {
            c[a] != d && (b[a] = d)
        }), b
    }, b.prototype.enter = function(b) {
        var c = b instanceof this.constructor ? b : a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs." + this.type);
        return clearTimeout(c.timeout), c.hoverState = "in", c.options.delay && c.options.delay.show ? void(c.timeout = setTimeout(function() {
            "in" == c.hoverState && c.show()
        }, c.options.delay.show)) : c.show()
    }, b.prototype.leave = function(b) {
        var c = b instanceof this.constructor ? b : a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs." + this.type);
        return clearTimeout(c.timeout), c.hoverState = "out", c.options.delay && c.options.delay.hide ? void(c.timeout = setTimeout(function() {
            "out" == c.hoverState && c.hide()
        }, c.options.delay.hide)) : c.hide()
    }, b.prototype.show = function() {
        var b = a.Event("show.bs." + this.type);
        if (this.hasContent() && this.enabled) {
            if (this.$element.trigger(b), b.isDefaultPrevented()) return;
            var c = this.tip();
            this.setContent(), this.options.animation && c.addClass("fade");
            var d = "function" == typeof this.options.placement ? this.options.placement.call(this, c[0], this.$element[0]) : this.options.placement,
                e = /\s?auto?\s?/i,
                f = e.test(d);
            f && (d = d.replace(e, "") || "top"), c.detach().css({
                top: 0,
                left: 0,
                display: "block"
            }).addClass(d), this.options.container ? c.appendTo(this.options.container) : c.insertAfter(this.$element);
            var g = this.getPosition(),
                h = c[0].offsetWidth,
                i = c[0].offsetHeight;
            if (f) {
                var j = this.$element.parent(),
                    k = d,
                    l = document.documentElement.scrollTop || document.body.scrollTop,
                    m = "body" == this.options.container ? window.innerWidth : j.outerWidth(),
                    n = "body" == this.options.container ? window.innerHeight : j.outerHeight(),
                    o = "body" == this.options.container ? 0 : j.offset().left;
                d = "bottom" == d && g.top + g.height + i - l > n ? "top" : "top" == d && g.top - l - i < 0 ? "bottom" : "right" == d && g.right + h > m ? "left" : "left" == d && g.left - h < o ? "right" : d, c.removeClass(k).addClass(d)
            }
            var p = this.getCalculatedOffset(d, g, h, i);
            this.applyPlacement(p, d), this.$element.trigger("shown.bs." + this.type)
        }
    }, b.prototype.applyPlacement = function(a, b) {
        var c, d = this.tip(),
            e = d[0].offsetWidth,
            f = d[0].offsetHeight,
            g = parseInt(d.css("margin-top"), 10),
            h = parseInt(d.css("margin-left"), 10);
        isNaN(g) && (g = 0), isNaN(h) && (h = 0), a.top = a.top + g, a.left = a.left + h, d.offset(a).addClass("in");
        var i = d[0].offsetWidth,
            j = d[0].offsetHeight;
        if ("top" == b && j != f && (c = !0, a.top = a.top + f - j), /bottom|top/.test(b)) {
            var k = 0;
            a.left < 0 && (k = -2 * a.left, a.left = 0, d.offset(a), i = d[0].offsetWidth, j = d[0].offsetHeight), this.replaceArrow(k - e + i, i, "left")
        } else this.replaceArrow(j - f, j, "top");
        c && d.offset(a)
    }, b.prototype.replaceArrow = function(a, b, c) {
        this.arrow().css(c, a ? 50 * (1 - a / b) + "%" : "")
    }, b.prototype.setContent = function() {
        var a = this.tip(),
            b = this.getTitle();
        a.find(".tooltip-inner")[this.options.html ? "html" : "text"](b), a.removeClass("fade in top bottom left right")
    }, b.prototype.hide = function() {
        function b() {
            "in" != c.hoverState && d.detach()
        }
        var c = this,
            d = this.tip(),
            e = a.Event("hide.bs." + this.type);
        return this.$element.trigger(e), e.isDefaultPrevented() ? void 0 : (d.removeClass("in"), a.support.transition && this.$tip.hasClass("fade") ? d.one(a.support.transition.end, b).emulateTransitionEnd(150) : b(), this.$element.trigger("hidden.bs." + this.type), this)
    }, b.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", "")
    }, b.prototype.hasContent = function() {
        return this.getTitle()
    }, b.prototype.getPosition = function() {
        var b = this.$element[0];
        return a.extend({}, "function" == typeof b.getBoundingClientRect ? b.getBoundingClientRect() : {
            width: b.offsetWidth,
            height: b.offsetHeight
        }, this.$element.offset())
    }, b.prototype.getCalculatedOffset = function(a, b, c, d) {
        return "bottom" == a ? {
            top: b.top + b.height,
            left: b.left + b.width / 2 - c / 2
        } : "top" == a ? {
            top: b.top - d,
            left: b.left + b.width / 2 - c / 2
        } : "left" == a ? {
            top: b.top + b.height / 2 - d / 2,
            left: b.left - c
        } : {
            top: b.top + b.height / 2 - d / 2,
            left: b.left + b.width
        }
    }, b.prototype.getTitle = function() {
        var a, b = this.$element,
            c = this.options;
        return a = b.attr("data-original-title") || ("function" == typeof c.title ? c.title.call(b[0]) : c.title)
    }, b.prototype.tip = function() {
        return this.$tip = this.$tip || a(this.options.template)
    }, b.prototype.arrow = function() {
        return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
    }, b.prototype.validate = function() {
        this.$element[0].parentNode || (this.hide(), this.$element = null, this.options = null)
    }, b.prototype.enable = function() {
        this.enabled = !0
    }, b.prototype.disable = function() {
        this.enabled = !1
    }, b.prototype.toggleEnabled = function() {
        this.enabled = !this.enabled
    }, b.prototype.toggle = function(b) {
        var c = b ? a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs." + this.type) : this;
        c.tip().hasClass("in") ? c.leave(c) : c.enter(c)
    }, b.prototype.destroy = function() {
        this.hide().$element.off("." + this.type).removeData("bs." + this.type)
    };
    var c = a.fn.tooltip;
    a.fn.tooltip = function(c) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.tooltip"),
                f = "object" == typeof c && c;
            e || d.data("bs.tooltip", e = new b(this, f)), "string" == typeof c && e[c]()
        })
    }, a.fn.tooltip.Constructor = b, a.fn.tooltip.noConflict = function() {
        return a.fn.tooltip = c, this
    }
}(jQuery), + function(a) {
    "use strict";
    var b = function(a, b) {
        this.init("popover", a, b)
    };
    if (!a.fn.tooltip) throw new Error("Popover requires tooltip.js");
    b.DEFAULTS = a.extend({}, a.fn.tooltip.Constructor.DEFAULTS, {
        placement: "right",
        trigger: "click",
        content: "",
        template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
    }), b.prototype = a.extend({}, a.fn.tooltip.Constructor.prototype), b.prototype.constructor = b, b.prototype.getDefaults = function() {
        return b.DEFAULTS
    }, b.prototype.setContent = function() {
        var a = this.tip(),
            b = this.getTitle(),
            c = this.getContent();
        a.find(".popover-title")[this.options.html ? "html" : "text"](b), a.find(".popover-content")[this.options.html ? "html" : "text"](c), a.removeClass("fade top bottom left right in"), a.find(".popover-title").html() || a.find(".popover-title").hide()
    }, b.prototype.hasContent = function() {
        return this.getTitle() || this.getContent()
    }, b.prototype.getContent = function() {
        var a = this.$element,
            b = this.options;
        return a.attr("data-content") || ("function" == typeof b.content ? b.content.call(a[0]) : b.content)
    }, b.prototype.arrow = function() {
        return this.$arrow = this.$arrow || this.tip().find(".arrow")
    }, b.prototype.tip = function() {
        return this.$tip || (this.$tip = a(this.options.template)), this.$tip
    };
    var c = a.fn.popover;
    a.fn.popover = function(c) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.popover"),
                f = "object" == typeof c && c;
            e || d.data("bs.popover", e = new b(this, f)), "string" == typeof c && e[c]()
        })
    }, a.fn.popover.Constructor = b, a.fn.popover.noConflict = function() {
        return a.fn.popover = c, this
    }
}(jQuery), + function(a) {
    "use strict";

    function b(c, d) {
        var e, f = a.proxy(this.process, this);
        this.$element = a(a(c).is("body") ? window : c), this.$body = a("body"), this.$scrollElement = this.$element.on("scroll.bs.scroll-spy.data-api", f), this.options = a.extend({}, b.DEFAULTS, d), this.selector = (this.options.target || (e = a(c).attr("href")) && e.replace(/.*(?=#[^\s]+$)/, "") || "") + " .nav li > a", this.offsets = a([]), this.targets = a([]), this.activeTarget = null, this.refresh(), this.process()
    }
    b.DEFAULTS = {
        offset: 10
    }, b.prototype.refresh = function() {
        var b = this.$element[0] == window ? "offset" : "position";
        this.offsets = a([]), this.targets = a([]);
        var c = this;
        this.$body.find(this.selector).map(function() {
            var d = a(this),
                e = d.data("target") || d.attr("href"),
                f = /^#\w/.test(e) && a(e);
            return f && f.length && [
                [f[b]().top + (!a.isWindow(c.$scrollElement.get(0)) && c.$scrollElement.scrollTop()), e]
            ] || null
        }).sort(function(a, b) {
            return a[0] - b[0]
        }).each(function() {
            c.offsets.push(this[0]), c.targets.push(this[1])
        })
    }, b.prototype.process = function() {
        var a, b = this.$scrollElement.scrollTop() + this.options.offset,
            c = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight,
            d = c - this.$scrollElement.height(),
            e = this.offsets,
            f = this.targets,
            g = this.activeTarget;
        if (b >= d) return g != (a = f.last()[0]) && this.activate(a);
        for (a = e.length; a--;) g != f[a] && b >= e[a] && (!e[a + 1] || b <= e[a + 1]) && this.activate(f[a])
    }, b.prototype.activate = function(b) {
        this.activeTarget = b, a(this.selector).parents(".active").removeClass("active");
        var c = this.selector + '[data-target="' + b + '"],' + this.selector + '[href="' + b + '"]',
            d = a(c).parents("li").addClass("active");
        d.parent(".dropdown-menu").length && (d = d.closest("li.dropdown").addClass("active")), d.trigger("activate")
    };
    var c = a.fn.scrollspy;
    a.fn.scrollspy = function(c) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.scrollspy"),
                f = "object" == typeof c && c;
            e || d.data("bs.scrollspy", e = new b(this, f)), "string" == typeof c && e[c]()
        })
    }, a.fn.scrollspy.Constructor = b, a.fn.scrollspy.noConflict = function() {
        return a.fn.scrollspy = c, this
    }, a(window).on("load", function() {
        a('[data-spy="scroll"]').each(function() {
            var b = a(this);
            b.scrollspy(b.data())
        })
    })
}(jQuery), + function(a) {
    "use strict";
    var b = function(b) {
        this.element = a(b)
    };
    b.prototype.show = function() {
        var b = this.element,
            c = b.closest("ul:not(.dropdown-menu)"),
            d = b.data("target");
        if (d || (d = b.attr("href"), d = d && d.replace(/.*(?=#[^\s]*$)/, "")), !b.parent("li").hasClass("active")) {
            var e = c.find(".active:last a")[0],
                f = a.Event("show.bs.tab", {
                    relatedTarget: e
                });
            if (b.trigger(f), !f.isDefaultPrevented()) {
                var g = a(d);
                this.activate(b.parent("li"), c), this.activate(g, g.parent(), function() {
                    b.trigger({
                        type: "shown.bs.tab",
                        relatedTarget: e
                    })
                })
            }
        }
    }, b.prototype.activate = function(b, c, d) {
        function e() {
            f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"), b.addClass("active"), g ? (b[0].offsetWidth, b.addClass("in")) : b.removeClass("fade"), b.parent(".dropdown-menu") && b.closest("li.dropdown").addClass("active"), d && d()
        }
        var f = c.find("> .active"),
            g = d && a.support.transition && f.hasClass("fade");
        g ? f.one(a.support.transition.end, e).emulateTransitionEnd(150) : e(), f.removeClass("in")
    };
    var c = a.fn.tab;
    a.fn.tab = function(c) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.tab");
            e || d.data("bs.tab", e = new b(this)), "string" == typeof c && e[c]()
        })
    }, a.fn.tab.Constructor = b, a.fn.tab.noConflict = function() {
        return a.fn.tab = c, this
    }, a(document).on("click.bs.tab.data-api", '[data-toggle="tab"], [data-toggle="pill"]', function(b) {
        b.preventDefault(), a(this).tab("show")
    })
}(jQuery), + function(a) {
    "use strict";
    var b = function(c, d) {
        this.options = a.extend({}, b.DEFAULTS, d), this.$window = a(window).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(c), this.affixed = this.unpin = null, this.checkPosition()
    };
    b.RESET = "affix affix-top affix-bottom", b.DEFAULTS = {
        offset: 0
    }, b.prototype.checkPositionWithEventLoop = function() {
        setTimeout(a.proxy(this.checkPosition, this), 1)
    }, b.prototype.checkPosition = function() {
        if (this.$element.is(":visible")) {
            var c = a(document).height(),
                d = this.$window.scrollTop(),
                e = this.$element.offset(),
                f = this.options.offset,
                g = f.top,
                h = f.bottom;
            "object" != typeof f && (h = g = f), "function" == typeof g && (g = f.top()), "function" == typeof h && (h = f.bottom());
            var i = null != this.unpin && d + this.unpin <= e.top ? !1 : null != h && e.top + this.$element.height() >= c - h ? "bottom" : null != g && g >= d ? "top" : !1;
            this.affixed !== i && (this.unpin && this.$element.css("top", ""), this.affixed = i, this.unpin = "bottom" == i ? e.top - d : null, this.$element.removeClass(b.RESET).addClass("affix" + (i ? "-" + i : "")), "bottom" == i && this.$element.offset({
                top: document.body.offsetHeight - h - this.$element.height()
            }))
        }
    };
    var c = a.fn.affix;
    a.fn.affix = function(c) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.affix"),
                f = "object" == typeof c && c;
            e || d.data("bs.affix", e = new b(this, f)), "string" == typeof c && e[c]()
        })
    }, a.fn.affix.Constructor = b, a.fn.affix.noConflict = function() {
        return a.fn.affix = c, this
    }, a(window).on("load", function() {
        a('[data-spy="affix"]').each(function() {
            var b = a(this),
                c = b.data();
            c.offset = c.offset || {}, c.offsetBottom && (c.offset.bottom = c.offsetBottom), c.offsetTop && (c.offset.top = c.offsetTop), b.affix(c)
        })
    })
}(jQuery),
function(a, b) {
    "object" == typeof exports ? module.exports = b() : "function" == typeof define && define.amd ? define(b) : a.Spinner = b()
}(this, function() {
    "use strict";

    function a(a, b) {
        var c, d = document.createElement(a || "div");
        for (c in b) d[c] = b[c];
        return d
    }

    function b(a) {
        for (var b = 1, c = arguments.length; c > b; b++) a.appendChild(arguments[b]);
        return a
    }

    function c(a, b, c, d) {
        var e = ["opacity", b, ~~(100 * a), c, d].join("-"),
            f = .01 + c / d * 100,
            g = Math.max(1 - (1 - a) / b * (100 - f), a),
            h = j.substring(0, j.indexOf("Animation")).toLowerCase(),
            i = h && "-" + h + "-" || "";
        return l[e] || (m.insertRule("@" + i + "keyframes " + e + "{0%{opacity:" + g + "}" + f + "%{opacity:" + a + "}" + (f + .01) + "%{opacity:1}" + (f + b) % 100 + "%{opacity:" + a + "}100%{opacity:" + g + "}}", m.cssRules.length), l[e] = 1), e
    }

    function d(a, b) {
        var c, d, e = a.style;
        for (b = b.charAt(0).toUpperCase() + b.slice(1), d = 0; d < k.length; d++)
            if (c = k[d] + b, void 0 !== e[c]) return c;
        return void 0 !== e[b] ? b : void 0
    }

    function e(a, b) {
        for (var c in b) a.style[d(a, c) || c] = b[c];
        return a
    }

    function f(a) {
        for (var b = 1; b < arguments.length; b++) {
            var c = arguments[b];
            for (var d in c) void 0 === a[d] && (a[d] = c[d])
        }
        return a
    }

    function g(a, b) {
        return "string" == typeof a ? a : a[b % a.length]
    }

    function h(a) {
        this.opts = f(a || {}, h.defaults, n)
    }

    function i() {
        function c(b, c) {
            return a("<" + b + ' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">', c)
        }
        m.addRule(".spin-vml", "behavior:url(#default#VML)"), h.prototype.lines = function(a, d) {
            function f() {
                return e(c("group", {
                    coordsize: k + " " + k,
                    coordorigin: -j + " " + -j
                }), {
                    width: k,
                    height: k
                })
            }

            function h(a, h, i) {
                b(m, b(e(f(), {
                    rotation: 360 / d.lines * a + "deg",
                    left: ~~h
                }), b(e(c("roundrect", {
                    arcsize: d.corners
                }), {
                    width: j,
                    height: d.width,
                    left: d.radius,
                    top: -d.width >> 1,
                    filter: i
                }), c("fill", {
                    color: g(d.color, a),
                    opacity: d.opacity
                }), c("stroke", {
                    opacity: 0
                }))))
            }
            var i, j = d.length + d.width,
                k = 2 * j,
                l = 2 * -(d.width + d.length) + "px",
                m = e(f(), {
                    position: "absolute",
                    top: l,
                    left: l
                });
            if (d.shadow)
                for (i = 1; i <= d.lines; i++) h(i, -2, "progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)");
            for (i = 1; i <= d.lines; i++) h(i);
            return b(a, m)
        }, h.prototype.opacity = function(a, b, c, d) {
            var e = a.firstChild;
            d = d.shadow && d.lines || 0, e && b + d < e.childNodes.length && (e = e.childNodes[b + d], e = e && e.firstChild, e = e && e.firstChild, e && (e.opacity = c))
        }
    }
    var j, k = ["webkit", "Moz", "ms", "O"],
        l = {},
        m = function() {
            var c = a("style", {
                type: "text/css"
            });
            return b(document.getElementsByTagName("head")[0], c), c.sheet || c.styleSheet
        }(),
        n = {
            lines: 12,
            length: 7,
            width: 5,
            radius: 10,
            rotate: 0,
            corners: 1,
            color: "#000",
            direction: 1,
            speed: 1,
            trail: 100,
            opacity: .25,
            fps: 20,
            zIndex: 2e9,
            className: "spinner",
            top: "50%",
            left: "50%",
            position: "absolute"
        };
    h.defaults = {}, f(h.prototype, {
        spin: function(b) {
            this.stop();
            var c = this,
                d = c.opts,
                f = c.el = e(a(0, {
                    className: d.className
                }), {
                    position: d.position,
                    width: 0,
                    zIndex: d.zIndex
                });
            if (e(f, {
                    left: d.left,
                    top: d.top
                }), b && b.insertBefore(f, b.firstChild || null), f.setAttribute("role", "progressbar"), c.lines(f, c.opts), !j) {
                var g, h = 0,
                    i = (d.lines - 1) * (1 - d.direction) / 2,
                    k = d.fps,
                    l = k / d.speed,
                    m = (1 - d.opacity) / (l * d.trail / 100),
                    n = l / d.lines;
                ! function o() {
                    h++;
                    for (var a = 0; a < d.lines; a++) g = Math.max(1 - (h + (d.lines - a) * n) % l * m, d.opacity), c.opacity(f, a * d.direction + i, g, d);
                    c.timeout = c.el && setTimeout(o, ~~(1e3 / k))
                }()
            }
            return c
        },
        stop: function() {
            var a = this.el;
            return a && (clearTimeout(this.timeout), a.parentNode && a.parentNode.removeChild(a), this.el = void 0), this
        },
        lines: function(d, f) {
            function h(b, c) {
                return e(a(), {
                    position: "absolute",
                    width: f.length + f.width + "px",
                    height: f.width + "px",
                    background: b,
                    boxShadow: c,
                    transformOrigin: "left",
                    transform: "rotate(" + ~~(360 / f.lines * k + f.rotate) + "deg) translate(" + f.radius + "px,0)",
                    borderRadius: (f.corners * f.width >> 1) + "px"
                })
            }
            for (var i, k = 0, l = (f.lines - 1) * (1 - f.direction) / 2; k < f.lines; k++) i = e(a(), {
                position: "absolute",
                top: 1 + ~(f.width / 2) + "px",
                transform: f.hwaccel ? "translate3d(0,0,0)" : "",
                opacity: f.opacity,
                animation: j && c(f.opacity, f.trail, l + k * f.direction, f.lines) + " " + 1 / f.speed + "s linear infinite"
            }), f.shadow && b(i, e(h("#000", "0 0 4px #000"), {
                top: "2px"
            })), b(d, b(i, h(g(f.color, k), "0 0 1px rgba(0,0,0,.1)")));
            return d
        },
        opacity: function(a, b, c) {
            b < a.childNodes.length && (a.childNodes[b].style.opacity = c)
        }
    });
    var o = e(a("group"), {
        behavior: "url(#default#VML)"
    });
    return !d(o, "transform") && o.adj ? i() : j = d(o, "animation"), h
});