PageSourceSearch

https://bitter-water-yetu88.ydsqy520.workers.dev/s/js/speedtest/main.js?u=16adb42530c733fd203f38035a7139e5

js bitter-water-yetu88.ydsqy520.workers.dev collected 2026-10-03 05:50:49 UTC 158,066 bytes, 3,992 lines download raw bytes

1"use strict";
2
3function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
4function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
5function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
6function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
7function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
8function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
9function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
10function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
11function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
12/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */
13!function (e, t) {
14  "use strict";
15
16  "object" == (typeof module === "undefined" ? "undefined" : _typeof(module)) && "object" == _typeof(module.exports) ? module.exports = e.document ? t(e, !0) : function (e) {
17    if (!e.document) throw new Error("jQuery requires a window with a document");
18    return t(e);
19  } : t(e);
20}("undefined" != typeof window ? window : void 0, function (C, e) {
21  "use strict";
22
23  var t = [],
24    r = Object.getPrototypeOf,
25    s = t.slice,
26    g = t.flat ? function (e) {
27      return t.flat.call(e);
28    } : function (e) {
29      return t.concat.apply([], e);
30    },
31    u = t.push,
32    i = t.indexOf,
33    n = {},
34    o = n.toString,
35    v = n.hasOwnProperty,
36    a = v.toString,
37    l = a.call(Object),
38    y = {},
39    m = function m(e) {
40      return "function" == typeof e && "number" != typeof e.nodeType;
41    },
42    x = function x(e) {
43      return null != e && e === e.window;
44    },
45    E = C.document,
46    c = {
47      type: !0,
48      src: !0,
49      nonce: !0,
50      noModule: !0
51    };
52  function b(e, t, n) {
53    var r,
54      i,
55      o = (n = n || E).createElement("script");
56    if (o.text = e, t) for (r in c) (i = t[r] || t.getAttribute && t.getAttribute(r)) && o.setAttribute(r, i);
57    n.head.appendChild(o).parentNode.removeChild(o);
58  }
59  function w(e) {
60    return null == e ? e + "" : "object" == _typeof(e) || "function" == typeof e ? n[o.call(e)] || "object" : _typeof(e);
61  }
62  var f = "3.5.1",
63    S = function S(e, t) {
64      return new S.fn.init(e, t);
65    };
66  function p(e) {
67    var t = !!e && "length" in e && e.length,
68      n = w(e);
69    return !m(e) && !x(e) && ("array" === n || 0 === t || "number" == typeof t && 0 < t && t - 1 in e);
70  }
71  S.fn = S.prototype = {
72    jquery: f,
73    constructor: S,
74    length: 0,
75    toArray: function toArray() {
76      return s.call(this);
77    },
78    get: function get(e) {
79      return null == e ? s.call(this) : e < 0 ? this[e + this.length] : this[e];
80    },
81    pushStack: function pushStack(e) {
82      var t = S.merge(this.constructor(), e);
83      return t.prevObject = this, t;
84    },
85    each: function each(e) {
86      return S.each(this, e);
87    },
88    map: function map(n) {
89      return this.pushStack(S.map(this, function (e, t) {
90        return n.call(e, t, e);
91      }));
92    },
93    slice: function slice() {
94      return this.pushStack(s.apply(this, arguments));
95    },
96    first: function first() {
97      return this.eq(0);
98    },
99    last: function last() {
100      return this.eq(-1);
101    },
102    even: function even() {
103      return this.pushStack(S.grep(this, function (e, t) {
104        return (t + 1) % 2;
105      }));
106    },
107    odd: function odd() {
108      return this.pushStack(S.grep(this, function (e, t) {
109        return t % 2;
110      }));
111    },
112    eq: function eq(e) {
113      var t = this.length,
114        n = +e + (e < 0 ? t : 0);
115      return this.pushStack(0 <= n && n < t ? [this[n]] : []);
116    },
117    end: function end() {
118      return this.prevObject || this.constructor();
119    },
120    push: u,
121    sort: t.sort,
122    splice: t.splice
123  }, S.extend = S.fn.extend = function () {
124    var e,
125      t,
126      n,
127      r,
128      i,
129      o,
130      a = arguments[0] || {},
131      s = 1,
132      u = arguments.length,
133      l = !1;
134    for ("boolean" == typeof a && (l = a, a = arguments[s] || {}, s++), "object" == _typeof(a) || m(a) || (a = {}), s === u && (a = this, s--); s < u; s++) if (null != (e = arguments[s])) for (t in e) r = e[t], "__proto__" !== t && a !== r && (l && r && (S.isPlainObject(r) || (i = Array.isArray(r))) ? (n = a[t], o = i && !Array.isArray(n) ? [] : i || S.isPlainObject(n) ? n : {}, i = !1, a[t] = S.extend(l, o, r)) : void 0 !== r && (a[t] = r));
135    return a;
136  }, S.extend({
137    expando: "jQuery" + (f + Math.random()).replace(/\D/g, ""),
138    isReady: !0,
139    error: function error(e) {
140      throw new Error(e);
141    },
142    noop: function noop() {},
143    isPlainObject: function isPlainObject(e) {
144      var t, n;
145      return !(!e || "[object Object]" !== o.call(e)) && (!(t = r(e)) || "function" == typeof (n = v.call(t, "constructor") && t.constructor) && a.call(n) === l);
146    },
147    isEmptyObject: function isEmptyObject(e) {
148      var t;
149      for (t in e) return !1;
150      return !0;
151    },
152    globalEval: function globalEval(e, t, n) {
153      b(e, {
154        nonce: t && t.nonce
155      }, n);
156    },
157    each: function each(e, t) {
158      var n,
159        r = 0;
160      if (p(e)) {
161        for (n = e.length; r < n; r++) if (!1 === t.call(e[r], r, e[r])) break;
162      } else for (r in e) if (!1 === t.call(e[r], r, e[r])) break;
163      return e;
164    },
165    makeArray: function makeArray(e, t) {
166      var n = t || [];
167      return null != e && (p(Object(e)) ? S.merge(n, "string" == typeof e ? [e] : e) : u.call(n, e)), n;
168    },
169    inArray: function inArray(e, t, n) {
170      return null == t ? -1 : i.call(t, e, n);
171    },
172    merge: function merge(e, t) {
173      for (var n = +t.length, r = 0, i = e.length; r < n; r++) e[i++] = t[r];
174      return e.length = i, e;
175    },
176    grep: function grep(e, t, n) {
177      for (var r = [], i = 0, o = e.length, a = !n; i < o; i++) !t(e[i], i) !== a && r.push(e[i]);
178      return r;
179    },
180    map: function map(e, t, n) {
181      var r,
182        i,
183        o = 0,
184        a = [];
185      if (p(e)) for (r = e.length; o < r; o++) null != (i = t(e[o], o, n)) && a.push(i);else for (o in e) null != (i = t(e[o], o, n)) && a.push(i);
186      return g(a);
187    },
188    guid: 1,
189    support: y
190  }), "function" == typeof Symbol && (S.fn[Symbol.iterator] = t[Symbol.iterator]), S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (e, t) {
191    n["[object " + t + "]"] = t.toLowerCase();
192  });
193  var d = function (n) {
194    var e,
195      d,
196      b,
197      o,
198      i,
199      h,
200      f,
201      g,
202      w,
203      u,
204      l,
205      T,
206      C,
207      a,
208      E,
209      v,
210      s,
211      c,
212      y,
213      S = "sizzle" + 1 * new Date(),
214      p = n.document,
215      k = 0,
216      r = 0,
217      m = ue(),
218      x = ue(),
219      A = ue(),
220      N = ue(),
221      D = function D(e, t) {
222        return e === t && (l = !0), 0;
223      },
224      j = {}.hasOwnProperty,
225      t = [],
226      q = t.pop,
227      L = t.push,
228      H = t.push,
229      O = t.slice,
230      P = function P(e, t) {
231        for (var n = 0, r = e.length; n < r; n++) if (e[n] === t) return n;
232        return -1;
233      },
234      R = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
235      M = "[\\x20\\t\\r\\n\\f]",
236      I = "(?:\\\\[\\da-fA-F]{1,6}" + M + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
237      W = "\\[" + M + "*(" + I + ")(?:" + M + "*([*^$|!~]?=)" + M + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + I + "))|)" + M + "*\\]",
238      F = ":(" + I + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + W + ")*)|.*)\\)|)",
239      B = new RegExp(M + "+", "g"),
240      $ = new RegExp("^" + M + "+|((?:^|[^\\\\])(?:\\\\.)*)" + M + "+$", "g"),
241      _ = new RegExp("^" + M + "*," + M + "*"),
242      z = new RegExp("^" + M + "*([>+~]|" + M + ")" + M + "*"),
243      U = new RegExp(M + "|>"),
244      X = new RegExp(F),
245      V = new RegExp("^" + I + "$"),
246      G = {
247        ID: new RegExp("^#(" + I + ")"),
248        CLASS: new RegExp("^\\.(" + I + ")"),
249        TAG: new RegExp("^(" + I + "|[*])"),
250        ATTR: new RegExp("^" + W),
251        PSEUDO: new RegExp("^" + F),
252        CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + M + "*(even|odd|(([+-]|)(\\d*)n|)" + M + "*(?:([+-]|)" + M + "*(\\d+)|))" + M + "*\\)|)", "i"),
253        bool: new RegExp("^(?:" + R + ")$", "i"),
254        needsContext: new RegExp("^" + M + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + M + "*((?:-\\d)?\\d*)" + M + "*\\)|)(?=[^-]|$)", "i")
255      },
256      Y = /HTML$/i,
257      Q = /^(?:input|select|textarea|button)$/i,
258      J = /^h\d$/i,
259      K = /^[^{]+\{\s*\[native \w/,
260      Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
261      ee = /[+~]/,
262      te = new RegExp("\\\\[\\da-fA-F]{1,6}" + M + "?|\\\\([^\\r\\n\\f])", "g"),
263      ne = function ne(e, t) {
264        var n = "0x" + e.slice(1) - 65536;
265        return t || (n < 0 ? String.fromCharCode(n + 65536) : String.fromCharCode(n >> 10 | 55296, 1023 & n | 56320));
266      },
267      re = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
268      ie = function ie(e, t) {
269        return t ? "\0" === e ? "\uFFFD" : e.slice(0, -1) + "\\" + e.charCodeAt(e.length - 1).toString(16) + " " : "\\" + e;
270      },
271      oe = function oe() {
272        T();
273      },
274      ae = be(function (e) {
275        return !0 === e.disabled && "fieldset" === e.nodeName.toLowerCase();
276      }, {
277        dir: "parentNode",
278        next: "legend"
279      });
280    try {
281      H.apply(t = O.call(p.childNodes), p.childNodes), t[p.childNodes.length].nodeType;
282    } catch (e) {
283      H = {
284        apply: t.length ? function (e, t) {
285          L.apply(e, O.call(t));
286        } : function (e, t) {
287          var n = e.length,
288            r = 0;
289          while (e[n++] = t[r++]);
290          e.length = n - 1;
291        }
292      };
293    }
294    function se(t, e, n, r) {
295      var i,
296        o,
297        a,
298        s,
299        u,
300        l,
301        c,
302        f = e && e.ownerDocument,
303        p = e ? e.nodeType : 9;
304      if (n = n || [], "string" != typeof t || !t || 1 !== p && 9 !== p && 11 !== p) return n;
305      if (!r && (T(e), e = e || C, E)) {
306        if (11 !== p && (u = Z.exec(t))) if (i = u[1]) {
307          if (9 === p) {
308            if (!(a = e.getElementById(i))) return n;
309            if (a.id === i) return n.push(a), n;
310          } else if (f && (a = f.getElementById(i)) && y(e, a) && a.id === i) return n.push(a), n;
311        } else {
312          if (u[2]) return H.apply(n, e.getElementsByTagName(t)), n;
313          if ((i = u[3]) && d.getElementsByClassName && e.getElementsByClassName) return H.apply(n, e.getElementsByClassName(i)), n;
314        }
315        if (d.qsa && !N[t + " "] && (!v || !v.test(t)) && (1 !== p || "object" !== e.nodeName.toLowerCase())) {
316          if (c = t, f = e, 1 === p && (U.test(t) || z.test(t))) {
317            (f = ee.test(t) && ye(e.parentNode) || e) === e && d.scope || ((s = e.getAttribute("id")) ? s = s.replace(re, ie) : e.setAttribute("id", s = S)), o = (l = h(t)).length;
318            while (o--) l[o] = (s ? "#" + s : ":scope") + " " + xe(l[o]);
319            c = l.join(",");
320          }
321          try {
322            return H.apply(n, f.querySelectorAll(c)), n;
323          } catch (e) {
324            N(t, !0);
325          } finally {
326            s === S && e.removeAttribute("id");
327          }
328        }
329      }
330      return g(t.replace($, "$1"), e, n, r);
331    }
332    function ue() {
333      var r = [];
334      return function e(t, n) {
335        return r.push(t + " ") > b.cacheLength && delete e[r.shift()], e[t + " "] = n;
336      };
337    }
338    function le(e) {
339      return e[S] = !0, e;
340    }
341    function ce(e) {
342      var t = C.createElement("fieldset");
343      try {
344        return !!e(t);
345      } catch (e) {
346        return !1;
347      } finally {
348        t.parentNode && t.parentNode.removeChild(t), t = null;
349      }
350    }
351    function fe(e, t) {
352      var n = e.split("|"),
353        r = n.length;
354      while (r--) b.attrHandle[n[r]] = t;
355    }
356    function pe(e, t) {
357      var n = t && e,
358        r = n && 1 === e.nodeType && 1 === t.nodeType && e.sourceIndex - t.sourceIndex;
359      if (r) return r;
360      if (n) while (n = n.nextSibling) if (n === t) return -1;
361      return e ? 1 : -1;
362    }
363    function de(t) {
364      return function (e) {
365        return "input" === e.nodeName.toLowerCase() && e.type === t;
366      };
367    }
368    function he(n) {
369      return function (e) {
370        var t = e.nodeName.toLowerCase();
371        return ("input" === t || "button" === t) && e.type === n;
372      };
373    }
374    function ge(t) {
375      return function (e) {
376        return "form" in e ? e.parentNode && !1 === e.disabled ? "label" in e ? "label" in e.parentNode ? e.parentNode.disabled === t : e.disabled === t : e.isDisabled === t || e.isDisabled !== !t && ae(e) === t : e.disabled === t : "label" in e && e.disabled === t;
377      };
378    }
379    function ve(a) {
380      return le(function (o) {
381        return o = +o, le(function (e, t) {
382          var n,
383            r = a([], e.length, o),
384            i = r.length;
385          while (i--) e[n = r[i]] && (e[n] = !(t[n] = e[n]));
386        });
387      });
388    }
389    function ye(e) {
390      return e && "undefined" != typeof e.getElementsByTagName && e;
391    }
392    for (e in d = se.support = {}, i = se.isXML = function (e) {
393      var t = e.namespaceURI,
394        n = (e.ownerDocument || e).documentElement;
395      return !Y.test(t || n && n.nodeName || "HTML");
396    }, T = se.setDocument = function (e) {
397      var t,
398        n,
399        r = e ? e.ownerDocument || e : p;
400      return r != C && 9 === r.nodeType && r.documentElement && (a = (C = r).documentElement, E = !i(C), p != C && (n = C.defaultView) && n.top !== n && (n.addEventListener ? n.addEventListener("unload", oe, !1) : n.attachEvent && n.attachEvent("onunload", oe)), d.scope = ce(function (e) {
401        return a.appendChild(e).appendChild(C.createElement("div")), "undefined" != typeof e.querySelectorAll && !e.querySelectorAll(":scope fieldset div").length;
402      }), d.attributes = ce(function (e) {
403        return e.className = "i", !e.getAttribute("className");
404      }), d.getElementsByTagName = ce(function (e) {
405        return e.appendChild(C.createComment("")), !e.getElementsByTagName("*").length;
406      }), d.getElementsByClassName = K.test(C.getElementsByClassName), d.getById = ce(function (e) {
407        return a.appendChild(e).id = S, !C.getElementsByName || !C.getElementsByName(S).length;
408      }), d.getById ? (b.filter.ID = function (e) {
409        var t = e.replace(te, ne);
410        return function (e) {
411          return e.getAttribute("id") === t;
412        };
413      }, b.find.ID = function (e, t) {
414        if ("undefined" != typeof t.getElementById && E) {
415          var n = t.getElementById(e);
416          return n ? [n] : [];
417        }
418      }) : (b.filter.ID = function (e) {
419        var n = e.replace(te, ne);
420        return function (e) {
421          var t = "undefined" != typeof e.getAttributeNode && e.getAttributeNode("id");
422          return t && t.value === n;
423        };
424      }, b.find.ID = function (e, t) {
425        if ("undefined" != typeof t.getElementById && E) {
426          var n,
427            r,
428            i,
429            o = t.getElementById(e);
430          if (o) {
431            if ((n = o.getAttributeNode("id")) && n.value === e) return [o];
432            i = t.getElementsByName(e), r = 0;
433            while (o = i[r++]) if ((n = o.getAttributeNode("id")) && n.value === e) return [o];
434          }
435          return [];
436        }
437      }), b.find.TAG = d.getElementsByTagName ? function (e, t) {
438        return "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(e) : d.qsa ? t.querySelectorAll(e) : void 0;
439      } : function (e, t) {
440        var n,
441          r = [],
442          i = 0,
443          o = t.getElementsByTagName(e);
444        if ("*" === e) {
445          while (n = o[i++]) 1 === n.nodeType && r.push(n);
446          return r;
447        }
448        return o;
449      }, b.find.CLASS = d.getElementsByClassName && function (e, t) {
450        if ("undefined" != typeof t.getElementsByClassName && E) return t.getElementsByClassName(e);
451      }
vendor: 4,915 bytes, lines 451-528
451, s = [], v = [], (d.qsa = K.test(C.querySelectorAll)) && (ce(function (e) {
452        var t;
453        a.appendChild(e).innerHTML = "<a id='" + S + "'></a><select id='" + S + "-\r\\' msallowcapture=''><option selected=''></option></select>", e.querySelectorAll("[msallowcapture^='']").length && v.push("[*^$]=" + M + "*(?:''|\"\")"), e.querySelectorAll("[selected]").length || v.push("\\[" + M + "*(?:value|" + R + ")"), e.querySelectorAll("[id~=" + S + "-]").length || v.push("~="), (t = C.createElement("input")).setAttribute("name", ""), e.appendChild(t), e.querySelectorAll("[name='']").length || v.push("\\[" + M + "*name" + M + "*=" + M + "*(?:''|\"\")"), e.querySelectorAll(":checked").length || v.push(":checked"), e.querySelectorAll("a#" + S + "+*").length || v.push(".#.+[+~]"), e.querySelectorAll("\\\f"), v.push("[\\r\\n\\f]");
454      }), ce(function (e) {
455        e.innerHTML = "<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";
456        var t = C.createElement("input");
457        t.setAttribute("type", "hidden"), e.appendChild(t).setAttribute("name", "D"), e.querySelectorAll("[name=d]").length && v.push("name" + M + "*[*^$|!~]?="), 2 !== e.querySelectorAll(":enabled").length && v.push(":enabled", ":disabled"), a.appendChild(e).disabled = !0, 2 !== e.querySelectorAll(":disabled").length && v.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), v.push(",.*:");
458      })), (d.matchesSelector = K.test(c = a.matches || a.webkitMatchesSelector || a.mozMatchesSelector || a.oMatchesSelector || a.msMatchesSelector)) && ce(function (e) {
459        d.disconnectedMatch = c.call(e, "*"), c.call(e, "[s!='']:x"), s.push("!=", F);
460      }), v = v.length && new RegExp(v.join("|")), s = s.length && new RegExp(s.join("|")), t = K.test(a.compareDocumentPosition), y = t || K.test(a.contains) ? function (e, t) {
461        var n = 9 === e.nodeType ? e.documentElement : e,
462          r = t && t.parentNode;
463        return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r)));
464      } : function (e, t) {
465        if (t) while (t = t.parentNode) if (t === e) return !0;
466        return !1;
467      }, D = t ? function (e, t) {
468        if (e === t) return l = !0, 0;
469        var n = !e.compareDocumentPosition - !t.compareDocumentPosition;
470        return n || (1 & (n = (e.ownerDocument || e) == (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || !d.sortDetached && t.compareDocumentPosition(e) === n ? e == C || e.ownerDocument == p && y(p, e) ? -1 : t == C || t.ownerDocument == p && y(p, t) ? 1 : u ? P(u, e) - P(u, t) : 0 : 4 & n ? -1 : 1);
471      } : function (e, t) {
472        if (e === t) return l = !0, 0;
473        var n,
474          r = 0,
475          i = e.parentNode,
476          o = t.parentNode,
477          a = [e],
478          s = [t];
479        if (!i || !o) return e == C ? -1 : t == C ? 1 : i ? -1 : o ? 1 : u ? P(u, e) - P(u, t) : 0;
480        if (i === o) return pe(e, t);
481        n = e;
482        while (n = n.parentNode) a.unshift(n);
483        n = t;
484        while (n = n.parentNode) s.unshift(n);
485        while (a[r] === s[r]) r++;
486        return r ? pe(a[r], s[r]) : a[r] == p ? -1 : s[r] == p ? 1 : 0;
487      }), C;
488    }, se.matches = function (e, t) {
489      return se(e, null, null, t);
490    }, se.matchesSelector = function (e, t) {
491      if (T(e), d.matchesSelector && E && !N[t + " "] && (!s || !s.test(t)) && (!v || !v.test(t))) try {
492        var n = c.call(e, t);
493        if (n || d.disconnectedMatch || e.document && 11 !== e.document.nodeType) return n;
494      } catch (e) {
495        N(t, !0);
496      }
497      return 0 < se(t, C, null, [e]).length;
498    }, se.contains = function (e, t) {
499      return (e.ownerDocument || e) != C && T(e), y(e, t);
500    }, se.attr = function (e, t) {
501      (e.ownerDocument || e) != C && T(e);
502      var n = b.attrHandle[t.toLowerCase()],
503        r = n && j.call(b.attrHandle, t.toLowerCase()) ? n(e, t, !E) : void 0;
504      return void 0 !== r ? r : d.attributes || !E ? e.getAttribute(t) : (r = e.getAttributeNode(t)) && r.specified ? r.value : null;
505    }, se.escape = function (e) {
506      return (e + "").replace(re, ie);
507    }, se.error = function (e) {
508      throw new Error("Syntax error, unrecognized expression: " + e);
509    }, se.uniqueSort = function (e) {
510      var t,
511        n = [],
512        r = 0,
513        i = 0;
514      if (l = !d.detectDuplicates, u = !d.sortStable && e.slice(0), e.sort(D), l) {
515        while (t = e[i++]) t === e[i] && (r = n.push(i));
516        while (r--) e.splice(n[r], 1);
517      }
518      return u = null, e;
519    }, o = se.getText = function (e) {
520      var t,
521        n = "",
522        r = 0,
523        i = e.nodeType;
524      if (i) {
525        if (1 === i || 9 === i || 11 === i) {
526          if ("string" == typeof e.textContent) return e.textContent;
527          for (e = e.firstChild; e; e = e.nextSibling) n += o(e);
528        }
528 else if (3 === i || 4 === i) return e.nodeValue;
529      } else while (t = e[r++]) n += o(t);
530      return n;
531    }, (b = se.selectors = {
532      cacheLength: 50,
533      createPseudo: le,
534      match: G,
535      attrHandle: {},
536      find: {},
537      relative: {
538        ">": {
539          dir: "parentNode",
540          first: !0
541        },
542        " ": {
543          dir: "parentNode"
544        },
545        "+": {
546          dir: "previousSibling",
547          first: !0
548        },
549        "~": {
550          dir: "previousSibling"
551        }
552      },
553      preFilter: {
554        ATTR: function ATTR(e) {
555          return e[1] = e[1].replace(te, ne), e[3] = (e[3] || e[4] || e[5] || "").replace(te, ne), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4);
556        },
557        CHILD: function CHILD(e) {
558          return e[1] = e[1].toLowerCase(), "nth" === e[1].slice(0, 3) ? (e[3] || se.error(e[0]), e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])), e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && se.error(e[0]), e;
559        },
560        PSEUDO: function PSEUDO(e) {
561          var t,
562            n = !e[6] && e[2];
563          return G.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && X.test(n) && (t = h(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t), e[2] = n.slice(0, t)), e.slice(0, 3));
564        }
565      },
566      filter: {
567        TAG: function TAG(e) {
568          var t = e.replace(te, ne).toLowerCase();
569          return "*" === e ? function () {
570            return !0;
571          } : function (e) {
572            return e.nodeName && e.nodeName.toLowerCase() === t;
573          };
574        },
575        CLASS: function CLASS(e) {
576          var t = m[e + " "];
577          return t || (t = new RegExp("(^|" + M + ")" + e + "(" + M + "|$)")) && m(e, function (e) {
578            return t.test("string" == typeof e.className && e.className || "undefined" != typeof e.getAttribute && e.getAttribute("class") || "");
579          });
580        },
581        ATTR: function ATTR(n, r, i) {
582          return function (e) {
583            var t = se.attr(e, n);
584            return null == t ? "!=" === r : !r || (t += "", "=" === r ? t === i : "!=" === r ? t !== i : "^=" === r ? i && 0 === t.indexOf(i) : "*=" === r ? i && -1 < t.indexOf(i) : "$=" === r ? i && t.slice(-i.length) === i : "~=" === r ? -1 < (" " + t.replace(B, " ") + " ").indexOf(i) : "|=" === r && (t === i || t.slice(0, i.length + 1) === i + "-"));
585          };
586        },
587        CHILD: function CHILD(h, e, t, g, v) {
588          var y = "nth" !== h.slice(0, 3),
589            m = "last" !== h.slice(-4),
590            x = "of-type" === e;
591          return 1 === g && 0 === v ? function (e) {
592            return !!e.parentNode;
593          } : function (e, t, n) {
594            var r,
595              i,
596              o,
597              a,
598              s,
599              u,
600              l = y !== m ? "nextSibling" : "previousSibling",
601              c = e.parentNode,
602              f = x && e.nodeName.toLowerCase(),
603              p = !n && !x,
604              d = !1;
605            if (c) {
606              if (y) {
607                while (l) {
608                  a = e;
609                  while (a = a[l]) if (x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) return !1;
610                  u = l = "only" === h && !u && "nextSibling";
611                }
612                return !0;
613              }
614              if (u = [m ? c.firstChild : c.lastChild], m && p) {
615                d = (s = (r = (i = (o = (a = c)[S] || (a[S] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === k && r[1]) && r[2], a = s && c.childNodes[s];
616                while (a = ++s && a && a[l] || (d = s = 0) || u.pop()) if (1 === a.nodeType && ++d && a === e) {
617                  i[h] = [k, s, d];
618                  break;
619                }
620              } else if (p && (d = s = (r = (i = (o = (a = e)[S] || (a[S] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === k && r[1]), !1 === d) while (a = ++s && a && a[l] || (d = s = 0) || u.pop()) if ((x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) && ++d && (p && ((i = (o = a[S] || (a[S] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] = [k, d]), a === e)) break;
621              return (d -= v) === g || d % g == 0 && 0 <= d / g;
622            }
623          };
624        },
625        PSEUDO: function PSEUDO(e, o) {
626          var t,
627            a = b.pseudos[e] || b.setFilters[e.toLowerCase()] || se.error("unsupported pseudo: " + e);
628          return a[S] ? a(o) : 1 < a.length ? (t = [e, e, "", o], b.setFilters.hasOwnProperty(e.toLowerCase()) ? le(function (e, t) {
629            var n,
630              r = a(e, o),
631              i = r.length;
632            while (i--) e[n = P(e, r[i])] = !(t[n] = r[i]);
633          }) : function (e) {
634            return a(e, 0, t);
635          }) : a;
636        }
637      },
638      pseudos: {
639        not: le(function (e) {
640          var r = [],
641            i = [],
642            s = f(e.replace($, "$1"));
643          return s[S] ? le(function (e, t, n, r) {
644            var i,
645              o = s(e, null, r, []),
646              a = e.length;
647            while (a--) (i = o[a]) && (e[a] = !(t[a] = i));
648          }) : function (e, t, n) {
649            return r[0] = e, s(r, null, n, i), r[0] = null, !i.pop();
650          };
651        }),
652        has: le(function (t) {
653          return function (e) {
654            return 0 < se(t, e).length;
655          };
656        }),
657        contains: le(function (t) {
658          return t = t.replace(te, ne), function (e) {
659            return -1 < (e.textContent || o(e)).indexOf(t);
660          };
661        }),
662        lang: le(function (n) {
663          return V.test(n || "") || se.error("unsupported lang: " + n), n = n.replace(te, ne).toLowerCase(), function (e) {
664            var t;
665            do {
666              if (t = E ? e.lang : e.getAttribute("xml:lang") || e.getAttribute("lang")) return (t = t.toLowerCase()) === n || 0 === t.indexOf(n + "-");
667            } while ((e = e.parentNode) && 1 === e.nodeType);
668            return !1;
669          };
670        }),
671        target: function target(e) {
672          var t = n.location && n.location.hash;
673          return t && t.slice(1) === e.id;
674        },
675        root: function root(e) {
676          return e === a;
677        },
678        focus: function focus(e) {
679          return e === C.activeElement && (!C.hasFocus || C.hasFocus()) && !!(e.type || e.href || ~e.tabIndex);
680        },
681        enabled: ge(!1),
682        disabled: ge(!0),
683        checked: function checked(e) {
684          var t = e.nodeName.toLowerCase();
685          return "input" === t && !!e.checked || "option" === t && !!e.selected;
686        },
687        selected: function selected(e) {
688          return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected;
689        },
690        empty: function empty(e) {
691          for (e = e.firstChild; e; e = e.nextSibling) if (e.nodeType < 6) return !1;
692          return !0;
693        },
694        parent: function parent(e) {
695          return !b.pseudos.empty(e);
696        },
697        header: function header(e) {
698          return J.test(e.nodeName);
699        },
700        input: function input(e) {
701          return Q.test(e.nodeName);
702        },
703        button: function button(e) {
704          var t = e.nodeName.toLowerCase();
705          return "input" === t && "button" === e.type || "button" === t;
706        },
707        text: function text(e) {
708          var t;
709          return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase());
710        },
711        first: ve(function () {
712          return [0];
713        }),
714        last: ve(function (e, t) {
715          return [t - 1];
716        }),
717        eq: ve(function (e, t, n) {
718          return [n < 0 ? n + t : n];
719        }),
720        even: ve(function (e, t) {
721          for (var n = 0; n < t; n += 2) e.push(n);
722          return e;
723        }),
724        odd: ve(function (e, t) {
725          for (var n = 1; n < t; n += 2) e.push(n);
726          return e;
727        }),
728        lt: ve(function (e, t, n) {
729          for (var r = n < 0 ? n + t : t < n ? t : n; 0 <= --r;) e.push(r);
730          return e;
731        }),
732        gt: ve(function (e, t, n) {
733          for (var r = n < 0 ? n + t : n; ++r < t;) e.push(r);
734          return e;
735        })
736      }
737    }).pseudos.nth = b.pseudos.eq, {
738      radio: !0,
739      checkbox: !0,
740      file: !0,
741      password: !0,
742      image: !0
743    }) b.pseudos[e] = de(e);
744    for (e in {
745      submit: !0,
746      reset: !0
747    }) b.pseudos[e] = he(e);
748    function me() {}
749    function xe(e) {
750      for (var t = 0, n = e.length, r = ""; t < n; t++) r += e[t].value;
751      return r;
752    }
753    function be(s, e, t) {
754      var u = e.dir,
755        l = e.next,
756        c = l || u,
757        f = t && "parentNode" === c,
758        p = r++;
759      return e.first ? function (e, t, n) {
760        while (e = e[u]) if (1 === e.nodeType || f) return s(e, t, n);
761        return !1;
762      } : function (e, t, n) {
763        var r,
764          i,
765          o,
766          a = [k, p];
767        if (n) {
768          while (e = e[u]) if ((1 === e.nodeType || f) && s(e, t, n)) return !0;
769        } else while (e = e[u]) if (1 === e.nodeType || f) if (i = (o = e[S] || (e[S] = {}))[e.uniqueID] || (o[e.uniqueID] = {}
vendor: 4,351 bytes, lines 769-887
769), l && l === e.nodeName.toLowerCase()) e = e[u] || e;else {
770          if ((r = i[c]) && r[0] === k && r[1] === p) return a[2] = r[2];
771          if ((i[c] = a)[2] = s(e, t, n)) return !0;
772        }
773        return !1;
774      };
775    }
776    function we(i) {
777      return 1 < i.length ? function (e, t, n) {
778        var r = i.length;
779        while (r--) if (!i[r](e, t, n)) return !1;
780        return !0;
781      } : i[0];
782    }
783    function Te(e, t, n, r, i) {
784      for (var o, a = [], s = 0, u = e.length, l = null != t; s < u; s++) (o = e[s]) && (n && !n(o, r, i) || (a.push(o), l && t.push(s)));
785      return a;
786    }
787    function Ce(d, h, g, v, y, e) {
788      return v && !v[S] && (v = Ce(v)), y && !y[S] && (y = Ce(y, e)), le(function (e, t, n, r) {
789        var i,
790          o,
791          a,
792          s = [],
793          u = [],
794          l = t.length,
795          c = e || function (e, t, n) {
796            for (var r = 0, i = t.length; r < i; r++) se(e, t[r], n);
797            return n;
798          }(h || "*", n.nodeType ? [n] : n, []),
799          f = !d || !e && h ? c : Te(c, s, d, n, r),
800          p = g ? y || (e ? d : l || v) ? [] : t : f;
801        if (g && g(f, p, n, r), v) {
802          i = Te(p, u), v(i, [], n, r), o = i.length;
803          while (o--) (a = i[o]) && (p[u[o]] = !(f[u[o]] = a));
804        }
805        if (e) {
806          if (y || d) {
807            if (y) {
808              i = [], o = p.length;
809              while (o--) (a = p[o]) && i.push(f[o] = a);
810              y(null, p = [], i, r);
811            }
812            o = p.length;
813            while (o--) (a = p[o]) && -1 < (i = y ? P(e, a) : s[o]) && (e[i] = !(t[i] = a));
814          }
815        } else p = Te(p === t ? p.splice(l, p.length) : p), y ? y(null, t, p, r) : H.apply(t, p);
816      });
817    }
818    function Ee(e) {
819      for (var i, t, n, r = e.length, o = b.relative[e[0].type], a = o || b.relative[" "], s = o ? 1 : 0, u = be(function (e) {
820          return e === i;
821        }, a, !0), l = be(function (e) {
822          return -1 < P(i, e);
823        }, a, !0), c = [function (e, t, n) {
824          var r = !o && (n || t !== w) || ((i = t).nodeType ? u(e, t, n) : l(e, t, n));
825          return i = null, r;
826        }]; s < r; s++) if (t = b.relative[e[s].type]) c = [be(we(c), t)];else {
827        if ((t = b.filter[e[s].type].apply(null, e[s].matches))[S]) {
828          for (n = ++s; n < r; n++) if (b.relative[e[n].type]) break;
829          return Ce(1 < s && we(c), 1 < s && xe(e.slice(0, s - 1).concat({
830            value: " " === e[s - 2].type ? "*" : ""
831          })).replace($, "$1"), t, s < n && Ee(e.slice(s, n)), n < r && Ee(e = e.slice(n)), n < r && xe(e));
832        }
833        c.push(t);
834      }
835      return we(c);
836    }
837    return me.prototype = b.filters = b.pseudos, b.setFilters = new me(), h = se.tokenize = function (e, t) {
838      var n,
839        r,
840        i,
841        o,
842        a,
843        s,
844        u,
845        l = x[e + " "];
846      if (l) return t ? 0 : l.slice(0);
847      a = e, s = [], u = b.preFilter;
848      while (a) {
849        for (o in n && !(r = _.exec(a)) || (r && (a = a.slice(r[0].length) || a), s.push(i = [])), n = !1, (r = z.exec(a)) && (n = r.shift(), i.push({
850          value: n,
851          type: r[0].replace($, " ")
852        }), a = a.slice(n.length)), b.filter) !(r = G[o].exec(a)) || u[o] && !(r = u[o](r)) || (n = r.shift(), i.push({
853          value: n,
854          type: o,
855          matches: r
856        }), a = a.slice(n.length));
857        if (!n) break;
858      }
859      return t ? a.length : a ? se.error(e) : x(e, s).slice(0);
860    }, f = se.compile = function (e, t) {
861      var n,
862        v,
863        y,
864        m,
865        x,
866        r,
867        i = [],
868        o = [],
869        a = A[e + " "];
870      if (!a) {
871        t || (t = h(e)), n = t.length;
872        while (n--) (a = Ee(t[n]))[S] ? i.push(a) : o.push(a);
873        (a = A(e, (v = o, m = 0 < (y = i).length, x = 0 < v.length, r = function r(e, t, n, _r, i) {
874          var o,
875            a,
876            s,
877            u = 0,
878            l = "0",
879            c = e && [],
880            f = [],
881            p = w,
882            d = e || x && b.find.TAG("*", i),
883            h = k += null == p ? 1 : Math.random() || .1,
884            g = d.length;
885          for (i && (w = t == C || t || i); l !== g && null != (o = d[l]); l++) {
886            if (x && o) {
887              a = 0, t || o.ownerDocument == C || (T(o), n = !E);
888              while (s = v[a++]) if (s(o, t || C, n)) {
889                _r.push(o);
890                break;
891              }
892              i && (k = h);
893            }
894            m && ((o = !s && o) && u--, e && c.push(o));
895          }
896          if (u += l, m && l !== u) {
897            a = 0;
898            while (s = y[a++]) s(c, f, t, n);
899            if (e) {
900              if (0 < u) while (l--) c[l] || f[l] || (f[l] = q.call(_r));
901              f = Te(f);
902            }
903            H.apply(_r, f), i && !e && 0 < f.length && 1 < u + y.length && se.uniqueSort(_r);
904          }
905          return i && (k = h, w = p), c;
906        }, m ? le(r) : r))).selector = e;
907      }
908      return a;
909    }, g = se.select = function (e, t, n, r) {
910      var i,
911        o,
912        a,
913        s,
914        u,
915        l = "function" == typeof e && e,
916        c = !r && h(e = l.selector || e);
917      if (n = n || [], 1 === c.length) {
918        if (2 < (o = c[0] = c[0].slice(0)).length && "ID" === (a = o[0]).type && 9 === t.nodeType && E && b.relative[o[1].type]) {
919          if (!(t = (b.find.ID(a.matches[0].replace(te, ne), t) || [])[0])) return n;
920          l && (t = t.parentNode), e = e.slice(o.shift().value.length);
921        }
922        i = G.needsContext.test(e) ? 0 : o.length;
923        while (i--) {
924          if (a = o[i], b.relative[s = a.type]) break;
925          if ((u = b.find[s]) && (r = u(a.matches[0].replace(te, ne), ee.test(o[0].type) && ye(t.parentNode) || t))) {
926            if (o.splice(i, 1), !(e = r.length && xe(o))) return H.apply(n, r), n;
927            break;
928          }
929        }
930      }
931      return (l || f(e, c))(r, t, !E, n, !t || ee.test(e) && ye(t.parentNode) || t), n;
932    }, d.sortStable = S.split("").sort(D).join("") === S, d.detectDuplicates = !!l, T(), d.sortDetached = ce(function (e) {
933      return 1 & e.compareDocumentPosition(C.createElement("fieldset"));
934    }), ce(function (e) {
935      return e.innerHTML = "<a href='#'></a>", "#" === e.firstChild.getAttribute("href");
936    }) || fe("type|href|height|width", function (e, t, n) {
937      if (!n) return e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2);
938    }), d.attributes && ce(function (e) {
939      return e.innerHTML = "<input/>", e.firstChild.setAttribute("value", ""), "" === e.firstChild.getAttribute("value");
940    }) || fe("value", function (e, t, n) {
941      if (!n && "input" === e.nodeName.toLowerCase()) return e.defaultValue;
942    }), ce(function (e) {
943      return null == e.getAttribute("disabled");
944    }) || fe(R, function (e, t, n) {
945      var r;
946      if (!n) return !0 === e[t] ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value : null;
947    }), se;
948  }(C);
949  S.find = d, S.expr = d.selectors, S.expr[":"] = S.expr.pseudos, S.uniqueSort = S.unique = d.uniqueSort, S.text = d.getText, S.isXMLDoc = d.isXML, S.contains = d.contains, S.escapeSelector = d.escape;
950  var h = function h(e, t, n) {
951      var r = [],
952        i = void 0 !== n;
953      while ((e = e[t]) && 9 !== e.nodeType) if (1 === e.nodeType) {
954        if (i && S(e).is(n)) break;
955        r.push(e);
956      }
957      return r;
958    },
959    T = function T(e, t) {
960      for (var n = []; e; e = e.nextSibling) 1 === e.nodeType && e !== t && n.push(e);
961      return n;
962    },
963    k = S.expr.match.needsContext;
964  function A(e, t) {
965    return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase();
966  }
967  var N = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;
968  function D(e, n, r) {
969    return m(n) ? S.grep(e, function (e, t) {
970      return !!n.call(e, t, e) !== r;
971    }) : n.nodeType ? S.grep(e, function (e) {
972      return e === n !== r;
973    }) : "string" != typeof n ? S.grep(e, function (e) {
974      return -1 < i.call(n, e) !== r;
975    }) : S.filter(n, e, r);
976  }
977  S.filter = function (e, t, n) {
978    var r = t[0];
979    return n && (e = ":not(" + e + ")"), 1 === t.length && 1 === r.nodeType ? S.find.matchesSelector(r, e) ? [r] : [] : S.find.matches(e, S.grep(t, function (e) {
980      return 1 === e.nodeType;
981    }));
982  }, S.fn.extend({
983    find: function find(e) {
984      var t,
985        n,
986        r = this.length,
987        i = this;
988      if ("string" != typeof e) return this.pushStack(S(e).filter(function () {
989        for (t = 0; t < r; t++) if (S.contains(i[t], this)) return !0;
990      }));
991      for (n = this.pushStack([]), t = 0; t < r; t++) S.find(e, i[t], n);
992      return 1 < r ? S.uniqueSort(n) : n;
993    },
994    filter: function filter(e) {
995      return this.pushStack(D(this, e || [], !1));
996    },
997    not: function not(e) {
998      return this.pushStack(D(this, e || [], !0));
999    },
1000    is: function is(e) {
1001      return !!D(this, "string" == typeof e && k.test(e) ? S(e) 
1001: e || [], !1).length;
1002    }
1003  });
1004  var j,
1005    q = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;
1006  (S.fn.init = function (e, t, n) {
1007    var r, i;
1008    if (!e) return this;
1009    if (n = n || j, "string" == typeof e) {
1010      if (!(r = "<" === e[0] && ">" === e[e.length - 1] && 3 <= e.length ? [null, e, null] : q.exec(e)) || !r[1] && t) return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e);
1011      if (r[1]) {
1012        if (t = t instanceof S ? t[0] : t, S.merge(this, S.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : E, !0)), N.test(r[1]) && S.isPlainObject(t)) for (r in t) m(this[r]) ? this[r](t[r]) : this.attr(r, t[r]);
1013        return this;
1014      }
1015      return (i = E.getElementById(r[2])) && (this[0] = i, this.length = 1), this;
1016    }
1017    return e.nodeType ? (this[0] = e, this.length = 1, this) : m(e) ? void 0 !== n.ready ? n.ready(e) : e(S) : S.makeArray(e, this);
1018  }).prototype = S.fn, j = S(E);
1019  var L = /^(?:parents|prev(?:Until|All))/,
1020    H = {
1021      children: !0,
1022      contents: !0,
1023      next: !0,
1024      prev: !0
1025    };
1026  function O(e, t) {
1027    while ((e = e[t]) && 1 !== e.nodeType);
1028    return e;
1029  }
1030  S.fn.extend({
1031    has: function has(e) {
1032      var t = S(e, this),
1033        n = t.length;
1034      return this.filter(function () {
1035        for (var e = 0; e < n; e++) if (S.contains(this, t[e])) return !0;
1036      });
1037    },
1038    closest: function closest(e, t) {
1039      var n,
1040        r = 0,
1041        i = this.length,
1042        o = [],
1043        a = "string" != typeof e && S(e);
1044      if (!k.test(e)) for (; r < i; r++) for (n = this[r]; n && n !== t; n = n.parentNode) if (n.nodeType < 11 && (a ? -1 < a.index(n) : 1 === n.nodeType && S.find.matchesSelector(n, e))) {
1045        o.push(n);
1046        break;
1047      }
1048      return this.pushStack(1 < o.length ? S.uniqueSort(o) : o);
1049    },
1050    index: function index(e) {
1051      return e ? "string" == typeof e ? i.call(S(e), this[0]) : i.call(this, e.jquery ? e[0] : e) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1;
1052    },
1053    add: function add(e, t) {
1054      return this.pushStack(S.uniqueSort(S.merge(this.get(), S(e, t))));
1055    },
1056    addBack: function addBack(e) {
1057      return this.add(null == e ? this.prevObject : this.prevObject.filter(e));
1058    }
1059  }), S.each({
1060    parent: function parent(e) {
1061      var t = e.parentNode;
1062      return t && 11 !== t.nodeType ? t : null;
1063    },
1064    parents: function parents(e) {
1065      return h(e, "parentNode");
1066    },
1067    parentsUntil: function parentsUntil(e, t, n) {
1068      return h(e, "parentNode", n);
1069    },
1070    next: function next(e) {
1071      return O(e, "nextSibling");
1072    },
1073    prev: function prev(e) {
1074      return O(e, "previousSibling");
1075    },
1076    nextAll: function nextAll(e) {
1077      return h(e, "nextSibling");
1078    },
1079    prevAll: function prevAll(e) {
1080      return h(e, "previousSibling");
1081    },
1082    nextUntil: function nextUntil(e, t, n) {
1083      return h(e, "nextSibling", n);
1084    },
1085    prevUntil: function prevUntil(e, t, n) {
1086      return h(e, "previousSibling", n);
1087    },
1088    siblings: function siblings(e) {
1089      return T((e.parentNode || {}).firstChild, e);
1090    },
1091    children: function children(e) {
1092      return T(e.firstChild);
1093    },
1094    contents: function contents(e) {
1095      return null != e.contentDocument && r(e.contentDocument) ? e.contentDocument : (A(e, "template") && (e = e.content || e), S.merge([], e.childNodes));
1096    }
1097  }, function (r, i) {
1098    S.fn[r] = function (e, t) {
1099      var n = S.map(this, i, e);
1100      return "Until" !== r.slice(-5) && (t = e), t && "string" == typeof t && (n = S.filter(t, n)), 1 < this.length && (H[r] || S.uniqueSort(n), L.test(r) && n.reverse()), this.pushStack(n);
1101    };
1102  });
1103  var P = /[^\x20\t\r\n\f]+/g;
1104  function R(e) {
1105    return e;
1106  }
1107  function M(e) {
1108    throw e;
1109  }
1110  function I(e, t, n, r) {
1111    var i;
1112    try {
1113      e && m(i = e.promise) ? i.call(e).done(t).fail(n) : e && m(i = e.then) ? i.call(e, t, n) : t.apply(void 0, [e].slice(r));
1114    } catch (e) {
1115      n.apply(void 0, [e]);
1116    }
1117  }
1118  S.Callbacks = function (r) {
1119    var e, n;
1120    r = "string" == typeof r ? (e = r, n = {}, S.each(e.match(P) || [], function (e, t) {
1121      n[t] = !0;
1122    }), n) : S.extend({}, r);
1123    var i,
1124      t,
1125      o,
1126      a,
1127      s = [],
1128      u = [],
1129      l = -1,
1130      c = function c() {
1131        for (a = a || r.once, o = i = !0; u.length; l = -1) {
1132          t = u.shift();
1133          while (++l < s.length) !1 === s[l].apply(t[0], t[1]) && r.stopOnFalse && (l = s.length, t = !1);
1134        }
1135        r.memory || (t = !1), i = !1, a && (s = t ? [] : "");
1136      },
1137      f = {
1138        add: function add() {
1139          return s && (t && !i && (l = s.length - 1, u.push(t)), function n(e) {
1140            S.each(e, function (e, t) {
1141              m(t) ? r.unique && f.has(t) || s.push(t) : t && t.length && "string" !== w(t) && n(t);
1142            });
1143          }(arguments), t && !i && c()), this;
1144        },
1145        remove: function remove() {
1146          return S.each(arguments, function (e, t) {
1147            var n;
1148            while (-1 < (n = S.inArray(t, s, n))) s.splice(n, 1), n <= l && l--;
1149          }), this;
1150        },
1151        has: function has(e) {
1152          return e ? -1 < S.inArray(e, s) : 0 < s.length;
1153        },
1154        empty: function empty() {
1155          return s && (s = []), this;
1156        },
1157        disable: function disable() {
1158          return a = u = [], s = t = "", this;
1159        },
1160        disabled: function disabled() {
1161          return !s;
1162        },
1163        lock: function lock() {
1164          return a = u = [], t || i || (s = t = ""), this;
1165        },
1166        locked: function locked() {
1167          return !!a;
1168        },
1169        fireWith: function fireWith(e, t) {
1170          return a || (t = [e, (t = t || []).slice ? t.slice() : t], u.push(t), i || c()), this;
1171        },
1172        fire: function fire() {
1173          return f.fireWith(this, arguments), this;
1174        },
1175        fired: function fired() {
1176          return !!o;
1177        }
1178      };
1179    return f;
1180  }, S.extend({
1181    Deferred: function Deferred(e) {
1182      var o = [["notify", "progress", S.Callbacks("memory"), S.Callbacks("memory"), 2], ["resolve", "done", S.Callbacks("once memory"), S.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", S.Callbacks("once memory"), S.Callbacks("once memory"), 1, "rejected"]],
1183        i = "pending",
1184        a = {
1185          state: function state() {
1186            return i;
1187          },
1188          always: function always() {
1189            return s.done(arguments).fail(arguments), this;
1190          },
1191          "catch": function _catch(e) {
1192            return a.then(null, e);
1193          },
1194          pipe: function pipe() {
1195            var i = arguments;
1196            return S.Deferred(function (r) {
1197              S.each(o, function (e, t) {
1198                var n = m(i[t[4]]) && i[t[4]];
1199                s[t[1]](function () {
1200                  var e = n && n.apply(this, arguments);
1201                  e && m(e.promise) ? e.promise().progress(r.notify).done(r.resolve).fail(r.reject) : r[t[0] + "With"](this, n ? [e] : arguments);
1202                });
1203              }), i = null;
1204            }).promise();
1205          },
1206          then: function then(t, n, r) {
1207            var u = 0;
1208            function l(i, o, a, s) {
1209              return function () {
1210                var n = this,
1211                  r = arguments,
1212                  e = function e() {
1213                    var e, t;
1214                    if (!(i < u)) {
1215                      if ((e = a.apply(n, r)) === o.promise()) throw new TypeError("Thenable self-resolution");
1216                      t = e && ("object" == _typeof(e) || "function" == typeof e) && e.then, m(t) ? s ? t.call(e, l(u, o, R, s), l(u, o, M, s)) : (u++, t.call(e, l(u, o, R, s), l(u, o, M, s), l(u, o, R, o.notifyWith))) : (a !== R && (n = void 0, r = [e]), (s || o.resolveWith)(n, r));
1217                    }
1218                  },
1219                  t = s ? e : function () {
1220                    try {
1221                      e();
1222                    } catch (e) {
1223                      S.Deferred.exceptionHook && S.Deferred.exceptionHook(e, t.stackTrace), u <= i + 1 && (a !== M && (n = void 0, r = [e]), o.rejectWith(n, r));
1224                    }
1225                  };
1226                i ? t() : (S.Deferred.getStackHook && (t.stackTrace = S.Deferred.getStackHook()), C.setTimeout(t));
1227              };
1228            }
1229            return S.Deferred(function (e) {
1230              o[0][3].add(l(0, e, m(r) ? r : R, e.notifyWith)), o[1][3].add(l(0, e, m(t) ? t : R)), o[2][3].add(l(0, e, m(n) ? n : M));
1231            }).promise();
1232          },
1233          promise: function promise(e) {
1234            return null != e ? S.extend(e, a) : a;
1235          }
1236        },
1237        s = {};
1238      return S.each(o, function (e, t) {
1239        var n = t[2],
1240          r = t[5];
1241        a[t[1]] = n.add, r && n.add(function () {
1242          i = r;
1243        }, o[3 - e][2].disable, o[3 - e][3].disable, o[0][2].lock, o[0][3].lock), n.add(t[3].fire), s[t[0]] = function () {
1244          return s[t[0] + "With"](this === s ? void 0 : this, arguments), this;
1245        }, s[t[0] + "With"] = n.fireWith;
1246      }), a.promise(s), e && e.call(s, s), s;
1247    },
1248    when: function when(e) {
1249      var n = arguments.length,
1250        t = n,
1251        r = Array(t),
1252        i = s.call(arguments),
1253        o = S.Deferred(),
1254        a = function a(t) {
1255          return function (e) {
1256            r[t] = this, i[t] = 1 < arguments.length ? s.call(arguments) : e, --n || o.resolveWith(r, i);
1257          };
1258        };
1259      if (n <= 1 && (I(e, o.done(a(t)).resolve, o.reject, !n), "pending" === o.state() || m(i[t] && i[t].then))) return o.then();
1260      while (t--) I(i[t], a(t), o.reject);
1261      return o.promise();
1262    }
1263  });
1264  var W = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
1265  S.Deferred.exceptionHook = function (e, t) {
1266    C.console && C.console.warn && e && W.test(e.name) && C.console.warn("jQuery.Deferred exception: " + e.message, e.stack, t);
1267  }, S.readyException = function (e) {
1268    C.setTimeout(function () {
1269      throw e;
1270    });
1271  };
1272  var F = S.Deferred();
1273  function B() {
1274    E.removeEventListener("DOMContentLoaded", B), C.removeEventListener("load", B), S.ready();
1275  }
1276  S.fn.ready = function (e) {
1277    return F.then(e)["catch"](function (e) {
1278      S.readyException(e);
1279    }), this;
1280  }, S.extend({
1281    isReady: !1,
1282    readyWait: 1,
1283    ready: function ready(e) {
1284      (!0 === e ? --S.readyWait : S.isReady) || (S.isReady = !0) !== e && 0 < --S.readyWait || F.resolveWith(E, [S]);
1285    }
1286  }), S.ready.then = F.then, "complete" === E.readyState || "loading" !== E.readyState && !E.documentElement.doScroll ? C.setTimeout(S.ready) : (E.addEventListener("DOMContentLoaded", B), C.addEventListener("load", B));
1287  var $ = function $(e, t, n, r, i, o, a) {
1288      var s = 0,
1289        u = e.length,
1290        l = null == n;
1291      if ("object" === w(n)) for (s in i = !0, n) $(e, t, s, n[s], !0, o, a);else if (void 0 !== r && (i = !0, m(r) || (a = !0), l && (a ? (t.call(e, r), t = null) : (l = t, t = function t(e, _t2, n) {
1292        return l.call(S(e), n);
1293      })), t)) for (; s < u;
1293 s++) t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n)));
1294      return i ? e : l ? t.call(e) : u ? t(e[0], n) : o;
1295    },
1296    _ = /^-ms-/,
1297    z = /-([a-z])/g;
1298  function U(e, t) {
1299    return t.toUpperCase();
1300  }
1301  function X(e) {
1302    return e.replace(_, "ms-").replace(z, U);
1303  }
1304  var V = function V(e) {
1305    return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType;
1306  };
1307  function G() {
1308    this.expando = S.expando + G.uid++;
1309  }
1310  G.uid = 1, G.prototype = {
1311    cache: function cache(e) {
1312      var t = e[this.expando];
1313      return t || (t = {}, V(e) && (e.nodeType ? e[this.expando] = t : Object.defineProperty(e, this.expando, {
1314        value: t,
1315        configurable: !0
1316      }))), t;
1317    },
1318    set: function set(e, t, n) {
1319      var r,
1320        i = this.cache(e);
1321      if ("string" == typeof t) i[X(t)] = n;else for (r in t) i[X(r)] = t[r];
1322      return i;
1323    },
1324    get: function get(e, t) {
1325      return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][X(t)];
1326    },
1327    access: function access(e, t, n) {
1328      return void 0 === t || t && "string" == typeof t && void 0 === n ? this.get(e, t) : (this.set(e, t, n), void 0 !== n ? n : t);
1329    },
1330    remove: function remove(e, t) {
1331      var n,
1332        r = e[this.expando];
1333      if (void 0 !== r) {
1334        if (void 0 !== t) {
1335          n = (t = Array.isArray(t) ? t.map(X) : (t = X(t)) in r ? [t] : t.match(P) || []).length;
1336          while (n--) delete r[t[n]];
1337        }
1338        (void 0 === t || S.isEmptyObject(r)) && (e.nodeType ? e[this.expando] = void 0 : delete e[this.expando]);
1339      }
1340    },
1341    hasData: function hasData(e) {
1342      var t = e[this.expando];
1343      return void 0 !== t && !S.isEmptyObject(t);
1344    }
1345  };
1346  var Y = new G(),
1347    Q = new G(),
1348    J = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
1349    K = /[A-Z]/g;
1350  function Z(e, t, n) {
1351    var r, i;
1352    if (void 0 === n && 1 === e.nodeType) if (r = "data-" + t.replace(K, "-$&").toLowerCase(), "string" == typeof (n = e.getAttribute(r))) {
1353      try {
1354        n = "true" === (i = n) || "false" !== i && ("null" === i ? null : i === +i + "" ? +i : J.test(i) ? JSON.parse(i) : i);
1355      } catch (e) {}
1356      Q.set(e, t, n);
1357    } else n = void 0;
1358    return n;
1359  }
1360  S.extend({
1361    hasData: function hasData(e) {
1362      return Q.hasData(e) || Y.hasData(e);
1363    },
1364    data: function data(e, t, n) {
1365      return Q.access(e, t, n);
1366    },
1367    removeData: function removeData(e, t) {
1368      Q.remove(e, t);
1369    },
1370    _data: function _data(e, t, n) {
1371      return Y.access(e, t, n);
1372    },
1373    _removeData: function _removeData(e, t) {
1374      Y.remove(e, t);
1375    }
1376  }), S.fn.extend({
1377    data: function data(n, e) {
1378      var t,
1379        r,
1380        i,
1381        o = this[0],
1382        a = o && o.attributes;
1383      if (void 0 === n) {
1384        if (this.length && (i = Q.get(o), 1 === o.nodeType && !Y.get(o, "hasDataAttrs"))) {
1385          t = a.length;
1386          while (t--) a[t] && 0 === (r = a[t].name).indexOf("data-") && (r = X(r.slice(5)), Z(o, r, i[r]));
1387          Y.set(o, "hasDataAttrs", !0);
1388        }
1389        return i;
1390      }
1391      return "object" == _typeof(n) ? this.each(function () {
1392        Q.set(this, n);
1393      }) : $(this, function (e) {
1394        var t;
1395        if (o && void 0 === e) return void 0 !== (t = Q.get(o, n)) ? t : void 0 !== (t = Z(o, n)) ? t : void 0;
1396        this.each(function () {
1397          Q.set(this, n, e);
1398        });
1399      }, null, e, 1 < arguments.length, null, !0);
1400    },
1401    removeData: function removeData(e) {
1402      return this.each(function () {
1403        Q.remove(this, e);
1404      });
1405    }
1406  }), S.extend({
1407    queue: function queue(e, t, n) {
1408      var r;
1409      if (e) return t = (t || "fx") + "queue", r = Y.get(e, t), n && (!r || Array.isArray(n) ? r = Y.access(e, t, S.makeArray(n)) : r.push(n)), r || [];
1410    },
1411    dequeue: function dequeue(e, t) {
1412      t = t || "fx";
1413      var n = S.queue(e, t),
1414        r = n.length,
1415        i = n.shift(),
1416        o = S._queueHooks(e, t);
1417      "inprogress" === i && (i = n.shift(), r--), i && ("fx" === t && n.unshift("inprogress"), delete o.stop, i.call(e, function () {
1418        S.dequeue(e, t);
1419      }, o)), !r && o && o.empty.fire();
1420    },
1421    _queueHooks: function _queueHooks(e, t) {
1422      var n = t + "queueHooks";
1423      return Y.get(e, n) || Y.access(e, n, {
1424        empty: S.Callbacks("once memory").add(function () {
1425          Y.remove(e, [t + "queue", n]);
1426        })
1427      });
1428    }
1429  }), S.fn.extend({
1430    queue: function queue(t, n) {
1431      var e = 2;
1432      return "string" != typeof t && (n = t, t = "fx", e--), arguments.length < e ? S.queue(this[0], t) : void 0 === n ? this 
1432: this.each(function () {
1433        var e = S.queue(this, t, n);
1434        S._queueHooks(this, t), "fx" === t && "inprogress" !== e[0] && S.dequeue(this, t);
1435      });
1436    },
1437    dequeue: function dequeue(e) {
1438      return this.each(function () {
1439        S.dequeue(this, e);
1440      });
1441    },
1442    clearQueue: function clearQueue(e) {
1443      return this.queue(e || "fx", []);
1444    },
1445    promise: function promise(e, t) {
1446      var n,
1447        r = 1,
1448        i = S.Deferred(),
1449        o = this,
1450        a = this.length,
1451        s = function s() {
1452          --r || i.resolveWith(o, [o]);
1453        };
1454      "string" != typeof e && (t = e, e = void 0), e = e || "fx";
1455      while (a--) (n = Y.get(o[a], e + "queueHooks")) && n.empty && (r++, n.empty.add(s));
1456      return s(), i.promise(t);
1457    }
1458  });
1459  var ee = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
1460    te = new RegExp("^(?:([+-])=|)(" + ee + ")([a-z%]*)$", "i"),
1461    ne = ["Top", "Right", "Bottom", "Left"],
1462    re = E.documentElement,
1463    ie = function ie(e) {
1464      return S.contains(e.ownerDocument, e);
1465    },
1466    oe = {
1467      composed: !0
1468    };
1469  re.getRootNode && (ie = function ie(e) {
1470    return S.contains(e.ownerDocument, e) || e.getRootNode(oe) === e.ownerDocument;
1471  });
1472  var ae = function ae(e, t) {
1473    return "none" === (e = t || e).style.display || "" === e.style.display && ie(e) && "none" === S.css(e, "display");
1474  };
1475  function se(e, t, n, r) {
1476    var i,
1477      o,
1478      a = 20,
1479      s = r ? function () {
1480        return r.cur();
1481      } : function () {
1482        return S.css(e, t, "");
1483      },
1484      u = s(),
1485      l = n && n[3] || (S.cssNumber[t] ? "" : "px"),
1486      c = e.nodeType && (S.cssNumber[t] || "px" !== l && +u) && te.exec(S.css(e, t));
1487    if (c && c[3] !== l) {
1488      u /= 2, l = l || c[3], c = +u || 1;
1489      while (a--) S.style(e, t, c + l), (1 - o) * (1 - (o = s() / u || .5)) <= 0 && (a = 0), c /= o;
1490      c *= 2, S.style(e, t, c + l), n = n || [];
1491    }
1492    return n && (c = +c || +u || 0, i = n[1] ? c + (n[1] + 1) * n[2] : +n[2], r && (r.unit = l, r.start = c, r.end = i)), i;
1493  }
1494  var ue = {};
1495  function le(e, t) {
1496    for (var n, r, i, o, a, s, u, l = [], c = 0, f = e.length; c < f; c++) (r = e[c]).style && (n = r.style.display, t ? ("none" === n && (l[c] = Y.get(r, "dis
vendor: 11,140 bytes, lines 1496-1738
1496play") || null, l[c] || (r.style.display = "")), "" === r.style.display && ae(r) && (l[c] = (u = a = o = void 0, a = (i = r).ownerDocument, s = i.nodeName, (u = ue[s]) || (o = a.body.appendChild(a.createElement(s)), u = S.css(o, "display"), o.parentNode.removeChild(o), "none" === u && (u = "block"), ue[s] = u)))) : "none" !== n && (l[c] = "none", Y.set(r, "display", n)));
1497    for (c = 0; c < f; c++) null != l[c] && (e[c].style.display = l[c]);
1498    return e;
1499  }
1500  S.fn.extend({
1501    show: function show() {
1502      return le(this, !0);
1503    },
1504    hide: function hide() {
1505      return le(this);
1506    },
1507    toggle: function toggle(e) {
1508      return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function () {
1509        ae(this) ? S(this).show() : S(this).hide();
1510      });
1511    }
1512  });
1513  var ce,
1514    fe,
1515    pe = /^(?:checkbox|radio)$/i,
1516    de = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i,
1517    he = /^$|^module$|\/(?:java|ecma)script/i;
1518  ce = E.createDocumentFragment().appendChild(E.createElement("div")), (fe = E.createElement("input")).setAttribute("type", "radio"), fe.setAttribute("checked", "checked"), fe.setAttribute("name", "t"), ce.appendChild(fe), y.checkClone = ce.cloneNode(!0).cloneNode(!0).lastChild.checked, ce.innerHTML = "<textarea>x</textarea>", y.noCloneChecked = !!ce.cloneNode(!0).lastChild.defaultValue, ce.innerHTML = "<option></option>", y.option = !!ce.lastChild;
1519  var ge = {
1520    thead: [1, "<table>", "</table>"],
1521    col: [2, "<table><colgroup>", "</colgroup></table>"],
1522    tr: [2, "<table><tbody>", "</tbody></table>"],
1523    td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
1524    _default: [0, "", ""]
1525  };
1526  function ve(e, t) {
1527    var n;
1528    return n = "undefined" != typeof e.getElementsByTagName ? e.getElementsByTagName(t || "*") : "undefined" != typeof e.querySelectorAll ? e.querySelectorAll(t || "*") : [], void 0 === t || t && A(e, t) ? S.merge([e], n) : n;
1529  }
1530  function ye(e, t) {
1531    for (var n = 0, r = e.length; n < r; n++) Y.set(e[n], "globalEval", !t || Y.get(t[n], "globalEval"));
1532  }
1533  ge.tbody = ge.tfoot = ge.colgroup = ge.caption = ge.thead, ge.th = ge.td, y.option || (ge.optgroup = ge.option = [1, "<select multiple='multiple'>", "</select>"]);
1534  var me = /<|&#?\w+;/;
1535  function xe(e, t, n, r, i) {
1536    for (var o, a, s, u, l, c, f = t.createDocumentFragment(), p = [], d = 0, h = e.length; d < h; d++) if ((o = e[d]) || 0 === o) if ("object" === w(o)) S.merge(p, o.nodeType ? [o] : o);else if (me.test(o)) {
1537      a = a || f.appendChild(t.createElement("div")), s = (de.exec(o) || ["", ""])[1].toLowerCase(), u = ge[s] || ge._default, a.innerHTML = u[1] + S.htmlPrefilter(o) + u[2], c = u[0];
1538      while (c--) a = a.lastChild;
1539      S.merge(p, a.childNodes), (a = f.firstChild).textContent = "";
1540    } else p.push(t.createTextNode(o));
1541    f.textContent = "", d = 0;
1542    while (o = p[d++]) if (r && -1 < S.inArray(o, r)) i && i.push(o);else if (l = ie(o), a = ve(f.appendChild(o), "script"), l && ye(a), n) {
1543      c = 0;
1544      while (o = a[c++]) he.test(o.type || "") && n.push(o);
1545    }
1546    return f;
1547  }
1548  var be = /^key/,
1549    we = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
1550    Te = /^([^.]*)(?:\.(.+)|)/;
1551  function Ce() {
1552    return !0;
1553  }
1554  function Ee() {
1555    return !1;
1556  }
1557  function Se(e, t) {
1558    return e === function () {
1559      try {
1560        return E.activeElement;
1561      } catch (e) {}
1562    }() == ("focus" === t);
1563  }
1564  function ke(e, t, n, r, i, o) {
1565    var a, s;
1566    if ("object" == _typeof(t)) {
1567      for (s in "string" != typeof n && (r = r || n, n = void 0), t) ke(e, s, n, r, t[s], o);
1568      return e;
1569    }
1570    if (null == r && null == i ? (i = n, r = n = void 0) : null == i && ("string" == typeof n ? (i = r, r = void 0) : (i = r, r = n, n = void 0)), !1 === i) i = Ee;else if (!i) return e;
1571    return 1 === o && (a = i, (i = function i(e) {
1572      return S().off(e), a.apply(this, arguments);
1573    }).guid = a.guid || (a.guid = S.guid++)), e.each(function () {
1574      S.event.add(this, t, i, r, n);
1575    });
1576  }
1577  function Ae(e, i, o) {
1578    o ? (Y.set(e, i, !1), S.event.add(e, i, {
1579      namespace: !1,
1580      handler: function handler(e) {
1581        var t,
1582          n,
1583          r = Y.get(this, i);
1584        if (1 & e.isTrigger && this[i]) {
1585          if (r.length) (S.event.special[i] || {}).delegateType && e.stopPropagation();else if (r = s.call(arguments), Y.set(this, i, r), t = o(this, i), this[i](), r !== (n = Y.get(this, i)) || t ? Y.set(this, i, !1) : n = {}, r !== n) return e.stopImmediatePropagation(), e.preventDefault(), n.value;
1586        } else r.length && (Y.set(this, i, {
1587          value: S.event.trigger(S.extend(r[0], S.Event.prototype), r.slice(1), this)
1588        }), e.stopImmediatePropagation());
1589      }
1590    })) : void 0 === Y.get(e, i) && S.event.add(e, i, Ce);
1591  }
1592  S.event = {
1593    global: {},
1594    add: function add(t, e, n, r, i) {
1595      var o,
1596        a,
1597        s,
1598        u,
1599        l,
1600        c,
1601        f,
1602        p,
1603        d,
1604        h,
1605        g,
1606        v = Y.get(t);
1607      if (V(t)) {
1608        n.handler && (n = (o = n).handler, i = o.selector), i && S.find.matchesSelector(re, i), n.guid || (n.guid = S.guid++), (u = v.events) || (u = v.events = Object.create(null)), (a = v.handle) || (a = v.handle = function (e) {
1609          return "undefined" != typeof S && S.event.triggered !== e.type ? S.event.dispatch.apply(t, arguments) : void 0;
1610        }), l = (e = (e || "").match(P) || [""]).length;
1611        while (l--) d = g = (s = Te.exec(e[l]) || [])[1], h = (s[2] || "").split(".").sort(), d && (f = S.event.special[d] || {}, d = (i ? f.delegateType : f.bindType) || d, f = S.event.special[d] || {}, c = S.extend({
1612          type: d,
1613          origType: g,
1614          data: r,
1615          handler: n,
1616          guid: n.guid,
1617          selector: i,
1618          needsContext: i && S.expr.match.needsContext.test(i),
1619          namespace: h.join(".")
1620        }, o), (p = u[d]) || ((p = u[d] = []).delegateCount = 0, f.setup && !1 !== f.setup.call(t, r, h, a) || t.addEventListener && t.addEventListener(d, a)), f.add && (f.add.call(t, c), c.handler.guid || (c.handler.guid = n.guid)), i ? p.splice(p.delegateCount++, 0, c) : p.push(c), S.event.global[d] = !0);
1621      }
1622    },
1623    remove: function remove(e, t, n, r, i) {
1624      var o,
1625        a,
1626        s,
1627        u,
1628        l,
1629        c,
1630        f,
1631        p,
1632        d,
1633        h,
1634        g,
1635        v = Y.hasData(e) && Y.get(e);
1636      if (v && (u = v.events)) {
1637        l = (t = (t || "").match(P) || [""]).length;
1638        while (l--) if (d = g = (s = Te.exec(t[l]) || [])[1], h = (s[2] || "").split(".").sort(), d) {
1639          f = S.event.special[d] || {}, p = u[d = (r ? f.delegateType : f.bindType) || d] || [], s = s[2] && new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"), a = o = p.length;
1640          while (o--) c = p[o], !i && g !== c.origType || n && n.guid !== c.guid || s && !s.test(c.namespace) || r && r !== c.selector && ("**" !== r || !c.selector) || (p.splice(o, 1), c.selector && p.delegateCount--, f.remove && f.remove.call(e, c));
1641          a && !p.length && (f.teardown && !1 !== f.teardown.call(e, h, v.handle) || S.removeEvent(e, d, v.handle), delete u[d]);
1642        } else for (d in u) S.event.remove(e, d + t[l], n, r, !0);
1643        S.isEmptyObject(u) && Y.remove(e, "handle events");
1644      }
1645    },
1646    dispatch: function dispatch(e) {
1647      var t,
1648        n,
1649        r,
1650        i,
1651        o,
1652        a,
1653        s = new Array(arguments.length),
1654        u = S.event.fix(e),
1655        l = (Y.get(this, "events") || Object.create(null))[u.type] || [],
1656        c = S.event.special[u.type] || {};
1657      for (s[0] = u, t = 1; t < arguments.length; t++) s[t] = arguments[t];
1658      if (u.delegateTarget = this, !c.preDispatch || !1 !== c.preDispatch.call(this, u)) {
1659        a = S.event.handlers.call(this, u, l), t = 0;
1660        while ((i = a[t++]) && !u.isPropagationStopped()) {
1661          u.currentTarget = i.elem, n = 0;
1662          while ((o = i.handlers[n++]) && !u.isImmediatePropagationStopped()) u.rnamespace && !1 !== o.namespace && !u.rnamespace.test(o.namespace) || (u.handleObj = o, u.data = o.data, void 0 !== (r = ((S.event.special[o.origType] || {}).handle || o.handler).apply(i.elem, s)) && !1 === (u.result = r) && (u.preventDefault(), u.stopPropagation()));
1663        }
1664        return c.postDispatch && c.postDispatch.call(this, u), u.result;
1665      }
1666    },
1667    handlers: function handlers(e, t) {
1668      var n,
1669        r,
1670        i,
1671        o,
1672        a,
1673        s = [],
1674        u = t.delegateCount,
1675        l = e.target;
1676      if (u && l.nodeType && !("click" === e.type && 1 <= e.button)) for (; l !== this; l = l.parentNode || this) if (1 === l.nodeType && ("click" !== e.type || !0 !== l.disabled)) {
1677        for (o = [], a = {}, n = 0; n < u; n++) void 0 === a[i = (r = t[n]).selector + " "] && (a[i] = r.needsContext ? -1 < S(i, this).index(l) : S.find(i, this, null, [l]).length), a[i] && o.push(r);
1678        o.length && s.push({
1679          elem: l,
1680          handlers: o
1681        });
1682      }
1683      return l = this, u < t.length && s.push({
1684        elem: l,
1685        handlers: t.slice(u)
1686      }), s;
1687    },
1688    addProp: function addProp(t, e) {
1689      Object.defineProperty(S.Event.prototype, t, {
1690        enumerable: !0,
1691        configurable: !0,
1692        get: m(e) ? function () {
1693          if (this.originalEvent) return e(this.originalEvent);
1694        } : function () {
1695          if (this.originalEvent) return this.originalEvent[t];
1696        },
1697        set: function set(e) {
1698          Object.defineProperty(this, t, {
1699            enumerable: !0,
1700            configurable: !0,
1701            writable: !0,
1702            value: e
1703          });
1704        }
1705      });
1706    },
1707    fix: function fix(e) {
1708      return e[S.expando] ? e : new S.Event(e);
1709    },
1710    special: {
1711      load: {
1712        noBubble: !0
1713      },
1714      click: {
1715        setup: function setup(e) {
1716          var t = this || e;
1717          return pe.test(t.type) && t.click && A(t, "input") && Ae(t, "click", Ce), !1;
1718        },
1719        trigger: function trigger(e) {
1720          var t = this || e;
1721          return pe.test(t.type) && t.click && A(t, "input") && Ae(t, "click"), !0;
1722        },
1723        _default: function _default(e) {
1724          var t = e.target;
1725          return pe.test(t.type) && t.click && A(t, "input") && Y.get(t, "click") || A(t, "a");
1726        }
1727      },
1728      beforeunload: {
1729        postDispatch: function postDispatch(e) {
1730          void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result);
1731        }
1732      }
1733    }
1734  }, S.removeEvent = function (e, t, n) {
1735    e.removeEventListener && e.removeEventListener(t, n);
1736  }, S.Event = function (e, t) {
1737    if (!(this instanceof S.Event)) return new S.Event(e, t);
1738    e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || void 0 === e.defaultPrevented && !1 === e.returnValue ? Ce : Ee, this.target = e.target && 3 === e.target.nodeType ? e.target.parentNode : e.target, this.currentTarget = e.currentTarget, this.relatedTarget = e.relatedTarget) : this.type = e, t && S.extend(this, t), this.timeStamp = e && e.t
1738imeStamp || Date.now(), this[S.expando] = !0;
1739  }, S.Event.prototype = {
1740    constructor: S.Event,
1741    isDefaultPrevented: Ee,
1742    isPropagationStopped: Ee,
1743    isImmediatePropagationStopped: Ee,
1744    isSimulated: !1,
1745    preventDefault: function preventDefault() {
1746      var e = this.originalEvent;
1747      this.isDefaultPrevented = Ce, e && !this.isSimulated && e.preventDefault();
1748    },
1749    stopPropagation: function stopPropagation() {
1750      var e = this.originalEvent;
1751      this.isPropagationStopped = Ce, e && !this.isSimulated && e.stopPropagation();
1752    },
1753    stopImmediatePropagation: function stopImmediatePropagation() {
1754      var e = this.originalEvent;
1755      this.isImmediatePropagationStopped = Ce, e && !this.isSimulated && e.stopImmediatePropagation(), this.stopPropagation();
1756    }
1757  }, S.each({
1758    altKey: !0,
1759    bubbles: !0,
1760    cancelable: !0,
1761    changedTouches: !0,
1762    ctrlKey: !0,
1763    detail: !0,
1764    eventPhase: !0,
1765    metaKey: !0,
1766    pageX: !0,
1767    pageY: !0,
1768    shiftKey: !0,
1769    view: !0,
1770    "char": !0,
1771    code: !0,
1772    charCode: !0,
1773    key: !0,
1774    keyCode: !0,
1775    button: !0,
1776    buttons: !0,
1777    clientX: !0,
1778    clientY: !0,
1779    offsetX: !0,
1780    offsetY: !0,
1781    pointerId: !0,
1782    pointerType: !0,
1783    screenX: !0,
1784    screenY: !0,
1785    targetTouches: !0,
1786    toElement: !0,
1787    touches: !0,
1788    which: function which(e) {
1789      var t = e.button;
1790      return null == e.which && be.test(e.type) ? null != e.charCode ? e.charCode : e.keyCode : !e.which && void 0 !== t && we.test(e.type) ? 1 & t ? 1 : 2 & t ? 3 : 4 & t ? 2 : 0 : e.which;
1791    }
1792  }, S.event.addProp), S.each({
1793    focus: "focusin",
1794    blur: "focusout"
1795  }, function (e, t) {
1796    S.event.special[e] = {
1797      setup: function setup() {
1798        return Ae(this, e, Se), !1;
1799      },
1800      trigger: function trigger() {
1801        return Ae(this, e), !0;
1802      },
1803      delegateType: t
1804    };
1805  }), S.each({
1806    mouseenter: "mouseover",
1807    mouseleave: "mouseout",
1808    pointerenter: "pointerover",
1809    pointerleave: "pointerout"
1810  }, function (e, i) {
1811    S.event.special[e] = {
1812      delegateType: i,
1813      bindType: i,
1814      handle: function handle(e) {
1815        var t,
1816          n = e.relatedTarget,
1817          r = e.handleObj;
1818        return n && (n === this || S.contains(this, n)) || (e.type = r.origType, t = r.handler.apply(this, arguments), e.type = i), t;
1819      }
1820    };
1821  }), S.fn.extend({
1822    on: function on(e, t, n, r) {
1823      return ke(this, e, t, n, r);
1824    },
1825    one: function one(e, t, n, r) {
1826      return ke(this, e, t, n, r, 1);
1827    },
1828    off: function off(e, t, n) {
1829      var r, i;
1830      if (e && e.preventDefault && e.handleObj) return r = e.handleObj, S(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler), this;
1831      if ("object" == _typeof(e)) {
1832        for (i in e) this.off(i, t, e[i]);
1833        return this;
1834      }
1835      return !1 !== t && "function" != typeof t || (n = t, t = void 0), !1 === n && (n = Ee), this.each(function () {
1836        S.event.remove(this, e, n, t);
1837      });
1838    }
1839  });
1840  var Ne = /<script|<style|<link/i,
1841    De = /checked\s*(?:[^=]|=\s*.checked.)/i,
1842    je = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
1843  function qe(e, t) {
1844    return A(e, "table") && A(11 !== t.nodeType ? t : t.firstChild, "tr") && S(e).children("tbody")[0] || e;
1845  }
1846  function Le(e) {
1847    return e.type = (null !== e.getAttribute("type")) + "/" + e.type, e;
1848  }
1849  function He(e) {
1850    return "true/" === (e.type || "").slice(0, 5) ? e.type = e.type.slice(5) : e.removeAttribute("type"), e;
1851  }
1852  function Oe(e, t) {
1853    var n, r, i, o, a, s;
1854    if (1 === t.nodeType) {
1855      if (Y.hasData(e) && (s = Y.get(e).events)) for (i in Y.remove(t, "handle events"), s) for (n = 0, r = s[i].length; n < r; n++) S.event.add(t, i, s[i][n]);
1856      Q.hasData(e) && (o = Q.access(e), a = S.extend({}, o), Q.set(t, a));
1857    }
1858  }
1859  function Pe(n, r, i, o) {
1860    r = g(r);
1861    var e,
1862      t,
1863      a,
1864      s,
1865      u,
1866      l,
1867      c = 0,
1868      f = n.length,
1869      p = f - 1,
1870      d = r[0],
1871      h = m(d);
1872    if (h || 1 < f && "string" == typeof d && !y.checkClone && De.test(d)) return n.each(function (e) {
1873      var t = n.eq(e);
1874      h && (r[0] = d.call(this, e, t.html())), Pe(t, r, i, o);
1875    });
1876    if (f && (t = (e = xe(r, n[0].ownerDocument, !1, n, o)).firstChild, 1 === e.childNodes.length && (e = t), t || o)) {
1877      for (s = (a = S.map(ve(e, "script"), Le)).length; c < f; c++) u = e, c !== p && (u = S.clone(u, !0, !0), s && S.merge(a, ve(u, "script"))), i.call(n[c], u, c);
1878      if (s) for (l = a[a.length - 1].ownerDocument, S.map(a, He), c = 0; c < s; c++) u = a[c], he.test(u.type || "") && !Y.access(u, "globalEval") && S.contains(l, u) && (u.src && "module" !== (u.type || "").toLowerCase() ? S._evalUrl && !u.noModule && S._evalUrl(u.src, {
1879        nonce: u.nonce || u.getAttribute("nonce")
1880      }, l) : b(u.textContent.replace(je, ""), u, l));
1881    }
1882    return n;
1883  }
1884  function Re(e, t, n) {
1885    for (var r, i = t ? S.filter(t, e) : e, o = 0; null != (r = i[o]); o++) n || 1 !== r.nodeType || S.cleanData(ve(r)), r.parentNode && (n && ie(r) && ye(ve(r, "script")), r.parentNode.removeChild(r));
1886    return e;
1887  }
1888  S.extend({
1889    htmlPrefilter: function htmlPrefilter(e) {
1890      return e;
1891    },
1892    clone: function clone(e, t, n) {
1893      var r,
1894        i,
1895        o,
1896        a,
1897        s,
1898        u,
1899        l,
1900        c = e.cloneNode(!0),
1901        f = ie(e);
1902      if (!(y.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || S.isXMLDoc(e))) for (a = ve(c), r = 0, i = (o = ve(e)).length; r < i; r++) s = o[r], u = a[r], void 0, "input" === (l = u.nodeName.toLowerCase()) && pe.test(s.type) ? u.checked = s.checked : "input" !== l && "textarea" !== l || (u.defaultValue = s.defaultValue);
1903      if (t) if (n) for (o = o || ve(e), a = a || ve(c), r = 0, i = o.length; r < i; r++) Oe(o[r], a[r]);else Oe(e, c);
1904      return 0 < (a = ve(c, "script")).length && ye(a, !f && ve(e, "script")), c;
1905    },
1906    cleanData: function cleanData(e) {
1907      for (var t, n, r, i = S.event.special, o = 0; void 0 !== (n = e[o]); o++) if (V(n)) {
1908        if (t = n[Y.expando]) {
1909          if (t.events) for (r in t.events) i[r] ? S.event.remove(n, r) : S.removeEvent(n, r, t.handle);
1910          n[Y.expando] = void 0;
1911        }
1912        n[Q.expando] && (n[Q.expando] = void 0);
1913      }
1914    }
1915  }), S.fn.extend({
1916    detach: function detach(e) {
1917      return Re(this, e, !0);
1918    },
1919    remove: function remove(e) {
1920      return Re(this, e);
1921    },
1922    text: function text(e) {
1923      return $(this, function (e) {
1924        return void 0 === e ? S.text(this) : this.empty().each(function () {
1925          1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = e);
1926        });
1927      }, null, e, arguments.length);
1928    },
1929    append: function append() {
1930      return Pe(this, arguments, function (e) {
1931        1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || qe(this, e).appendChild(e);
1932      });
1933    },
1934    prepend: function prepend() {
1935      return Pe(this, arguments, function (e) {
1936        if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
1937          var t = qe(this, e);
1938          t.insertBefore(e, t.firstChild);
1939        }
1940      });
1941    },
1942    before: function before() {
1943      return Pe(this, arguments, function (e) {
1944        this.parentNode && this.parentNode.insertBefore(e, this);
1945      });
1946    },
1947    after: function after() {
1948      return Pe(this, arguments, function (e) {
1949        this.parentNode && this.parentNode.insertBefore(e, this.nextSibling);
1950      });
1951    },
1952    empty: function empty() {
1953      for (var e, t = 0; null != (e = this[t]); t++) 1 === e.nodeType && (S.cleanData(ve(e, !1)), e.textContent = "");
1954      return this;
1955    },
1956    clone: function clone(e, t) {
1957      return e = null != e && e, t = null == t ? e : t, this.map(function () {
1958        return S.clone(this, e, t);
1959      });
1960    },
1961    html: function html(e) {
1962      return $(this, function (e) {
1963        var t = this[0] || {},
1964          n = 0,
1965          r = this.length;
1966        if (void 0 === e && 1 === t.nodeType) return t.innerHTML;
1967        if ("string" == typeof e && !Ne.test(e) && !ge[(de.exec(e) || ["", ""])[1].toLowerCase()]) {
1968          e = S.htmlPrefilter(e);
1969          try {
1970            for (; n < r; n++) 1 === (t = this[n] || {}).nodeType && (S.cleanData(ve(t, !1)), t.innerHTML = e);
1971            t = 0;
1972          } catch (e) {}
1973        }
1974        t && this.empty().append(e);
1975      }, null, e, arguments.length);
1976    },
1977    replaceWith: function replaceWith() {
1978      var n = [];
1979      return Pe(this, arguments, function (e) {
1980        var t = this.parentNode;
1981        S.inArray(this, n) < 0 && (S.cleanData(ve(this)), t && t.replaceChild(e, this));
1982      }, n);
1983    }
1984  }), S.each({
1985    appendTo: "append",
1986    prependTo: "prepend",
1987    insertBefore: "before",
1988    insertAfter: "after",
1989    replaceAll: "replaceWith"
1990  }, function (e, a) {
1991    S.fn[e] = function (e) {
1992      for (var t, n = [], r = S(e), i = r.length - 1, o = 0; o <= i; o++) t = o === i ? this : this.clone(!0), S(r[o])[a](t), u.apply(n, t.get());
1993      return this.pushStack(n);
1994    };
1995  });
1996  var Me = new RegExp("^(" + ee + ")(?!px)[a-z%]+$", "i"),
1997    Ie = function Ie(e) {
1998      var t = e.ownerDocument.defaultView;
1999      return t && t.opener || (t = C), t.getComputedStyle(e);
2000    },
2001    We = function We(e, t, n) {
2002      var r,
2003        i,
2004        o = {};
2005      for (i in t) o[i] = e.style[i], e.style[i] = t[i];
2006      for (i in r = n.call(e), t) e.style[i] = o[i];
2007      return r;
2008    },
2009    Fe = new RegExp(ne.join("|"), "i");
2010  function Be(e, t, n) {
2011    var r,
2012      i,
2013      o,
2014      a,
2015      s = e.style;
2016    return (n = n || Ie(e)) && ("" !== (a = n.getPropertyValue(t) || n[t]) || ie(e) || (a = S.style(e, t)), !y.pixelBoxStyles() && Me.test(a) && Fe.test(t) && (r = s.width, i = s.minWidth, o = s.maxWidth, s.minWidth = s.maxWidth = s.width = a, a = n.width, s.width = r, s.minWidth = i, s.maxWidth = o)), void 0 !== a ? a + "" : a;
2017  }
2018  function $e(e, t) {
2019    return {
2020      get: function get() {
2021        if (!e()) return (this.get = t).apply(this, arguments);
2022        delete this.get;
2023      }
2024    };
2025  }
2026  !function () {
2027    function e() {
2028      if (l) {
2029        u.style.cssText = "position:absolute;
2029left:-11111px;width:60px;margin-top:1px;padding:0;border:0", l.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%", re.appendChild(u).appendChild(l);
2030        var e = C.getComputedStyle(l);
2031        n = "1%" !== e.top, s = 12 === t(e.marginLeft), l.style.right = "60%", o = 36 === t(e.right), r = 36 === t(e.width), l.style.position = "absolute", i = 12 === t(l.offsetWidth / 3), re.removeChild(u), l = null;
2032      }
2033    }
2034    function t(e) {
2035      return Math.round(parseFloat(e));
2036    }
2037    var n,
2038      r,
2039      i,
2040      o,
2041      a,
2042      s,
2043      u = E.createElement("div"),
2044      l = E.createElement("div");
2045    l.style && (l.style.backgroundClip = "content-box", l.cloneNode(!0).style.backgroundClip = "", y.clearCloneStyle = "content-box" === l.style.backgroundClip, S.extend(y, {
2046      boxSizingReliable: function boxSizingReliable() {
2047        return e(), r;
2048      },
2049      pixelBoxStyles: function pixelBoxStyles() {
2050        return e(), o;
2051      },
2052      pixelPosition: function pixelPosition() {
2053        return e(), n;
2054      },
2055      reliableMarginLeft: function reliableMarginLeft() {
2056        return e(), s;
2057      },
2058      scrollboxSize: function scrollboxSize() {
2059        return e(), i;
2060      },
2061      reliableTrDimensions: function reliableTrDimensions() {
2062        var e, t, n, r;
2063        return null == a && (e = E.createElement("table"), t = E.createElement("tr"), n = E.createElement("div"), e.style.cssText = "position:absolute;left:-11111px", t.style.height = "1px", n.style.height = "9px", re.appendChild(e).appendChild(t).appendChild(n), r = C.getComputedStyle(t), a = 3 < parseInt(r.height), re.removeChild(e)), a;
2064      }
2065    }));
2066  }();
2067  var _e = ["Webkit", "Moz", "ms"],
2068    ze = E.createElement("div").style,
2069    Ue = {};
2070  function Xe(e) {
2071    var t = S.cssProps[e] || Ue[e];
2072    return t || (e in ze ? e : Ue[e] = function (e) {
2073      var t = e[0].toUpperCase() + e.slice(1),
2074        n = _e.length;
2075      while (n--) if ((e = _e[n] + t) in ze) return e;
2076    }(e) || e);
2077  }
2078  var Ve = /^(none|table(?!-c[ea]).+)/,
2079    Ge = /^--/,
2080    Ye = {
2081      position: "absolute",
2082      visibility: "hidden",
2083      display: "block"
2084    },
2085    Qe = {
2086      letterSpacing: "0",
2087      fontWeight: "400"
2088    };
2089  function Je(e, t, n) {
2090    var r = te.exec(t);
2091    return r ? Math.max(0, r[2] - (n || 0)) + (r[3] || "px") : t;
2092  }
2093  function Ke(e, t, n, r, i, o) {
2094    var a = "width" === t ? 1 : 0,
2095      s = 0,
2096      u = 0;
2097    if (n === (r ? "border" : "content")) return 0;
2098    for (; a < 4; a += 2) "margin" === n && (u += S.css(e, n + ne[a], !0, i)), r ? ("content" === n && (u -= S.css(e, "padding" + ne[a], !0, i)), "margin" !== n && (u -= S.css(e, "border" + ne[a] + "Width", !0, i))) : (u += S.css(e, "padding" + ne[a], !0, i), "padding" !== n ? u += S.css(e, "border" + ne[a] + "Width", !0, i) : s += S.css(e, "border" + ne[a] + "Width", !0, i));
2099    return !r && 0 <= o && (u += Math.max(0, Math.ceil(e["offset" + t[0].toUpperCase() + t.slice(1)] - o - u - s - .5)) || 0), u;
2100  }
2101  function Ze(e, t, n) {
2102    var r = Ie(e),
2103      i = (!y.boxSizingReliable() || n) && "border-box" === S.css(e, "boxSizing", !1, r),
2104      o = i,
2105      a = Be(e, t, r),
2106      s = "offset" + t[0].toUpperCase() + t.slice(1);
2107    if (Me.test(a)) {
2108      if (!n) return a;
2109      a = "auto";
2110    }
2111    return (!y.boxSizingReliable() && i || !y.reliableTrDimensions() && A(e, "tr") || "auto" === a || !parseFloat(a) && "inline" === S.css(e, "display", !1, r)) && e.getClientRects().length && (i = "border-box" === S.css(e, "boxSizing", !1, r), (o = s in e) && (a = e[s])), (a = parseFloat(a) || 0) + Ke(e, t, n || (i ? "border" : "content"), o, r, a) + "px";
2112  }
2113  function et(e, t, n, r, i) {
2114    return new et.prototype.init(e, t, n, r, i);
2115  }
2116  S.extend({
2117    cssHooks: {
2118      opacity: {
2119        get: function get(e, t) {
2120          if (t) {
2121            var n = Be(e, "opacity");
2122            return "" === n ? "1" : n;
2123          }
2124        }
2125      }
2126    },
2127    cssNumber: {
2128      animationIterationCount: !0,
2129      columnCount: !0,
2130      fillOpacity: !0,
2131      flexGrow: !0,
2132      flexShrink: !0,
2133      fontWeight: !0,
2134      gridArea: !0,
2135      gridColumn: !0,
2136      gridColumnEnd: !0,
2137      gridColumnStart: !0,
2138      gridRow: !0,
2139      gridRowEnd: !0,
2140      gridRowStart: !0,
2141      lineHeight: !0,
2142      opacity: !0,
2143      order: !0,
2144      orphans: !0,
2145      widows: !0,
2146      zIndex: !0,
2147      zoom: !0
2148    },
2149    cssProps: {},
2150    style: function style(e, t, n, r) {
2151      if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {
2152        var i,
2153          o,
2154          a,
2155          s = X(t),
2156          u = Ge.test(t),
2157          l = e.style;
2158        if (u || (t = Xe(s)), a = S.cssHooks[t] || S.cssHooks[s], void 0 === n) return a && "get" in a && void 0 !== (i = a.get(e, !1, r)) ? i : l[t];
2159        "string" === (o = _typeof(n)) && (i = te.exec(n)) && i[1] && (n = se(e, t, i), o = "number"), null != n && n == n && ("number" !== o || u || (n += i && i[3] || (S.cssNumber[s] ? "" : "px")), y.clearCloneStyle || "" !== n || 0 !== t.indexOf("background") || (l[t] = "inherit"), a && "set" in a && void 0 === (n = a.set(e, n, r)) || (u ? l.setProperty(t, n) : l[t] = n));
2160      }
2161    },
2162    css: function css(e, t, n, r) {
2163      var i,
2164        o,
2165        a,
2166        s = X(t);
2167      return Ge.test(t) || (t = Xe(s)), (a = S.cssHooks[t] || S.cssHooks[s]) && "get" in a && (i = a.get(e, !0, n)), void 0 === i && (i = Be(e, t, r)), "normal" === i && t in Qe && (i = Qe[t]), "" === n || n ? (o = parseFloat(i), !0 === n || isFinite(o) ? o || 0 : i) : i;
2168    }
2169  }), S.each(["height", "width"], function (e, u) {
2170    S.cssHooks[u] = {
2171      get: function get(e, t, n) {
2172        if (t) return !Ve.test(S.css(e, "display")) || e.getClientRects().length && e.getBoundingClientRect().width ? Ze(e, u, n) : We(e, Ye, function () {
2173          return Ze(e, u, n);
2174        });
2175      },
2176      set: function set(e, t, n) {
2177        var r,
2178          i = Ie(e),
2179          o = !y.scrollboxSize() && "absolute" === i.position,
2180          a = (o || n) && "border-box" === S.css(e, "boxSizing", !1, i),
2181          s = n ? Ke(e, u, n, a, i) : 0;
2182        return a && o && (s -= Math.ceil(e["offset" + u[0].toUpperCase() + u.slice(1)] - parseFloat(i[u]) - Ke(e, u, "border", !1, i) - .5)), s && (r = te.exec(t)) && "px" !== (r[3] || "px") && (e.style[u] = t, t = S.css(e, u)), Je(0, t, s);
2183      }
2184    };
2185  }), S.cssHooks.marginLeft = $e(y.reliableMarginLeft, function (e, t) {
2186    if (t) return (parseFloat(Be(e, "marginLeft")) || e.getBoundingClientRect().left - We(e, {
2187      marginLeft: 0
2188    }, function () {
2189      return e.getBoundingClientRect().left;
2190    })) + "px";
2191  }), S.each({
2192    margin: "",
2193    padding: "",
2194    border: "Width"
2195  }, function (i, o) {
2196    S.cssHooks[i + o] = {
2197      expand: function expand(e) {
2198        for (var t = 0, n = {}, r = "string" == typeof e ? e.split(" ") : [e]; t < 4; t++) n[i + ne[t] + o] = r[t] || r[t - 2] || r[0];
2199        return n;
2200      }
2201    }, "margin" !== i && (S.cssHooks[i + o].set = Je);
2202  }), S.fn.extend({
2203    css: function css(e, t) {
2204      return $(this, function (e, t, n) {
2205        var r,
2206          i,
2207          o = {},
2208          a = 0;
2209        if (Array.isArray(t)) {
2210          for (r = Ie(e), i = t.length; a < i; a++) o[t[a]] = S.css(e, t[a], !1, r);
2211          return o;
2212        }
2213        return void 0 !== n ? S.style(e, t, n) : S.css(e, t);
2214      }, e, t, 1 < arguments.length);
2215    }
2216  }), ((S.Tween = et).prototype = {
2217    constructor: et,
2218    init: function init(e, t, n, r, i, o) {
2219      this.elem = e, this.prop = n, this.easing = i || S.easing._default, this.options = t, this.start = this.now = this.cur(), this.end = r, this.unit = o || (S.cssNumber[n] ? "" : "px");
2220    },
2221    cur: function cur() {
2222      var e = et.propHooks[this.prop];
2223      return e && e.get ? e.get(this) : et.propHooks._default.get(this);
2224    },
2225    run: function run(e) {
2226      var t,
2227        n = et.propHooks[this.prop];
2228      return this.options.duration ? this.pos = t = S.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e, this.now = (this.end - this.start) * t + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), n && n.set ? n.set(this) : et.propHooks._default.set(this), this;
2229    }
2230  }).init.prototype = et.prototype, (et.propHooks = {
2231    _default: {
2232      get: function get(e) {
2233        var t;
2234        return 1 !== e.elem.nodeType || null != e.elem[e.prop] && null == e.elem.style[e.prop] ? e.elem[e.prop] : (t = S.css(e.elem, e.prop, "")) && "auto" !== t ? t : 0;
2235      },
2236      set: function set(e) {
2237        S.fx.step[e.prop] ? S.fx.step[e.prop](e) : 1 !== e.elem.nodeType || !S.cssHooks[e.prop] && null == e.elem.style[Xe(e.prop)] ? e.elem[e.prop] = e.now : S.style(e.elem, e.prop, e.now + e.unit);
2238      }
2239    }
2240  }).scrollTop = et.propHooks.scrollLeft = {
2241    set: function set(e) {
2242      e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now);
2243    }
2244  }, S.easing = {
2245    linear: function linear(e) {
2246      return e;
2247    },
2248    swing: function swing(e) {
2249      return .5 - Math.cos(e * Math.PI) / 2;
2250    },
2251    _default: "swing"
2252  }, S.fx = et.prototype.init, S.fx.step = {};
2253  var tt,
2254    nt,
2255    rt,
2256    it,
2257    ot = /^(?:toggle|show|hide)$/,
2258    at = /queueHooks$/;
2259  function st() {
2260    nt && (!1 === E.hidden && C.requestAnimationFrame ? C.requestAnimationFrame(st) : C.setTimeout(st, S.fx.interval), S.fx.tick());
2261  }
2262  function ut() {
2263    return C.setTimeout(function () {
2264      tt = void 0;
2265    }), tt = Date.now();
2266  }
2267  function lt(e, t) {
2268    var n,
2269      r = 0,
2270      i = {
2271        height: e
2272      };
2273    for (t = t ? 1 : 0; r < 4; r += 2 - t) i["margin" + (n = ne[r])] = i["padding" + n] = e;
2274    return t && (i.opacity = i.width = e), i;
2275  }
2276  function ct(e, t, n) {
2277    for (var r, i = (ft.tweeners[t] || []).concat(ft.tweeners["*"]), o = 0, a = i.length; o < a; o++) if (r = i[o].call(n, t, e)) return r;
2278  }
2279  function ft(o, e, t) {
2280    var n,
2281      a,
2282      r = 0,
2283      i = ft.prefilters.length,
2284      s = S.Deferred().always(function () {
2285        delete u.elem;
2286      }),
2287      u = function u() {
2288        if (a) return !1;
2289        for (var e = tt || ut(), t = Math.max(0, l.startTime + l.duration - e), n = 1 - (t / l.duration || 0), r = 0, i = l.tweens.length; r < i; r++) l.tweens[r].run(n);
2290        return s.notifyWith(o, [l, n, t]), n < 1 && i ? t : (i || s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l]), !1);
2291      },
2292      l = s.promise({
2293        elem: o,
2294        props: S.extend({}, e),
2295        opts: S.extend(!0, {
2296          specialEasing: {},
2297          easing: S.easing._default
2298        }, t),
2299        originalProperties: e,
2300        originalOptions: t,
2301        startTime: tt || ut(),
2302        duration: t.duration,
2303        tweens: [],
2304        createTween: function createTween(e, t) {
2305          var n = S.Tween(o, l.opts, e, t, l.opts.specialEasing[e] || l.opts.easing);
2306          return l.tweens.push(n), n;
2307        },
2308        stop: function stop(e) {
2309          var t = 0,
2310            n = e ? l.tweens.length : 0;
2311          if (a) return this;
2312          for (a = !0; t < n; t++) l.tweens[t].run(1);
2313          return e ? (s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l, e])) : s.rejectWith(o, [l, e]), this;
2314        }
2315      }),
2316      c = l.props;
2317    for (!function (e, t) {
2318      var n, r, i, o, a;
2319      for (n in e) if (i = t[r = X(n)], o = e[n], Array.isArray(o) && (i = o[1], o = e[n] = o[0]), n !== r && (e[r] = o, delete e[n]), (a = S.cssHooks[r]) && ("expand" in a)) for (n in o = a.expand(o), delete e[r], o) (n in e) || (e[n] = o[n], t[n] = i);else t[r] = i;
2320    }(c, l.opts.specialEasing); r < i; r++) if (n = ft.prefilters[r].call(l, o, c, l.opts)) return m(n.stop) && (S._queueHooks(l.elem, l.opts.queue).stop = n.stop.bind(n)), n;
2321    return S.map(c, ct, l), m(l.opts.start) && l.opts.start.call(o, l), l.progress(l.opts.progress).done(l.opts.done, l.opts.complete).fail(l.opts.fail).always(l.opts.always), S.fx.timer(S.extend(u, {
2322      elem: o,
2323      anim: l,
2324      queue: l.opts.queue
2325    })), l;
2326  }
2327  S.Animation = S.extend(ft, {
2328    tweeners: {
2329      "*": [function (e, t) {
2330        var n = this.createTween(e, t);
2331        return se(n.elem, e, te.exec(t), n), n;
2332      }]
2333    },
2334    tweener: function tweener(e, t) {
2335      m(e) ? (t = e, e = ["*"]) : e = e.match(P);
2336      for (var n, r = 0, i = e.length; r < i; r++) n = e[r], ft.tweeners[n] = ft.tweeners[n] || [], ft.tweeners[n].unshift(t);
2337    },
2338    prefilters: [function (e, t, n) {
2339      var r,
2340        i,
2341        o,
2342        a,
2343        s,
2344        u,
2345        l,
2346        c,
2347        f = "width" in t || "height" in t,
2348        p = this,
2349        d = {},
2350        h = e.style,
2351        g = e.nodeType && ae(e),
2352        v = Y.get(e, "fxshow");
2353      for (r in n.queue || (null == (a = S._queueHooks(e, "fx")).unqueued && (a.unqueued = 0, s = a.empty.fire, a.empty.fire = function () {
2354        a.unqueued || s();
2355      }), a.unqueued++, p.always(function () {
2356        p.always(function () {
2357          a.unqueued--, S.queue(e, "fx").length || a.empty.fire();
2358        });
2359      })), t) if (i = t[r], ot.test(i)) {
2360        if (delete t[r], o = o || "toggle" === i, i === (g ? "hide" : "show")) {
2361          if ("show" !== i || !v || void 0 === v[r]) continue;
2362          g = !0;
2363        }
2364        d[r] = v && v[r] || S.style(e, r);
2365      }
2366      if ((u = !S.isEmptyObject(t)) || !S.isEmptyObject(d)) for (r in f && 1 === e.nodeType && (n.overflow = [h.overflow, h.overflowX, h.overflowY], null == (l = v && v.display) && (l = Y.get(e, "display")), "none" === (c = S.css(e, "display")) && (l ? c = l : (le([e], !0), l = e.style.display || l, c = S.css(e, "display"), le([e]))), ("inline" === c || "inline-block" === c && null != l) && "none" === S.css(e, "float") && (u || (p.done(function () {
2367        h.display = l;
2368      }), null == l && (c = h.display, l = "none" === c ? "" : c)), h.display = "inline-block")), n.overflow && (h.overflow = "hidden", p.always(function () {
2369        h.overflow = n.overflow[0], h.overflowX = n.overflow[1], h.overflowY = n.overflow[2];
2370      })), u = !1, d) u || (v ? "hidden" in v && (g = v.hidden) : v = Y.access(e, "fxshow", {
2371        display: l
2372      }), o && (v.hidden = !g), g && le([e], !0), p.done(function () {
2373        for (r in g || le([e]), Y.remove(e, "fxshow"), d) S.style(e, r, d[r]);
2374      })), u = ct(g ? v[r] : 0, r, p), r in v || (v[r] = u.start, g && (u.end = u.start, u.start = 0));
2375    }],
2376    prefilter: function prefilter(e, t) {
2377      t ? ft.prefilters.unshift(e) : ft.prefilters.push(e);
2378    }
2379  }), S.speed = function (e, t, n) {
2380    var r = e && "object" == _typeof(e) ? S.extend({}, e) : {
2381      complete: n || !n && t || m(e) && e,
2382      duration: e,
2383      easing: n && t || t && !m(t) && t
2384    };
2385    return S.fx.off ? r.duration = 0 : "number" != typeof r.duration && (r.duration in S.fx.speeds ? r.duration = S.fx.speeds[r.duration] : r.duration = S.fx.speeds._default), null != r.queue && !0 !== r.queue || (r.queue = "fx"), r.old = r.complete, r.complete = function () {
2386      m(r.old) && r.old.call(this), r.queue && S.dequeue(this, r.queue);
2387    }, r;
2388  }, S.fn.extend({
2389    fadeTo: function fadeTo(e, t, n, r) {
2390      return this.filter(ae).css("opacity", 0).show().end().animate({
2391        opacity: t
2392      }, e, n, r);
2393    },
2394    animate: function animate(t, e, n, r) {
2395      var i = S.isEmptyObject(t),
2396        o = S.speed(e, n, r),
2397        a = function a() {
2398          var e = ft(this, S.extend({}, t), o);
2399          (i || Y.get(this, "finish")) && e.stop(!0);
2400        };
2401      return a.finish = a, i || !1 === o.queue ? this.each(a) : this.queue(o.queue, a);
2402    },
2403    stop: function stop(i, e, o) {
2404      var a = function a(e) {
2405        var t = e.stop;
2406        delete e.stop, t(o);
2407      };
2408      return "string" != typeof i && (o = e, e = i, i = void 0), e && this.queue(i || "fx", []), this.each(function () {
2409        var e = !0,
2410          t = null != i && i + "queueHooks",
2411          n = S.timers,
2412          r = Y.get(this);
2413        if (t) r[t] && r[t].stop && a(r[t]);else for (t in r) r[t] && r[t].stop && at.test(t) && a(r[t]);
2414        for (t = n.length; t--;) n[t].elem !== this || null != i && n[t].queue !== i || (n[t].anim.stop(o), e = !1, n.splice(t, 1));
2415        !e && o || S.dequeue(this, i);
2416      });
2417    },
2418    finish: function finish(a) {
2419      return !1 !== a && (a = a || "fx"), this.each(function () {
2420        var e,
2421          t = Y.get(this),
2422          n = t[a + "queue"],
2423          r = t[a + "queueHooks"],
2424          i = S.timers,
2425          o = n ? n.length : 0;
2426        for (t.finish = !0, S.queue(this, a, []), r && r.stop && r.stop.call(this, !0), e = i.length; e--;) i[e].elem === this && i[e].queue === a && (i[e].anim.stop(!0), i.splice(e, 1));
2427        for (e = 0; e < o; e++) n[e] && n[e].finish && n[e].finish.call(this);
2428        delete t.finish;
2429      });
2430    }
2431  }), S.each(["toggle", "show", "hide"], function (e, r) {
2432    var i = S.fn[r];
2433    S.fn[r] = function (e, t, n) {
2434      return null == e || "boolean" == typeof e ? i.apply(this, arguments) : this.animate(lt(r, !0), e, t, n);
2435    };
2436  }), S.each({
2437    slideDown: lt("show"),
2438    slideUp: lt("hide"),
2439    slideToggle: lt("toggle"),
2440    fadeIn: {
2441      opacity: "show"
2442    },
2443    fadeOut: {
2444      opacity: "hide"
2445    },
2446    fadeToggle: {
2447      opacity: "toggle"
2448    }
2449  }, function (e, r) {
2450    S.fn[e] = function (e, t, n) {
2451      return this.animate(r, e, t, n);
2452    };
2453  }), S.timers = [], S.fx.tick = function () {
2454    var e,
2455      t = 0,
2456      n = S.timers;
2457    for (tt = Date.now(); t < n.length; t++) (e = n[t])() || n[t] !== e || n.splice(t--, 1);
2458    n.length || S.fx.stop(), tt = void 0;
2459  }, S.fx.timer = function (e) {
2460    S.timers.push(e), S.fx.start();
2461  }, S.fx.interval = 13, S.fx.start = function () {
2462    nt || (nt = !0, st());
2463  }, S.fx.stop = function () {
2464    nt = null;
2465  }, S.fx.speeds = {
2466    slow: 600,
2467    fast: 200,
2468    _default: 400
2469  }
2469, S.fn.delay = function (r, e) {
2470    return r = S.fx && S.fx.speeds[r] || r, e = e || "fx", this.queue(e, function (e, t) {
2471      var n = C.setTimeout(e, r);
2472      t.stop = function () {
2473        C.clearTimeout(n);
2474      };
2475    });
2476  }, rt = E.createElement("input"), it = E.createElement("select").appendChild(E.createElement("option")), rt.type = "checkbox", y.checkOn = "" !== rt.value, y.optSelected = it.selected, (rt = E.createElement("input")).value = "t", rt.type = "radio", y.radioValue = "t" === rt.value;
2477  var pt,
2478    dt = S.expr.attrHandle;
2479  S.fn.extend({
2480    attr: function attr(e, t) {
2481      return $(this, S.attr, e, t, 1 < arguments.length);
2482    },
2483    removeAttr: function removeAttr(e) {
2484      return this.each(function () {
2485        S.removeAttr(this, e);
2486      });
2487    }
2488  }), S.extend({
2489    attr: function attr(e, t, n) {
2490      var r,
2491        i,
2492        o = e.nodeType;
2493      if (3 !== o && 8 !== o && 2 !== o) return "undefined" == typeof e.getAttribute ? S.prop(e, t, n) : (1 === o && S.isXMLDoc(e) || (i = S.attrHooks[t.toLowerCase()] || (S.expr.match.bool.test(t) ? pt : void 0)), void 0 !== n ? null === n ? void S.removeAttr(e, t) : i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : (e.setAttribute(t, n + ""), n) : i && "get" in i && null !== (r = i.get(e, t)) ? r : null == (r = S.find.attr(e, t)) ? void 0 : r);
2494    },
2495    attrHooks: {
2496      type: {
2497        set: function set(e, t) {
2498          if (!y.radioValue && "radio" === t && A(e, "input")) {
2499            var n = e.value;
2500            return e.setAttribute("type", t), n && (e.value = n), t;
2501          }
2502        }
2503      }
2504    },
2505    removeAttr: function removeAttr(e, t) {
2506      var n,
2507        r = 0,
2508        i = t && t.match(P);
2509      if (i && 1 === e.nodeType) while (n = i[r++]) e.removeAttribute(n);
2510    }
2511  }), pt = {
2512    set: function set(e, t, n) {
2513      return !1 === t ? S.removeAttr(e, n) : e.setAttribute(n, n), n;
2514    }
2515  }, S.each(S.expr.match.bool.source.match(/\w+/g), function (e, t) {
2516    var a = dt[t] || S.find.attr;
2517    dt[t] = function (e, t, n) {
2518      var r,
2519        i,
2520        o = t.toLowerCase();
2521      return n || (i = dt[o], dt[o] = r, r = null != a(e, t, n) ? o : null, dt[o] = i), r;
2522    };
2523  });
2524  var ht = /^(?:input|select|textarea|button)$/i,
2525    gt = /^(?:a|area)$/i;
2526  function vt(e) {
2527    return (e.match(P) || []).join(" ");
2528  }
2529  function yt(e) {
2530    return e.getAttribute && e.getAttribute("class") || "";
2531  }
2532  function mt(e) {
2533    return Array.isArray(e) ? e : "string" == typeof e && e.match(P) || [];
2534  }
2535  S.fn.extend({
2536    prop: function prop(e, t) {
2537      return $(this, S.prop, e, t, 1 < arguments.length);
2538    },
2539    removeProp: function removeProp(e) {
2540      return this.each(function () {
2541        delete this[S.propFix[e] || e];
2542      });
2543    }
2544  }), S.extend({
2545    prop: function prop(e, t, n) {
2546      var r,
2547        i,
2548        o = e.nodeType;
2549      if (3 !== o && 8 !== o && 2 !== o) return 1 === o && S.isXMLDoc(e) || (t = S.propFix[t] || t, i = S.propHooks[t]), void 0 !== n ? i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : e[t] = n : i && "get" in i && null !== (r = i.get(e, t)) ? r : e[t];
2550    },
2551    propHooks: {
2552      tabIndex: {
2553        get: function get(e) {
2554          var t = S.find.attr(e, "tabindex");
2555          return t ? parseInt(t, 10) : ht.test(e.nodeName) || gt.test(e.nodeName) && e.href ? 0 : -1;
2556        }
2557      }
2558    },
2559    propFix: {
2560      "for": "htmlFor",
2561      "class": "className"
2562    }
2563  }), y.optSelected || (S.propHooks.selected = {
2564    get: function get(e) {
2565      var t = e.parentNode;
2566      return t && t.parentNode && t.parentNode.selectedIndex, null;
2567    },
2568    set: function set(e) {
2569      var t = e.parentNode;
2570      t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex);
2571    }
2572  }), S.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () {
2573    S.propFix[this.toLowerCase()] = this;
2574  }), S.fn.extend({
2575    addClass: function addClass(t) {
2576      var e,
2577        n,
2578        r,
2579        i,
2580        o,
2581        a,
2582        s,
2583        u = 0;
2584      if (m(t)) return this.each(function (e) {
2585        S(this).addClass(t.call(this, e, yt(this)));
2586      });
2587      if ((e = mt(t)).length) while (n = this[u++]) if (i = yt(n), r = 1 === n.nodeType && " " + vt(i) + " ") {
2588        a = 0;
2589        while (o = e[a++]) r.indexOf(" " + o + " ") < 0 && (r += o + " ");
2590        i !== (s = vt(r)) && n.setAttribute("class", s);
2591      }
2592      return this;
2593    },
2594    removeClass: function removeClass(t) {
2595      var e,
2596        n,
2597        r,
2598        i,
2599        o,
2600        a,
2601        s,
2602        u = 0;
2603      if (m(t)) return this.each(function (e) {
2604        S(this).removeClass(t.call(this, e, yt(this)));
2605      });
2606      if (!arguments.length) return this.attr("class", "");
2607      if ((e = mt(t)).length) while (n = this[u++]) if (i = yt(n), r = 1 === n.nodeType && " " + vt(i) + " ") {
2608        a = 0;
2609        while (o = e[a++]) while (-1 < r.indexOf(" " + o + " ")) r = r.replace(" " + o + " ", " ");
2610        i !== (s = vt(r)) && n.setAttribute("class", s);
2611      }
2612      return this;
2613    },
2614    toggleClass: function toggleClass(i, t) {
2615      var o = _typeof(i),
2616        a = "string" === o || Array.isArray(i);
2617      return "boolean" == typeof t && a ? t ? this.addClass(i) : this.removeClass(i) : m(i) ? this.each(function (e) {
2618        S(this).toggleClass(i.call(this, e, yt(this), t), t);
2619      }) : this.each(function () {
2620        var e, t, n, r;
2621        if (a) {
2622          t = 0, n = S(this), r = mt(i);
2623          while (e = r[t++]) n.hasClass(e) ? n.removeClass(e) : n.addClass(e);
2624        } else void 0 !== i && "boolean" !== o || ((e = yt(this)) && Y.set(this, "__className__", e), this.setAttribute && this.setAttribute("class", e || !1 === i ? "" : Y.get(this, "__className__") || ""));
2625      });
2626    },
2627    hasClass: function hasClass(e) {
2628      var t,
2629        n,
2630        r = 0;
2631      t = " " + e + " ";
2632      while (n = this[r++]) if (1 === n.nodeType && -1 < (" " + vt(yt(n)) + " ").indexOf(t)) return !0;
2633      return !1;
2634    }
2635  });
2636  var xt = /\r/g;
2637  S.fn.extend({
2638    val: function val(n) {
2639      var r,
2640        e,
2641        i,
2642        t = this[0];
2643      return arguments.length ? (i = m(n), this.each(function (e) {
2644        var t;
2645        1 === this.nodeType && (null == (t = i ? n.call(this, e, S(this).val()) : n) ? t = "" : "number" == typeof t ? t += "" : Array.isArray(t) && (t = S.map(t, function (e) {
2646          return null == e ? "" : e + "";
2647        })), (r = S.valHooks[this.type] || S.valHooks[this.nodeName.toLowerCase()]) && "set" in r && void 0 !== r.set(this, t, "value") || (this.value = t));
2648      })) : t ? (r = S.valHooks[t.type] || S.valHooks[t.nodeName.toLowerCase()]) && "get" in r && void 0 !== (e = r.get(t, "value")) ? e : "string" == typeof (e = t.value) ? e.replace(xt, "") : null == e ? "" : e : void 0;
2649    }
2650  }), S.extend({
2651    valHooks: {
2652      option: {
2653        get: function get(e) {
2654          var t = S.find.attr(e, "value");
2655          return null != t ? t : vt(S.text(e));
2656        }
2657      },
2658      select: {
2659        get: function get(e) {
2660          var t,
2661            n,
2662            r,
2663            i = e.options,
2664            o = e.selectedIndex,
2665            a = "select-one" === e.type,
2666            s = a ? null : [],
2667            u = a ? o + 1 : i.length;
2668          for (r = o < 0 ? u : a ? o : 0; r < u; r++) if (((n = i[r]).selected || r === o) && !n.disabled && (!n.parentNode.disabled || !A(n.parentNode, "optgroup"))) {
2669            if (t = S(n).val(), a) return t;
2670            s.push(t);
2671          }
2672          return s;
2673        },
2674        set: function set(e, t) {
2675          var n,
2676            r,
2677            i = e.options,
2678            o = S.makeArray(t),
2679            a = i.length;
2680          while (a--) ((r = i[a]).selected = -1 < S.inArray(S.valHooks.option.get(r), o)) && (n = !0);
2681          return n || (e.selectedIndex = -1), o;
2682        }
2683      }
2684    }
2685  }), S.each(["radio", "checkbox"], function () {
2686    S.valHooks[this] = {
2687      set: function set(e, t) {
2688        if (Array.isArray(t)) return e.checked = -1 < S.inArray(S(e).val(), t);
2689      }
2690    }, y.checkOn || (S.valHooks[this].get = function (e) {
2691      return null === e.getAttribute("value") ? "on" : e.value;
2692    });
2693  }), y.focusin = "onfocusin" in C;
2694  var bt = /^(?:focusinfocus|focusoutblur)$/,
2695    wt = function wt(e) {
2696      e.stopPropagation();
2697    };
2698  S.extend(S.event, {
2699    trigger: function trigger(e, t, n, r) {
2700      var i,
2701        o,
2702        a,
2703        s,
2704        u,
2705        l,
2706        c,
2707        f,
2708        p = [n || E],
2709        d = v.call(e, "type") ? e.type : e,
2710        h = v.call(e, "namespace") ? e.namespace.split(".") : [];
2711      if (o = f = a = n = n || E, 3 !== n.nodeType && 8 !== n.nodeType && !bt.test(d + S.event.triggered) && (-1 < d.indexOf(".") && (d = (h = d.split(".")).shift(), h.sort()), u = d.indexOf(":") < 0 && "on" + d, (e = e[S.expando] ? e : new S.Event(d, "object" == _typeof(e) && e)).isTrigger = r ? 2 : 3, e.namespace = h.join("."), e.rnamespace = e.namespace ? new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, e.result = void 0, e.target || (e.target = n), t = null == t ? [e] : S.makeArray(t, [e]), c = S.event.special[d] || {}, r || !c.trigger || !1 !== c.trigger.apply(n, t))) {
2712        if (!r && !c.noBubble && !x(n)) {
2713          for (s = c.delegateType || d, bt.test(s + d) || (o = o.parentNode); o; o = o.parentNode) p.push(o), a = o;
2714          a === (n.ownerDocument || E) && p.push(a.defaultView || a.parentWindow || C);
2715        }
2716        i = 0;
2717        while ((o = p[i++]) && !e.isPropagationStopped()) f = o, e.type = 1 < i ? s : c.bindType || d, (l = (Y.get(o, "events") || Object.create(null))[e.type] && Y.get(o, "handle")) && l.apply(o, t), (l = u && o[u]) && l.apply && V(o) && (e.result = l.apply(o, t), !1 === e.result && e.preventDefault());
2718        return e.type = d, r || e.isDefaultPrevented() || c._default && !1 !== c._default.apply(p.pop(), t) || !V(n) || u && m(n[d]) && !x(n) && ((a = n[u]) && (n[u] = null), S.event.triggered = d, e.isPropagationStopped() && f.addEventListener(d, wt), n[d](), e.isPropagationStopped() && f.removeEventListener(d, wt), S.event.triggered = void 0, a && (n[u] = a)), e.result;
2719      }
2720    },
2721    simulate: function simulate(e, t, n) {
2722      var r = S.extend(new S.Event(), n, {
2723        type: e,
2724        isSimulated: !0
2725      });
2726      S.event.trigger(r, null, t);
2727    }
2728  }), S.fn.extend({
2729    trigger: function trigger(e, t) {
2730      return this.each(function () {
2731        S.event.trigger(e, t, this);
2732      });
2733    },
2734    triggerHandler: function triggerHandler(e, t) {
2735      var n = this[0];
2736      if (n) return S.event.trigger(e, t, n, !0);
2737    }
2738  }), y.focusin || S.each({
2739    focus: "focusin",
2740    blur: "focusout"
2741  }, function (n, r) {
2742    var i = function i(e) {
2743      S.event.simulate(r, e.target, S.event.fix(e));
2744    };
2745    S.event.special[r] = {
2746      setup: function setup() {
2747        var e = this.ownerDocument || this.document || this,
2748          t = Y.access(e, r);
2749        t || e.addEventListener(n, i, !0), Y.access(e, r, (t || 0) + 1);
2750      },
2751      teardown: function teardown() {
2752        var e = this.ownerDocument || this.document || this,
2753          t = Y.access(e, r) - 1;
2754        t ? Y.access(e, r, t) : (e.removeEventListener(n, i, !0), Y.remove(e, r));
2755      }
2756    };
2757  });
2758  var Tt = C.location,
2759    Ct = {
2760      guid: Date.now()
2761    },
2762    Et = /\?/;
2763  S.parseXML = function (e) {
2764    var t;
2765    if (!e || "string" != typeof e) return null;
2766    try {
2767      t = new C.DOMParser().parseFromString(e, "text/xml");
2768    } catch (e) {
2769      t = void 0;
2770    }
2771    return t && !t.getElementsByTagName("parsererror").length || S.error("Invalid XML: " + e), t;
2772  };
2773  var St = /\[\]$/,
2774    kt = /\r?\n/g,
2775    At = /^(?:submit|button|image|reset|file)$/i,
2776    Nt = /^(?:input|select|textarea|keygen)/i;
2777  function Dt(n, e, r, i) {
2778    var t;
2779    if (Array.isArray(e)) S.each(e, function (e, t) {
2780      r || St.test(n) ? i(n, t) : Dt(n + "[" + ("object" == _typeof(t) && null != t ? e : "") + "]", t, r, i);
2781    });else if (r || "object" !== w(e)) i(n, e);else for (t in e) Dt(n + "[" + t + "]", e[t], r, i);
2782  }
2783  S.param = function (e, t) {
2784    var n,
2785      r = [],
2786      i = function i(e, t) {
2787        var n = m(t) ? t() : t;
2788        r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(null == n ? "" : n);
2789      };
2790    if (null == e) return "";
2791    if (Array.isArray(e) || e.jquery && !S.isPlainObject(e)) S.each(e, function () {
2792      i(this.name, this.value);
2793    });else for (n in e) Dt(n, e[n], t, i);
2794    return r.join("&");
2795  }, S.fn.extend({
2796    serialize: function serialize() {
2797      return S.param(this.serializeArray());
2798    },
2799    serializeArray: function serializeArray() {
2800      return this.map(function () {
2801        var e = S.prop(this, "elements");
2802        return e ? S.makeArray(e) : this;
2803      }).filter(function () {
2804        var e = this.type;
2805        return this.name && !S(this).is(":disabled") && Nt.test(this.nodeName) && !At.test(e) && (this.checked || !pe.test(e));
2806      }).map(function (e, t) {
2807        var n = S(this).val();
2808        return null == n ? null : Array.isArray(n) ? S.map(n, function (e) {
2809          return {
2810            name: t.name,
2811            value: e.replace(kt, "\r\n")
2812          };
2813        }) : {
2814          name: t.name,
2815          value: n.replace(kt, "\r\n")
2816        };
2817      }).get();
2818    }
2819  });
2820  var jt = /%20/g,
2821    qt = /#.*$/,
2822    Lt = /([?&])_=[^&]*/,
2823    Ht = /^(.*?):[ \t]*([^\r\n]*)$/gm,
2824    Ot = /^(?:GET|HEAD)$/,
2825    Pt = /^\/\//,
2826    Rt = {},
2827    Mt = {},
2828    It = "*/".concat("*"),
2829    Wt = E.createElement("a");
2830  function Ft(o) {
2831    return function (e, t) {
2832      "string" != typeof e && (t = e, e = "*");
2833      var n,
2834        r = 0,
2835        i = e.toLowerCase().match(P) || [];
2836      if (m(t)) while (n = i[r++]) "+" === n[0] ? (n = n.slice(1) || "*", (o[n] = o[n] || []).unshift(t)) : (o[n] = o[n] || []).push(t);
2837    };
2838  }
2839  function Bt(t, i, o, a) {
2840    var s = {},
2841      u = t === Mt;
2842    function l(e) {
2843      var r;
2844      return s[e] = !0, S.each(t[e] || [], function (e, t) {
2845        var n = t(i, o, a);
2846        return "string" != typeof n || u || s[n] ? u ? !(r = n) : void 0 : (i.dataTypes.unshift(n), l(n), !1);
2847      }), r;
2848    }
2849    return l(i.dataTypes[0]) || !s["*"] && l("*");
2850  }
2851  function $t(e, t) {
2852    var n,
2853      r,
2854      i = S.ajaxSettings.flatOptions || {};
2855    for (n in t) void 0 !== t[n] && ((i[n] ? e : r || (r = {}))[n] = t[n]);
2856    return r && S.extend(!0, e, r), e;
2857  }
2858  Wt.href = Tt.href, S.extend({
2859    active: 0,
2860    lastModified: {},
2861    etag: {},
2862    ajaxSettings: {
2863      url: Tt.href,
2864      type: "GET",
2865      isLocal: /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),
2866      global: !0,
2867      processData: !0,
2868      async: !0,
2869      contentType: "application/x-www-form-urlencoded; charset=UTF-8",
2870      accepts: {
2871        "*": It,
2872        text: "text/plain",
2873        html: "text/html",
2874        xml: "application/xml, text/xml",
2875        json: "application/json, text/javascript"
2876      },
2877      contents: {
2878        xml: /\bxml\b/,
2879        html: /\bhtml/,
2880        json: /\bjson\b/
2881      },
2882      responseFields: {
2883        xml: "responseXML",
2884        text: "responseText",
2885        json: "responseJSON"
2886      },
2887      converters: {
2888        "* text": String,
2889        "text html": !0,
2890        "text json": JSON.parse,
2891        "text xml": S.parseXML
2892      },
2893      flatOptions: {
2894        url: !0,
2895        context: !0
2896      }
2897    },
2898    ajaxSetup: function ajaxSetup(e, t) {
2899      return t ? $t($t(e, S.ajaxSettings), t) : $t(S.ajaxSettings, e);
2900    },
2901    ajaxPrefilter: Ft(Rt),
2902    ajaxTransport: Ft(Mt),
2903    ajax: function ajax(e, t) {
2904      "object" == _typeof(e) && (t = e, e = void 0), t = t || {};
2905      var c,
2906        f,
2907        p,
2908        n,
2909        d,
2910        r,
2911        h,
2912        g,
2913        i,
2914        o,
2915        v = S.ajaxSetup({}, t),
2916        y = v.context || v,
2917        m = v.context && (y.nodeType || y.jquery) ? S(y) : S.event,
2918        x = S.Deferred(),
2919        b = S.Callbacks("once memory"),
2920        w = v.statusCode || {},
2921        a = {},
2922        s = {},
2923        u = "canceled",
2924        T = {
2925          readyState: 0,
2926          getResponseHeader: function getResponseHeader(e) {
2927            var t;
2928            if (h) {
2929              if (!n) {
2930                n = {};
2931                while (t = Ht.exec(p)) n[t[1].toLowerCase() + " "] = (n[t[1].toLowerCase() + " "] || []).concat(t[2]);
2932              }
2933              t = n[e.toLowerCase() + " "];
2934            }
2935            return null == t ? null : t.join(", ");
2936          },
2937          getAllResponseHeaders: function getAllResponseHeaders() {
2938            return h ? p : null;
2939          },
2940          setRequestHeader: function setRequestHeader(e, t) {
2941            return null == h && (e = s[e.toLowerCase()] = s[e.toLowerCase()] || e, a[e] = t), this;
2942          },
2943          overrideMimeType: function overrideMimeType(e) {
2944            return null == h && (v.mimeType = e), this;
2945          },
2946          statusCode: function statusCode(e) {
2947            var t;
2948            if (e) if (h) T.always(e[T.status]);else for (t in e) w[t] = [w[t], e[t]];
2949            return this;
2950          },
2951          abort: function abort(e) {
2952            var t = e || u;
2953            return c && c.abort(t), l(0, t), this;
2954          }
2955        };
2956      if (x.promise(T), v.url = ((e || v.url || Tt.href) + "").replace(Pt, Tt.protocol + "//"), v.type = t.method || t.type || v.method || v.type, v.dataTypes = (v.dataType || "*").toLowerCase().match(P) || [""], null == v.crossDomain) {
2957        r = E.createElement("a");
2958        try {
2959          r.href = v.url, r.href = r.href, v.crossDomain = Wt.protocol + "//" + Wt.host != r.protocol + "//" + r.host;
2960        } catch (e) {
2961          v.crossDomain = !0;
2962        }
2963      }
2964      if (v.data && v.processData && "string" != typeof v.data && (v.data = S.param(v.data, v.traditional)), Bt(Rt, v, t, T), h) return T;
2965      for (i in (g = S.event && v.global) && 0 == S.active++ && S.event.trigger("ajaxStart"), v.type = v.type.toUpperCase(), v.hasContent = !Ot.test(v.type), f = v.url.replace(qt, ""), v.hasContent ? v.data && v.processData && 0 === (v.contentType || "").indexOf("application/x-www-form-urlencoded") && (v.data = v.data.replace(jt, "+")) : (o = v.url.
2965slice(f.length), v.data && (v.processData || "string" == typeof v.data) && (f += (Et.test(f) ? "&" : "?") + v.data, delete v.data), !1 === v.cache && (f = f.replace(Lt, "$1"), o = (Et.test(f) ? "&" : "?") + "_=" + Ct.guid++ + o), v.url = f + o), v.ifModified && (S.lastModified[f] && T.setRequestHeader("If-Modified-Since", S.lastModified[f]), S.etag[f] && T.setRequestHeader("If-None-Match", S.etag[f])), (v.data && v.hasContent && !1 !== v.contentType || t.contentType) && T.setRequestHeader("Content-Type", v.contentType), T.setRequestHeader("Accept", v.dataTypes[0] && v.accepts[v.dataTypes[0]] ? v.accepts[v.dataTypes[0]] + ("*" !== v.dataTypes[0] ? ", " + It + "; q=0.01" : "") : v.accepts["*"]), v.headers) T.setRequestHeader(i, v.headers[i]);
2966      if (v.beforeSend && (!1 === v.beforeSend.call(y, T, v) || h)) return T.abort();
2967      if (u = "abort", b.add(v.complete), T.done(v.success), T.fail(v.error), c = Bt(Mt, v, t, T)) {
2968        if (T.readyState = 1, g && m.trigger("ajaxSend", [T, v]), h) return T;
2969        v.async && 0 < v.timeout && (d = C.setTimeout(function () {
2970          T.abort("timeout");
2971        }, v.timeout));
2972        try {
2973          h = !1, c.send(a, l);
2974        } catch (e) {
2975          if (h) throw e;
2976          l(-1, e);
2977        }
2978      } else l(-1, "No Transport");
2979      function l(e, t, n, r) {
2980        var i,
2981          o,
2982          a,
2983          s,
2984          u,
2985          l = t;
2986        h || (h = !0, d && C.clearTimeout(d), c = void 0, p = r || "", T.readyState = 0 < e ? 4 : 0, i = 200 <= e && e < 300 || 304 === e, n && (s = function (e, t, n) {
2987          var r,
2988            i,
2989            o,
2990            a,
2991            s = e.contents,
2992            u = e.dataTypes;
2993          while ("*" === u[0]) u.shift(), void 0 === r && (r = e.mimeType || t.getResponseHeader("Content-Type"));
2994          if (r) for (i in s) if (s[i] && s[i].test(r)) {
2995            u.unshift(i);
2996            break;
2997          }
2998          if (u[0] in n) o = u[0];else {
2999            for (i in n) {
3000              if (!u[0] || e.converters[i + " " + u[0]]) {
3001                o = i;
3002                break;
3003              }
3004              a || (a = i);
3005            }
3006            o = o || a;
3007          }
3008          if (o) return o !== u[0] && u.unshift(o), n[o];
3009        }(v, T, n)), !i && -1 < S.inArray("script", v.dataTypes) && (v.converters["text script"] = function () {}), s = function (e, t, n, r) {
3010          var i,
3011            o,
3012            a,
3013            s,
3014            u,
3015            l = {},
3016            c = e.dataTypes.slice();
3017          if (c[1]) for (a in e.converters) l[a.toLowerCase()] = e.converters[a];
3018          o = c.shift();
3019          while (o) if (e.responseFields[o] && (n[e.responseFields[o]] = t), !u && r && e.dataFilter && (t = e.dataFilter(t, e.dataType)), u = o, o = c.shift()) if ("*" === o) o = u;else if ("*" !== u && u !== o) {
3020            if (!(a = l[u + " " + o] || l["* " + o])) for (i in l) if ((s = i.split(" "))[1] === o && (a = l[u + " " + s[0]] || l["* " + s[0]])) {
3021              !0 === a ? a = l[i] : !0 !== l[i] && (o = s[0], c.unshift(s[1]));
3022              break;
3023            }
3024            if (!0 !== a) if (a && e["throws"]) t = a(t);else try {
3025              t = a(t);
3026            } catch (e) {
3027              return {
3028                state: "parsererror",
3029                error: a ? e : "No conversion from " + u + " to " + o
3030              };
3031            }
3032          }
3033          return {
3034            state: "success",
3035            data: t
3036          };
3037        }(v, s, T, i), i ? (v.ifModified && ((u = T.getResponseHeader("Last-Modified")) && (S.lastModified[f] = u), (u = T.getResponseHeader("etag")) && (S.etag[f] = u)), 204 === e || "HEAD" === v.type ? l = "nocontent" : 304 === e ? l = "notmodified" : (l = s.state, o = s.data, i = !(a = s.error))) : (a = l, !e && l || (l = "error", e < 0 && (e = 0))), T.status = e, T.statusText = (t || l) + "", i ? x.resolveWith(y, [o, l, T]) : x.rejectWith(y, [T, l, a]), T.statusCode(w), w = void 0, g && m.trigger(i ? "ajaxSuccess" : "ajaxError", [T, v, i ? o : a]), b.fireWith(y, [T, l]), g && (m.trigger("ajaxComplete", [T, v]), --S.active || S.event.trigger("ajaxStop")));
3038      }
3039      return T;
3040    },
3041    getJSON: function getJSON(e, t, n) {
3042      return S.get(e, t, n, "json");
3043    },
3044    getScript: function getScript(e, t) {
3045      return S.get(e, void 0, t, "script");
3046    }
3047  }), S.each(["get", "post"], function (e, i) {
3048    S[i] = function (e, t, n, r) {
3049      return m(t) && (r = r || n, n = t, t = void 0), S.ajax(S.extend({
3050        url: e,
3051        type: i,
3052        dataType: r,
3053        data: t,
3054        success: n
3055      }, S.isPlainObject(e) && e));
3056    };
3057  }), S.ajaxPrefilter(function (e) {
3058    var t;
3059    for (t in e.headers) "content-type" === t.toLowerCase() && (e.contentType = e.headers[t] || "");
3060  }), S._evalUrl = function (e, t, n) {
3061    return S.ajax({
3062      url: e,
3063      type: "GET",
3064      dataType: "script",
3065      cache: !0,
3066      async: !1,
3067      global: !1,
3068      converters: {
3069        "text script": function textScript() {}
3070      },
3071      dataFilter: function dataFilter(e) {
3072        S.globalEval(e, t, n);
3073      }
3074    });
3075  }, S.fn.extend({
3076    wrapAll: function wrapAll(e) {
3077      var t;
3078      return this[0] && (m(e) && (e = e.call(this[0])), t = S(e, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && t.insertBefore(this[0]), t.map(function () {
3079        var e = this;
3080        while (e.firstElementChild) e = e.firstElementChild;
3081        return e;
3082      }).append(this)), this;
3083    },
3084    wrapInner: function wrapInner(n) {
3085      return m(n) ? this.each(function (e) {
3086        S(this).wrapInner(n.call(this, e));
3087      }) : this.each(function () {
3088        var e = S(this),
3089          t = e.contents();
3090        t.length ? t.wrapAll(n) : e.append(n);
3091      });
3092    },
3093    wrap: function wrap(t) {
3094      var n = m(t);
3095      return this.each(function (e) {
3096        S(this).wrapAll(n ? t.call(this, e) : t);
3097      });
3098    },
3099    unwrap: function unwrap(e) {
3100      return this.parent(e).not("body").each(function () {
3101        S(this).replaceWith(this.childNodes);
3102      }), this;
3103    }
3104  }), S.expr.pseudos.hidden = function (e) {
3105    return !S.expr.pseudos.visible(e);
3106  }, S.expr.pseudos.visible = function (e) {
3107    return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length);
3108  }, S.ajaxSettings.xhr = function () {
3109    try {
3110      return new C.XMLHttpRequest();
3111    } catch (e) {}
3112  };
3113  var _t = {
3114      0: 200,
3115      1223: 204
3116    },
3117    zt = S.ajaxSettings.xhr();
3118  y.cors = !!zt && "withCredentials" in zt, y.ajax = zt = !!zt, S.ajaxTransport(function (i) {
3119    var _o, a;
3120    if (y.cors || zt && !i.crossDomain) return {
3121      send: function send(e, t) {
3122        var n,
3123          r = i.xhr();
3124        if (r.open(i.type, i.url, i.async, i.username, i.password), i.xhrFields) for (n in i.xhrFields) r[n] = i.xhrFields[n];
3125        for (n in i.mimeType && r.overrideMimeType && r.overrideMimeType(i.mimeType), i.crossDomain || e["X-Requested-With"] || (e["X-Requested-With"] = "XMLHttpRequest"), e) r.setRequestHeader(n, e[n]);
3126        _o = function o(e) {
3127          return function () {
3128            _o && (_o = a = r.onload = r.onerror = r.onabort = r.ontimeout = r.onreadystatechange = null, "abort" === e ? r.abort() : "error" === e ? "number" != typeof r.status ? t(0, "error") : t(r.status, r.statusText) : t(_t[r.status] || r.status, r.statusText, "text" !== (r.responseType || "text") || "string" != typeof r.responseText ? {
3129              binary: r.response
3130            } : {
3131              text: r.responseText
3132            }, r.getAllResponseHeaders()));
3133          };
3134        }, r.onload = _o(), a = r.onerror = r.ontimeout = _o("error"), void 0 !== r.onabort ? r.onabort = a : r.onreadystatechange = function () {
3135          4 === r.readyState && C.setTimeout(function () {
3136            _o && a();
3137          });
3138        }, _o = _o("abort");
3139        try {
3140          r.send(i.hasContent && i.data || null);
3141        } catch (e) {
3142          if (_o) throw e;
3143        }
3144      },
3145      abort: function abort() {
3146        _o && _o();
3147      }
3148    };
3149  }), S.ajaxPrefilter(function (e) {
3150    e.crossDomain && (e.contents.script = !1);
3151  }), S.ajaxSetup({
3152    accepts: {
3153      script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
3154    },
3155    contents: {
3156      script: /\b(?:java|ecma)script\b/
3157    },
3158    converters: {
3159      "text script": function textScript(e) {
3160        return S.globalEval(e), e;
3161      }
3162    }
3163  }), S.ajaxPrefilter("script", function (e) {
3164    void 0 === e.cache && (e.cache = !1), e.crossDomain && (e.type = "GET");
3165  }), S.ajaxTransport("script", function (n) {
3166    var r, _i;
3167    if (n.crossDomain || n.scriptAttrs) return {
3168      send: function send(e, t) {
3169        r = S("<script>").attr(n.scriptAttrs || {}).prop({
3170          charset: n.scriptCharset,
3171          src: n.url
3172        }).on("load error", _i = function i(e) {
3173          r.remove(), _i = null, e && t("error" === e.type ? 404 : 200, e.type);
3174        }), E.head.appendChild(r[0]);
3175      },
3176      abort: function abort() {
3177        _i && _i();
3178      }
3179    };
3180  });
3181  var Ut,
3182    Xt = [],
3183    Vt = /(=)\?(?=&|$)|\?\?/;
3184  S.ajaxSetup({
3185    jsonp: "callback",
3186    jsonpCallback: function jsonpCallback() {
3187      var e = Xt.pop() || S.expando + "_" + Ct.guid++;
3188      return this[e] = !0, e;
3189    }
3190  }), S.ajaxPrefilter("json jsonp", function (e, t, n) {
3191    var r,
3192      i,
3193      o,
vendor: 4,092 bytes, lines 3194-3272
3194      a = !1 !== e.jsonp && (Vt.test(e.url) ? "url" : "string" == typeof e.data && 0 === (e.contentType || "").indexOf("application/x-www-form-urlencoded") && Vt.test(e.data) && "data");
3195    if (a || "jsonp" === e.dataTypes[0]) return r = e.jsonpCallback = m(e.jsonpCallback) ? e.jsonpCallback() : e.jsonpCallback, a ? e[a] = e[a].replace(Vt, "$1" + r) : !1 !== e.jsonp && (e.url += (Et.test(e.url) ? "&" : "?") + e.jsonp + "=" + r), e.converters["script json"] = function () {
3196      return o || S.error(r + " was not called"), o[0];
3197    }, e.dataTypes[0] = "json", i = C[r], C[r] = function () {
3198      o = arguments;
3199    }, n.always(function () {
3200      void 0 === i ? S(C).removeProp(r) : C[r] = i, e[r] && (e.jsonpCallback = t.jsonpCallback, Xt.push(r)), o && m(i) && i(o[0]), o = i = void 0;
3201    }), "script";
3202  }), y.createHTMLDocument = ((Ut = E.implementation.createHTMLDocument("").body).innerHTML = "<form></form><form></form>", 2 === Ut.childNodes.length), S.parseHTML = function (e, t, n) {
3203    return "string" != typeof e ? [] : ("boolean" == typeof t && (n = t, t = !1), t || (y.createHTMLDocument ? ((r = (t = E.implementation.createHTMLDocument("")).createElement("base")).href = E.location.href, t.head.appendChild(r)) : t = E), o = !n && [], (i = N.exec(e)) ? [t.createElement(i[1])] : (i = xe([e], t, o), o && o.length && S(o).remove(), S.merge([], i.childNodes)));
3204    var r, i, o;
3205  }, S.fn.load = function (e, t, n) {
3206    var r,
3207      i,
3208      o,
3209      a = this,
3210      s = e.indexOf(" ");
3211    return -1 < s && (r = vt(e.slice(s)), e = e.slice(0, s)), m(t) ? (n = t, t = void 0) : t && "object" == _typeof(t) && (i = "POST"), 0 < a.length && S.ajax({
3212      url: e,
3213      type: i || "GET",
3214      dataType: "html",
3215      data: t
3216    }).done(function (e) {
3217      o = arguments, a.html(r ? S("<div>").append(S.parseHTML(e)).find(r) : e);
3218    }).always(n && function (e, t) {
3219      a.each(function () {
3220        n.apply(this, o || [e.responseText, t, e]);
3221      });
3222    }), this;
3223  }, S.expr.pseudos.animated = function (t) {
3224    return S.grep(S.timers, function (e) {
3225      return t === e.elem;
3226    }).length;
3227  }, S.offset = {
3228    setOffset: function setOffset(e, t, n) {
3229      var r,
3230        i,
3231        o,
3232        a,
3233        s,
3234        u,
3235        l = S.css(e, "position"),
3236        c = S(e),
3237        f = {};
3238      "static" === l && (e.style.position = "relative"), s = c.offset(), o = S.css(e, "top"), u = S.css(e, "left"), ("absolute" === l || "fixed" === l) && -1 < (o + u).indexOf("auto") ? (a = (r = c.position()).top, i = r.left) : (a = parseFloat(o) || 0, i = parseFloat(u) || 0), m(t) && (t = t.call(e, n, S.extend({}, s))), null != t.top && (f.top = t.top - s.top + a), null != t.left && (f.left = t.left - s.left + i), "using" in t ? t.using.call(e, f) : ("number" == typeof f.top && (f.top += "px"), "number" == typeof f.left && (f.left += "px"), c.css(f));
3239    }
3240  }, S.fn.extend({
3241    offset: function offset(t) {
3242      if (arguments.length) return void 0 === t ? this : this.each(function (e) {
3243        S.offset.setOffset(this, t, e);
3244      });
3245      var e,
3246        n,
3247        r = this[0];
3248      return r ? r.getClientRects().length ? (e = r.getBoundingClientRect(), n = r.ownerDocument.defaultView, {
3249        top: e.top + n.pageYOffset,
3250        left: e.left + n.pageXOffset
3251      }) : {
3252        top: 0,
3253        left: 0
3254      } : void 0;
3255    },
3256    position: function position() {
3257      if (this[0]) {
3258        var e,
3259          t,
3260          n,
3261          r = this[0],
3262          i = {
3263            top: 0,
3264            left: 0
3265          };
3266        if ("fixed" === S.css(r, "position")) t = r.getBoundingClientRect();else {
3267          t = this.offset(), n = r.ownerDocument, e = r.offsetParent || n.documentElement;
3268          while (e && (e === n.body || e === n.documentElement) && "static" === S.css(e, "position")) e = e.parentNode;
3269          e && e !== r && 1 === e.nodeType && ((i = S(e).offset()).top += S.css(e, "borderTopWidth", !0), i.left += S.css(e, "borderLeftWidth", !0));
3270        }
3271        return {
3272          top: t.top - i.top - S.css(r, "marginTop", !0),
3273          left: t.left - i.left - S.css(r, "marginLeft", !0)
3274        };
3275      }
3276    },
3277    offsetParent: function offsetParent() {
3278      return this.map(function () {
3279        var e = this.offsetParent;
3280        while (e && "static" === S.css(e, "position")) e = e.offsetParent;
3281        return e || re;
3282      });
3283    }
3284  }), S.each({
3285    scrollLeft: "pageXOffset",
3286    scrollTop: "pageYOffset"
3287  }, function (t, i) {
3288    var o = "pageYOffset" === i;
3289    S.fn[t] = function (e) {
3290      return $(this, function (e, t, n) {
3291        var r;
3292        if (x(e) ? r = e : 9 === e.nodeType && (r = e.defaultView), void 0 === n) return r ? r[i] : e[t];
3293        r ? r.scrollTo(o ? r.pageXOffset : n, o ? n : r.pageYOffset) : e[t] = n;
3294      }, t, e, arguments.length);
3295    };
3296  }), S.each(["top", "left"], function (e, n) {
3297    S.cssHooks[n] = $e(y.pixelPosition, function (e, t) {
3298      if (t) return t = Be(e, n), Me.test(t) ? S(e).position()[n] + "px" : t;
3299    });
3300  }), S.each({
3301    Height: "height",
3302    Width: "width"
3303  }, function (a, s) {
3304    S.each({
3305      padding: "inner" + a,
3306      content: s,
3307      "": "outer" + a
3308    }, function (r, o) {
3309      S.fn[o] = function (e, t) {
3310        var n = arguments.length && (r || "boolean" != typeof e),
3311          i = r || (!0 === e || !0 === t ? "margin" : "border");
3312        return $(this, function (e, t, n) {
3313          var r;
3314          return x(e) ? 0 === o.indexOf("outer") ? e["inner" + a] : e.document.documentElement["client" + a] : 9 === e.nodeType ? (r = e.documentElement, Math.max(e.body["scroll" + a], r["scroll" + a], e.body["offset" + a], r["offset" + a], r["client" + a])) : void 0 === n ? S.css(e, t, i) : S.style(e, t, n, i);
3315        }, s, n ? e : void 0, n);
3316      };
3317    });
3318  }), S.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (e, t) {
3319    S.fn[t] = function (e) {
3320      return this.on(t, e);
3321    };
3322  }), S.fn.extend({
3323    bind: function bind(e, t, n) {
3324      return this.on(e, null, t, n);
3325    },
3326    unbind: function unbind(e, t) {
3327      return this.off(e, null, t);
3328    },
3329    delegate: function delegate(e, t, n, r) {
3330      return this.on(t, e, n, r);
3331    },
3332    undelegate: function undelegate(e, t, n) {
3333      return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n);
3334    },
3335    hover: function hover(e, t) {
3336      return this.mouseenter(e).mouseleave(t || e);
3337    }
3338  }), S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "), function (e, n) {
3339    S.fn[n] = function (e, t) {
3340      return 0 < arguments.length ? this.on(n, null, e, t) : this.trigger(n);
3341    };
3342  });
3343  var Gt = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
3344  S.proxy = function (e, t) {
3345    var n, r, i;
3346    if ("string" == typeof t && (n = e[t], t = e, e = n), m(e)) return r = s.call(arguments, 2), (i = function i() {
3347      return e.apply(t || this, r.concat(s.call(arguments)));
3348    }).guid = e.guid = e.guid || S.guid++, i;
3349  }, S.holdReady = function (e) {
3350    e ? S.readyWait++ : S.ready(!0);
3351  }, S.isArray = Array.isArray, S.parseJSON = JSON.parse, S.nodeName = A, S.isFunction = m, S.isWindow = x, S.camel
3351Case = X, S.type = w, S.now = Date.now, S.isNumeric = function (e) {
3352    var t = S.type(e);
3353    return ("number" === t || "string" === t) && !isNaN(e - parseFloat(e));
3354  }, S.trim = function (e) {
3355    return null == e ? "" : (e + "").replace(Gt, "");
3356  }, "function" == typeof define && define.amd && define("jquery", [], function () {
3357    return S;
3358  });
3359  var Yt = C.jQuery,
3360    Qt = C.$;
3361  return S.noConflict = function (e) {
3362    return C.$ === S && (C.$ = Qt), e && C.jQuery === S && (C.jQuery = Yt), S;
3363  }, "undefined" == typeof e && (C.jQuery = C.$ = S), S;
3364});
3365
3366// requires: jquery-3.5.1.min.js
3367
3368// make the counter count
3369$(function () {
3370  var $counters = $('[data-counter]'); // get all the counters on the page
3371  // counters might be for different values, so have loops and computation for each
3372  $counters.each(function (i, counter) {
3373    var $counter = $(counter);
3374    var start = null; // timestamp of when the counter loaded
3375    var last = null; // timestamp of previous update
3376    // rate means `1 test per [rate] ms` (NOT `[rate] tests / s`)
3377    var rate = parseInt($counter.data('counter-rate'), 10);
3378    // counter starts at `value`
3379    var value = parseInt($counter.data('counter-value'), 10);
3380    // interval is how many ms between element updates (fastest is 60fps)
3381    var interval = parseInt($counter.data('counter-interval'), 10);
3382    function updateCounter(timestamp) {
3383      if (!start) start = timestamp; // set start the first time through
3384      if (!last) last = timestamp; // set last the first time through
3385      // don't bother updating unless `interval` ms have passed
3386      if (timestamp - last > interval) {
3387        last = timestamp; // update
3388        var elapsed = timestamp - start; // ms since the counter loaded
3389        var newValue = value + elapsed / rate; // new value of the counter
3390        $counter.text(parseInt(newValue).toLocaleString()); // update the element
3391      }
3392
3393      window.requestAnimationFrame(updateCounter); // loop again
3394    }
3395
3396    window.requestAnimationFrame(updateCounter); // kick off loop
3397  });
3398});
3399
3400// requires: jquery-3.5.1.min.js
3401
3402$(function () {
3403  // disable submit button after submit
3404  // especially useful on forms that take a long time
3405  $('form').on('submit', function (event) {
3406    var $form = $(event.target);
3407    var $submit = $form.find('[type="submit"]');
3408    $submit.attr('disabled', 'disabled');
3409  });
3410});
3411
3412// make a global ookla object so we can put functionality there
3413var ookla = {};
3414ookla.exists = true;
3415!function (e) {
3416  var n = !1;
3417  if ("function" == typeof define && define.amd && (define(e), n = !0), "object" == (typeof exports === "undefined" ? "undefined" : _typeof(exports)) && (module.exports = e(), n = !0), !n) {
3418    var o = window.Cookies,
3419      t = window.Cookies = e();
3420    t.noConflict = function () {
3421      return window.Cookies = o, t;
3422    };
3423  }
3424}(function () {
3425  function e() {
3426    for (var e = 0, n = {}; e < arguments.length; e++) {
3427      var o = arguments[e];
3428      for (var t in o) n[t] = o[t];
3429    }
3430    return n;
3431  }
3432  return function n(o) {
3433    function t(n, r, i) {
3434      var c;
3435      if ("undefined" != typeof document) {
3436        if (arguments.length > 1) {
3437          if ("number" == typeof (i = e({
3438            path: "/"
3439          }, t.defaults, i)).expires) {
3440            var a = new Date();
3441            a.setMilliseconds(a.getMilliseconds() + 864e5 * i.expires), i.expires = a;
3442          }
3443          i.expires = i.expires ? i.expires.toUTCString() : "";
3444          try {
3445            c = JSON.stringify(r), /^[\{\[]/.test(c) && (r = c);
3446          } catch (e) {}
3447          r = o.write ? o.write(r, n) : encodeURIComponent(String(r)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent), n = (n = (n = encodeURIComponent(String(n))).replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)).replace(/[\(\)]/g, escape);
3448          var s = "";
3449          for (var f in i) i[f] && (s += "; " + f, !0 !== i[f] && (s += "=" + i[f]));
3450          return document.cookie = n + "=" + r + s;
3451        }
3452        n || (c = {});
3453        for (var p = document.cookie ? document.cookie.split("; ") : [], d = /(%[0-9A-Z]{2})+/g, u = 0; u < p.length; u++) {
3454          var l = p[u].split("="),
3455            C = l.slice(1).join("=");
3456          this.json || '"' !== C.charAt(0) || (C = C.slice(1, -1));
3457          try {
3458            var g = l[0].replace(d, decodeURIComponent);
3459            if (C = o.read ? o.read(C, g) : o(C, g) || C.replace(d, decodeURIComponent), this.json) try {
3460              C = JSON.parse(C);
3461            } catch (e) {}
3462            if (n === g) {
3463              c = C;
3464              break;
3465            }
3466            n || (c[g] = C);
3467          } catch (e) {}
3468        }
3469        return c;
3470      }
3471    }
3472    return t.set = t, t.get = function (e) {
3473      return t.call(t, e);
3474    }, t.getJSON = function () {
3475      return t.apply({
3476        json: !0
3477      }, [].slice.call(arguments));
3478    }, t.defaults = {}, t.remove = function (n, o) {
3479      t(n, "", e(o, {
3480        expires: -1
3481      }));
3482    }, t.withConverter = n, t;
3483  }(function () {});
3484});
3485// requires: jquery-3.5.1.min.js
3486// requires: js.cookie.min.js
3487
3488// this saves the cookie when clicking on the language selector
3489// it does not handle any redirection
3490
3491$(function () {
3492  var $languageSelector = $('[data-language-selector]');
3493  if (!$languageSelector.length) return;
3494  var cookieName = 'preferredLocale';
3495  var stDomain = 'speedtest.net';
3496  var hostname = window.location.hostname;
3497  var cookieDomain = hostname.endsWith(stDomain) ? stDomain : hostname;
3498
3499  // set a preferred language
3500  $languageSelector.on('click', 'a[data-language]', function (e) {
3501    var lang = $(e.target).data('language');
3502    Cookies.set(cookieName, lang, {
3503      expires: 180,
3504      domain: cookieDomain
3505    });
3506  });
3507});
3508
3509// requires: jquery-3.5.1.min.js
3510
3511$(function () {
3512  $('.nav-mobile-controls a').on('click', function (e) {
3513    e.preventDefault();
3514    $('body').toggleClass('nav-opened');
3515  });
3516});
3517
3518// requires: jquery-3.5.1.min.js
3519// requires: global.js
3520
3521$(function () {
3522  var stubClass = 'modal-stub';
3523  var containerSelector = '.modal-container';
3524  var backgroundSelector = '.modal-background';
3525  $('[data-modal-target]').on('click', function (e) {
3526    e.preventDefault();
3527    modalOpen($(e.target).data('modal-target'));
3528  });
3529  function modalOpen(modalId) {
3530    // insert a stub where this modal originally was in the dom
3531    var $modal = $(modalId).replaceWith('<div class="' + stubClass + '"></div>');
3532    $(containerSelector).append($modal);
3533    $modal.addClass('modal-open').show();
3534    // .modal-dialog is a soft modal (role="dialog")
3535    // .modal-alert is a hard modal (role="alert" or role="alertdialog")
3536    if ($modal.hasClass('modal-alert')) {
3537      // turn on aria-modal attr
3538      $modal.attr('aria-modal', 'true');
3539      // set up tab controls inside modal
3540      modalHandleTabNavigation($modal);
3541      $(backgroundSelector).show();
3542    }
3543    // add close events to the modal background as well as any .modal-close elements
3544    $(backgroundSelector).add('.modal-close').on('click', function (e) {
3545      e.preventDefault();
3546      modalClose();
3547    });
3548  }
3549  function modalClose() {
3550    var $modal = $('.modal-open').removeClass('modal-open').hide().removeAttr('aria-modal');
3551    var inPlace = $modal.hasClass('modal-in-place');
3552    if (!inPlace) {
3553      // swap the stub with the modal
3554      $('.' + stubClass).replaceWith($modal);
3555    }
3556    $(backgroundSelector).hide();
3557    // return focus to previously focused element, then reset that value for next time
3558    if (ookla.modals.$focused) {
3559      ookla.modals.$focused.focus();
3560      ookla.modals.$focused = null;
3561    }
3562  }
3563
3564  // tab capture code from:
3565  // https://uxdesign.cc/how-to-trap-focus-inside-modal-to-make-it-ada-compliant-6a50f9a70700
3566  function modalHandleTabNavigation($modal) {
3567    // remember previously focused element
3568    ookla.modals.$focused = $(':focus');
3569    // add all the elements inside modal which you want to make focusable
3570
3571    var focusableElements = 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
3572    var $focusableContent = $modal.find(focusableElements);
3573    // get first and last elements to be focused inside modal
3574    var $firstFocusableElement = $focusableContent.eq(0);
3575    var $lastFocusableElement = $focusableContent.eq(-1);
3576    $(document).on('keydown', function (e) {
3577      // close modal on escape key
3578      if (e.key === 'Escape' || e.which === 27) {
3579        modalClose();
3580      }
3581      // capture tab order inside modal
3582      var isTabPressed = e.key === 'Tab' || e.keyCode === 9;
3583      if (!isTabPressed) {
3584        return;
3585      }
3586      // if shift key pressed for shift + tab combination
3587      if (e.shiftKey) {
3588        if (document.activeElement === $firstFocusableElement.get(0)) {
3589          $lastFocusableElement.focus();
3589 // add focus for the last focusable element
3590          e.preventDefault();
3591        }
3592      } else {
3593        // if tab key is pressed
3594        // if focused has reached to last focusable element then
3595        // focus first focusable element after pressing tab
3596        if (document.activeElement === $lastFocusableElement.get(0)) {
3597          $firstFocusableElement.focus(); // add focus for the first focusable element
3598          e.preventDefault();
3599        }
3600      }
3601    });
3602    // if anything in the modal has the autofocus attribute
3603    // (like the server search input), move focus to that.
3604    // otherwise focus on the first focusable element.
3605    var $autofocus = $modal.find('[autofocus], .input-autofocus');
3606    if ($autofocus.length) {
3607      $autofocus.focus();
3608    } else {
3609      $firstFocusableElement.focus();
3610    }
3611  }
3612
3613  // expose open and close functions globally
3614  ookla.modals = {};
3615  ookla.modals.$focused = null; // remember trigger element to return focus on modal close
3616  ookla.modals.open = modalOpen;
3617  ookla.modals.close = modalClose;
3618
3619  // open .modal-open-automatically modals when the page loads
3620  // only do it for the .first() one because multiple modals break things
3621  var $modalOpenAutomatically = $('.modal-open-automatically');
3622  if ($modalOpenAutomatically.length) {
3623    modalOpen('#' + $modalOpenAutomatically.first().attr('id'));
3624  }
3625});
3626
3627// open and close tooltips in the performance directory
3628
3629// expected pug structure:
3630// ---
3631// .performance-tooltip-boundary
3632//   .whatever-elements-you-want
3633//   .some-element-with-a-tooltip
3634//     | some text
3635//     |
3636//     |
3637//     .performance-tooltip-container
3638//       a.performance-tooltip-trigger(href="#")
3639//         svg.svg-icon: use(xlink:href='#ic_help')
3640//       .performance-tooltip
3641//         .performance-tooltip-inner
3642//           p tooltip contents
3643// ---
3644// on large screens, the tooltip's positioning context is .performance-tooltip-container
3645// on small screens, the tooltip's positioning context is .performance-tooltip-boundary
3646// see performance.less for more layout options and information.
3647
3648(function () {
3649  // Add one event listener on the page that can handle everything. Event delegation!
3650  // eslint-disable-next-line no-undef
3651  document.addEventListener('click', function (e) {
3652    // Close any open tooltips if the user clicks anywhere on the page. However, if the click event
3653    // occurred inside an open tooltip, do not close that specific tooltip. This means a tooltip
3654    // will remain open if the user is interacting with it, which enables things like clicking
3655    // links in the tooltip, selecting text in the tooltip for copy/paste, etc.
3656    var skip = e.target.closest('.performance-tooltip');
3657    closeTooltips(skip);
3658    // If the click event happened inside a tooltip trigger, open that tooltip.
3659    if (!!e.target.closest('.performance-tooltip-trigger')) {
3660      var container = e.target.closest('.performance-tooltip-container');
3661      var tooltips = container.querySelectorAll('.performance-tooltip');
3662      var bodyRect = document.body.getBoundingClientRect();
3663      var containerRect = container.getBoundingClientRect();
3664      var _iterator = _createForOfIteratorHelper(tooltips),
3665        _step;
3666      try {
3667        for (_iterator.s(); !(_step = _iterator.n()).done;) {
3668          var tooltip = _step.value;
3669          tooltip.classList.add('performance-tooltip-visible');
3670          moveTooltip(containerRect, tooltip, bodyRect);
3671        }
3672      } catch (err) {
3673        _iterator.e(err);
3674      } finally {
3675        _iterator.f();
3676      }
3677      e.preventDefault();
3678    }
3679  });
3680  // Close any open tooltips (with the exception of `skip`, if it exists).
3681  // There should only ever be one tooltip open at a time, but try to close any that are open.
3682  function closeTooltips(skip) {
3683    // eslint-disable-next-line no-undef
3684    var tooltips = document.querySelectorAll('.performance-tooltip-visible');
3685    var _iterator2 = _createForOfIteratorHelper(tooltips),
3686      _step2;
3687    try {
3688      for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
3689        var tooltip = _step2.value;
3690        // Don't close a tooltip the user is interacting with
3691        if (skip !== tooltip) {
3692          tooltip.classList.remove('performance-tooltip-visible');
3693          var inner = tooltip.querySelector('.performance-tooltip-inner');
3694          resetTooltip(inner);
3695        }
3696      }
3697    } catch (err) {
3698      _iterator2.e(err);
3699    } finally {
3700      _iterator2.f();
3701    }
3702  }
3703  var timeout; // used for resize event debounce
3704  function checkTooltips() {
3705    // debounce so the function doesn't run over and over again very fast when resizing the screen
3706    // cancel the previous timeout
3707    clearTimeout(timeout);
3708    // create a new timeout
3709    timeout = setTimeout(function () {
3710      var bodyRect = document.body.getBoundingClientRect();
3711      var tooltips = document.querySelectorAll('.performance-tooltip-visible');
3712      var _iterator3 = _createForOfIteratorHelper(tooltips),
3713        _step3;
3714      try {
3715        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
3716          var tooltip = _step3.value;
3717          var container = tooltip.closest('.performance-tooltip-container');
3718          var containerRect = container.getBoundingClientRect();
3719          moveTooltip(containerRect, tooltip, bodyRect);
3720        }
3721      } catch (err) {
3722        _iterator3.e(err);
3723      } finally {
3724        _iterator3.f();
3725      }
3726    }, 100); // run 100ms after last resize event
3727  }
3728  // move or resize the tooltip horizontally so it's not off the sides of the screen
3729  function moveTooltip(containerRect, tooltip, bodyRect) {
3730    var inner = tooltip.querySelector('.performance-tooltip-inner');
3731    resetTooltip(inner);
3732    var innerRect = inner.getBoundingClientRect();
3733    // make sure the tooltip isn't wider than the screen.
3734    // this should never happen based on the current styles, but check just in case.
3735    if (innerRect.width > bodyRect.width) {
3736      inner.style.width = "calc(".concat(bodyRect.width, "px - 1em)");
3737      // recalculate innerRect
3738      innerRect = inner.getBoundingClientRect();
3739    }
3740    // don't let the tooltip extend off the right side of the screen
3741    if (innerRect.x + innerRect.width > bodyRect.width) {
3742      inner.style.left = "calc(".concat(bodyRect.width - containerRect.x - innerRect.width, "px - 0.5em)");
3743      // recalculate innerRect
3744      innerRect = inner.getBoundingClientRect();
3745    }
3746    // don't let the tooltip extend off the left side of the screen
3747    if (innerRect.x < 0) {
3748      inner.style.left = "calc(0px - ".concat(containerRect.x, "px + 0.5em)");
3749      // recalculate innerRect
3750      innerRect = inner.getBoundingClientRect();
3751    }
3752  }
3753  // put the tooltip back in its original place so it can be tested again
3754  function resetTooltip(inner) {
3755    inner.style.left = null; // return left control to the stylesheet
3756    inner.style.width = null; // return width control to the stylesheet
3757  }
3758
3759  window.addEventListener('resize', checkTooltips);
3760})();
3761
3762// requires: jquery-3.5.1.min.js
3763
3764$(function () {
3765  /* eslint "complexity": ["warn", 13] */
3766  var ua = navigator.userAgent.toLowerCase();
3767  var android = /android/.test(ua) && !window.MSStream;
3768  var ios = /ipad|iphone|ipod/.test(ua) && !window.MSStream;
3769  var iphone = /iphone|ipod/.test(ua) && !window.MSStream;
3770  var ipad = /ipad/.test(ua) && !window.MSStream;
3771  var className = '';
3772  className += !android && !ios ? 'body-platform-desktop ' : '';
3773  className += android || ios ? 'body-platform-mobile ' : '';
3774  className += android ? 'body-platform-android ' : '';
3775  className += ios ? 'body-platform-ios ' : '';
3776  className += iphone ? 'body-platform-iphone ' : '';
3777  className += ipad ? 'body-platform-ipad ' : '';
3778  $('body').addClass(className.trim());
3779});
3780
3781// requires: jquery-3.5.1.min.js
3782// requires: js.cookie.min.js
3783// requires: global.js
3784// requires: modals.js
3785
3786$(function () {
3787  var $privacyUpdate = $('#privacy-updated-modal');
3788  if (!$privacyUpdate.length) return; // if the notice isn't present, do nothing
3789
3790  var cookieName = $privacyUpdate.data('cookie-name');
3791  var dayThreshold = 3 * 30; // usually three months
3792  var dayThresholdAgo = Date.now() - dayThreshold * 24 * 60 * 60 * 1000;
3793  var lastUpdated = $privacyUpdate.data('last-updated'); // YYYY-MM-DD format
3794  var lastUpdatedParsed = Date.parse(lastUpdated);
3795  var noticeDismissed = Cookies.get(cookieName);
3796  var noticeDismissedParsed = Date.parse(noticeDismissed);
3797
3798  // on the off chance that lastUpdated is NaN, do nothing
3799  if (!lastUpdatedParsed) return;
3800
3801  // if it was updated more than 3 months ago, do nothing
3802  if (lastUpdatedParsed < dayThresholdAgo) return;
3803
3804  // if there's no cookie, or the update is more recent, show the notice
3805  if (!noticeDismissedParsed || noticeDismissedParsed < lastUpdatedParsed) {
3806    showNotice($privacyUpdate, cookieName, lastUpdated, dayThreshold);
3807    return;
3808  }
3809  function showNotice($notice, cookieName, lastUpdated, dayThreshold) {
3810    ookla.modals.open($notice);
3811    $notice.on('click', 'a', function (e) {
3812      var href = $(e.target).closest('a').attr('href');
3813      Cookies.set(cookieName, lastUpdated, {
3814        expires: dayThreshold
3815      });
3816      if (href === '#') {
3817        e.preventDefault();
3818      }
3819    });
3820  }
3821});
3822
3823// requires: jquery-3.5.1.min.js
3824// requires: global.js
3825
3826// determine if user is logged in, their username, and their country
3827$(function () {
3828  var $body = $('body');
3829  ookla.user = {
3830    loggedIn: $body.is('[data-user-loggedin]'),
3831    userName: $body.data('user-username'),
3832    country: $body.data('user-country')
3833  };
3834});
3835(function () {
3836  var ShouldHideMarginals = /*#__PURE__*/function () {
3837    function ShouldHideMarginals() {
3838      _classCallCheck(this, ShouldHideMarginals);
3839      this.key = 'marginals';
3840      this.value = 'hide';
3841      this.selector = '.speedtest-marginals';
3842    }
3843    _createClass(ShouldHideMarginals, [{
3844      key: "hasQueryParam",
3845      value: function hasQueryParam() {
3846        var params = new URLSearchParams(window.location.search);
3847        var marginals = params.get(this.key);
3848        return marginals && marginals === this.value;
3849      }
3850    }, {
3851      key: "hasSaved",
3852      value: function hasSaved() {
3853        return sessionStorage.getItem(this.key) === this.value;
3854      }
3855    }, {
3856      key: "save",
3857      value: function save() {
3858        sessionStorage.setItem(this.key, this.value);
3859      }
3860    }, {
3861      key: "hideMarginals",
3862      value: function hideMarginals() {
3863        var marginals = document.querySelectorAll(this.selector);
3864        marginals.forEach(function (marginal) {
3865          marginal.style.display = 'none';
3866        });
3867      }
3868    }, {
3869      key: "init",
3870      value: function init() {
3871        if (this.hasSaved()) {
3872          this.hideMarginals();
3873        } else if (this.hasQueryParam()) {
3874          this.hideMarginals();
3875          this.save();
3876        }
3877      }
3878    }]);
3879    return ShouldHideMarginals;
3880  }();
3881  var shouldHideMarginals = new ShouldHideMarginals();
3882  shouldHideMarginals.init();
3883})();
3884
3885// set your language back on st4 when you're logged in
3886$(function () {
3887  $('[data-language-selector]').on('click', 'a[data-language]', function (e) {
3888    var lang = $(e.target).data('language');
3889    $.post('/api/js/user-settings', {
3890      action: 'savesettings',
3891      language: lang
3892    }).fail(function () {
3893      // setting preferred locale failed; log this but continue the click
3894      // eslint-disable-next-line no-console
3895      console.error('setting preferredLocale failed');
3896    }).always(function () {
3897      // continue the navigation
3898      window.location = $(e.target).attr('href');
3899    });
3900    e.preventDefault();
3901  });
3902});
3903
3904// log out of st4
3905$(function () {
3906  $('[data-user-logout-link]').on('click', function (e) {
3907    $.post('/user-logout').fail(function (data) {
3908      // logout failed; log this but continue the click
3909      // eslint-disable-next-line no-console
3910      console.error('logout failed', data);
3911    }).always(function () {
3912      // refresh to show new status
3913      window.location.reload();
3914    });
3915    e.preventDefault();
3916  });
3917});
3918(function () {
3919  var nav = document.querySelector('.nav-menu');
3920  var activeMenuItem = null;
3921  nav.addEventListener('click', handleClickEvent);
3922  nav.addEventListener('mouseenter', handleMouseEnterandFocusEvent, true);
3923  nav.addEventListener('focusin', handleMouseEnterandFocusEvent, true);
3924  nav.addEventListener('focusout', handleFocusOutandMouseLeaveEvent, true);
3925  nav.addEventListener('mouseleave', handleFocusOutandMouseLeaveEvent, true);
3926
3927  // Handle click
3928  function handleClickEvent(event) {
3929    var eventItem = event.target.closest('.nav-item-text');
3930    var linkItem = event.target.closest('a.nav-link');
3931    if (!eventItem) return;
3932    if (linkItem) {
3933      event.preventDefault();
3934      // Navigate to link
3935      window.location.href = linkItem.getAttribute('href');
3936      return;
3937    }
3938    if (eventItem === activeMenuItem) {
3939      // Close submenu that is currently active
3940      closeAllOtherItems(null);
3941      activeMenuItem = null;
3942      return;
3943    }
3944
3945    // Open the submenu for the newly clicked item
3946    closeAllOtherItems(eventItem);
3947    openSpecificItem(eventItem);
3948  }
3949
3950  // Handle mouseenter and focus events
3951  function handleMouseEnterandFocusEvent(event) {
3952    var eventItem = event.target.closest('.nav-item-text');
3953    if (eventItem) {
3954      closeAllOtherItems(eventItem);
3955      openSpecificItem(eventItem);
3956    }
3957  }
3958
3959  // Handle focusout and mouseleave events
3960  function handleFocusOutandMouseLeaveEvent(event) {
3961    // Check if focus is moving outside the navigation menu structure
3962    if (!nav.contains(event.relatedTarget)) {
3963      // Close all submenus
3964      closeAllOtherItems(null);
3965      activeMenuItem = null;
3966    }
3967  }
3968
3969  // Open the specific item passed as an argument
3970  function openSpecificItem(eventItem) {
3971    eventItem.classList.add('active');
3972    activeMenuItem = eventItem;
3973  }
3974
3975  // Close all other items except the one passed as an argument
3976  function closeAllOtherItems(exceptItem) {
3977    var items = nav.querySelectorAll('.nav-item-text');
3978    items.forEach(function (item) {
3979      if (item !== exceptItem) {
3980        item.classList.remove('active');
3981      }
3982    });
3983  }
3984
3985  // Handle keyboard event for .nav-item-text elements
3986  $('.nav-item-text').on('keydown', function (event) {
3987    if (event.key === 'Enter') {
3988      event.preventDefault();
3989      handleClickEvent(event);
3990    }
3991  });
3992})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.