text: /*! jQuery v1.9.0 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license */
  
  //@ sourceMappingURL=jquery.min.map;
  //     Underscore.js 1.4.4
  //     http://underscorejs.org
  //     (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.
  //     Underscore may be freely distributed under the MIT license.
  
  //     (c) 2010-2012 Jeremy Ashkenas, DocumentCloud Inc.
  //     Backbone may be freely distributed under the MIT license.
  //     For all details and documentation:
  //     http://backbonejs.org
  
  /**
   * @license RequireJS text 2.0.5 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
   * Available via the MIT or new BSD license.
   * see: http://github.com/requirejs/text for details
   */
  
  /*!
   * Bootstrap.js by @fat & @mdo
   * Copyright 2012 Twitter, Inc.
   * http://www.apache.org/licenses/LICENSE-2.0.txt
   */
  
  (function(e, t) {
      function n(e) {
          var t = e.length,
              n = ut.type(e);
          return ut.isWindow(e) ? !1 : 1 === e.nodeType && t ? !0 : "array" === n || "function" !== n && (0 === t || "number" == typeof t && t > 0 && t - 1 in e)
      }
      function r(e) {
          var t = Et[e] = {};
          return ut.each(e.match(ft) || [], function(e, n) {
              t[n] = !0
          }), t
      }
      function i(e, n, r, i) {
          if (ut.acceptData(e)) {
              var s, o, u = ut.expando,
                  a = "string" == typeof n,
                  f = e.nodeType,
                  l = f ? ut.cache : e,
                  c = f ? e[u] : e[u] && u;
              if (c && l[c] && (i || l[c].data) || !a || r !== t) return c || (f ? e[u] = c = Y.pop() || ut.guid++ : c = u), l[c] || (l[c] = {}, f || (l[c].toJSON = ut.noop)), ("object" == typeof n || "function" == typeof n) && (i ? l[c] = ut.extend(l[c], n) : l[c].data = ut.extend(l[c].data, n)), s = l[c], i || (s.data || (s.data = {}), s = s.data), r !== t && (s[ut.camelCase(n)] = r), a ? (o = s[n], null == o && (o = s[ut.camelCase(n)])) : o = s, o
          }
      }
      function s(e, t, n) {
          if (ut.acceptData(e)) {
              var r, i, s, o = e.nodeType,
                  a = o ? ut.cache : e,
                  f = o ? e[ut.expando] : ut.expando;
              if (a[f]) {
                  if (t && (r = n ? a[f] : a[f].data)) {
                      ut.isArray(t) ? t = t.concat(ut.map(t, ut.camelCase)) : t in r ? t = [t] : (t = ut.camelCase(t), t = t in r ? [t] : t.split(" "));
                      for (i = 0, s = t.length; s > i; i++) delete r[t[i]];
                      if (!(n ? u : ut.isEmptyObject)(r)) return
                  }(n || (delete a[f].data, u(a[f]))) && (o ? ut.cleanData([e], !0) : ut.support.deleteExpando || a != a.window ? delete a[f] : a[f] = null)
              }
          }
      }
      function o(e, n, r) {
          if (r === t && 1 === e.nodeType) {
              var i = "data-" + n.replace(xt, "-$1").toLowerCase();
              if (r = e.getAttribute(i), "string" == typeof r) {
                  try {
                      r = "true" === r ? !0 : "false" === r ? !1 : "null" === r ? null : +r + "" === r ? +r : St.test(r) ? ut.parseJSON(r) : r
                  } catch (s) {}
                  ut.data(e, n, r)
              } else r = t
          }
          return r
      }
      function u(e) {
          var t;
          for (t in e) if (("data" !== t || !ut.isEmptyObject(e[t])) && "toJSON" !== t) return !1;
          return !0
      }
      function a() {
          return !0
      }
      function f() {
          return !1
      }
      function l(e, t) {
          do e = e[t];
          while (e && 1 !== e.nodeType);
          return e
      }
      function c(e, t, n) {
          if (t = t || 0, ut.isFunction(t)) return ut.grep(e, function(e, r) {
              var i = !! t.call(e, r, e);
              return i === n
          });
          if (t.nodeType) return ut.grep(e, function(e) {
              return e === t === n
          });
          if ("string" == typeof t) {
              var r = ut.grep(e, function(e) {
                  return 1 === e.nodeType
              });
              if (Rt.test(t)) return ut.filter(t, r, !n);
              t = ut.filter(t, r)
          }
          return ut.grep(e, function(e) {
              return ut.inArray(e, t) >= 0 === n
          })
      }
      function h(e) {
          var t = Wt.split("|"),
              n = e.createDocumentFragment();
          if (n.createElement) for (; t.length;) n.createElement(t.pop());
          return n
      }
      function p(e, t) {
          return e.getElementsByTagName(t)[0] || e.appendChild(e.ownerDocument.createElement(t))
      }
      function d(e) {
          var t = e.getAttributeNode("type");
          return e.type = (t && t.specified) + "/" + e.type, e
      }
      function v(e) {
          var t = nn.exec(e.type);
          return t ? e.type = t[1] : e.removeAttribute("type"), e
      }
      function m(e, t) {
          for (var n, r = 0; null != (n = e[r]); r++) ut._data(n, "globalEval", !t || ut._data(t[r], "globalEval"))
      }
      function g(e, t) {
          if (1 === t.nodeType && ut.hasData(e)) {
              var n, r, i, s = ut._data(e),
                  o = ut._data(t, s),
                  u = s.events;
              if (u) {
                  delete o.handle, o.events = {};
                  for (n in u) for (r = 0, i = u[n].length; i > r; r++) ut.event.add(t, n, u[n][r])
              }
              o.data && (o.data = ut.extend({}, o.data))
          }
      }
      function y(e, t) {
          var n, r, i;
          if (1 === t.nodeType) {
              if (n = t.nodeName.toLowerCase(), !ut.support.noCloneEvent && t[ut.expando]) {
                  r = ut._data(t);
                  for (i in r.events) ut.removeEvent(t, i, r.handle);
                  t.removeAttribute(ut.expando)
              }
              "script" === n && t.text !== e.text ? (d(t).text = e.text, v(t)) : "object" === n ? (t.parentNode && (t.outerHTML = e.outerHTML), ut.support.html5Clone && e.innerHTML && !ut.trim(t.innerHTML) && (t.innerHTML = e.innerHTML)) : "input" === n && Zt.test(e.type) ? (t.defaultChecked = t.checked = e.checked, t.value !== e.value && (t.value = e.value)) : "option" === n ? t.defaultSelected = t.selected = e.defaultSelected : ("input" === n || "textarea" === n) && (t.defaultValue = e.defaultValue)
          }
      }
      function b(e, n) {
          var r, i, s = 0,
              o = e.getElementsByTagName !== t ? e.getElementsByTagName(n || "*") : e.querySelectorAll !== t ? e.querySelectorAll(n || "*") : t;
          if (!o) for (o = [], r = e.childNodes || e; null != (i = r[s]); s++)!n || ut.nodeName(i, n) ? o.push(i) : ut.merge(o, b(i, n));
          return n === t || n && ut.nodeName(e, n) ? ut.merge([e], o) : o
      }
      function w(e) {
          Zt.test(e.type) && (e.defaultChecked = e.checked)
      }
      function E(e, t) {
          if (t in e) return t;
          for (var n = t.charAt(0).toUpperCase() + t.slice(1), r = t, i = xn.length; i--;) if (t = xn[i] + n, t in e) return t;
          return r
      }
      function S(e, t) {
          return e = t || e, "none" === ut.css(e, "display") || !ut.contains(e.ownerDocument, e)
      }
      function x(e, t) {
          for (var n, r = [], i = 0, s = e.length; s > i; i++) n = e[i], n.style && (r[i] = ut._data(n, "olddisplay"), t ? (r[i] || "none" !== n.style.display || (n.style.display = ""), "" === n.style.display && S(n) && (r[i] = ut._data(n, "olddisplay", k(n.nodeName)))) : r[i] || S(n) || ut._data(n, "olddisplay", ut.css(n, "display")));
          for (i = 0; s > i; i++) n = e[i], n.style && (t && "none" !== n.style.display && "" !== n.style.display || (n.style.display = t ? r[i] || "" : "none"));
          return e
      }
      function T(e, t, n) {
          var r = mn.exec(t);
          return r ? Math.max(0, r[1] - (n || 0)) + (r[2] || "px") : t
      }
      function N(e, t, n, r, i) {
          for (var s = n === (r ? "border" : "content") ? 4 : "width" === t ? 1 : 0, o = 0; 4 > s; s += 2)"margin" === n && (o += ut.css(e, n + Sn[s], !0, i)), r ? ("content" === n && (o -= ut.css(e, "padding" + Sn[s], !0, i)), "margin" !== n && (o -= ut.css(e, "border" + Sn[s] + "Width", !0, i))) : (o += ut.css(e, "padding" + Sn[s], !0, i), "padding" !== n && (o += ut.css(e, "border" + Sn[s] + "Width", !0, i)));
          return o
      }
      function C(e, t, n) {
          var r = !0,
              i = "width" === t ? e.offsetWidth : e.offsetHeight,
              s = fn(e),
              o = ut.support.boxSizing && "border-box" === ut.css(e, "boxSizing", !1, s);
          if (0 >= i || null == i) {
              if (i = an(e, t, s), (0 > i || null == i) && (i = e.style[t]), gn.test(i)) return i;
              r = o && (ut.support.boxSizingReliable || i === e.style[t]), i = parseFloat(i) || 0
          }
          return i + N(e, t, n || (o ? "border" : "content"), r, s) + "px"
      }
      function k(e) {
          var t = $,
              n = bn[e];
          return n || (n = L(e, t), "none" !== n && n || (ln = (ln || ut("<iframe frameborder='0' width='0' height='0'/>").css("cssText", "display:block !important")).appendTo(t.documentElement), t = (ln[0].contentWindow || ln[0].contentDocument).document, t.write("<!doctype html><html><body>"), t.close(), n = L(e, t), ln.detach()), bn[e] = n), n
      }
      function L(e, t) {
          var n = ut(t.createElement(e)).appendTo(t.body),
              r = ut.css(n[0], "display");
          return n.remove(), r
      }
      function A(e, t, n, r) {
          var i;
          if (ut.isArray(t)) ut.each(t, function(t, i) {
              n || Nn.test(e) ? r(e, i) : A(e + "[" + ("object" == typeof i ? t : "") + "]", i, n, r)
          });
          else if (n || "object" !== ut.type(t)) r(e, t);
          else for (i in t) A(e + "[" + i + "]", t[i], n, r)
      }
      function O(e) {
          return function(t, n) {
              "string" != typeof t && (n = t, t = "*");
              var r, i = 0,
                  s = t.toLowerCase().match(ft) || [];
              if (ut.isFunction(n)) for (; r = s[i++];)"+" === r[0] ? (r = r.slice(1) || "*", (e[r] = e[r] || []).unshift(n)) : (e[r] = e[r] || []).push(n)
          }
      }
      function M(e, n, r, i) {
          function s(a) {
              var f;
              return o[a] = !0, ut.each(e[a] || [], function(e, a) {
                  var l = a(n, r, i);
                  return "string" != typeof l || u || o[l] ? u ? !(f = l) : t : (n.dataTypes.unshift(l), s(l), !1)
              }), f
          }
          var o = {},
              u = e === Un;
          return s(n.dataTypes[0]) || !o["*"] && s("*")
      }
      function _(e, n) {
          var r, i, s = ut.ajaxSettings.flatOptions || {};
          for (r in n) n[r] !== t && ((s[r] ? e : i || (i = {}))[r] = n[r]);
          return i && ut.extend(!0, e, i), e
      }
      function D(e, n, r) {
          var i, s, o, u, a = e.contents,
              f = e.dataTypes,
              l = e.responseFields;
          for (s in l) s in r && (n[l[s]] = r[s]);
          for (;
              "*" === f[0];) f.shift(), i === t && (i = e.mimeType || n.getResponseHeader("Content-Type"));
          if (i) for (s in a) if (a[s] && a[s].test(i)) {
              f.unshift(s);
              break
          }
          if (f[0] in r) o = f[0];
          else {
              for (s in r) {
                  if (!f[0] || e.converters[s + " " + f[0]]) {
                      o = s;
                      break
                  }
                  u || (u = s)
              }
              o = o || u
          }
          return o ? (o !== f[0] && f.unshift(o), r[o]) : t
      }
      function P(e, t) {
          var n, r, i, s, o = {},
              u = 0,
              a = e.dataTypes.slice(),
              f = a[0];
          if (e.dataFilter && (t = e.dataFilter(t, e.dataType)), a[1]) for (n in e.converters) o[n.toLowerCase()] = e.converters[n];
          for (; i = a[++u];) if ("*" !== i) {
              if ("*" !== f && f !== i) {
                  if (n = o[f + " " + i] || o["* " + i], !n) for (r in o) if (s = r.split(" "), s[1] === i && (n = o[f + " " + s[0]] || o["* " + s[0]])) {
                      n === !0 ? n = o[r] : o[r] !== !0 && (i = s[0], a.splice(u--, 0, i));
                      break
                  }
                  if (n !== !0) if (n && e["throws"]) t = n(t);
                  else try {
                          t = n(t)
                      } catch (l) {
                          return {
                              state: "parsererror",
                              error: n ? l : "No conversion from " + f + " to " + i
                          }
                      }
              }
              f = i
          }
          return {
              state: "success",
              data: t
          }
      }
      function H() {
          try {
              return new e.XMLHttpRequest
          } catch (t) {}
      }
      function B() {
          try {
              return new e.ActiveXObject("Microsoft.XMLHTTP")
          } catch (t) {}
      }
      function j() {
          return setTimeout(function() {
              Gn = t
          }), Gn = ut.now()
      }
      function F(e, t) {
          ut.each(t, function(t, n) {
              for (var r = (rr[t] || []).concat(rr["*"]), i = 0, s = r.length; s > i; i++) if (r[i].call(e, t, n)) return
          })
      }
      function I(e, t, n) {
          var r, i, s = 0,
              o = nr.length,
              u = ut.Deferred().always(function() {
                  delete a.elem
              }),
              a = function() {
                  if (i) return !1;
                  for (var t = Gn || j(), n = Math.max(0, f.startTime + f.duration - t), r = n / f.duration || 0, s = 1 - r, o = 0, a = f.tweens.length; a > o; o++) f.tweens[o].run(s);
                  return u.notifyWith(e, [f, s, n]), 1 > s && a ? n : (u.resolveWith(e, [f]), !1)
              },
              f = u.promise({
                  elem: e,
                  props: ut.extend({}, t),
                  opts: ut.extend(!0, {
                      specialEasing: {}
                  }, n),
                  originalProperties: t,
                  originalOptions: n,
                  startTime: Gn || j(),
                  duration: n.duration,
                  tweens: [],
                  createTween: function(t, n) {
                      var r = ut.Tween(e, f.opts, t, n, f.opts.specialEasing[t] || f.opts.easing);
                      return f.tweens.push(r), r
                  },
                  stop: function(t) {
                      var n = 0,
                          r = t ? f.tweens.length : 0;
                      if (i) return this;
                      for (i = !0; r > n; n++) f.tweens[n].run(1);
                      return t ? u.resolveWith(e, [f, t]) : u.rejectWith(e, [f, t]), this
                  }
              }),
              l = f.props;
          for (q(l, f.opts.specialEasing); o > s; s++) if (r = nr[s].call(f, e, l, f.opts)) return r;
          return F(f, l), ut.isFunction(f.opts.start) && f.opts.start.call(e, f), ut.fx.timer(ut.extend(a, {
              elem: e,
              anim: f,
              queue: f.opts.queue
          })), f.progress(f.opts.progress).done(f.opts.done, f.opts.complete).fail(f.opts.fail).always(f.opts.always)
      }
      function q(e, t) {
          var n, r, i, s, o;
          for (n in e) if (r = ut.camelCase(n), i = t[r], s = e[n], ut.isArray(s) && (i = s[1], s = e[n] = s[0]), n !== r && (e[r] = s, delete e[n]), o = ut.cssHooks[r], o && "expand" in o) {
              s = o.expand(s), delete e[r];
              for (n in s) n in e || (e[n] = s[n], t[n] = i)
          } else t[r] = i
      }
      function R(e, t, n) {
          var r, i, s, o, u, a, f, l, c, h = this,
              p = e.style,
              d = {},
              v = [],
              m = e.nodeType && S(e);
          n.queue || (l = ut._queueHooks(e, "fx"), null == l.unqueued && (l.unqueued = 0, c = l.empty.fire, l.empty.fire = function() {
              l.unqueued || c()
          }), l.unqueued++, h.always(function() {
              h.always(function() {
                  l.unqueued--, ut.queue(e, "fx").length || l.empty.fire()
              })
          })), 1 === e.nodeType && ("height" in t || "width" in t) && (n.overflow = [p.overflow, p.overflowX, p.overflowY], "inline" === ut.css(e, "display") && "none" === ut.css(e, "float") && (ut.support.inlineBlockNeedsLayout && "inline" !== k(e.nodeName) ? p.zoom = 1 : p.display = "inline-block")), n.overflow && (p.overflow = "hidden", ut.support.shrinkWrapBlocks || h.done(function() {
              p.overflow = n.overflow[0], p.overflowX = n.overflow[1], p.overflowY = n.overflow[2]
          }));
          for (r in t) if (s = t[r], Zn.exec(s)) {
              if (delete t[r], a = a || "toggle" === s, s === (m ? "hide" : "show")) continue;
              v.push(r)
          }
          if (o = v.length) {
              u = ut._data(e, "fxshow") || ut._data(e, "fxshow", {}), "hidden" in u && (m = u.hidden), a && (u.hidden = !m), m ? ut(e).show() : h.done(function() {
                  ut(e).hide()
              }), h.done(function() {
                  var t;
                  ut._removeData(e, "fxshow");
                  for (t in d) ut.style(e, t, d[t])
              });
              for (r = 0; o > r; r++) i = v[r], f = h.createTween(i, m ? u[i] : 0), d[i] = u[i] || ut.style(e, i), i in u || (u[i] = f.start, m && (f.end = f.start, f.start = "width" === i || "height" === i ? 1 : 0))
          }
      }
      function U(e, t, n, r, i) {
          return new U.prototype.init(e, t, n, r, i)
      }
      function z(e, t) {
          var n, r = {
                  height: e
              },
              i = 0;
          for (t = t ? 1 : 0; 4 > i; i += 2 - t) n = Sn[i], r["margin" + n] = r["padding" + n] = e;
          return t && (r.opacity = r.width = e), r
      }
      function W(e) {
          return ut.isWindow(e) ? e : 9 === e.nodeType ? e.defaultView || e.parentWindow : !1
      }
      var X, V, $ = e.document,
          J = e.location,
          K = e.jQuery,
          Q = e.$,
          G = {},
          Y = [],
          Z = "1.9.0",
          et = Y.concat,
          tt = Y.push,
          nt = Y.slice,
          rt = Y.indexOf,
          it = G.toString,
          st = G.hasOwnProperty,
          ot = Z.trim,
          ut = function(e, t) {
              return new ut.fn.init(e, t, X)
          },
          at = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
          ft = /\S+/g,
          lt = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
          ct = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,
          ht = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
          pt = /^[\],:{}\s]*$/,
          dt = /(?:^|:|,)(?:\s*\[)+/g,
          vt = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
          mt = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
          gt = /^-ms-/,
          yt = /-([\da-z])/gi,
          bt = function(e, t) {
              return t.toUpperCase()
          },
          wt = function() {
              $.addEventListener ? ($.removeEventListener("DOMContentLoaded", wt, !1), ut.ready()) : "complete" === $.readyState && ($.detachEvent("onreadystatechange", wt), ut.ready())
          };
      ut.fn = ut.prototype = {
          jquery: Z,
          constructor: ut,
          init: function(e, n, r) {
              var i, s;
              if (!e) return this;
              if ("string" == typeof e) {
                  if (i = "<" === e.charAt(0) && ">" === e.charAt(e.length - 1) && e.length >= 3 ? [null, e, null] : ct.exec(e), !i || !i[1] && n) return !n || n.jquery ? (n || r).find(e) : this.constructor(n).find(e);
                  if (i[1]) {
                      if (n = n instanceof ut ? n[0] : n, ut.merge(this, ut.parseHTML(i[1], n && n.nodeType ? n.ownerDocument || n : $, !0)), ht.test(i[1]) && ut.isPlainObject(n)) for (i in n) ut.isFunction(this[i]) ? this[i](n[i]) : this.attr(i, n[i]);
                      return this
                  }
                  if (s = $.getElementById(i[2]), s && s.parentNode) {
                      if (s.id !== i[2]) return r.find(e);
                      this.length = 1, this[0] = s
                  }
                  return this.context = $, this.selector = e, this
              }
              return e.nodeType ? (this.context = this[0] = e, this.length = 1, this) : ut.isFunction(e) ? r.ready(e) : (e.selector !== t && (this.selector = e.selector, this.context = e.context), ut.makeArray(e, this))
          },
          selector: "",
          length: 0,
          size: function() {
              return this.length
          },
          toArray: function() {
              return nt.call(this)
          },
          get: function(e) {
              return null == e ? this.toArray() : 0 > e ? this[this.length + e] : this[e]
          },
          pushStack: function(e) {
              var t = ut.merge(this.constructor(), e);
              return t.prevObject = this, t.context = this.context, t
          },
          each: function(e, t) {
              return ut.each(this, e, t)
          },
          ready: function(e) {
              return ut.ready.promise().done(e), this
          },
          slice: function() {
              return this.pushStack(nt.apply(this, arguments))
          },
          first: function() {
              return this.eq(0)
          },
          last: function() {
              return this.eq(-1)
          },
          eq: function(e) {
              var t = this.length,
                  n = +e + (0 > e ? t : 0);
              return this.pushStack(n >= 0 && t > n ? [this[n]] : [])
          },
          map: function(e) {
              return this.pushStack(ut.map(this, function(t, n) {
                  return e.call(t, n, t)
              }))
          },
          end: function() {
              return this.prevObject || this.constructor(null)
          },
          push: tt,
          sort: [].sort,
          splice: [].splice
      }, ut.fn.init.prototype = ut.fn, ut.extend = ut.fn.extend = function() {
          var e, n, r, i, s, o, u = arguments[0] || {},
              a = 1,
              f = arguments.length,
              l = !1;
          for ("boolean" == typeof u && (l = u, u = arguments[1] || {}, a = 2), "object" == typeof u || ut.isFunction(u) || (u = {}), f === a && (u = this, --a); f > a; a++) if (null != (e = arguments[a])) for (n in e) r = u[n], i = e[n], u !== i && (l && i && (ut.isPlainObject(i) || (s = ut.isArray(i))) ? (s ? (s = !1, o = r && ut.isArray(r) ? r : []) : o = r && ut.isPlainObject(r) ? r : {}, u[n] = ut.extend(l, o, i)) : i !== t && (u[n] = i));
          return u
      }, ut.extend({
          noConflict: function(t) {
              return e.$ === ut && (e.$ = Q), t && e.jQuery === ut && (e.jQuery = K), ut
          },
          isReady: !1,
          readyWait: 1,
          holdReady: function(e) {
              e ? ut.readyWait++ : ut.ready(!0)
          },
          ready: function(e) {
              if (e === !0 ? !--ut.readyWait : !ut.isReady) {
                  if (!$.body) return setTimeout(ut.ready);
                  ut.isReady = !0, e !== !0 && --ut.readyWait > 0 || (V.resolveWith($, [ut]), ut.fn.trigger && ut($).trigger("ready").off("ready"))
              }
          },
          isFunction: function(e) {
              return "function" === ut.type(e)
          },
          isArray: Array.isArray ||
              function(e) {
                  return "array" === ut.type(e)
              },
          isWindow: function(e) {
              return null != e && e == e.window
          },
          isNumeric: function(e) {
              return !isNaN(parseFloat(e)) && isFinite(e)
          },
          type: function(e) {
              return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? G[it.call(e)] || "object" : typeof e
          },
          isPlainObject: function(e) {
              if (!e || "object" !== ut.type(e) || e.nodeType || ut.isWindow(e)) return !1;
              try {
                  if (e.constructor && !st.call(e, "constructor") && !st.call(e.constructor.prototype, "isPrototypeOf")) return !1
              } catch (n) {
                  return !1
              }
              var r;
              for (r in e);
              return r === t || st.call(e, r)
          },
          isEmptyObject: function(e) {
              var t;
              for (t in e) return !1;
              return !0
          },
          error: function(e) {
              throw Error(e)
          },
          parseHTML: function(e, t, n) {
              if (!e || "string" != typeof e) return null;
              "boolean" == typeof t && (n = t, t = !1), t = t || $;
              var r = ht.exec(e),
                  i = !n && [];
              return r ? [t.createElement(r[1])] : (r = ut.buildFragment([e], t, i), i && ut(i).remove(), ut.merge([], r.childNodes))
          },
          parseJSON: function(n) {
              return e.JSON && e.JSON.parse ? e.JSON.parse(n) : null === n ? n : "string" == typeof n && (n = ut.trim(n), n && pt.test(n.replace(vt, "@").replace(mt, "]").replace(dt, ""))) ? Function("return " + n)() : (ut.error("Invalid JSON: " + n), t)
          },
          parseXML: function(n) {
              var r, i;
              if (!n || "string" != typeof n) return null;
              try {
                  e.DOMParser ? (i = new DOMParser, r = i.parseFromString(n, "text/xml")) : (r = new ActiveXObject("Microsoft.XMLDOM"), r.async = "false", r.loadXML(n))
              } catch (s) {
                  r = t
              }
              return r && r.documentElement && !r.getElementsByTagName("parsererror").length || ut.error("Invalid XML: " + n), r
          },
          noop: function() {},
          globalEval: function(t) {
              t && ut.trim(t) && (e.execScript ||
                  function(t) {
                      e.eval.call(e, t)
                  })(t)
          },
          camelCase: function(e) {
              return e.replace(gt, "ms-").replace(yt, bt)
          },
          nodeName: function(e, t) {
              return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase()
          },
          each: function(e, t, r) {
              var i, s = 0,
                  o = e.length,
                  u = n(e);
              if (r) {
                  if (u) for (; o > s && (i = t.apply(e[s], r), i !== !1); s++);
                  else for (s in e) if (i = t.apply(e[s], r), i === !1) break
              } else if (u) for (; o > s && (i = t.call(e[s], s, e[s]), i !== !1); s++);
              else for (s in e) if (i = t.call(e[s], s, e[s]), i === !1) break;
              return e
          },
          trim: ot && !ot.call("﻿ ") ?
              function(e) {
                  return null == e ? "" : ot.call(e)
              } : function(e) {
                  return null == e ? "" : (e + "").replace(lt, "")
              },
          makeArray: function(e, t) {
              var r = t || [];
              return null != e && (n(Object(e)) ? ut.merge(r, "string" == typeof e ? [e] : e) : tt.call(r, e)), r
          },
          inArray: function(e, t, n) {
              var r;
              if (t) {
                  if (rt) return rt.call(t, e, n);
                  for (r = t.length, n = n ? 0 > n ? Math.max(0, r + n) : n : 0; r > n; n++) if (n in t && t[n] === e) return n
              }
              return -1
          },
          merge: function(e, n) {
              var r = n.length,
                  i = e.length,
                  s = 0;
              if ("number" == typeof r) for (; r > s; s++) e[i++] = n[s];
              else for (; n[s] !== t;) e[i++] = n[s++];
              return e.length = i, e
          },
          grep: function(e, t, n) {
              var r, i = [],
                  s = 0,
                  o = e.length;
              for (n = !! n; o > s; s++) r = !! t(e[s], s), n !== r && i.push(e[s]);
              return i
          },
          map: function(e, t, r) {
              var i, s = 0,
                  o = e.length,
                  u = n(e),
                  a = [];
              if (u) for (; o > s; s++) i = t(e[s], s, r), null != i && (a[a.length] = i);
              else for (s in e) i = t(e[s], s, r), null != i && (a[a.length] = i);
              return et.apply([], a)
          },
          guid: 1,
          proxy: function(e, n) {
              var r, i, s;
              return "string" == typeof n && (r = e[n], n = e, e = r), ut.isFunction(e) ? (i = nt.call(arguments, 2), s = function() {
                  return e.apply(n || this, i.concat(nt.call(arguments)))
              }, s.guid = e.guid = e.guid || ut.guid++, s) : t
          },
          access: function(e, n, r, i, s, o, u) {
              var a = 0,
                  f = e.length,
                  l = null == r;
              if ("object" === ut.type(r)) {
                  s = !0;
                  for (a in r) ut.access(e, n, a, r[a], !0, o, u)
              } else if (i !== t && (s = !0, ut.isFunction(i) || (u = !0), l && (u ? (n.call(e, i), n = null) : (l = n, n = function(e, t, n) {
                  return l.call(ut(e), n)
              })), n)) for (; f > a; a++) n(e[a], r, u ? i : i.call(e[a], a, n(e[a], r)));
              return s ? e : l ? n.call(e) : f ? n(e[0], r) : o
          },
          now: function() {
              return (new Date).getTime()
          }
      }), ut.ready.promise = function(t) {
          if (!V) if (V = ut.Deferred(), "complete" === $.readyState) setTimeout(ut.ready);
          else if ($.addEventListener) $.addEventListener("DOMContentLoaded", wt, !1), e.addEventListener("load", ut.ready, !1);
          else {
              $.attachEvent("onreadystatechange", wt), e.attachEvent("onload", ut.ready);
              var n = !1;
              try {
                  n = null == e.frameElement && $.documentElement
              } catch (r) {}
              n && n.doScroll &&
              function i() {
                  if (!ut.isReady) {
                      try {
                          n.doScroll("left")
                      } catch (e) {
                          return setTimeout(i, 50)
                      }
                      ut.ready()
                  }
              }()
          }
          return V.promise(t)
      }, ut.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(e, t) {
          G["[object " + t + "]"] = t.toLowerCase()
      }), X = ut($);
      var Et = {};
      ut.Callbacks = function(e) {
          e = "string" == typeof e ? Et[e] || r(e) : ut.extend({}, e);
          var n, i, s, o, u, a, f = [],
              l = !e.once && [],
              c = function(t) {
                  for (n = e.memory && t, i = !0, a = o || 0, o = 0, u = f.length, s = !0; f && u > a; a++) if (f[a].apply(t[0], t[1]) === !1 && e.stopOnFalse) {
                      n = !1;
                      break
                  }
                  s = !1, f && (l ? l.length && c(l.shift()) : n ? f = [] : h.disable())
              },
              h = {
                  add: function() {
                      if (f) {
                          var t = f.length;
                          (function r(t) {
                              ut.each(t, function(t, n) {
                                  var i = ut.type(n);
                                  "function" === i ? e.unique && h.has(n) || f.push(n) : n && n.length && "string" !== i && r(n)
                              })
                          })(arguments), s ? u = f.length : n && (o = t, c(n))
                      }
                      return this
                  },
                  remove: function() {
                      return f && ut.each(arguments, function(e, t) {
                          for (var n;
                               (n = ut.inArray(t, f, n)) > -1;) f.splice(n, 1), s && (u >= n && u--, a >= n && a--)
                      }), this
                  },
                  has: function(e) {
                      return ut.inArray(e, f) > -1
                  },
                  empty: function() {
                      return f = [], this
                  },
                  disable: function() {
                      return f = l = n = t, this
                  },
                  disabled: function() {
                      return !f
                  },
                  lock: function() {
                      return l = t, n || h.disable(), this
                  },
                  locked: function() {
                      return !l
                  },
                  fireWith: function(e, t) {
                      return t = t || [], t = [e, t.slice ? t.slice() : t], !f || i && !l || (s ? l.push(t) : c(t)), this
                  },
                  fire: function() {
                      return h.fireWith(this, arguments), this
                  },
                  fired: function() {
                      return !!i
                  }
              };
          return h
      }, ut.extend({
          Deferred: function(e) {
              var t = [
                      ["resolve", "done", ut.Callbacks("once memory"), "resolved"],
                      ["reject", "fail", ut.Callbacks("once memory"), "rejected"],
                      ["notify", "progress", ut.Callbacks("memory")]
                  ],
                  n = "pending",
                  r = {
                      state: function() {
                          return n
                      },
                      always: function() {
                          return i.done(arguments).fail(arguments), this
                      },
                      then: function() {
                          var e = arguments;
                          return ut.Deferred(function(n) {
                              ut.each(t, function(t, s) {
                                  var o = s[0],
                                      u = ut.isFunction(e[t]) && e[t];
                                  i[s[1]](function() {
                                      var e = u && u.apply(this, arguments);
                                      e && ut.isFunction(e.promise) ? e.promise().done(n.resolve).fail(n.reject).progress(n.notify) : n[o + "With"](this === r ? n.promise() : this, u ? [e] : arguments)
                                  })
                              }), e = null
                          }).promise()
                      },
                      promise: function(e) {
                          return null != e ? ut.extend(e, r) : r
                      }
                  },
                  i = {};
              return r.pipe = r.then, ut.each(t, function(e, s) {
                  var o = s[2],
                      u = s[3];
                  r[s[1]] = o.add, u && o.add(function() {
                      n = u
                  }, t[1 ^ e][2].disable, t[2][2].lock), i[s[0]] = function() {
                      return i[s[0] + "With"](this === i ? r : this, arguments), this
                  }, i[s[0] + "With"] = o.fireWith
              }), r.promise(i), e && e.call(i, i), i
          },
          when: function(e) {
              var t, n, r, i = 0,
                  s = nt.call(arguments),
                  o = s.length,
                  u = 1 !== o || e && ut.isFunction(e.promise) ? o : 0,
                  a = 1 === u ? e : ut.Deferred(),
                  f = function(e, n, r) {
                      return function(i) {
                          n[e] = this, r[e] = arguments.length > 1 ? nt.call(arguments) : i, r === t ? a.notifyWith(n, r) : --u || a.resolveWith(n, r)
                      }
                  };
              if (o > 1) for (t = Array(o), n = Array(o), r = Array(o); o > i; i++) s[i] && ut.isFunction(s[i].promise) ? s[i].promise().done(f(i, r, s)).fail(a.reject).progress(f(i, n, t)) : --u;
              return u || a.resolveWith(r, s), a.promise()
          }
      }), ut.support = function() {
          var n, r, i, s, o, u, a, f, l, c, h = $.createElement("div");
          if (h.setAttribute("className", "t"), h.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", r = h.getElementsByTagName("*"), i = h.getElementsByTagName("a")[0], !r || !i || !r.length) return {};
          s = $.createElement("select"), o = s.appendChild($.createElement("option")), u = h.getElementsByTagName("input")[0], i.style.cssText = "top:1px;float:left;opacity:.5", n = {
              getSetAttribute: "t" !== h.className,
              leadingWhitespace: 3 === h.firstChild.nodeType,
              tbody: !h.getElementsByTagName("tbody").length,
              htmlSerialize: !! h.getElementsByTagName("link").length,
              style: /top/.test(i.getAttribute("style")),
              hrefNormalized: "/a" === i.getAttribute("href"),
              opacity: /^0.5/.test(i.style.opacity),
              cssFloat: !! i.style.cssFloat,
              checkOn: !! u.value,
              optSelected: o.selected,
              enctype: !! $.createElement("form").enctype,
              html5Clone: "<:nav></:nav>" !== $.createElement("nav").cloneNode(!0).outerHTML,
              boxModel: "CSS1Compat" === $.compatMode,
              deleteExpando: !0,
              noCloneEvent: !0,
              inlineBlockNeedsLayout: !1,
              shrinkWrapBlocks: !1,
              reliableMarginRight: !0,
              boxSizingReliable: !0,
              pixelPosition: !1
          }, u.checked = !0, n.noCloneChecked = u.cloneNode(!0).checked, s.disabled = !0, n.optDisabled = !o.disabled;
          try {
              delete h.test
          } catch (p) {
              n.deleteExpando = !1
          }
          u = $.createElement("input"), u.setAttribute("value", ""), n.input = "" === u.getAttribute("value"), u.value = "t", u.setAttribute("type", "radio"), n.radioValue = "t" === u.value, u.setAttribute("checked", "t"), u.setAttribute("name", "t"), a = $.createDocumentFragment(), a.appendChild(u), n.appendChecked = u.checked, n.checkClone = a.cloneNode(!0).cloneNode(!0).lastChild.checked, h.attachEvent && (h.attachEvent("onclick", function() {
              n.noCloneEvent = !1
          }), h.cloneNode(!0).click());
          for (c in {
              submit: !0,
              change: !0,
              focusin: !0
          }) h.setAttribute(f = "on" + c, "t"), n[c + "Bubbles"] = f in e || h.attributes[f].expando === !1;
          return h.style.backgroundClip = "content-box", h.cloneNode(!0).style.backgroundClip = "", n.clearCloneStyle = "content-box" === h.style.backgroundClip, ut(function() {
              var r, i, s, o = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
                  u = $.getElementsByTagName("body")[0];
              u && (r = $.createElement("div"), r.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px", u.appendChild(r).appendChild(h), h.innerHTML = "<table><tr><td></td><td>t</td></tr></table>", s = h.getElementsByTagName("td"), s[0].style.cssText = "padding:0;margin:0;border:0;display:none", l = 0 === s[0].offsetHeight, s[0].style.display = "", s[1].style.display = "none", n.reliableHiddenOffsets = l && 0 === s[0].offsetHeight, h.innerHTML = "", h.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;", n.boxSizing = 4 === h.offsetWidth, n.doesNotIncludeMarginInBodyOffset = 1 !== u.offsetTop, e.getComputedStyle && (n.pixelPosition = "1%" !== (e.getComputedStyle(h, null) || {}).top, n.boxSizingReliable = "4px" === (e.getComputedStyle(h, null) || {
                  width: "4px"
              }).width, i = h.appendChild($.createElement("div")), i.style.cssText = h.style.cssText = o, i.style.marginRight = i.style.width = "0", h.style.width = "1px", n.reliableMarginRight = !parseFloat((e.getComputedStyle(i, null) || {}).marginRight)), h.style.zoom !== t && (h.innerHTML = "", h.style.cssText = o + "width:1px;padding:1px;display:inline;zoom:1", n.inlineBlockNeedsLayout = 3 === h.offsetWidth, h.style.display = "block", h.innerHTML = "<div></div>", h.firstChild.style.width = "5px", n.shrinkWrapBlocks = 3 !== h.offsetWidth, u.style.zoom = 1), u.removeChild(r), r = h = s = i = null)
          }), r = s = a = o = i = u = null, n
      }();
      var St = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
          xt = /([A-Z])/g;
      ut.extend({
          cache: {},
          expando: "jQuery" + (Z + Math.random()).replace(/\D/g, ""),
          noData: {
              embed: !0,
              object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
              applet: !0
          },
          hasData: function(e) {
              return e = e.nodeType ? ut.cache[e[ut.expando]] : e[ut.expando], !! e && !u(e)
          },
          data: function(e, t, n) {
              return i(e, t, n, !1)
          },
          removeData: function(e, t) {
              return s(e, t, !1)
          },
          _data: function(e, t, n) {
              return i(e, t, n, !0)
          },
          _removeData: function(e, t) {
              return s(e, t, !0)
          },
          acceptData: function(e) {
              var t = e.nodeName && ut.noData[e.nodeName.toLowerCase()];
              return !t || t !== !0 && e.getAttribute("classid") === t
          }
      }), ut.fn.extend({
          data: function(e, n) {
              var r, i, s = this[0],
                  u = 0,
                  a = null;
              if (e === t) {
                  if (this.length && (a = ut.data(s), 1 === s.nodeType && !ut._data(s, "parsedAttrs"))) {
                      for (r = s.attributes; r.length > u; u++) i = r[u].name, i.indexOf("data-") || (i = ut.camelCase(i.substring(5)), o(s, i, a[i]));
                      ut._data(s, "parsedAttrs", !0)
                  }
                  return a
              }
              return "object" == typeof e ? this.each(function() {
                  ut.data(this, e)
              }) : ut.access(this, function(n) {
                  return n === t ? s ? o(s, e, ut.data(s, e)) : null : (this.each(function() {
                      ut.data(this, e, n)
                  }), t)
              }, null, n, arguments.length > 1, null, !0)
          },
          removeData: function(e) {
              return this.each(function() {
                  ut.removeData(this, e)
              })
          }
      }), ut.extend({
          queue: function(e, n, r) {
              var i;
              return e ? (n = (n || "fx") + "queue", i = ut._data(e, n), r && (!i || ut.isArray(r) ? i = ut._data(e, n, ut.makeArray(r)) : i.push(r)), i || []) : t
          },
          dequeue: function(e, t) {
              t = t || "fx";
              var n = ut.queue(e, t),
                  r = n.length,
                  i = n.shift(),
                  s = ut._queueHooks(e, t),
                  o = function() {
                      ut.dequeue(e, t)
                  };
              "inprogress" === i && (i = n.shift(), r--), s.cur = i, i && ("fx" === t && n.unshift("inprogress"), delete s.stop, i.call(e, o, s)), !r && s && s.empty.fire()
          },
          _queueHooks: function(e, t) {
              var n = t + "queueHooks";
              return ut._data(e, n) || ut._data(e, n, {
                  empty: ut.Callbacks("once memory").add(function() {
                      ut._removeData(e, t + "queue"), ut._removeData(e, n)
                  })
              })
          }
      }), ut.fn.extend({
          queue: function(e, n) {
              var r = 2;
              return "string" != typeof e && (n = e, e = "fx", r--), r > arguments.length ? ut.queue(this[0], e) : n === t ? this : this.each(function() {
                  var t = ut.queue(this, e, n);
                  ut._queueHooks(this, e), "fx" === e && "inprogress" !== t[0] && ut.dequeue(this, e)
              })
          },
          dequeue: function(e) {
              return this.each(function() {
                  ut.dequeue(this, e)
              })
          },
          delay: function(e, t) {
              return e = ut.fx ? ut.fx.speeds[e] || e : e, t = t || "fx", this.queue(t, function(t, n) {
                  var r = setTimeout(t, e);
                  n.stop = function() {
                      clearTimeout(r)
                  }
              })
          },
          clearQueue: function(e) {
              return this.queue(e || "fx", [])
          },
          promise: function(e, n) {
              var r, i = 1,
                  s = ut.Deferred(),
                  o = this,
                  u = this.length,
                  a = function() {
                      --i || s.resolveWith(o, [o])
                  };
              for ("string" != typeof e && (n = e, e = t), e = e || "fx"; u--;) r = ut._data(o[u], e + "queueHooks"), r && r.empty && (i++, r.empty.add(a));
              return a(), s.promise(n)
          }
      });
      var Tt, Nt, Ct = /[\t\r\n]/g,
          kt = /\r/g,
          Lt = /^(?:input|select|textarea|button|object)$/i,
          At = /^(?:a|area)$/i,
          Ot = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,
          Mt = /^(?:checked|selected)$/i,
          _t = ut.support.getSetAttribute,
          Dt = ut.support.input;
      ut.fn.extend({
          attr: function(e, t) {
              return ut.access(this, ut.attr, e, t, arguments.length > 1)
          },
          removeAttr: function(e) {
              return this.each(function() {
                  ut.removeAttr(this, e)
              })
          },
          prop: function(e, t) {
              return ut.access(this, ut.prop, e, t, arguments.length > 1)
          },
          removeProp: function(e) {
              return e = ut.propFix[e] || e, this.each(function() {
                  try {
                      this[e] = t, delete this[e]
                  } catch (n) {}
              })
          },
          addClass: function(e) {
              var t, n, r, i, s, o = 0,
                  u = this.length,
                  a = "string" == typeof e && e;
              if (ut.isFunction(e)) return this.each(function(t) {
                  ut(this).addClass(e.call(this, t, this.className))
              });
              if (a) for (t = (e || "").match(ft) || []; u > o; o++) if (n = this[o], r = 1 === n.nodeType && (n.className ? (" " + n.className + " ").replace(Ct, " ") : " ")) {
                  for (s = 0; i = t[s++];) 0 > r.indexOf(" " + i + " ") && (r += i + " ");
                  n.className = ut.trim(r)
              }
              return this
          },
          removeClass: function(e) {
              var t, n, r, i, s, o = 0,
                  u = this.length,
                  a = 0 === arguments.length || "string" == typeof e && e;
              if (ut.isFunction(e)) return this.each(function(t) {
                  ut(this).removeClass(e.call(this, t, this.className))
              });
              if (a) for (t = (e || "").match(ft) || []; u > o; o++) if (n = this[o], r = 1 === n.nodeType && (n.className ? (" " + n.className + " ").replace(Ct, " ") : "")) {
                  for (s = 0; i = t[s++];) for (; r.indexOf(" " + i + " ") >= 0;) r = r.replace(" " + i + " ", " ");
                  n.className = e ? ut.trim(r) : ""
              }
              return this
          },
          toggleClass: function(e, t) {
              var n = typeof e,
                  r = "boolean" == typeof t;
              return ut.isFunction(e) ? this.each(function(n) {
                  ut(this).toggleClass(e.call(this, n, this.className, t), t)
              }) : this.each(function() {
                  if ("string" === n) for (var i, s = 0, o = ut(this), u = t, a = e.match(ft) || []; i = a[s++];) u = r ? u : !o.hasClass(i), o[u ? "addClass" : "removeClass"](i);
                  else("undefined" === n || "boolean" === n) && (this.className && ut._data(this, "__className__", this.className), this.className = this.className || e === !1 ? "" : ut._data(this, "__className__") || "")
              })
          },
          hasClass: function(e) {
              for (var t = " " + e + " ", n = 0, r = this.length; r > n; n++) if (1 === this[n].nodeType && (" " + this[n].className + " ").replace(Ct, " ").indexOf(t) >= 0) return !0;
              return !1
          },
          val: function(e) {
              var n, r, i, s = this[0];
              if (arguments.length) return i = ut.isFunction(e), this.each(function(r) {
                  var s, o = ut(this);
                  1 === this.nodeType && (s = i ? e.call(this, r, o.val()) : e, null == s ? s = "" : "number" == typeof s ? s += "" : ut.isArray(s) && (s = ut.map(s, function(e) {
                      return null == e ? "" : e + ""
                  })), n = ut.valHooks[this.type] || ut.valHooks[this.nodeName.toLowerCase()], n && "set" in n && n.set(this, s, "value") !== t || (this.value = s))
              });
              if (s) return n = ut.valHooks[s.type] || ut.valHooks[s.nodeName.toLowerCase()], n && "get" in n && (r = n.get(s, "value")) !== t ? r : (r = s.value, "string" == typeof r ? r.replace(kt, "") : null == r ? "" : r)
          }
      }), ut.extend({
          valHooks: {
              option: {
                  get: function(e) {
                      var t = e.attributes.value;
                      return !t || t.specified ? e.value : e.text
                  }
              },
              select: {
                  get: function(e) {
                      for (var t, n, r = e.options, i = e.selectedIndex, s = "select-one" === e.type || 0 > i, o = s ? null : [], u = s ? i + 1 : r.length, a = 0 > i ? u : s ? i : 0; u > a; a++) if (n = r[a], !(!n.selected && a !== i || (ut.support.optDisabled ? n.disabled : null !== n.getAttribute("disabled")) || n.parentNode.disabled && ut.nodeName(n.parentNode, "optgroup"))) {
                          if (t = ut(n).val(), s) return t;
                          o.push(t)
                      }
                      return o
                  },
                  set: function(e, t) {
                      var n = ut.makeArray(t);
                      return ut(e).find("option").each(function() {
                          this.selected = ut.inArray(ut(this).val(), n) >= 0
                      }), n.length || (e.selectedIndex = -1), n
                  }
              }
          },
          attr: function(e, n, r) {
              var i, s, o, u = e.nodeType;
              if (e && 3 !== u && 8 !== u && 2 !== u) return e.getAttribute === t ? ut.prop(e, n, r) : (o = 1 !== u || !ut.isXMLDoc(e), o && (n = n.toLowerCase(), s = ut.attrHooks[n] || (Ot.test(n) ? Nt : Tt)), r === t ? s && o && "get" in s && null !== (i = s.get(e, n)) ? i : (e.getAttribute !== t && (i = e.getAttribute(n)), null == i ? t : i) : null !== r ? s && o && "set" in s && (i = s.set(e, r, n)) !== t ? i : (e.setAttribute(n, r + ""), r) : (ut.removeAttr(e, n), t))
          },
          removeAttr: function(e, t) {
              var n, r, i = 0,
                  s = t && t.match(ft);
              if (s && 1 === e.nodeType) for (; n = s[i++];) r = ut.propFix[n] || n, Ot.test(n) ? !_t && Mt.test(n) ? e[ut.camelCase("default-" + n)] = e[r] = !1 : e[r] = !1 : ut.attr(e, n, ""), e.removeAttribute(_t ? n : r)
          },
          attrHooks: {
              type: {
                  set: function(e, t) {
                      if (!ut.support.radioValue && "radio" === t && ut.nodeName(e, "input")) {
                          var n = e.value;
                          return e.setAttribute("type", t), n && (e.value = n), t
                      }
                  }
              }
          },
          propFix: {
              tabindex: "tabIndex",
              readonly: "readOnly",
              "for": "htmlFor",
              "class": "className",
              maxlength: "maxLength",
              cellspacing: "cellSpacing",
              cellpadding: "cellPadding",
              rowspan: "rowSpan",
              colspan: "colSpan",
              usemap: "useMap",
              frameborder: "frameBorder",
              contenteditable: "contentEditable"
          },
          prop: function(e, n, r) {
              var i, s, o, u = e.nodeType;
              if (e && 3 !== u && 8 !== u && 2 !== u) return o = 1 !== u || !ut.isXMLDoc(e), o && (n = ut.propFix[n] || n, s = ut.propHooks[n]), r !== t ? s && "set" in s && (i = s.set(e, r, n)) !== t ? i : e[n] = r : s && "get" in s && null !== (i = s.get(e, n)) ? i : e[n]
          },
          propHooks: {
              tabIndex: {
                  get: function(e) {
                      var n = e.getAttributeNode("tabindex");
                      return n && n.specified ? parseInt(n.value, 10) : Lt.test(e.nodeName) || At.test(e.nodeName) && e.href ? 0 : t
                  }
              }
          }
      }), Nt = {
          get: function(e, n) {
              var r = ut.prop(e, n),
                  i = "boolean" == typeof r && e.getAttribute(n),
                  s = "boolean" == typeof r ? Dt && _t ? null != i : Mt.test(n) ? e[ut.camelCase("default-" + n)] : !! i : e.getAttributeNode(n);
              return s && s.value !== !1 ? n.toLowerCase() : t
          },
          set: function(e, t, n) {
              return t === !1 ? ut.removeAttr(e, n) : Dt && _t || !Mt.test(n) ? e.setAttribute(!_t && ut.propFix[n] || n, n) : e[ut.camelCase("default-" + n)] = e[n] = !0, n
          }
      }, Dt && _t || (ut.attrHooks.value = {
          get: function(e, n) {
              var r = e.getAttributeNode(n);
              return ut.nodeName(e, "input") ? e.defaultValue : r && r.specified ? r.value : t
          },
          set: function(e, n, r) {
              return ut.nodeName(e, "input") ? (e.defaultValue = n, t) : Tt && Tt.set(e, n, r)
          }
      }), _t || (Tt = ut.valHooks.button = {
          get: function(e, n) {
              var r = e.getAttributeNode(n);
              return r && ("id" === n || "name" === n || "coords" === n ? "" !== r.value : r.specified) ? r.value : t
          },
          set: function(e, n, r) {
              var i = e.getAttributeNode(r);
              return i || e.setAttributeNode(i = e.ownerDocument.createAttribute(r)), i.value = n += "", "value" === r || n === e.getAttribute(r) ? n : t
          }
      }, ut.attrHooks.contenteditable = {
          get: Tt.get,
          set: function(e, t, n) {
              Tt.set(e, "" === t ? !1 : t, n)
          }
      }, ut.each(["width", "height"], function(e, n) {
          ut.attrHooks[n] = ut.extend(ut.attrHooks[n], {
              set: function(e, r) {
                  return "" === r ? (e.setAttribute(n, "auto"), r) : t
              }
          })
      })), ut.support.hrefNormalized || (ut.each(["href", "src", "width", "height"], function(e, n) {
          ut.attrHooks[n] = ut.extend(ut.attrHooks[n], {
              get: function(e) {
                  var r = e.getAttribute(n, 2);
                  return null == r ? t : r
              }
          })
      }), ut.each(["href", "src"], function(e, t) {
          ut.propHooks[t] = {
              get: function(e) {
                  return e.getAttribute(t, 4)
              }
          }
      })), ut.support.style || (ut.attrHooks.style = {
          get: function(e) {
              return e.style.cssText || t
          },
          set: function(e, t) {
              return e.style.cssText = t + ""
          }
      }), ut.support.optSelected || (ut.propHooks.selected = ut.extend(ut.propHooks.selected, {
          get: function(e) {
              var t = e.parentNode;
              return t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex), null
          }
      })), ut.support.enctype || (ut.propFix.enctype = "encoding"), ut.support.checkOn || ut.each(["radio", "checkbox"], function() {
          ut.valHooks[this] = {
              get: function(e) {
                  return null === e.getAttribute("value") ? "on" : e.value
              }
          }
      }), ut.each(["radio", "checkbox"], function() {
          ut.valHooks[this] = ut.extend(ut.valHooks[this], {
              set: function(e, n) {
                  return ut.isArray(n) ? e.checked = ut.inArray(ut(e).val(), n) >= 0 : t
              }
          })
      });
      var Pt = /^(?:input|select|textarea)$/i,
          Ht = /^key/,
          Bt = /^(?:mouse|contextmenu)|click/,
          jt = /^(?:focusinfocus|focusoutblur)$/,
          Ft = /^([^.]*)(?:\.(.+)|)$/;
      ut.event = {
          global: {},
          add: function(e, n, r, i, s) {
              var o, u, a, f, l, c, h, p, d, v, m, g = 3 !== e.nodeType && 8 !== e.nodeType && ut._data(e);
              if (g) {
                  for (r.handler && (o = r, r = o.handler, s = o.selector), r.guid || (r.guid = ut.guid++), (f = g.events) || (f = g.events = {}), (u = g.handle) || (u = g.handle = function(e) {
                      return ut === t || e && ut.event.triggered === e.type ? t : ut.event.dispatch.apply(u.elem, arguments)
                  }, u.elem = e), n = (n || "").match(ft) || [""], l = n.length; l--;) a = Ft.exec(n[l]) || [], d = m = a[1], v = (a[2] || "").split(".").sort(), h = ut.event.special[d] || {}, d = (s ? h.delegateType : h.bindType) || d, h = ut.event.special[d] || {}, c = ut.extend({
                      type: d,
                      origType: m,
                      data: i,
                      handler: r,
                      guid: r.guid,
                      selector: s,
                      needsContext: s && ut.expr.match.needsContext.test(s),
                      namespace: v.join(".")
                  }, o), (p = f[d]) || (p = f[d] = [], p.delegateCount = 0, h.setup && h.setup.call(e, i, v, u) !== !1 || (e.addEventListener ? e.addEventListener(d, u, !1) : e.attachEvent && e.attachEvent("on" + d, u))), h.add && (h.add.call(e, c), c.handler.guid || (c.handler.guid = r.guid)), s ? p.splice(p.delegateCount++, 0, c) : p.push(c), ut.event.global[d] = !0;
                  e = null
              }
          },
          remove: function(e, t, n, r, i) {
              var s, o, u, a, f, l, c, h, p, d, v, m = ut.hasData(e) && ut._data(e);
              if (m && (a = m.events)) {
                  for (t = (t || "").match(ft) || [""], f = t.length; f--;) if (u = Ft.exec(t[f]) || [], p = v = u[1], d = (u[2] || "").split(".").sort(), p) {
                      for (c = ut.event.special[p] || {}, p = (r ? c.delegateType : c.bindType) || p, h = a[p] || [], u = u[2] && RegExp("(^|\\.)" + d.join("\\.(?:.*\\.|)") + "(\\.|$)"), o = s = h.length; s--;) l = h[s], !i && v !== l.origType || n && n.guid !== l.guid || u && !u.test(l.namespace) || r && r !== l.selector && ("**" !== r || !l.selector) || (h.splice(s, 1), l.selector && h.delegateCount--, c.remove && c.remove.call(e, l));
                      o && !h.length && (c.teardown && c.teardown.call(e, d, m.handle) !== !1 || ut.removeEvent(e, p, m.handle), delete a[p])
                  } else for (p in a) ut.event.remove(e, p + t[f], n, r, !0);
                  ut.isEmptyObject(a) && (delete m.handle, ut._removeData(e, "events"))
              }
          },
          trigger: function(n, r, i, s) {
              var o, u, a, f, l, c, h, p = [i || $],
                  d = n.type || n,
                  v = n.namespace ? n.namespace.split(".") : [];
              if (u = a = i = i || $, 3 !== i.nodeType && 8 !== i.nodeType && !jt.test(d + ut.event.triggered) && (d.indexOf(".") >= 0 && (v = d.split("."), d = v.shift(), v.sort()), l = 0 > d.indexOf(":") && "on" + d, n = n[ut.expando] ? n : new ut.Event(d, "object" == typeof n && n), n.isTrigger = !0, n.namespace = v.join("."), n.namespace_re = n.namespace ? RegExp("(^|\\.)" + v.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, n.result = t, n.target || (n.target = i), r = null == r ? [n] : ut.makeArray(r, [n]), h = ut.event.special[d] || {}, s || !h.trigger || h.trigger.apply(i, r) !== !1)) {
                  if (!s && !h.noBubble && !ut.isWindow(i)) {
                      for (f = h.delegateType || d, jt.test(f + d) || (u = u.parentNode); u; u = u.parentNode) p.push(u), a = u;
                      a === (i.ownerDocument || $) && p.push(a.defaultView || a.parentWindow || e)
                  }
                  for (o = 0;
                       (u = p[o++]) && !n.isPropagationStopped();) n.type = o > 1 ? f : h.bindType || d, c = (ut._data(u, "events") || {})[n.type] && ut._data(u, "handle"), c && c.apply(u, r), c = l && u[l], c && ut.acceptData(u) && c.apply && c.apply(u, r) === !1 && n.preventDefault();
                  if (n.type = d, !(s || n.isDefaultPrevented() || h._default && h._default.apply(i.ownerDocument, r) !== !1 || "click" === d && ut.nodeName(i, "a") || !ut.acceptData(i) || !l || !i[d] || ut.isWindow(i))) {
                      a = i[l], a && (i[l] = null), ut.event.triggered = d;
                      try {
                          i[d]()
                      } catch (m) {}
                      ut.event.triggered = t, a && (i[l] = a)
                  }
                  return n.result
              }
          },
          dispatch: function(e) {
              e = ut.event.fix(e);
              var n, r, i, s, o, u = [],
                  a = nt.call(arguments),
                  f = (ut._data(this, "events") || {})[e.type] || [],
                  l = ut.event.special[e.type] || {};
              if (a[0] = e, e.delegateTarget = this, !l.preDispatch || l.preDispatch.call(this, e) !== !1) {
                  for (u = ut.event.handlers.call(this, e, f), n = 0;
                       (s = u[n++]) && !e.isPropagationStopped();) for (e.currentTarget = s.elem, r = 0;
                                                                        (o = s.handlers[r++]) && !e.isImmediatePropagationStopped();)(!e.namespace_re || e.namespace_re.test(o.namespace)) && (e.handleObj = o, e.data = o.data, i = ((ut.event.special[o.origType] || {}).handle || o.handler).apply(s.elem, a), i !== t && (e.result = i) === !1 && (e.preventDefault(), e.stopPropagation()));
                  return l.postDispatch && l.postDispatch.call(this, e), e.result
              }
          },
          handlers: function(e, n) {
              var r, i, s, o, u = [],
                  a = n.delegateCount,
                  f = e.target;
              if (a && f.nodeType && (!e.button || "click" !== e.type)) for (; f != this; f = f.parentNode || this) if (f.disabled !== !0 || "click" !== e.type) {
                  for (i = [], r = 0; a > r; r++) o = n[r], s = o.selector + " ", i[s] === t && (i[s] = o.needsContext ? ut(s, this).index(f) >= 0 : ut.find(s, this, null, [f]).length), i[s] && i.push(o);
                  i.length && u.push({
                      elem: f,
                      handlers: i
                  })
              }
              return n.length > a && u.push({
                  elem: this,
                  handlers: n.slice(a)
              }), u
          },
          fix: function(e) {
              if (e[ut.expando]) return e;
              var t, n, r = e,
                  i = ut.event.fixHooks[e.type] || {},
                  s = i.props ? this.props.concat(i.props) : this.props;
              for (e = new ut.Event(r), t = s.length; t--;) n = s[t], e[n] = r[n];
              return e.target || (e.target = r.srcElement || $), 3 === e.target.nodeType && (e.target = e.target.parentNode), e.metaKey = !! e.metaKey, i.filter ? i.filter(e, r) : e
          },
          props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
          fixHooks: {},
          keyHooks: {
              props: "char charCode key keyCode".split(" "),
              filter: function(e, t) {
                  return null == e.which && (e.which = null != t.charCode ? t.charCode : t.keyCode), e
              }
          },
          mouseHooks: {
              props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
              filter: function(e, n) {
                  var r, i, s, o = n.button,
                      u = n.fromElement;
                  return null == e.pageX && null != n.clientX && (r = e.target.ownerDocument || $, i = r.documentElement, s = r.body, e.pageX = n.clientX + (i && i.scrollLeft || s && s.scrollLeft || 0) - (i && i.clientLeft || s && s.clientLeft || 0), e.pageY = n.clientY + (i && i.scrollTop || s && s.scrollTop || 0) - (i && i.clientTop || s && s.clientTop || 0)), !e.relatedTarget && u && (e.relatedTarget = u === e.target ? n.toElement : u), e.which || o === t || (e.which = 1 & o ? 1 : 2 & o ? 3 : 4 & o ? 2 : 0), e
              }
          },
          special: {
              load: {
                  noBubble: !0
              },
              click: {
                  trigger: function() {
                      return ut.nodeName(this, "input") && "checkbox" === this.type && this.click ? (this.click(), !1) : t
                  }
              },
              focus: {
                  trigger: function() {
                      if (this !== $.activeElement && this.focus) try {
                          return this.focus(), !1
                      } catch (e) {}
                  },
                  delegateType: "focusin"
              },
              blur: {
                  trigger: function() {
                      return this === $.activeElement && this.blur ? (this.blur(), !1) : t
                  },
                  delegateType: "focusout"
              },
              beforeunload: {
                  postDispatch: function(e) {
                      e.result !== t && (e.originalEvent.returnValue = e.result)
                  }
              }
          },
          simulate: function(e, t, n, r) {
              var i = ut.extend(new ut.Event, n, {
                  type: e,
                  isSimulated: !0,
                  originalEvent: {}
              });
              r ? ut.event.trigger(i, null, t) : ut.event.dispatch.call(t, i), i.isDefaultPrevented() && n.preventDefault()
          }
      }, ut.removeEvent = $.removeEventListener ?
          function(e, t, n) {
              e.removeEventListener && e.removeEventListener(t, n, !1)
          } : function(e, n, r) {
              var i = "on" + n;
              e.detachEvent && (e[i] === t && (e[i] = null), e.detachEvent(i, r))
          }, ut.Event = function(e, n) {
          return this instanceof ut.Event ? (e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || e.returnValue === !1 || e.getPreventDefault && e.getPreventDefault() ? a : f) : this.type = e, n && ut.extend(this, n), this.timeStamp = e && e.timeStamp || ut.now(), this[ut.expando] = !0, t) : new ut.Event(e, n)
      }, ut.Event.prototype = {
          isDefaultPrevented: f,
          isPropagationStopped: f,
          isImmediatePropagationStopped: f,
          preventDefault: function() {
              var e = this.originalEvent;
              this.isDefaultPrevented = a, e && (e.preventDefault ? e.preventDefault() : e.returnValue = !1)
          },
          stopPropagation: function() {
              var e = this.originalEvent;
              this.isPropagationStopped = a, e && (e.stopPropagation && e.stopPropagation(), e.cancelBubble = !0)
          },
          stopImmediatePropagation: function() {
              this.isImmediatePropagationStopped = a, this.stopPropagation()
          }
      }, ut.each({
          mouseenter: "mouseover",
          mouseleave: "mouseout"
      }, function(e, t) {
          ut.event.special[e] = {
              delegateType: t,
              bindType: t,
              handle: function(e) {
                  var n, r = this,
                      i = e.relatedTarget,
                      s = e.handleObj;
                  return (!i || i !== r && !ut.contains(r, i)) && (e.type = s.origType, n = s.handler.apply(this, arguments), e.type = t), n
              }
          }
      }), ut.support.submitBubbles || (ut.event.special.submit = {
          setup: function() {
              return ut.nodeName(this, "form") ? !1 : (ut.event.add(this, "click._submit keypress._submit", function(e) {
                  var n = e.target,
                      r = ut.nodeName(n, "input") || ut.nodeName(n, "button") ? n.form : t;
                  r && !ut._data(r, "submitBubbles") && (ut.event.add(r, "submit._submit", function(e) {
                      e._submit_bubble = !0
                  }), ut._data(r, "submitBubbles", !0))
              }), t)
          },
          postDispatch: function(e) {
              e._submit_bubble && (delete e._submit_bubble, this.parentNode && !e.isTrigger && ut.event.simulate("submit", this.parentNode, e, !0))
          },
          teardown: function() {
              return ut.nodeName(this, "form") ? !1 : (ut.event.remove(this, "._submit"), t)
          }
      }), ut.support.changeBubbles || (ut.event.special.change = {
          setup: function() {
              return Pt.test(this.nodeName) ? (("checkbox" === this.type || "radio" === this.type) && (ut.event.add(this, "propertychange._change", function(e) {
                  "checked" === e.originalEvent.propertyName && (this._just_changed = !0)
              }), ut.event.add(this, "click._change", function(e) {
                  this._just_changed && !e.isTrigger && (this._just_changed = !1), ut.event.simulate("change", this, e, !0)
              })), !1) : (ut.event.add(this, "beforeactivate._change", function(e) {
                  var t = e.target;
                  Pt.test(t.nodeName) && !ut._data(t, "changeBubbles") && (ut.event.add(t, "change._change", function(e) {
                      !this.parentNode || e.isSimulated || e.isTrigger || ut.event.simulate("change", this.parentNode, e, !0)
                  }), ut._data(t, "changeBubbles", !0))
              }), t)
          },
          handle: function(e) {
              var n = e.target;
              return this !== n || e.isSimulated || e.isTrigger || "radio" !== n.type && "checkbox" !== n.type ? e.handleObj.handler.apply(this, arguments) : t
          },
          teardown: function() {
              return ut.event.remove(this, "._change"), !Pt.test(this.nodeName)
          }
      }), ut.support.focusinBubbles || ut.each({
          focus: "focusin",
          blur: "focusout"
      }, function(e, t) {
          var n = 0,
              r = function(e) {
                  ut.event.simulate(t, e.target, ut.event.fix(e), !0)
              };
          ut.event.special[t] = {
              setup: function() {
                  0 === n++ && $.addEventListener(e, r, !0)
              },
              teardown: function() {
                  0 === --n && $.removeEventListener(e, r, !0)
              }
          }
      }), ut.fn.extend({
          on: function(e, n, r, i, s) {
              var o, u;
              if ("object" == typeof e) {
                  "string" != typeof n && (r = r || n, n = t);
                  for (u in e) this.on(u, n, r, e[u], s);
                  return this
              }
              if (null == r && null == i ? (i = n, r = n = t) : null == i && ("string" == typeof n ? (i = r, r = t) : (i = r, r = n, n = t)), i === !1) i = f;
              else if (!i) return this;
              return 1 === s && (o = i, i = function(e) {
                  return ut().off(e), o.apply(this, arguments)
              }, i.guid = o.guid || (o.guid = ut.guid++)), this.each(function() {
                  ut.event.add(this, e, i, r, n)
              })
          },
          one: function(e, t, n, r) {
              return this.on(e, t, n, r, 1)
          },
          off: function(e, n, r) {
              var i, s;
              if (e && e.preventDefault && e.handleObj) return i = e.handleObj, ut(e.delegateTarget).off(i.namespace ? i.origType + "." + i.namespace : i.origType, i.selector, i.handler), this;
              if ("object" == typeof e) {
                  for (s in e) this.off(s, n, e[s]);
                  return this
              }
              return (n === !1 || "function" == typeof n) && (r = n, n = t), r === !1 && (r = f), this.each(function() {
                  ut.event.remove(this, e, r, n)
              })
          },
          bind: function(e, t, n) {
              return this.on(e, null, t, n)
          },
          unbind: function(e, t) {
              return this.off(e, null, t)
          },
          delegate: function(e, t, n, r) {
              return this.on(t, e, n, r)
          },
          undelegate: function(e, t, n) {
              return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n)
          },
          trigger: function(e, t) {
              return this.each(function() {
                  ut.event.trigger(e, t, this)
              })
          },
          triggerHandler: function(e, n) {
              var r = this[0];
              return r ? ut.event.trigger(e, n, r, !0) : t
          },
          hover: function(e, t) {
              return this.mouseenter(e).mouseleave(t || e)
          }
      }), ut.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function(e, t) {
          ut.fn[t] = function(e, n) {
              return arguments.length > 0 ? this.on(t, null, e, n) : this.trigger(t)
          }, Ht.test(t) && (ut.event.fixHooks[t] = ut.event.keyHooks), Bt.test(t) && (ut.event.fixHooks[t] = ut.event.mouseHooks)
      }), function(e, t) {
          function n(e) {
              return dt.test(e + "")
          }
          function r() {
              var e, t = [];
              return e = function(n, r) {
                  return t.push(n += " ") > T.cacheLength && delete e[t.shift()], e[n] = r
              }
          }
          function i(e) {
              return e[I] = !0, e
          }
          function s(e) {
              var t = M.createElement("div");
              try {
                  return e(t)
              } catch (n) {
                  return !1
              } finally {
                  t = null
              }
          }
          function o(e, t, n, r) {
              var i, s, o, u, a, f, l, p, d, v;
              if ((t ? t.ownerDocument || t : q) !== M && O(t), t = t || M, n = n || [], !e || "string" != typeof e) return n;
              if (1 !== (u = t.nodeType) && 9 !== u) return [];
              if (!D && !r) {
                  if (i = vt.exec(e)) if (o = i[1]) {
                      if (9 === u) {
                          if (s = t.getElementById(o), !s || !s.parentNode) return n;
                          if (s.id === o) return n.push(s), n
                      } else if (t.ownerDocument && (s = t.ownerDocument.getElementById(o)) && j(t, s) && s.id === o) return n.push(s), n
                  } else {
                      if (i[2]) return G.apply(n, Y.call(t.getElementsByTagName(e), 0)), n;
                      if ((o = i[3]) && R.getByClassName && t.getElementsByClassName) return G.apply(n, Y.call(t.getElementsByClassName(o), 0)), n
                  }
                  if (R.qsa && !P.test(e)) {
                      if (l = !0, p = I, d = t, v = 9 === u && e, 1 === u && "object" !== t.nodeName.toLowerCase()) {
                          for (f = c(e), (l = t.getAttribute("id")) ? p = l.replace(yt, "\\$&") : t.setAttribute("id", p), p = "[id='" + p + "'] ", a = f.length; a--;) f[a] = p + h(f[a]);
                          d = pt.test(e) && t.parentNode || t, v = f.join(",")
                      }
                      if (v) try {
                          return G.apply(n, Y.call(d.querySelectorAll(v), 0)), n
                      } catch (m) {} finally {
                          l || t.removeAttribute("id")
                      }
                  }
              }
              return w(e.replace(ot, "$1"), t, n, r)
          }
          function u(e, t) {
              for (var n = e && t && e.nextSibling; n; n = n.nextSibling) if (n === t) return -1;
              return e ? 1 : -1
          }
          function a(e) {
              return function(t) {
                  var n = t.nodeName.toLowerCase();
                  return "input" === n && t.type === e
              }
          }
          function f(e) {
              return function(t) {
                  var n = t.nodeName.toLowerCase();
                  return ("input" === n || "button" === n) && t.type === e
              }
          }
          function l(e) {
              return i(function(t) {
                  return t = +t, i(function(n, r) {
                      for (var i, s = e([], n.length, t), o = s.length; o--;) n[i = s[o]] && (n[i] = !(r[i] = n[i]))
                  })
              })
          }
          function c(e, t) {
              var n, r, i, s, u, a, f, l = X[e + " "];
              if (l) return t ? 0 : l.slice(0);
              for (u = e, a = [], f = T.preFilter; u;) {
                  (!n || (r = at.exec(u))) && (r && (u = u.slice(r[0].length) || u), a.push(i = [])), n = !1, (r = ft.exec(u)) && (n = r.shift(), i.push({
                      value: n,
                      type: r[0].replace(ot, " ")
                  }), u = u.slice(n.length));
                  for (s in T.filter)!(r = ht[s].exec(u)) || f[s] && !(r = f[s](r)) || (n = r.shift(), i.push({
                      value: n,
                      type: s,
                      matches: r
                  }), u = u.slice(n.length));
                  if (!n) break
              }
              return t ? u.length : u ? o.error(e) : X(e, a).slice(0)
          }
          function h(e) {
              for (var t = 0, n = e.length, r = ""; n > t; t++) r += e[t].value;
              return r
          }
          function p(e, t, n) {
              var r = t.dir,
                  i = n && "parentNode" === t.dir,
                  s = z++;
              return t.first ?
                  function(t, n, s) {
                      for (; t = t[r];) if (1 === t.nodeType || i) return e(t, n, s)
                  } : function(t, n, o) {
                      var u, a, f, l = U + " " + s;
                      if (o) {
                          for (; t = t[r];) if ((1 === t.nodeType || i) && e(t, n, o)) return !0
                      } else for (; t = t[r];) if (1 === t.nodeType || i) if (f = t[I] || (t[I] = {}), (a = f[r]) && a[0] === l) {
                          if ((u = a[1]) === !0 || u === x) return u === !0
                      } else if (a = f[r] = [l], a[1] = e(t, n, o) || x, a[1] === !0) return !0
                  }
          }
          function d(e) {
              return e.length > 1 ?
                  function(t, n, r) {
                      for (var i = e.length; i--;) if (!e[i](t, n, r)) return !1;
                      return !0
                  } : e[0]
          }
          function v(e, t, n, r, i) {
              for (var s, o = [], u = 0, a = e.length, f = null != t; a > u; u++)(s = e[u]) && (!n || n(s, r, i)) && (o.push(s), f && t.push(u));
              return o
          }
          function m(e, t, n, r, s, o) {
              return r && !r[I] && (r = m(r)), s && !s[I] && (s = m(s, o)), i(function(i, o, u, a) {
                  var f, l, c, h = [],
                      p = [],
                      d = o.length,
                      m = i || b(t || "*", u.nodeType ? [u] : u, []),
                      g = !e || !i && t ? m : v(m, h, e, u, a),
                      y = n ? s || (i ? e : d || r) ? [] : o : g;
                  if (n && n(g, y, u, a), r) for (f = v(y, p), r(f, [], u, a), l = f.length; l--;)(c = f[l]) && (y[p[l]] = !(g[p[l]] = c));
                  if (i) {
                      if (s || e) {
                          if (s) {
                              for (f = [], l = y.length; l--;)(c = y[l]) && f.push(g[l] = c);
                              s(null, y = [], f, a)
                          }
                          for (l = y.length; l--;)(c = y[l]) && (f = s ? Z.call(i, c) : h[l]) > -1 && (i[f] = !(o[f] = c))
                      }
                  } else y = v(y === o ? y.splice(d, y.length) : y), s ? s(null, o, y, a) : G.apply(o, y)
              })
          }
          function g(e) {
              for (var t, n, r, i = e.length, s = T.relative[e[0].type], o = s || T.relative[" "], u = s ? 1 : 0, a = p(function(e) {
                  return e === t
              }, o, !0), f = p(function(e) {
                  return Z.call(t, e) > -1
              }, o, !0), l = [function(e, n, r) {
                  return !s && (r || n !== A) || ((t = n).nodeType ? a(e, n, r) : f(e, n, r))
              }]; i > u; u++) if (n = T.relative[e[u].type]) l = [p(d(l), n)];
              else {
                  if (n = T.filter[e[u].type].apply(null, e[u].matches), n[I]) {
                      for (r = ++u; i > r && !T.relative[e[r].type]; r++);
                      return m(u > 1 && d(l), u > 1 && h(e.slice(0, u - 1)).replace(ot, "$1"), n, r > u && g(e.slice(u, r)), i > r && g(e = e.slice(r)), i > r && h(e))
                  }
                  l.push(n)
              }
              return d(l)
          }
          function y(e, t) {
              var n = 0,
                  r = t.length > 0,
                  s = e.length > 0,
                  u = function(i, u, a, f, l) {
                      var c, h, p, d = [],
                          m = 0,
                          g = "0",
                          y = i && [],
                          b = null != l,
                          w = A,
                          E = i || s && T.find.TAG("*", l && u.parentNode || u),
                          S = U += null == w ? 1 : Math.E;
                      for (b && (A = u !== M && u, x = n); null != (c = E[g]); g++) {
                          if (s && c) {
                              for (h = 0; p = e[h]; h++) if (p(c, u, a)) {
                                  f.push(c);
                                  break
                              }
                              b && (U = S, x = ++n)
                          }
                          r && ((c = !p && c) && m--, i && y.push(c))
                      }
                      if (m += g, r && g !== m) {
                          for (h = 0; p = t[h]; h++) p(y, d, u, a);
                          if (i) {
                              if (m > 0) for (; g--;) y[g] || d[g] || (d[g] = Q.call(f));
                              d = v(d)
                          }
                          G.apply(f, d), b && !i && d.length > 0 && m + t.length > 1 && o.uniqueSort(f)
                      }
                      return b && (U = S, A = w), y
                  };
              return r ? i(u) : u
          }
          function b(e, t, n) {
              for (var r = 0, i = t.length; i > r; r++) o(e, t[r], n);
              return n
          }
          function w(e, t, n, r) {
              var i, s, o, u, a, f = c(e);
              if (!r && 1 === f.length) {
                  if (s = f[0] = f[0].slice(0), s.length > 2 && "ID" === (o = s[0]).type && 9 === t.nodeType && !D && T.relative[s[1].type]) {
                      if (t = T.find.ID(o.matches[0].replace(wt, Et), t)[0], !t) return n;
                      e = e.slice(s.shift().value.length)
                  }
                  for (i = ht.needsContext.test(e) ? -1 : s.length - 1; i >= 0 && (o = s[i], !T.relative[u = o.type]); i--) if ((a = T.find[u]) && (r = a(o.matches[0].replace(wt, Et), pt.test(s[0].type) && t.parentNode || t))) {
                      if (s.splice(i, 1), e = r.length && h(s), !e) return G.apply(n, Y.call(r, 0)), n;
                      break
                  }
              }
              return k(e, f)(r, t, D, n, pt.test(e)), n
          }
          function E() {}
          var S, x, T, N, C, k, L, A, O, M, _, D, P, H, B, j, F, I = "sizzle" + -(new Date),
              q = e.document,
              R = {},
              U = 0,
              z = 0,
              W = r(),
              X = r(),
              V = r(),
              $ = typeof t,
              J = 1 << 31,
              K = [],
              Q = K.pop,
              G = K.push,
              Y = K.slice,
              Z = K.indexOf ||
                  function(e) {
                      for (var t = 0, n = this.length; n > t; t++) if (this[t] === e) return t;
                      return -1
                  }, et = "[\\x20\\t\\r\\n\\f]", tt = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", nt = tt.replace("w", "w#"), rt = "([*^$|!~]?=)", it = "\\[" + et + "*(" + tt + ")" + et + "*(?:" + rt + et + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + nt + ")|)|)" + et + "*\\]", st = ":(" + tt + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + it.replace(3, 8) + ")*)|.*)\\)|)", ot = RegExp("^" + et + "+|((?:^|[^\\\\])(?:\\\\.)*)" + et + "+$", "g"), at = RegExp("^" + et + "*," + et + "*"), ft = RegExp("^" + et + "*([\\x20\\t\\r\\n\\f>+~])" + et + "*"), lt = RegExp(st), ct = RegExp("^" + nt + "$"), ht = {
                  ID: RegExp("^#(" + tt + ")"),
                  CLASS: RegExp("^\\.(" + tt + ")"),
                  NAME: RegExp("^\\[name=['\"]?(" + tt + ")['\"]?\\]"),
                  TAG: RegExp("^(" + tt.replace("w", "w*") + ")"),
                  ATTR: RegExp("^" + it),
                  PSEUDO: RegExp("^" + st),
                  CHILD: RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + et + "*(even|odd|(([+-]|)(\\d*)n|)" + et + "*(?:([+-]|)" + et + "*(\\d+)|))" + et + "*\\)|)", "i"),
                  needsContext: RegExp("^" + et + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + et + "*((?:-\\d)?\\d*)" + et + "*\\)|)(?=[^-]|$)", "i")
              }, pt = /[\x20\t\r\n\f]*[+~]/, dt = /\{\s*\[native code\]\s*\}/, vt = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, mt = /^(?:input|select|textarea|button)$/i, gt = /^h\d$/i, yt = /'|\\/g, bt = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, wt = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g, Et = function(e, t) {
                  var n = "0x" + t - 65536;
                  return n !== n ? t : 0 > n ? String.fromCharCode(n + 65536) : String.fromCharCode(55296 | n >> 10, 56320 | 1023 & n)
              };
          try {
              Y.call(_.childNodes, 0)[0].nodeType
          } catch (St) {
              Y = function(e) {
                  for (var t, n = []; t = this[e]; e++) n.push(t);
                  return n
              }
          }
          C = o.isXML = function(e) {
              var t = e && (e.ownerDocument || e).documentElement;
              return t ? "HTML" !== t.nodeName : !1
          }, O = o.setDocument = function(e) {
              var r = e ? e.ownerDocument || e : q;
              return r !== M && 9 === r.nodeType && r.documentElement ? (M = r, _ = r.documentElement, D = C(r), R.tagNameNoComments = s(function(e) {
                  return e.appendChild(r.createComment("")), !e.getElementsByTagName("*").length
              }), R.attributes = s(function(e) {
                  e.innerHTML = "<select></select>";
                  var t = typeof e.lastChild.getAttribute("multiple");
                  return "boolean" !== t && "string" !== t
              }), R.getByClassName = s(function(e) {
                  return e.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>", e.getElementsByClassName && e.getElementsByClassName("e").length ? (e.lastChild.className = "e", 2 === e.getElementsByClassName("e").length) : !1
              }), R.getByName = s(function(e) {
                  e.id = I + 0, e.innerHTML = "<a name='" + I + "'></a><div name='" + I + "'></div>", _.insertBefore(e, _.firstChild);
                  var t = r.getElementsByName && r.getElementsByName(I).length === 2 + r.getElementsByName(I + 0).length;
                  return R.getIdNotName = !r.getElementById(I), _.removeChild(e), t
              }), T.attrHandle = s(function(e) {
                  return e.innerHTML = "<a href='#'></a>", e.firstChild && typeof e.firstChild.getAttribute !== $ && "#" === e.firstChild.getAttribute("href")
              }) ? {} : {
                  href: function(e) {
                      return e.getAttribute("href", 2)
                  },
                  type: function(e) {
                      return e.getAttribute("type")
                  }
              }, R.getIdNotName ? (T.find.ID = function(e, t) {
                  if (typeof t.getElementById !== $ && !D) {
                      var n = t.getElementById(e);
                      return n && n.parentNode ? [n] : []
                  }
              }, T.filter.ID = function(e) {
                  var t = e.replace(wt, Et);
                  return function(e) {
                      return e.getAttribute("id") === t
                  }
              }) : (T.find.ID = function(e, n) {
                  if (typeof n.getElementById !== $ && !D) {
                      var r = n.getElementById(e);
                      return r ? r.id === e || typeof r.getAttributeNode !== $ && r.getAttributeNode("id").value === e ? [r] : t : []
                  }
              }, T.filter.ID = function(e) {
                  var t = e.replace(wt, Et);
                  return function(e) {
                      var n = typeof e.getAttributeNode !== $ && e.getAttributeNode("id");
                      return n && n.value === t
                  }
              }), T.find.TAG = R.tagNameNoComments ?
                  function(e, n) {
                      return typeof n.getElementsByTagName !== $ ? n.getElementsByTagName(e) : t
                  } : function(e, t) {
                      var n, r = [],
                          i = 0,
                          s = t.getElementsByTagName(e);
                      if ("*" === e) {
                          for (; n = s[i]; i++) 1 === n.nodeType && r.push(n);
                          return r
                      }
                      return s
                  }, T.find.NAME = R.getByName &&
                  function(e, n) {
                      return typeof n.getElementsByName !== $ ? n.getElementsByName(name) : t
                  }, T.find.CLASS = R.getByClassName &&
                  function(e, n) {
                      return typeof n.getElementsByClassName === $ || D ? t : n.getElementsByClassName(e)
                  }, H = [], P = [":focus"], (R.qsa = n(r.querySelectorAll)) && (s(function(e) {
                  e.innerHTML = "<select><option selected=''></option></select>", e.querySelectorAll("[selected]").length || P.push("\\[" + et + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)"), e.querySelectorAll(":checked").length || P.push(":checked")
              }), s(function(e) {
                  e.innerHTML = "<input type='hidden' i=''/>", e.querySelectorAll("[i^='']").length && P.push("[*^$]=" + et + "*(?:\"\"|'')"), e.querySelectorAll(":enabled").length || P.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), P.push(",.*:")
              })), (R.matchesSelector = n(B = _.matchesSelector || _.mozMatchesSelector || _.webkitMatchesSelector || _.oMatchesSelector || _.msMatchesSelector)) && s(function(e) {
                  R.disconnectedMatch = B.call(e, "div"), B.call(e, "[s!='']:x"), H.push("!=", st)
              }), P = RegExp(P.join("|")), H = RegExp(H.join("|")), j = n(_.contains) || _.compareDocumentPosition ?
                  function(e, t) {
                      var n = 9 === e.nodeType ? e.documentElement : e,
                          r = t && t.parentNode;
                      return e === r || !! r && 1 === r.nodeType && !! (n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r))
                  } : function(e, t) {
                      if (t) for (; t = t.parentNode;) if (t === e) return !0;
                      return !1
                  }, F = _.compareDocumentPosition ?
                  function(e, t) {
                      var n;
                      return e === t ? (L = !0, 0) : (n = t.compareDocumentPosition && e.compareDocumentPosition && e.compareDocumentPosition(t)) ? 1 & n || e.parentNode && 11 === e.parentNode.nodeType ? e === r || j(q, e) ? -1 : t === r || j(q, t) ? 1 : 0 : 4 & n ? -1 : 1 : e.compareDocumentPosition ? -1 : 1
                  } : function(e, t) {
                      var n, i = 0,
                          s = e.parentNode,
                          o = t.parentNode,
                          a = [e],
                          f = [t];
                      if (e === t) return L = !0, 0;
                      if (e.sourceIndex && t.sourceIndex) return (~t.sourceIndex || J) - (j(q, e) && ~e.sourceIndex || J);
                      if (!s || !o) return e === r ? -1 : t === r ? 1 : s ? -1 : o ? 1 : 0;
                      if (s === o) return u(e, t);
                      for (n = e; n = n.parentNode;) a.unshift(n);
                      for (n = t; n = n.parentNode;) f.unshift(n);
                      for (; a[i] === f[i];) i++;
                      return i ? u(a[i], f[i]) : a[i] === q ? -1 : f[i] === q ? 1 : 0
                  }, L = !1, [0, 0].sort(F), R.detectDuplicates = L, M) : M
          }, o.matches = function(e, t) {
              return o(e, null, null, t)
          }, o.matchesSelector = function(e, t) {
              if ((e.ownerDocument || e) !== M && O(e), t = t.replace(bt, "='$1']"), !(!R.matchesSelector || D || H && H.test(t) || P.test(t))) try {
                  var n = B.call(e, t);
                  if (n || R.disconnectedMatch || e.document && 11 !== e.document.nodeType) return n
              } catch (r) {}
              return o(t, M, null, [e]).length > 0
          }, o.contains = function(e, t) {
              return (e.ownerDocument || e) !== M && O(e), j(e, t)
          }, o.attr = function(e, t) {
              var n;
              return (e.ownerDocument || e) !== M && O(e), D || (t = t.toLowerCase()), (n = T.attrHandle[t]) ? n(e) : D || R.attributes ? e.getAttribute(t) : ((n = e.getAttributeNode(t)) || e.getAttribute(t)) && e[t] === !0 ? t : n && n.specified ? n.value : null
          }, o.error = function(e) {
              throw Error("Syntax error, unrecognized expression: " + e)
          }, o.uniqueSort = function(e) {
              var t, n = [],
                  r = 1,
                  i = 0;
              if (L = !R.detectDuplicates, e.sort(F), L) {
                  for (; t = e[r]; r++) t === e[r - 1] && (i = n.push(r));
                  for (; i--;) e.splice(n[i], 1)
              }
              return e
          }, N = o.getText = function(e) {
              var t, n = "",
                  r = 0,
                  i = e.nodeType;
              if (i) {
                  if (1 === i || 9 === i || 11 === i) {
                      if ("string" == typeof e.textContent) return e.textContent;
                      for (e = e.firstChild; e; e = e.nextSibling) n += N(e)
                  } else if (3 === i || 4 === i) return e.nodeValue
              } else for (; t = e[r]; r++) n += N(t);
              return n
          }, T = o.selectors = {
              cacheLength: 50,
              createPseudo: i,
              match: ht,
              find: {},
              relative: {
                  ">": {
                      dir: "parentNode",
                      first: !0
                  },
                  " ": {
                      dir: "parentNode"
                  },
                  "+": {
                      dir: "previousSibling",
                      first: !0
                  },
                  "~": {
                      dir: "previousSibling"
                  }
              },
              preFilter: {
                  ATTR: function(e) {
                      return e[1] = e[1].replace(wt, Et), e[3] = (e[4] || e[5] || "").replace(wt, Et), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4)
                  },
                  CHILD: function(e) {
                      return e[1] = e[1].toLowerCase(), "nth" === e[1].slice(0, 3) ? (e[3] || o.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] && o.error(e[0]), e
                  },
                  PSEUDO: function(e) {
                      var t, n = !e[5] && e[2];
                      return ht.CHILD.test(e[0]) ? null : (e[4] ? e[2] = e[4] : n && lt.test(n) && (t = c(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))
                  }
              },
              filter: {
                  TAG: function(e) {
                      return "*" === e ?
                          function() {
                              return !0
                          } : (e = e.replace(wt, Et).toLowerCase(), function(t) {
                              return t.nodeName && t.nodeName.toLowerCase() === e
                          })
                  },
                  CLASS: function(e) {
                      var t = W[e + " "];
                      return t || (t = RegExp("(^|" + et + ")" + e + "(" + et + "|$)")) && W(e, function(e) {
                          return t.test(e.className || typeof e.getAttribute !== $ && e.getAttribute("class") || "")
                      })
                  },
                  ATTR: function(e, t, n) {
                      return function(r) {
                          var i = o.attr(r, e);
                          return null == i ? "!=" === t : t ? (i += "", "=" === t ? i === n : "!=" === t ? i !== n : "^=" === t ? n && 0 === i.indexOf(n) : "*=" === t ? n && i.indexOf(n) > -1 : "$=" === t ? n && i.substr(i.length - n.length) === n : "~=" === t ? (" " + i + " ").indexOf(n) > -1 : "|=" === t ? i === n || i.substr(0, n.length + 1) === n + "-" : !1) : !0
                      }
                  },
                  CHILD: function(e, t, n, r, i) {
                      var s = "nth" !== e.slice(0, 3),
                          o = "last" !== e.slice(-4),
                          u = "of-type" === t;
                      return 1 === r && 0 === i ?
                          function(e) {
                              return !!e.parentNode
                          } : function(t, n, a) {
                              var f, l, c, h, p, d, v = s !== o ? "nextSibling" : "previousSibling",
                                  m = t.parentNode,
                                  g = u && t.nodeName.toLowerCase(),
                                  y = !a && !u;
                              if (m) {
                                  if (s) {
                                      for (; v;) {
                                          for (c = t; c = c[v];) if (u ? c.nodeName.toLowerCase() === g : 1 === c.nodeType) return !1;
                                          d = v = "only" === e && !d && "nextSibling"
                                      }
                                      return !0
                                  }
                                  if (d = [o ? m.firstChild : m.lastChild], o && y) {
                                      for (l = m[I] || (m[I] = {}), f = l[e] || [], p = f[0] === U && f[1], h = f[0] === U && f[2], c = p && m.childNodes[p]; c = ++p && c && c[v] || (h = p = 0) || d.pop();) if (1 === c.nodeType && ++h && c === t) {
                                          l[e] = [U, p, h];
                                          break
                                      }
                                  } else if (y && (f = (t[I] || (t[I] = {}))[e]) && f[0] === U) h = f[1];
                                  else for (;
                                          (c = ++p && c && c[v] || (h = p = 0) || d.pop()) && ((u ? c.nodeName.toLowerCase() !== g : 1 !== c.nodeType) || !++h || (y && ((c[I] || (c[I] = {}))[e] = [U, h]), c !== t)););
                                  return h -= i, h === r || 0 === h % r && h / r >= 0
                              }
                          }
                  },
                  PSEUDO: function(e, t) {
                      var n, r = T.pseudos[e] || T.setFilters[e.toLowerCase()] || o.error("unsupported pseudo: " + e);
                      return r[I] ? r(t) : r.length > 1 ? (n = [e, e, "", t], T.setFilters.hasOwnProperty(e.toLowerCase()) ? i(function(e, n) {
                          for (var i, s = r(e, t), o = s.length; o--;) i = Z.call(e, s[o]), e[i] = !(n[i] = s[o])
                      }) : function(e) {
                          return r(e, 0, n)
                      }) : r
                  }
              },
              pseudos: {
                  not: i(function(e) {
                      var t = [],
                          n = [],
                          r = k(e.replace(ot, "$1"));
                      return r[I] ? i(function(e, t, n, i) {
                          for (var s, o = r(e, null, i, []), u = e.length; u--;)(s = o[u]) && (e[u] = !(t[u] = s))
                      }) : function(e, i, s) {
                          return t[0] = e, r(t, null, s, n), !n.pop()
                      }
                  }),
                  has: i(function(e) {
                      return function(t) {
                          return o(e, t).length > 0
                      }
                  }),
                  contains: i(function(e) {
                      return function(t) {
                          return (t.textContent || t.innerText || N(t)).indexOf(e) > -1
                      }
                  }),
                  lang: i(function(e) {
                      return ct.test(e || "") || o.error("unsupported lang: " + e), e = e.replace(wt, Et).toLowerCase(), function(t) {
                          var n;
                          do
                              if (n = D ? t.getAttribute("xml:lang") || t.getAttribute("lang") : t.lang) return n = n.toLowerCase(), n === e || 0 === n.indexOf(e + "-");
                          while ((t = t.parentNode) && 1 === t.nodeType);
                          return !1
                      }
                  }),
                  target: function(t) {
                      var n = e.location && e.location.hash;
                      return n && n.slice(1) === t.id
                  },
                  root: function(e) {
                      return e === _
                  },
                  focus: function(e) {
                      return e === M.activeElement && (!M.hasFocus || M.hasFocus()) && !! (e.type || e.href || ~e.tabIndex)
                  },
                  enabled: function(e) {
                      return e.disabled === !1
                  },
                  disabled: function(e) {
                      return e.disabled === !0
                  },
                  checked: function(e) {
                      var t = e.nodeName.toLowerCase();
                      return "input" === t && !! e.checked || "option" === t && !! e.selected
                  },
                  selected: function(e) {
                      return e.parentNode && e.parentNode.selectedIndex, e.selected === !0
                  },
                  empty: function(e) {
                      for (e = e.firstChild; e; e = e.nextSibling) if (e.nodeName > "@" || 3 === e.nodeType || 4 === e.nodeType) return !1;
                      return !0
                  },
                  parent: function(e) {
                      return !T.pseudos.empty(e)
                  },
                  header: function(e) {
                      return gt.test(e.nodeName)
                  },
                  input: function(e) {
                      return mt.test(e.nodeName)
                  },
                  button: function(e) {
                      var t = e.nodeName.toLowerCase();
                      return "input" === t && "button" === e.type || "button" === t
                  },
                  text: function(e) {
                      var t;
                      return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || t.toLowerCase() === e.type)
                  },
                  first: l(function() {
                      return [0]
                  }),
                  last: l(function(e, t) {
                      return [t - 1]
                  }),
                  eq: l(function(e, t, n) {
                      return [0 > n ? n + t : n]
                  }),
                  even: l(function(e, t) {
                      for (var n = 0; t > n; n += 2) e.push(n);
                      return e
                  }),
                  odd: l(function(e, t) {
                      for (var n = 1; t > n; n += 2) e.push(n);
                      return e
                  }),
                  lt: l(function(e, t, n) {
                      for (var r = 0 > n ? n + t : n; --r >= 0;) e.push(r);
                      return e
                  }),
                  gt: l(function(e, t, n) {
                      for (var r = 0 > n ? n + t : n; t > ++r;) e.push(r);
                      return e
                  })
              }
          };
          for (S in {
              radio: !0,
              checkbox: !0,
              file: !0,
              password: !0,
              image: !0
          }) T.pseudos[S] = a(S);
          for (S in {
              submit: !0,
              reset: !0
          }) T.pseudos[S] = f(S);
          k = o.compile = function(e, t) {
              var n, r = [],
                  i = [],
                  s = V[e + " "];
              if (!s) {
                  for (t || (t = c(e)), n = t.length; n--;) s = g(t[n]), s[I] ? r.push(s) : i.push(s);
                  s = V(e, y(i, r))
              }
              return s
          }, T.pseudos.nth = T.pseudos.eq, T.filters = E.prototype = T.pseudos, T.setFilters = new E, O(), o.attr = ut.attr, ut.find = o, ut.expr = o.selectors, ut.expr[":"] = ut.expr.pseudos, ut.unique = o.uniqueSort, ut.text = o.getText, ut.isXMLDoc = o.isXML, ut.contains = o.contains
      }(e);
      var It = /Until$/,
          qt = /^(?:parents|prev(?:Until|All))/,
          Rt = /^.[^:#\[\.,]*$/,
          Ut = ut.expr.match.needsContext,
          zt = {
              children: !0,
              contents: !0,
              next: !0,
              prev: !0
          };
      ut.fn.extend({
          find: function(e) {
              var t, n, r;
              if ("string" != typeof e) return r = this, this.pushStack(ut(e).filter(function() {
                  for (t = 0; r.length > t; t++) if (ut.contains(r[t], this)) return !0
              }));
              for (n = [], t = 0; this.length > t; t++) ut.find(e, this[t], n);
              return n = this.pushStack(ut.unique(n)), n.selector = (this.selector ? this.selector + " " : "") + e, n
          },
          has: function(e) {
              var t, n = ut(e, this),
                  r = n.length;
              return this.filter(function() {
                  for (t = 0; r > t; t++) if (ut.contains(this, n[t])) return !0
              })
          },
          not: function(e) {
              return this.pushStack(c(this, e, !1))
          },
          filter: function(e) {
              return this.pushStack(c(this, e, !0))
          },
          is: function(e) {
              return !!e && ("string" == typeof e ? Ut.test(e) ? ut(e, this.context).index(this[0]) >= 0 : ut.filter(e, this).length > 0 : this.filter(e).length > 0)
          },
          closest: function(e, t) {
              for (var n, r = 0, i = this.length, s = [], o = Ut.test(e) || "string" != typeof e ? ut(e, t || this.context) : 0; i > r; r++) for (n = this[r]; n && n.ownerDocument && n !== t && 11 !== n.nodeType;) {
                  if (o ? o.index(n) > -1 : ut.find.matchesSelector(n, e)) {
                      s.push(n);
                      break
                  }
                  n = n.parentNode
              }
              return this.pushStack(s.length > 1 ? ut.unique(s) : s)
          },
          index: function(e) {
              return e ? "string" == typeof e ? ut.inArray(this[0], ut(e)) : ut.inArray(e.jquery ? e[0] : e, this) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
          },
          add: function(e, t) {
              var n = "string" == typeof e ? ut(e, t) : ut.makeArray(e && e.nodeType ? [e] : e),
                  r = ut.merge(this.get(), n);
              return this.pushStack(ut.unique(r))
          },
          addBack: function(e) {
              return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
          }
      }), ut.fn.andSelf = ut.fn.addBack, ut.each({
          parent: function(e) {
              var t = e.parentNode;
              return t && 11 !== t.nodeType ? t : null
          },
          parents: function(e) {
              return ut.dir(e, "parentNode")
          },
          parentsUntil: function(e, t, n) {
              return ut.dir(e, "parentNode", n)
          },
          next: function(e) {
              return l(e, "nextSibling")
          },
          prev: function(e) {
              return l(e, "previousSibling")
          },
          nextAll: function(e) {
              return ut.dir(e, "nextSibling")
          },
          prevAll: function(e) {
              return ut.dir(e, "previousSibling")
          },
          nextUntil: function(e, t, n) {
              return ut.dir(e, "nextSibling", n)
          },
          prevUntil: function(e, t, n) {
              return ut.dir(e, "previousSibling", n)
          },
          siblings: function(e) {
              return ut.sibling((e.parentNode || {}).firstChild, e)
          },
          children: function(e) {
              return ut.sibling(e.firstChild)
          },
          contents: function(e) {
              return ut.nodeName(e, "iframe") ? e.contentDocument || e.contentWindow.document : ut.merge([], e.childNodes)
          }
      }, function(e, t) {
          ut.fn[e] = function(n, r) {
              var i = ut.map(this, t, n);
              return It.test(e) || (r = n), r && "string" == typeof r && (i = ut.filter(r, i)), i = this.length > 1 && !zt[e] ? ut.unique(i) : i, this.length > 1 && qt.test(e) && (i = i.reverse()), this.pushStack(i)
          }
      }), ut.extend({
          filter: function(e, t, n) {
              return n && (e = ":not(" + e + ")"), 1 === t.length ? ut.find.matchesSelector(t[0], e) ? [t[0]] : [] : ut.find.matches(e, t)
          },
          dir: function(e, n, r) {
              for (var i = [], s = e[n]; s && 9 !== s.nodeType && (r === t || 1 !== s.nodeType || !ut(s).is(r));) 1 === s.nodeType && i.push(s), s = s[n];
              return i
          },
          sibling: function(e, t) {
              for (var n = []; e; e = e.nextSibling) 1 === e.nodeType && e !== t && n.push(e);
              return n
          }
      });
      var Wt = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
          Xt = / jQuery\d+="(?:null|\d+)"/g,
          Vt = RegExp("<(?:" + Wt + ")[\\s/>]", "i"),
          $t = /^\s+/,
          Jt = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
          Kt = /<([\w:]+)/,
          Qt = /<tbody/i,
          Gt = /<|&#?\w+;/,
          Yt = /<(?:script|style|link)/i,
          Zt = /^(?:checkbox|radio)$/i,
          en = /checked\s*(?:[^=]|=\s*.checked.)/i,
          tn = /^$|\/(?:java|ecma)script/i,
          nn = /^true\/(.*)/,
          rn = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
          sn = {
              option: [1, "<select multiple='multiple'>", "</select>"],
              legend: [1, "<fieldset>", "</fieldset>"],
              area: [1, "<map>", "</map>"],
              param: [1, "<object>", "</object>"],
              thead: [1, "<table>", "</table>"],
              tr: [2, "<table><tbody>", "</tbody></table>"],
              col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
              td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
              _default: ut.support.htmlSerialize ? [0, "", ""] : [1, "X<div>", "</div>"]
          },
          on = h($),
          un = on.appendChild($.createElement("div"));
      sn.optgroup = sn.option, sn.tbody = sn.tfoot = sn.colgroup = sn.caption = sn.thead, sn.th = sn.td, ut.fn.extend({
          text: function(e) {
              return ut.access(this, function(e) {
                  return e === t ? ut.text(this) : this.empty().append((this[0] && this[0].ownerDocument || $).createTextNode(e))
              }, null, e, arguments.length)
          },
          wrapAll: function(e) {
              if (ut.isFunction(e)) return this.each(function(t) {
                  ut(this).wrapAll(e.call(this, t))
              });
              if (this[0]) {
                  var t = ut(e, this[0].ownerDocument).eq(0).clone(!0);
                  this[0].parentNode && t.insertBefore(this[0]), t.map(function() {
                      for (var e = this; e.firstChild && 1 === e.firstChild.nodeType;) e = e.firstChild;
                      return e
                  }).append(this)
              }
              return this
          },
          wrapInner: function(e) {
              return ut.isFunction(e) ? this.each(function(t) {
                  ut(this).wrapInner(e.call(this, t))
              }) : this.each(function() {
                  var t = ut(this),
                      n = t.contents();
                  n.length ? n.wrapAll(e) : t.append(e)
              })
          },
          wrap: function(e) {
              var t = ut.isFunction(e);
              return this.each(function(n) {
                  ut(this).wrapAll(t ? e.call(this, n) : e)
              })
          },
          unwrap: function() {
              return this.parent().each(function() {
                  ut.nodeName(this, "body") || ut(this).replaceWith(this.childNodes)
              }).end()
          },
          append: function() {
              return this.domManip(arguments, !0, function(e) {
                  (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) && this.appendChild(e)
              })
          },
          prepend: function() {
              return this.domManip(arguments, !0, function(e) {
                  (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) && this.insertBefore(e, this.firstChild)
              })
          },
          before: function() {
              return this.domManip(arguments, !1, function(e) {
                  this.parentNode && this.parentNode.insertBefore(e, this)
              })
          },
          after: function() {
              return this.domManip(arguments, !1, function(e) {
                  this.parentNode && this.parentNode.insertBefore(e, this.nextSibling)
              })
          },
          remove: function(e, t) {
              for (var n, r = 0; null != (n = this[r]); r++)(!e || ut.filter(e, [n]).length > 0) && (t || 1 !== n.nodeType || ut.cleanData(b(n)), n.parentNode && (t && ut.contains(n.ownerDocument, n) && m(b(n, "script")), n.parentNode.removeChild(n)));
              return this
          },
          empty: function() {
              for (var e, t = 0; null != (e = this[t]); t++) {
                  for (1 === e.nodeType && ut.cleanData(b(e, !1)); e.firstChild;) e.removeChild(e.firstChild);
                  e.options && ut.nodeName(e, "select") && (e.options.length = 0)
              }
              return this
          },
          clone: function(e, t) {
              return e = null == e ? !1 : e, t = null == t ? e : t, this.map(function() {
                  return ut.clone(this, e, t)
              })
          },
          html: function(e) {
              return ut.access(this, function(e) {
                  var n = this[0] || {},
                      r = 0,
                      i = this.length;
                  if (e === t) return 1 === n.nodeType ? n.innerHTML.replace(Xt, "") : t;
                  if (!("string" != typeof e || Yt.test(e) || !ut.support.htmlSerialize && Vt.test(e) || !ut.support.leadingWhitespace && $t.test(e) || sn[(Kt.exec(e) || ["", ""])[1].toLowerCase()])) {
                      e = e.replace(Jt, "<$1></$2>");
                      try {
                          for (; i > r; r++) n = this[r] || {}, 1 === n.nodeType && (ut.cleanData(b(n, !1)), n.innerHTML = e);
                          n = 0
                      } catch (s) {}
                  }
                  n && this.empty().append(e)
              }, null, e, arguments.length)
          },
          replaceWith: function(e) {
              var t = ut.isFunction(e);
              return t || "string" == typeof e || (e = ut(e).not(this).detach()), this.domManip([e], !0, function(e) {
                  var t = this.nextSibling,
                      n = this.parentNode;
                  (n && 1 === this.nodeType || 11 === this.nodeType) && (ut(this).remove(), t ? t.parentNode.insertBefore(e, t) : n.appendChild(e))
              })
          },
          detach: function(e) {
              return this.remove(e, !0)
          },
          domManip: function(e, n, r) {
              e = et.apply([], e);
              var i, s, o, u, a, f, l = 0,
                  c = this.length,
                  h = this,
                  m = c - 1,
                  g = e[0],
                  y = ut.isFunction(g);
              if (y || !(1 >= c || "string" != typeof g || ut.support.checkClone) && en.test(g)) return this.each(function(i) {
                  var s = h.eq(i);
                  y && (e[0] = g.call(this, i, n ? s.html() : t)), s.domManip(e, n, r)
              });
              if (c && (i = ut.buildFragment(e, this[0].ownerDocument, !1, this), s = i.firstChild, 1 === i.childNodes.length && (i = s), s)) {
                  for (n = n && ut.nodeName(s, "tr"), o = ut.map(b(i, "script"), d), u = o.length; c > l; l++) a = i, l !== m && (a = ut.clone(a, !0, !0), u && ut.merge(o, b(a, "script"))), r.call(n && ut.nodeName(this[l], "table") ? p(this[l], "tbody") : this[l], a, l);
                  if (u) for (f = o[o.length - 1].ownerDocument, ut.map(o, v), l = 0; u > l; l++) a = o[l], tn.test(a.type || "") && !ut._data(a, "globalEval") && ut.contains(f, a) && (a.src ? ut.ajax({
                      url: a.src,
                      type: "GET",
                      dataType: "script",
                      async: !1,
                      global: !1,
                      "throws": !0
                  }) : ut.globalEval((a.text || a.textContent || a.innerHTML || "").replace(rn, "")));
                  i = s = null
              }
              return this
          }
      }), ut.each({
          appendTo: "append",
          prependTo: "prepend",
          insertBefore: "before",
          insertAfter: "after",
          replaceAll: "replaceWith"
      }, function(e, t) {
          ut.fn[e] = function(e) {
              for (var n, r = 0, i = [], s = ut(e), o = s.length - 1; o >= r; r++) n = r === o ? this : this.clone(!0), ut(s[r])[t](n), tt.apply(i, n.get());
              return this.pushStack(i)
          }
      }), ut.extend({
          clone: function(e, t, n) {
              var r, i, s, o, u, a = ut.contains(e.ownerDocument, e);
              if (ut.support.html5Clone || ut.isXMLDoc(e) || !Vt.test("<" + e.nodeName + ">") ? u = e.cloneNode(!0) : (un.innerHTML = e.outerHTML, un.removeChild(u = un.firstChild)), !(ut.support.noCloneEvent && ut.support.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || ut.isXMLDoc(e))) for (r = b(u), i = b(e), o = 0; null != (s = i[o]); ++o) r[o] && y(s, r[o]);
              if (t) if (n) for (i = i || b(e), r = r || b(u), o = 0; null != (s = i[o]); o++) g(s, r[o]);
              else g(e, u);
              return r = b(u, "script"), r.length > 0 && m(r, !a && b(e, "script")), r = i = s = null, u
          },
          buildFragment: function(e, t, n, r) {
              for (var i, s, o, u, a, f, l, c = e.length, p = h(t), d = [], v = 0; c > v; v++) if (s = e[v], s || 0 === s) if ("object" === ut.type(s)) ut.merge(d, s.nodeType ? [s] : s);
              else if (Gt.test(s)) {
                  for (u = u || p.appendChild(t.createElement("div")), o = (Kt.exec(s) || ["", ""])[1].toLowerCase(), a = sn[o] || sn._default, u.innerHTML = a[1] + s.replace(Jt, "<$1></$2>") + a[2], l = a[0]; l--;) u = u.lastChild;
                  if (!ut.support.leadingWhitespace && $t.test(s) && d.push(t.createTextNode($t.exec(s)[0])), !ut.support.tbody) for (s = "table" !== o || Qt.test(s) ? "<table>" !== a[1] || Qt.test(s) ? 0 : u : u.firstChild, l = s && s.childNodes.length; l--;) ut.nodeName(f = s.childNodes[l], "tbody") && !f.childNodes.length && s.removeChild(f);
                  for (ut.merge(d, u.childNodes), u.textContent = ""; u.firstChild;) u.removeChild(u.firstChild);
                  u = p.lastChild
              } else d.push(t.createTextNode(s));
              for (u && p.removeChild(u), ut.support.appendChecked || ut.grep(b(d, "input"), w), v = 0; s = d[v++];) if ((!r || -1 === ut.inArray(s, r)) && (i = ut.contains(s.ownerDocument, s), u = b(p.appendChild(s), "script"), i && m(u), n)) for (l = 0; s = u[l++];) tn.test(s.type || "") && n.push(s);
              return u = null, p
          },
          cleanData: function(e, n) {
              for (var r, i, s, o, u = 0, a = ut.expando, f = ut.cache, l = ut.support.deleteExpando, c = ut.event.special; null != (s = e[u]); u++) if ((n || ut.acceptData(s)) && (i = s[a], r = i && f[i])) {
                  if (r.events) for (o in r.events) c[o] ? ut.event.remove(s, o) : ut.removeEvent(s, o, r.handle);
                  f[i] && (delete f[i], l ? delete s[a] : s.removeAttribute !== t ? s.removeAttribute(a) : s[a] = null, Y.push(i))
              }
          }
      });
      var an, fn, ln, cn = /alpha\([^)]*\)/i,
          hn = /opacity\s*=\s*([^)]*)/,
          pn = /^(top|right|bottom|left)$/,
          dn = /^(none|table(?!-c[ea]).+)/,
          vn = /^margin/,
          mn = RegExp("^(" + at + ")(.*)$", "i"),
          gn = RegExp("^(" + at + ")(?!px)[a-z%]+$", "i"),
          yn = RegExp("^([+-])=(" + at + ")", "i"),
          bn = {
              BODY: "block"
          },
          wn = {
              position: "absolute",
              visibility: "hidden",
              display: "block"
          },
          En = {
              letterSpacing: 0,
              fontWeight: 400
          },
          Sn = ["Top", "Right", "Bottom", "Left"],
          xn = ["Webkit", "O", "Moz", "ms"];
      ut.fn.extend({
          css: function(e, n) {
              return ut.access(this, function(e, n, r) {
                  var i, s, o = {},
                      u = 0;
                  if (ut.isArray(n)) {
                      for (i = fn(e), s = n.length; s > u; u++) o[n[u]] = ut.css(e, n[u], !1, i);
                      return o
                  }
                  return r !== t ? ut.style(e, n, r) : ut.css(e, n)
              }, e, n, arguments.length > 1)
          },
          show: function() {
              return x(this, !0)
          },
          hide: function() {
              return x(this)
          },
          toggle: function(e) {
              var t = "boolean" == typeof e;
              return this.each(function() {
                  (t ? e : S(this)) ? ut(this).show() : ut(this).hide()
              })
          }
      }), ut.extend({
          cssHooks: {
              opacity: {
                  get: function(e, t) {
                      if (t) {
                          var n = an(e, "opacity");
                          return "" === n ? "1" : n
                      }
                  }
              }
          },
          cssNumber: {
              columnCount: !0,
              fillOpacity: !0,
              fontWeight: !0,
              lineHeight: !0,
              opacity: !0,
              orphans: !0,
              widows: !0,
              zIndex: !0,
              zoom: !0
          },
          cssProps: {
              "float": ut.support.cssFloat ? "cssFloat" : "styleFloat"
          },
          style: function(e, n, r, i) {
              if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {
                  var s, o, u, a = ut.camelCase(n),
                      f = e.style;
                  if (n = ut.cssProps[a] || (ut.cssProps[a] = E(f, a)), u = ut.cssHooks[n] || ut.cssHooks[a], r === t) return u && "get" in u && (s = u.get(e, !1, i)) !== t ? s : f[n];
                  if (o = typeof r, "string" === o && (s = yn.exec(r)) && (r = (s[1] + 1) * s[2] + parseFloat(ut.css(e, n)), o = "number"), !(null == r || "number" === o && isNaN(r) || ("number" !== o || ut.cssNumber[a] || (r += "px"), ut.support.clearCloneStyle || "" !== r || 0 !== n.indexOf("background") || (f[n] = "inherit"), u && "set" in u && (r = u.set(e, r, i)) === t))) try {
                      f[n] = r
                  } catch (l) {}
              }
          },
          css: function(e, n, r, i) {
              var s, o, u, a = ut.camelCase(n);
              return n = ut.cssProps[a] || (ut.cssProps[a] = E(e.style, a)), u = ut.cssHooks[n] || ut.cssHooks[a], u && "get" in u && (s = u.get(e, !0, r)), s === t && (s = an(e, n, i)), "normal" === s && n in En && (s = En[n]), r ? (o = parseFloat(s), r === !0 || ut.isNumeric(o) ? o || 0 : s) : s
          },
          swap: function(e, t, n, r) {
              var i, s, o = {};
              for (s in t) o[s] = e.style[s], e.style[s] = t[s];
              i = n.apply(e, r || []);
              for (s in t) e.style[s] = o[s];
              return i
          }
      }), e.getComputedStyle ? (fn = function(t) {
          return e.getComputedStyle(t, null)
      }, an = function(e, n, r) {
          var i, s, o, u = r || fn(e),
              a = u ? u.getPropertyValue(n) || u[n] : t,
              f = e.style;
          return u && ("" !== a || ut.contains(e.ownerDocument, e) || (a = ut.style(e, n)), gn.test(a) && vn.test(n) && (i = f.width, s = f.minWidth, o = f.maxWidth, f.minWidth = f.maxWidth = f.width = a, a = u.width, f.width = i, f.minWidth = s, f.maxWidth = o)), a
      }) : $.documentElement.currentStyle && (fn = function(e) {
          return e.currentStyle
      }, an = function(e, n, r) {
          var i, s, o, u = r || fn(e),
              a = u ? u[n] : t,
              f = e.style;
          return null == a && f && f[n] && (a = f[n]), gn.test(a) && !pn.test(n) && (i = f.left, s = e.runtimeStyle, o = s && s.left, o && (s.left = e.currentStyle.left), f.left = "fontSize" === n ? "1em" : a, a = f.pixelLeft + "px", f.left = i, o && (s.left = o)), "" === a ? "auto" : a
      }), ut.each(["height", "width"], function(e, n) {
          ut.cssHooks[n] = {
              get: function(e, r, i) {
                  return r ? 0 === e.offsetWidth && dn.test(ut.css(e, "display")) ? ut.swap(e, wn, function() {
                      return C(e, n, i)
                  }) : C(e, n, i) : t
              },
              set: function(e, t, r) {
                  var i = r && fn(e);
                  return T(e, t, r ? N(e, n, r, ut.support.boxSizing && "border-box" === ut.css(e, "boxSizing", !1, i), i) : 0)
              }
          }
      }), ut.support.opacity || (ut.cssHooks.opacity = {
          get: function(e, t) {
              return hn.test((t && e.currentStyle ? e.currentStyle.filter : e.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : t ? "1" : ""
          },
          set: function(e, t) {
              var n = e.style,
                  r = e.currentStyle,
                  i = ut.isNumeric(t) ? "alpha(opacity=" + 100 * t + ")" : "",
                  s = r && r.filter || n.filter || "";
              n.zoom = 1, (t >= 1 || "" === t) && "" === ut.trim(s.replace(cn, "")) && n.removeAttribute && (n.removeAttribute("filter"), "" === t || r && !r.filter) || (n.filter = cn.test(s) ? s.replace(cn, i) : s + " " + i)
          }
      }), ut(function() {
          ut.support.reliableMarginRight || (ut.cssHooks.marginRight = {
              get: function(e, n) {
                  return n ? ut.swap(e, {
                      display: "inline-block"
                  }, an, [e, "marginRight"]) : t
              }
          }), !ut.support.pixelPosition && ut.fn.position && ut.each(["top", "left"], function(e, n) {
              ut.cssHooks[n] = {
                  get: function(e, r) {
                      return r ? (r = an(e, n), gn.test(r) ? ut(e).position()[n] + "px" : r) : t
                  }
              }
          })
      }), ut.expr && ut.expr.filters && (ut.expr.filters.hidden = function(e) {
          return 0 === e.offsetWidth && 0 === e.offsetHeight || !ut.support.reliableHiddenOffsets && "none" === (e.style && e.style.display || ut.css(e, "display"))
      }, ut.expr.filters.visible = function(e) {
          return !ut.expr.filters.hidden(e)
      }), ut.each({
          margin: "",
          padding: "",
          border: "Width"
      }, function(e, t) {
          ut.cssHooks[e + t] = {
              expand: function(n) {
                  for (var r = 0, i = {}, s = "string" == typeof n ? n.split(" ") : [n]; 4 > r; r++) i[e + Sn[r] + t] = s[r] || s[r - 2] || s[0];
                  return i
              }
          }, vn.test(e) || (ut.cssHooks[e + t].set = T)
      });
      var Tn = /%20/g,
          Nn = /\[\]$/,
          Cn = /\r?\n/g,
          kn = /^(?:submit|button|image|reset)$/i,
          Ln = /^(?:input|select|textarea|keygen)/i;
      ut.fn.extend({
          serialize: function() {
              return ut.param(this.serializeArray())
          },
          serializeArray: function() {
              return this.map(function() {
                  var e = ut.prop(this, "elements");
                  return e ? ut.makeArray(e) : this
              }).filter(function() {
                  var e = this.type;
                  return this.name && !ut(this).is(":disabled") && Ln.test(this.nodeName) && !kn.test(e) && (this.checked || !Zt.test(e))
              }).map(function(e, t) {
                  var n = ut(this).val();
                  return null == n ? null : ut.isArray(n) ? ut.map(n, function(e) {
                      return {
                          name: t.name,
                          value: e.replace(Cn, "\r\n")
                      }
                  }) : {
                      name: t.name,
                      value: n.replace(Cn, "\r\n")
                  }
              }).get()
          }
      }), ut.param = function(e, n) {
          var r, i = [],
              s = function(e, t) {
                  t = ut.isFunction(t) ? t() : null == t ? "" : t, i[i.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t)
              };
          if (n === t && (n = ut.ajaxSettings && ut.ajaxSettings.traditional), ut.isArray(e) || e.jquery && !ut.isPlainObject(e)) ut.each(e, function() {
              s(this.name, this.value)
          });
          else for (r in e) A(r, e[r], n, s);
          return i.join("&").replace(Tn, "+")
      };
      var An, On, Mn = ut.now(),
          _n = /\?/,
          Dn = /#.*$/,
          Pn = /([?&])_=[^&]*/,
          Hn = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm,
          Bn = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
          jn = /^(?:GET|HEAD)$/,
          Fn = /^\/\//,
          In = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
          qn = ut.fn.load,
          Rn = {},
          Un = {},
          zn = "*/".concat("*");
      try {
          On = J.href
      } catch (Wn) {
          On = $.createElement("a"), On.href = "", On = On.href
      }
      An = In.exec(On.toLowerCase()) || [], ut.fn.load = function(e, n, r) {
          if ("string" != typeof e && qn) return qn.apply(this, arguments);
          var i, s, o, u = this,
              a = e.indexOf(" ");
          return a >= 0 && (i = e.slice(a, e.length), e = e.slice(0, a)), ut.isFunction(n) ? (r = n, n = t) : n && "object" == typeof n && (s = "POST"), u.length > 0 && ut.ajax({
              url: e,
              type: s,
              dataType: "html",
              data: n
          }).done(function(e) {
              o = arguments, u.html(i ? ut("<div>").append(ut.parseHTML(e)).find(i) : e)
          }).complete(r &&
              function(e, t) {
                  u.each(r, o || [e.responseText, t, e])
              }), this
      }, ut.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(e, t) {
          ut.fn[t] = function(e) {
              return this.on(t, e)
          }
      }), ut.each(["get", "post"], function(e, n) {
          ut[n] = function(e, r, i, s) {
              return ut.isFunction(r) && (s = s || i, i = r, r = t), ut.ajax({
                  url: e,
                  type: n,
                  dataType: s,
                  data: r,
                  success: i
              })
          }
      }), ut.extend({
          active: 0,
          lastModified: {},
          etag: {},
          ajaxSettings: {
              url: On,
              type: "GET",
              isLocal: Bn.test(An[1]),
              global: !0,
              processData: !0,
              async: !0,
              contentType: "application/x-www-form-urlencoded; charset=UTF-8",
              accepts: {
                  "*": zn,
                  text: "text/plain",
                  html: "text/html",
                  xml: "application/xml, text/xml",
                  json: "application/json, text/javascript"
              },
              contents: {
                  xml: /xml/,
                  html: /html/,
                  json: /json/
              },
              responseFields: {
                  xml: "responseXML",
                  text: "responseText"
              },
              converters: {
                  "* text": e.String,
                  "text html": !0,
                  "text json": ut.parseJSON,
                  "text xml": ut.parseXML
              },
              flatOptions: {
                  url: !0,
                  context: !0
              }
          },
          ajaxSetup: function(e, t) {
              return t ? _(_(e, ut.ajaxSettings), t) : _(ut.ajaxSettings, e)
          },
          ajaxPrefilter: O(Rn),
          ajaxTransport: O(Un),
          ajax: function(e, n) {
              function r(e, n, r, u) {
                  var f, c, y, b, E, x = n;
                  2 !== w && (w = 2, a && clearTimeout(a), i = t, o = u || "", S.readyState = e > 0 ? 4 : 0, r && (b = D(h, S, r)), e >= 200 && 300 > e || 304 === e ? (h.ifModified && (E = S.getResponseHeader("Last-Modified"), E && (ut.lastModified[s] = E), E = S.getResponseHeader("etag"), E && (ut.etag[s] = E)), 304 === e ? (f = !0, x = "notmodified") : (f = P(h, b), x = f.state, c = f.data, y = f.error, f = !y)) : (y = x, (e || !x) && (x = "error", 0 > e && (e = 0))), S.status = e, S.statusText = (n || x) + "", f ? v.resolveWith(p, [c, x, S]) : v.rejectWith(p, [S, x, y]), S.statusCode(g), g = t, l && d.trigger(f ? "ajaxSuccess" : "ajaxError", [S, h, f ? c : y]), m.fireWith(p, [S, x]), l && (d.trigger("ajaxComplete", [S, h]), --ut.active || ut.event.trigger("ajaxStop")))
              }
              "object" == typeof e && (n = e, e = t), n = n || {};
              var i, s, o, u, a, f, l, c, h = ut.ajaxSetup({}, n),
                  p = h.context || h,
                  d = h.context && (p.nodeType || p.jquery) ? ut(p) : ut.event,
                  v = ut.Deferred(),
                  m = ut.Callbacks("once memory"),
                  g = h.statusCode || {},
                  y = {},
                  b = {},
                  w = 0,
                  E = "canceled",
                  S = {
                      readyState: 0,
                      getResponseHeader: function(e) {
                          var t;
                          if (2 === w) {
                              if (!u) for (u = {}; t = Hn.exec(o);) u[t[1].toLowerCase()] = t[2];
                              t = u[e.toLowerCase()]
                          }
                          return null == t ? null : t
                      },
                      getAllResponseHeaders: function() {
                          return 2 === w ? o : null
                      },
                      setRequestHeader: function(e, t) {
                          var n = e.toLowerCase();
                          return w || (e = b[n] = b[n] || e, y[e] = t), this
                      },
                      overrideMimeType: function(e) {
                          return w || (h.mimeType = e), this
                      },
                      statusCode: function(e) {
                          var t;
                          if (e) if (2 > w) for (t in e) g[t] = [g[t], e[t]];
                          else S.always(e[S.status]);
                          return this
                      },
                      abort: function(e) {
                          var t = e || E;
                          return i && i.abort(t), r(0, t), this
                      }
                  };
              if (v.promise(S).complete = m.add, S.success = S.done, S.error = S.fail, h.url = ((e || h.url || On) + "").replace(Dn, "").replace(Fn, An[1] + "//"), h.type = n.method || n.type || h.method || h.type, h.dataTypes = ut.trim(h.dataType || "*").toLowerCase().match(ft) || [""], null == h.crossDomain && (f = In.exec(h.url.toLowerCase()), h.crossDomain = !(!f || f[1] === An[1] && f[2] === An[2] && (f[3] || ("http:" === f[1] ? 80 : 443)) == (An[3] || ("http:" === An[1] ? 80 : 443)))), h.data && h.processData && "string" != typeof h.data && (h.data = ut.param(h.data, h.traditional)), M(Rn, h, n, S), 2 === w) return S;
              l = h.global, l && 0 === ut.active++ && ut.event.trigger("ajaxStart"), h.type = h.type.toUpperCase(), h.hasContent = !jn.test(h.type), s = h.url, h.hasContent || (h.data && (s = h.url += (_n.test(s) ? "&" : "?") + h.data, delete h.data), h.cache === !1 && (h.url = Pn.test(s) ? s.replace(Pn, "$1_=" + Mn++) : s + (_n.test(s) ? "&" : "?") + "_=" + Mn++)), h.ifModified && (ut.lastModified[s] && S.setRequestHeader("If-Modified-Since", ut.lastModified[s]), ut.etag[s] && S.setRequestHeader("If-None-Match", ut.etag[s])), (h.data && h.hasContent && h.contentType !== !1 || n.contentType) && S.setRequestHeader("Content-Type", h.contentType), S.setRequestHeader("Accept", h.dataTypes[0] && h.accepts[h.dataTypes[0]] ? h.accepts[h.dataTypes[0]] + ("*" !== h.dataTypes[0] ? ", " + zn + "; q=0.01" : "") : h.accepts["*"]);
              for (c in h.headers) S.setRequestHeader(c, h.headers[c]);
              if (!h.beforeSend || h.beforeSend.call(p, S, h) !== !1 && 2 !== w) {
                  E = "abort";
                  for (c in {
                      success: 1,
                      error: 1,
                      complete: 1
                  }) S[c](h[c]);
                  if (i = M(Un, h, n, S)) {
                      S.readyState = 1, l && d.trigger("ajaxSend", [S, h]), h.async && h.timeout > 0 && (a = setTimeout(function() {
                          S.abort("timeout")
                      }, h.timeout));
                      try {
                          w = 1, i.send(y, r)
                      } catch (x) {
                          if (!(2 > w)) throw x;
                          r(-1, x)
                      }
                  } else r(-1, "No Transport");
                  return S
              }
              return S.abort()
          },
          getScript: function(e, n) {
              return ut.get(e, t, n, "script")
          },
          getJSON: function(e, t, n) {
              return ut.get(e, t, n, "json")
          }
      }), ut.ajaxSetup({
          accepts: {
              script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
          },
          contents: {
              script: /(?:java|ecma)script/
          },
          converters: {
              "text script": function(e) {
                  return ut.globalEval(e), e
              }
          }
      }), ut.ajaxPrefilter("script", function(e) {
          e.cache === t && (e.cache = !1), e.crossDomain && (e.type = "GET", e.global = !1)
      }), ut.ajaxTransport("script", function(e) {
          if (e.crossDomain) {
              var n, r = $.head || ut("head")[0] || $.documentElement;
              return {
                  send: function(t, i) {
                      n = $.createElement("script"), n.async = !0, e.scriptCharset && (n.charset = e.scriptCharset), n.src = e.url, n.onload = n.onreadystatechange = function(e, t) {
                          (t || !n.readyState || /loaded|complete/.test(n.readyState)) && (n.onload = n.onreadystatechange = null, n.parentNode && n.parentNode.removeChild(n), n = null, t || i(200, "success"))
                      }, r.insertBefore(n, r.firstChild)
                  },
                  abort: function() {
                      n && n.onload(t, !0)
                  }
              }
          }
      });
      var Xn = [],
          Vn = /(=)\?(?=&|$)|\?\?/;
      ut.ajaxSetup({
          jsonp: "callback",
          jsonpCallback: function() {
              var e = Xn.pop() || ut.expando + "_" + Mn++;
              return this[e] = !0, e
          }
      }), ut.ajaxPrefilter("json jsonp", function(n, r, i) {
          var s, o, u, a = n.jsonp !== !1 && (Vn.test(n.url) ? "url" : "string" == typeof n.data && !(n.contentType || "").indexOf("application/x-www-form-urlencoded") && Vn.test(n.data) && "data");
          return a || "jsonp" === n.dataTypes[0] ? (s = n.jsonpCallback = ut.isFunction(n.jsonpCallback) ? n.jsonpCallback() : n.jsonpCallback, a ? n[a] = n[a].replace(Vn, "$1" + s) : n.jsonp !== !1 && (n.url += (_n.test(n.url) ? "&" : "?") + n.jsonp + "=" + s), n.converters["script json"] = function() {
              return u || ut.error(s + " was not called"), u[0]
          }, n.dataTypes[0] = "json", o = e[s], e[s] = function() {
              u = arguments
          }, i.always(function() {
              e[s] = o, n[s] && (n.jsonpCallback = r.jsonpCallback, Xn.push(s)), u && ut.isFunction(o) && o(u[0]), u = o = t
          }), "script") : t
      });
      var $n, Jn, Kn = 0,
          Qn = e.ActiveXObject &&
              function() {
                  var e;
                  for (e in $n) $n[e](t, !0)
              };
      ut.ajaxSettings.xhr = e.ActiveXObject ?
          function() {
              return !this.isLocal && H() || B()
          } : H, Jn = ut.ajaxSettings.xhr(), ut.support.cors = !! Jn && "withCredentials" in Jn, Jn = ut.support.ajax = !! Jn, Jn && ut.ajaxTransport(function(n) {
          if (!n.crossDomain || ut.support.cors) {
              var r;
              return {
                  send: function(i, s) {
                      var o, u, a = n.xhr();
                      if (n.username ? a.open(n.type, n.url, n.async, n.username, n.password) : a.open(n.type, n.url, n.async), n.xhrFields) for (u in n.xhrFields) a[u] = n.xhrFields[u];
                      n.mimeType && a.overrideMimeType && a.overrideMimeType(n.mimeType), n.crossDomain || i["X-Requested-With"] || (i["X-Requested-With"] = "XMLHttpRequest");
                      try {
                          for (u in i) a.setRequestHeader(u, i[u])
                      } catch (f) {}
                      a.send(n.hasContent && n.data || null), r = function(e, i) {
                          var u, f, l, c, h;
                          try {
                              if (r && (i || 4 === a.readyState)) if (r = t, o && (a.onreadystatechange = ut.noop, Qn && delete $n[o]), i) 4 !== a.readyState && a.abort();
                              else {
                                  c = {}, u = a.status, h = a.responseXML, l = a.getAllResponseHeaders(), h && h.documentElement && (c.xml = h), "string" == typeof a.responseText && (c.text = a.responseText);
                                  try {
                                      f = a.statusText
                                  } catch (p) {
                                      f = ""
                                  }
                                  u || !n.isLocal || n.crossDomain ? 1223 === u && (u = 204) : u = c.text ? 200 : 404
                              }
                          } catch (d) {
                              i || s(-1, d)
                          }
                          c && s(u, f, c, l)
                      }, n.async ? 4 === a.readyState ? setTimeout(r) : (o = ++Kn, Qn && ($n || ($n = {}, ut(e).unload(Qn)), $n[o] = r), a.onreadystatechange = r) : r()
                  },
                  abort: function() {
                      r && r(t, !0)
                  }
              }
          }
      });
      var Gn, Yn, Zn = /^(?:toggle|show|hide)$/,
          er = RegExp("^(?:([+-])=|)(" + at + ")([a-z%]*)$", "i"),
          tr = /queueHooks$/,
          nr = [R],
          rr = {
              "*": [function(e, t) {
                  var n, r, i = this.createTween(e, t),
                      s = er.exec(t),
                      o = i.cur(),
                      u = +o || 0,
                      a = 1,
                      f = 20;
                  if (s) {
                      if (n = +s[2], r = s[3] || (ut.cssNumber[e] ? "" : "px"), "px" !== r && u) {
                          u = ut.css(i.elem, e, !0) || n || 1;
                          do a = a || ".5", u /= a, ut.style(i.elem, e, u + r);
                          while (a !== (a = i.cur() / o) && 1 !== a && --f)
                      }
                      i.unit = r, i.start = u, i.end = s[1] ? u + (s[1] + 1) * n : n
                  }
                  return i
              }]
          };
      ut.Animation = ut.extend(I, {
          tweener: function(e, t) {
              ut.isFunction(e) ? (t = e, e = ["*"]) : e = e.split(" ");
              for (var n, r = 0, i = e.length; i > r; r++) n = e[r], rr[n] = rr[n] || [], rr[n].unshift(t)
          },
          prefilter: function(e, t) {
              t ? nr.unshift(e) : nr.push(e)
          }
      }), ut.Tween = U, U.prototype = {
          constructor: U,
          init: function(e, t, n, r, i, s) {
              this.elem = e, this.prop = n, this.easing = i || "swing", this.options = t, this.start = this.now = this.cur(), this.end = r, this.unit = s || (ut.cssNumber[n] ? "" : "px")
          },
          cur: function() {
              var e = U.propHooks[this.prop];
              return e && e.get ? e.get(this) : U.propHooks._default.get(this)
          },
          run: function(e) {
              var t, n = U.propHooks[this.prop];
              return this.pos = t = this.options.duration ? ut.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : 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) : U.propHooks._default.set(this), this
          }
      }, U.prototype.init.prototype = U.prototype, U.propHooks = {
          _default: {
              get: function(e) {
                  var t;
                  return null == e.elem[e.prop] || e.elem.style && null != e.elem.style[e.prop] ? (t = ut.css(e.elem, e.prop, "auto"), t && "auto" !== t ? t : 0) : e.elem[e.prop]
              },
              set: function(e) {
                  ut.fx.step[e.prop] ? ut.fx.step[e.prop](e) : e.elem.style && (null != e.elem.style[ut.cssProps[e.prop]] || ut.cssHooks[e.prop]) ? ut.style(e.elem, e.prop, e.now + e.unit) : e.elem[e.prop] = e.now
              }
          }
      }, U.propHooks.scrollTop = U.propHooks.scrollLeft = {
          set: function(e) {
              e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now)
          }
      }, ut.each(["toggle", "show", "hide"], function(e, t) {
          var n = ut.fn[t];
          ut.fn[t] = function(e, r, i) {
              return null == e || "boolean" == typeof e ? n.apply(this, arguments) : this.animate(z(t, !0), e, r, i)
          }
      }), ut.fn.extend({
          fadeTo: function(e, t, n, r) {
              return this.filter(S).css("opacity", 0).show().end().animate({
                  opacity: t
              }, e, n, r)
          },
          animate: function(e, t, n, r) {
              var i = ut.isEmptyObject(e),
                  s = ut.speed(t, n, r),
                  o = function() {
                      var t = I(this, ut.extend({}, e), s);
                      o.finish = function() {
                          t.stop(!0)
                      }, (i || ut._data(this, "finish")) && t.stop(!0)
                  };
              return o.finish = o, i || s.queue === !1 ? this.each(o) : this.queue(s.queue, o)
          },
          stop: function(e, n, r) {
              var i = function(e) {
                  var t = e.stop;
                  delete e.stop, t(r)
              };
              return "string" != typeof e && (r = n, n = e, e = t), n && e !== !1 && this.queue(e || "fx", []), this.each(function() {
                  var t = !0,
                      n = null != e && e + "queueHooks",
                      s = ut.timers,
                      o = ut._data(this);
                  if (n) o[n] && o[n].stop && i(o[n]);
                  else for (n in o) o[n] && o[n].stop && tr.test(n) && i(o[n]);
                  for (n = s.length; n--;) s[n].elem !== this || null != e && s[n].queue !== e || (s[n].anim.stop(r), t = !1, s.splice(n, 1));
                  (t || !r) && ut.dequeue(this, e)
              })
          },
          finish: function(e) {
              return e !== !1 && (e = e || "fx"), this.each(function() {
                  var t, n = ut._data(this),
                      r = n[e + "queue"],
                      i = n[e + "queueHooks"],
                      s = ut.timers,
                      o = r ? r.length : 0;
                  for (n.finish = !0, ut.queue(this, e, []), i && i.cur && i.cur.finish && i.cur.finish.call(this), t = s.length; t--;) s[t].elem === this && s[t].queue === e && (s[t].anim.stop(!0), s.splice(t, 1));
                  for (t = 0; o > t; t++) r[t] && r[t].finish && r[t].finish.call(this);
                  delete n.finish
              })
          }
      }), ut.each({
          slideDown: z("show"),
          slideUp: z("hide"),
          slideToggle: z("toggle"),
          fadeIn: {
              opacity: "show"
          },
          fadeOut: {
              opacity: "hide"
          },
          fadeToggle: {
              opacity: "toggle"
          }
      }, function(e, t) {
          ut.fn[e] = function(e, n, r) {
              return this.animate(t, e, n, r)
          }
      }), ut.speed = function(e, t, n) {
          var r = e && "object" == typeof e ? ut.extend({}, e) : {
              complete: n || !n && t || ut.isFunction(e) && e,
              duration: e,
              easing: n && t || t && !ut.isFunction(t) && t
          };
          return r.duration = ut.fx.off ? 0 : "number" == typeof r.duration ? r.duration : r.duration in ut.fx.speeds ? ut.fx.speeds[r.duration] : ut.fx.speeds._default, (null == r.queue || r.queue === !0) && (r.queue = "fx"), r.old = r.complete, r.complete = function() {
              ut.isFunction(r.old) && r.old.call(this), r.queue && ut.dequeue(this, r.queue)
          }, r
      }, ut.easing = {
          linear: function(e) {
              return e
          },
          swing: function(e) {
              return .5 - Math.cos(e * Math.PI) / 2
          }
      }, ut.timers = [], ut.fx = U.prototype.init, ut.fx.tick = function() {
          var e, n = ut.timers,
              r = 0;
          for (Gn = ut.now(); n.length > r; r++) e = n[r], e() || n[r] !== e || n.splice(r--, 1);
          n.length || ut.fx.stop(), Gn = t
      }, ut.fx.timer = function(e) {
          e() && ut.timers.push(e) && ut.fx.start()
      }, ut.fx.interval = 13, ut.fx.start = function() {
          Yn || (Yn = setInterval(ut.fx.tick, ut.fx.interval))
      }, ut.fx.stop = function() {
          clearInterval(Yn), Yn = null
      }, ut.fx.speeds = {
          slow: 600,
          fast: 200,
          _default: 400
      }, ut.fx.step = {}, ut.expr && ut.expr.filters && (ut.expr.filters.animated = function(e) {
          return ut.grep(ut.timers, function(t) {
              return e === t.elem
          }).length
      }), ut.fn.offset = function(e) {
          if (arguments.length) return e === t ? this : this.each(function(t) {
              ut.offset.setOffset(this, e, t)
          });
          var n, r, i = {
                  top: 0,
                  left: 0
              },
              s = this[0],
              o = s && s.ownerDocument;
          if (o) return n = o.documentElement, ut.contains(n, s) ? (s.getBoundingClientRect !== t && (i = s.getBoundingClientRect()), r = W(o), {
              top: i.top + (r.pageYOffset || n.scrollTop) - (n.clientTop || 0),
              left: i.left + (r.pageXOffset || n.scrollLeft) - (n.clientLeft || 0)
          }) : i
      }, ut.offset = {
          setOffset: function(e, t, n) {
              var r = ut.css(e, "position");
              "static" === r && (e.style.position = "relative");
              var i, s, o = ut(e),
                  u = o.offset(),
                  a = ut.css(e, "top"),
                  f = ut.css(e, "left"),
                  l = ("absolute" === r || "fixed" === r) && ut.inArray("auto", [a, f]) > -1,
                  c = {},
                  h = {};
              l ? (h = o.position(), i = h.top, s = h.left) : (i = parseFloat(a) || 0, s = parseFloat(f) || 0), ut.isFunction(t) && (t = t.call(e, n, u)), null != t.top && (c.top = t.top - u.top + i), null != t.left && (c.left = t.left - u.left + s), "using" in t ? t.using.call(e, c) : o.css(c)
          }
      }, ut.fn.extend({
          position: function() {
              if (this[0]) {
                  var e, t, n = {
                          top: 0,
                          left: 0
                      },
                      r = this[0];
                  return "fixed" === ut.css(r, "position") ? t = r.getBoundingClientRect() : (e = this.offsetParent(), t = this.offset(), ut.nodeName(e[0], "html") || (n = e.offset()), n.top += ut.css(e[0], "borderTopWidth", !0), n.left += ut.css(e[0], "borderLeftWidth", !0)), {
                      top: t.top - n.top - ut.css(r, "marginTop", !0),
                      left: t.left - n.left - ut.css(r, "marginLeft", !0)
                  }
              }
          },
          offsetParent: function() {
              return this.map(function() {
                  for (var e = this.offsetParent || $.documentElement; e && !ut.nodeName(e, "html") && "static" === ut.css(e, "position");) e = e.offsetParent;
                  return e || $.documentElement
              })
          }
      }), ut.each({
          scrollLeft: "pageXOffset",
          scrollTop: "pageYOffset"
      }, function(e, n) {
          var r = /Y/.test(n);
          ut.fn[e] = function(i) {
              return ut.access(this, function(e, i, s) {
                  var o = W(e);
                  return s === t ? o ? n in o ? o[n] : o.document.documentElement[i] : e[i] : (o ? o.scrollTo(r ? ut(o).scrollLeft() : s, r ? s : ut(o).scrollTop()) : e[i] = s, t)
              }, e, i, arguments.length, null)
          }
      }), ut.each({
          Height: "height",
          Width: "width"
      }, function(e, n) {
          ut.each({
              padding: "inner" + e,
              content: n,
              "": "outer" + e
          }, function(r, i) {
              ut.fn[i] = function(i, s) {
                  var o = arguments.length && (r || "boolean" != typeof i),
                      u = r || (i === !0 || s === !0 ? "margin" : "border");
                  return ut.access(this, function(n, r, i) {
                      var s;
                      return ut.isWindow(n) ? n.document.documentElement["client" + e] : 9 === n.nodeType ? (s = n.documentElement, Math.max(n.body["scroll" + e], s["scroll" + e], n.body["offset" + e], s["offset" + e], s["client" + e])) : i === t ? ut.css(n, r, u) : ut.style(n, r, i, u)
                  }, n, o ? i : t, o, null)
              }
          })
      }), e.jQuery = e.$ = ut, "function" == typeof define && define.amd && define.amd.jQuery && define("jquery", [], function() {
          return ut
      })
  })(window), function() {
      var e = this,
          t = e._,
          n = {},
          r = Array.prototype,
          i = Object.prototype,
          s = Function.prototype,
          o = r.push,
          u = r.slice,
          a = r.concat,
          f = i.toString,
          l = i.hasOwnProperty,
          c = r.forEach,
          h = r.map,
          p = r.reduce,
          d = r.reduceRight,
          v = r.filter,
          m = r.every,
          g = r.some,
          y = r.indexOf,
          b = r.lastIndexOf,
          w = Array.isArray,
          E = Object.keys,
          S = s.bind,
          x = function(e) {
              if (e instanceof x) return e;
              if (!(this instanceof x)) return new x(e);
              this._wrapped = e
          };
      typeof exports != "undefined" ? (typeof module != "undefined" && module.exports && (exports = module.exports = x), exports._ = x) : e._ = x, x.VERSION = "1.4.4";
      var T = x.each = x.forEach = function(e, t, r) {
          if (e == null) return;
          if (c && e.forEach === c) e.forEach(t, r);
          else if (e.length === +e.length) {
              for (var i = 0, s = e.length; i < s; i++) if (t.call(r, e[i], i, e) === n) return
          } else for (var o in e) if (x.has(e, o) && t.call(r, e[o], o, e) === n) return
      };
      x.map = x.collect = function(e, t, n) {
          var r = [];
          return e == null ? r : h && e.map === h ? e.map(t, n) : (T(e, function(e, i, s) {
              r[r.length] = t.call(n, e, i, s)
          }), r)
      };
      var N = "Reduce of empty array with no initial value";
      x.reduce = x.foldl = x.inject = function(e, t, n, r) {
          var i = arguments.length > 2;
          e == null && (e = []);
          if (p && e.reduce === p) return r && (t = x.bind(t, r)), i ? e.reduce(t, n) : e.reduce(t);
          T(e, function(e, s, o) {
              i ? n = t.call(r, n, e, s, o) : (n = e, i = !0)
          });
          if (!i) throw new TypeError(N);
          return n
      }, x.reduceRight = x.foldr = function(e, t, n, r) {
          var i = arguments.length > 2;
          e == null && (e = []);
          if (d && e.reduceRight === d) return r && (t = x.bind(t, r)), i ? e.reduceRight(t, n) : e.reduceRight(t);
          var s = e.length;
          if (s !== +s) {
              var o = x.keys(e);
              s = o.length
          }
          T(e, function(u, a, f) {
              a = o ? o[--s] : --s, i ? n = t.call(r, n, e[a], a, f) : (n = e[a], i = !0)
          });
          if (!i) throw new TypeError(N);
          return n
      }, x.find = x.detect = function(e, t, n) {
          var r;
          return C(e, function(e, i, s) {
              if (t.call(n, e, i, s)) return r = e, !0
          }), r
      }, x.filter = x.select = function(e, t, n) {
          var r = [];
          return e == null ? r : v && e.filter === v ? e.filter(t, n) : (T(e, function(e, i, s) {
              t.call(n, e, i, s) && (r[r.length] = e)
          }), r)
      }, x.reject = function(e, t, n) {
          return x.filter(e, function(e, r, i) {
              return !t.call(n, e, r, i)
          }, n)
      }, x.every = x.all = function(e, t, r) {
          t || (t = x.identity);
          var i = !0;
          return e == null ? i : m && e.every === m ? e.every(t, r) : (T(e, function(e, s, o) {
              if (!(i = i && t.call(r, e, s, o))) return n
          }), !! i)
      };
      var C = x.some = x.any = function(e, t, r) {
          t || (t = x.identity);
          var i = !1;
          return e == null ? i : g && e.some === g ? e.some(t, r) : (T(e, function(e, s, o) {
              if (i || (i = t.call(r, e, s, o))) return n
          }), !! i)
      };
      x.contains = x.include = function(e, t) {
          return e == null ? !1 : y && e.indexOf === y ? e.indexOf(t) != -1 : C(e, function(e) {
              return e === t
          })
      }, x.invoke = function(e, t) {
          var n = u.call(arguments, 2),
              r = x.isFunction(t);
          return x.map(e, function(e) {
              return (r ? t : e[t]).apply(e, n)
          })
      }, x.pluck = function(e, t) {
          return x.map(e, function(e) {
              return e[t]
          })
      }, x.where = function(e, t, n) {
          return x.isEmpty(t) ? n ? null : [] : x[n ? "find" : "filter"](e, function(e) {
              for (var n in t) if (t[n] !== e[n]) return !1;
              return !0
          })
      }, x.findWhere = function(e, t) {
          return x.where(e, t, !0)
      }, x.max = function(e, t, n) {
          if (!t && x.isArray(e) && e[0] === +e[0] && e.length < 65535) return Math.max.apply(Math, e);
          if (!t && x.isEmpty(e)) return -Infinity;
          var r = {
              computed: -Infinity,
              value: -Infinity
          };
          return T(e, function(e, i, s) {
              var o = t ? t.call(n, e, i, s) : e;
              o >= r.computed && (r = {
                  value: e,
                  computed: o
              })
          }), r.value
      }, x.min = function(e, t, n) {
          if (!t && x.isArray(e) && e[0] === +e[0] && e.length < 65535) return Math.min.apply(Math, e);
          if (!t && x.isEmpty(e)) return Infinity;
          var r = {
              computed: Infinity,
              value: Infinity
          };
          return T(e, function(e, i, s) {
              var o = t ? t.call(n, e, i, s) : e;
              o < r.computed && (r = {
                  value: e,
                  computed: o
              })
          }), r.value
      }, x.shuffle = function(e) {
          var t, n = 0,
              r = [];
          return T(e, function(e) {
              t = x.random(n++), r[n - 1] = r[t], r[t] = e
          }), r
      };
      var k = function(e) {
          return x.isFunction(e) ? e : function(t) {
              return t[e]
          }
      };
      x.sortBy = function(e, t, n) {
          var r = k(t);
          return x.pluck(x.map(e, function(e, t, i) {
              return {
                  value: e,
                  index: t,
                  criteria: r.call(n, e, t, i)
              }
          }).sort(function(e, t) {
              var n = e.criteria,
                  r = t.criteria;
              if (n !== r) {
                  if (n > r || n === void 0) return 1;
                  if (n < r || r === void 0) return -1
              }
              return e.index < t.index ? -1 : 1
          }), "value")
      };
      var L = function(e, t, n, r) {
          var i = {},
              s = k(t || x.identity);
          return T(e, function(t, o) {
              var u = s.call(n, t, o, e);
              r(i, u, t)
          }), i
      };
      x.groupBy = function(e, t, n) {
          return L(e, t, n, function(e, t, n) {
              (x.has(e, t) ? e[t] : e[t] = []).push(n)
          })
      }, x.countBy = function(e, t, n) {
          return L(e, t, n, function(e, t) {
              x.has(e, t) || (e[t] = 0), e[t]++
          })
      }, x.sortedIndex = function(e, t, n, r) {
          n = n == null ? x.identity : k(n);
          var i = n.call(r, t),
              s = 0,
              o = e.length;
          while (s < o) {
              var u = s + o >>> 1;
              n.call(r, e[u]) < i ? s = u + 1 : o = u
          }
          return s
      }, x.toArray = function(e) {
          return e ? x.isArray(e) ? u.call(e) : e.length === +e.length ? x.map(e, x.identity) : x.values(e) : []
      }, x.size = function(e) {
          return e == null ? 0 : e.length === +e.length ? e.length : x.keys(e).length
      }, x.first = x.head = x.take = function(e, t, n) {
          return e == null ? void 0 : t != null && !n ? u.call(e, 0, t) : e[0]
      }, x.initial = function(e, t, n) {
          return u.call(e, 0, e.length - (t == null || n ? 1 : t))
      }, x.last = function(e, t, n) {
          return e == null ? void 0 : t != null && !n ? u.call(e, Math.max(e.length - t, 0)) : e[e.length - 1]
      }, x.rest = x.tail = x.drop = function(e, t, n) {
          return u.call(e, t == null || n ? 1 : t)
      }, x.compact = function(e) {
          return x.filter(e, x.identity)
      };
      var A = function(e, t, n) {
          return T(e, function(e) {
              x.isArray(e) ? t ? o.apply(n, e) : A(e, t, n) : n.push(e)
          }), n
      };
      x.flatten = function(e, t) {
          return A(e, t, [])
      }, x.without = function(e) {
          return x.difference(e, u.call(arguments, 1))
      }, x.uniq = x.unique = function(e, t, n, r) {
          x.isFunction(t) && (r = n, n = t, t = !1);
          var i = n ? x.map(e, n, r) : e,
              s = [],
              o = [];
          return T(i, function(n, r) {
              if (t ? !r || o[o.length - 1] !== n : !x.contains(o, n)) o.push(n), s.push(e[r])
          }), s
      }, x.union = function() {
          return x.uniq(a.apply(r, arguments))
      }, x.intersection = function(e) {
          var t = u.call(arguments, 1);
          return x.filter(x.uniq(e), function(e) {
              return x.every(t, function(t) {
                  return x.indexOf(t, e) >= 0
              })
          })
      }, x.difference = function(e) {
          var t = a.apply(r, u.call(arguments, 1));
          return x.filter(e, function(e) {
              return !x.contains(t, e)
          })
      }, x.zip = function() {
          var e = u.call(arguments),
              t = x.max(x.pluck(e, "length")),
              n = new Array(t);
          for (var r = 0; r < t; r++) n[r] = x.pluck(e, "" + r);
          return n
      }, x.object = function(e, t) {
          if (e == null) return {};
          var n = {};
          for (var r = 0, i = e.length; r < i; r++) t ? n[e[r]] = t[r] : n[e[r][0]] = e[r][1];
          return n
      }, x.indexOf = function(e, t, n) {
          if (e == null) return -1;
          var r = 0,
              i = e.length;
          if (n) {
              if (typeof n != "number") return r = x.sortedIndex(e, t), e[r] === t ? r : -1;
              r = n < 0 ? Math.max(0, i + n) : n
          }
          if (y && e.indexOf === y) return e.indexOf(t, n);
          for (; r < i; r++) if (e[r] === t) return r;
          return -1
      }, x.lastIndexOf = function(e, t, n) {
          if (e == null) return -1;
          var r = n != null;
          if (b && e.lastIndexOf === b) return r ? e.lastIndexOf(t, n) : e.lastIndexOf(t);
          var i = r ? n : e.length;
          while (i--) if (e[i] === t) return i;
          return -1
      }, x.range = function(e, t, n) {
          arguments.length <= 1 && (t = e || 0, e = 0), n = arguments[2] || 1;
          var r = Math.max(Math.ceil((t - e) / n), 0),
              i = 0,
              s = new Array(r);
          while (i < r) s[i++] = e, e += n;
          return s
      }, x.bind = function(e, t) {
          if (e.bind === S && S) return S.apply(e, u.call(arguments, 1));
          var n = u.call(arguments, 2);
          return function() {
              return e.apply(t, n.concat(u.call(arguments)))
          }
      }, x.partial = function(e) {
          var t = u.call(arguments, 1);
          return function() {
              return e.apply(this, t.concat(u.call(arguments)))
          }
      }, x.bindAll = function(e) {
          var t = u.call(arguments, 1);
          return t.length === 0 && (t = x.functions(e)), T(t, function(t) {
              e[t] = x.bind(e[t], e)
          }), e
      }, x.memoize = function(e, t) {
          var n = {};
          return t || (t = x.identity), function() {
              var r = t.apply(this, arguments);
              return x.has(n, r) ? n[r] : n[r] = e.apply(this, arguments)
          }
      }, x.delay = function(e, t) {
          var n = u.call(arguments, 2);
          return setTimeout(function() {
              return e.apply(null, n)
          }, t)
      }, x.defer = function(e) {
          return x.delay.apply(x, [e, 1].concat(u.call(arguments, 1)))
      }, x.throttle = function(e, t) {
          var n, r, i, s, o = 0,
              u = function() {
                  o = new Date, i = null, s = e.apply(n, r)
              };
          return function() {
              var a = new Date,
                  f = t - (a - o);
              return n = this, r = arguments, f <= 0 ? (clearTimeout(i), i = null, o = a, s = e.apply(n, r)) : i || (i = setTimeout(u, f)), s
          }
      }, x.debounce = function(e, t, n) {
          var r, i;
          return function() {
              var s = this,
                  o = arguments,
                  u = function() {
                      r = null, n || (i = e.apply(s, o))
                  },
                  a = n && !r;
              return clearTimeout(r), r = setTimeout(u, t), a && (i = e.apply(s, o)), i
          }
      }, x.once = function(e) {
          var t = !1,
              n;
          return function() {
              return t ? n : (t = !0, n = e.apply(this, arguments), e = null, n)
          }
      }, x.wrap = function(e, t) {
          return function() {
              var n = [e];
              return o.apply(n, arguments), t.apply(this, n)
          }
      }, x.compose = function() {
          var e = arguments;
          return function() {
              var t = arguments;
              for (var n = e.length - 1; n >= 0; n--) t = [e[n].apply(this, t)];
              return t[0]
          }
      }, x.after = function(e, t) {
          return e <= 0 ? t() : function() {
              if (--e < 1) return t.apply(this, arguments)
          }
      }, x.keys = E ||
          function(e) {
              if (e !== Object(e)) throw new TypeError("Invalid object");
              var t = [];
              for (var n in e) x.has(e, n) && (t[t.length] = n);
              return t
          }, x.values = function(e) {
          var t = [];
          for (var n in e) x.has(e, n) && t.push(e[n]);
          return t
      }, x.pairs = function(e) {
          var t = [];
          for (var n in e) x.has(e, n) && t.push([n, e[n]]);
          return t
      }, x.invert = function(e) {
          var t = {};
          for (var n in e) x.has(e, n) && (t[e[n]] = n);
          return t
      }, x.functions = x.methods = function(e) {
          var t = [];
          for (var n in e) x.isFunction(e[n]) && t.push(n);
          return t.sort()
      }, x.extend = function(e) {
          return T(u.call(arguments, 1), function(t) {
              if (t) for (var n in t) e[n] = t[n]
          }), e
      }, x.pick = function(e) {
          var t = {},
              n = a.apply(r, u.call(arguments, 1));
          return T(n, function(n) {
              n in e && (t[n] = e[n])
          }), t
      }, x.omit = function(e) {
          var t = {},
              n = a.apply(r, u.call(arguments, 1));
          for (var i in e) x.contains(n, i) || (t[i] = e[i]);
          return t
      }, x.defaults = function(e) {
          return T(u.call(arguments, 1), function(t) {
              if (t) for (var n in t) e[n] == null && (e[n] = t[n])
          }), e
      }, x.clone = function(e) {
          return x.isObject(e) ? x.isArray(e) ? e.slice() : x.extend({}, e) : e
      }, x.tap = function(e, t) {
          return t(e), e
      };
      var O = function(e, t, n, r) {
          if (e === t) return e !== 0 || 1 / e == 1 / t;
          if (e == null || t == null) return e === t;
          e instanceof x && (e = e._wrapped), t instanceof x && (t = t._wrapped);
          var i = f.call(e);
          if (i != f.call(t)) return !1;
          switch (i) {
              case "[object String]":
                  return e == String(t);
              case "[object Number]":
                  return e != +e ? t != +t : e == 0 ? 1 / e == 1 / t : e == +t;
              case "[object Date]":
              case "[object Boolean]":
                  return +e == +t;
              case "[object RegExp]":
                  return e.source == t.source && e.global == t.global && e.multiline == t.multiline && e.ignoreCase == t.ignoreCase
          }
          if (typeof e != "object" || typeof t != "object") return !1;
          var s = n.length;
          while (s--) if (n[s] == e) return r[s] == t;
          n.push(e), r.push(t);
          var o = 0,
              u = !0;
          if (i == "[object Array]") {
              o = e.length, u = o == t.length;
              if (u) while (o--) if (!(u = O(e[o], t[o], n, r))) break
          } else {
              var a = e.constructor,
                  l = t.constructor;
              if (a !== l && !(x.isFunction(a) && a instanceof a && x.isFunction(l) && l instanceof l)) return !1;
              for (var c in e) if (x.has(e, c)) {
                  o++;
                  if (!(u = x.has(t, c) && O(e[c], t[c], n, r))) break
              }
              if (u) {
                  for (c in t) if (x.has(t, c) && !(o--)) break;
                  u = !o
              }
          }
          return n.pop(), r.pop(), u
      };
      x.isEqual = function(e, t) {
          return O(e, t, [], [])
      }, x.isEmpty = function(e) {
          if (e == null) return !0;
          if (x.isArray(e) || x.isString(e)) return e.length === 0;
          for (var t in e) if (x.has(e, t)) return !1;
          return !0
      }, x.isElement = function(e) {
          return !!e && e.nodeType === 1
      }, x.isArray = w ||
          function(e) {
              return f.call(e) == "[object Array]"
          }, x.isObject = function(e) {
          return e === Object(e)
      }, T(["Arguments", "Function", "String", "Number", "Date", "RegExp"], function(e) {
          x["is" + e] = function(t) {
              return f.call(t) == "[object " + e + "]"
          }
      }), x.isArguments(arguments) || (x.isArguments = function(e) {
          return !!e && !! x.has(e, "callee")
      }), typeof / . / != "function" && (x.isFunction = function(e) {
          return typeof e == "function"
      }), x.isFinite = function(e) {
          return isFinite(e) && !isNaN(parseFloat(e))
      }, x.isNaN = function(e) {
          return x.isNumber(e) && e != +e
      }, x.isBoolean = function(e) {
          return e === !0 || e === !1 || f.call(e) == "[object Boolean]"
      }, x.isNull = function(e) {
          return e === null
      }, x.isUndefined = function(e) {
          return e === void 0
      }, x.has = function(e, t) {
          return l.call(e, t)
      }, x.noConflict = function() {
          return e._ = t, this
      }, x.identity = function(e) {
          return e
      }, x.times = function(e, t, n) {
          var r = Array(e);
          for (var i = 0; i < e; i++) r[i] = t.call(n, i);
          return r
      }, x.random = function(e, t) {
          return t == null && (t = e, e = 0), e + Math.floor(Math.random() * (t - e + 1))
      };
      var M = {
          escape: {
              "&": "&amp;",
              "<": "&lt;",
              ">": "&gt;",
              '"': "&quot;",
              "'": "&#x27;",
              "/": "&#x2F;"
          }
      };
      M.unescape = x.invert(M.escape);
      var _ = {
          escape: new RegExp("[" + x.keys(M.escape).join("") + "]", "g"),
          unescape: new RegExp("(" + x.keys(M.unescape).join("|") + ")", "g")
      };
      x.each(["escape", "unescape"], function(e) {
          x[e] = function(t) {
              return t == null ? "" : ("" + t).replace(_[e], function(t) {
                  return M[e][t]
              })
          }
      }), x.result = function(e, t) {
          if (e == null) return null;
          var n = e[t];
          return x.isFunction(n) ? n.call(e) : n
      }, x.mixin = function(e) {
          T(x.functions(e), function(t) {
              var n = x[t] = e[t];
              x.prototype[t] = function() {
                  var e = [this._wrapped];
                  return o.apply(e, arguments), j.call(this, n.apply(x, e))
              }
          })
      };
      var D = 0;
      x.uniqueId = function(e) {
          var t = ++D + "";
          return e ? e + t : t
      }, x.templateSettings = {
          evaluate: /<%([\s\S]+?)%>/g,
          interpolate: /<%=([\s\S]+?)%>/g,
          escape: /<%-([\s\S]+?)%>/g
      };
      var P = /(.)^/,
          H = {
              "'": "'",
              "\\": "\\",
              "\r": "r",
              "\n": "n",
              "	": "t",
              "\u2028": "u2028",
              "\u2029": "u2029"
          },
          B = /\\|'|\r|\n|\t|\u2028|\u2029/g;
      x.template = function(e, t, n) {
          var r;
          n = x.defaults({}, n, x.templateSettings);
          var i = new RegExp([(n.escape || P).source, (n.interpolate || P).source, (n.evaluate || P).source].join("|") + "|$", "g"),
              s = 0,
              o = "__p+='";
          e.replace(i, function(t, n, r, i, u) {
              return o += e.slice(s, u).replace(B, function(e) {
                  return "\\" + H[e]
              }), n && (o += "'+\n((__t=(" + n + "))==null?'':_.escape(__t))+\n'"), r && (o += "'+\n((__t=(" + r + "))==null?'':__t)+\n'"), i && (o += "';\n" + i + "\n__p+='"), s = u + t.length, t
          }), o += "';\n", n.variable || (o = "with(obj||{}){\n" + o + "}\n"), o = "var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n" + o + "return __p;\n";
          try {
              r = new Function(n.variable || "obj", "_", o)
          } catch (u) {
              throw u.source = o, u
          }
          if (t) return r(t, x);
          var a = function(e) {
              return r.call(this, e, x)
          };
          return a.source = "function(" + (n.variable || "obj") + "){\n" + o + "}", a
      }, x.chain = function(e) {
          return x(e).chain()
      };
      var j = function(e) {
          return this._chain ? x(e).chain() : e
      };
      x.mixin(x), T(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function(e) {
          var t = r[e];
          x.prototype[e] = function() {
              var n = this._wrapped;
              return t.apply(n, arguments), (e == "shift" || e == "splice") && n.length === 0 && delete n[0], j.call(this, n)
          }
      }), T(["concat", "join", "slice"], function(e) {
          var t = r[e];
          x.prototype[e] = function() {
              return j.call(this, t.apply(this._wrapped, arguments))
          }
      }), x.extend(x.prototype, {
          chain: function() {
              return this._chain = !0, this
          },
          value: function() {
              return this._wrapped
          }
      })
  }.call(this), define("underscore", function(e) {
      return function() {
          var t, n;
          return t || e._
      }
  }(this)), function() {
      var e = this,
          t = e.Backbone,
          n = Array.prototype.slice,
          r = Array.prototype.splice,
          i;
      typeof exports != "undefined" ? i = exports : i = e.Backbone = {}, i.VERSION = "0.9.2";
      var s = e._;
      !s && typeof require != "undefined" && (s = require("underscore"));
      var o = e.jQuery || e.Zepto || e.ender;
      i.setDomLibrary = function(e) {
          o = e
      }, i.noConflict = function() {
          return e.Backbone = t, this
      }, i.emulateHTTP = !1, i.emulateJSON = !1;
      var u = /\s+/,
          a = i.Events = {
              on: function(e, t, n) {
                  var r, i, s, o, a;
                  if (!t) return this;
                  e = e.split(u), r = this._callbacks || (this._callbacks = {});
                  while (i = e.shift()) a = r[i], s = a ? a.tail : {}, s.next = o = {}, s.context = n, s.callback = t, r[i] = {
                      tail: o,
                      next: a ? a.next : s
                  };
                  return this
              },
              off: function(e, t, n) {
                  var r, i, o, a, f, l;
                  if (!(i = this._callbacks)) return;
                  if (!(e || t || n)) return delete this._callbacks, this;
                  e = e ? e.split(u) : s.keys(i);
                  while (r = e.shift()) {
                      o = i[r], delete i[r];
                      if (!o || !t && !n) continue;
                      a = o.tail;
                      while ((o = o.next) !== a) f = o.callback, l = o.context, (t && f !== t || n && l !== n) && this.on(r, f, l)
                  }
                  return this
              },
              trigger: function(e) {
                  var t, r, i, s, o, a, f;
                  if (!(i = this._callbacks)) return this;
                  a = i.all, e = e.split(u), f = n.call(arguments, 1);
                  while (t = e.shift()) {
                      if (r = i[t]) {
                          s = r.tail;
                          while ((r = r.next) !== s) r.callback.apply(r.context || this, f)
                      }
                      if (r = a) {
                          s = r.tail, o = [t].concat(f);
                          while ((r = r.next) !== s) r.callback.apply(r.context || this, o)
                      }
                  }
                  return this
              }
          };
      a.bind = a.on, a.unbind = a.off;
      var f = i.Model = function(e, t) {
          var n;
          e || (e = {}), t && t.parse && (e = this.parse(e));
          if (n = C(this, "defaults")) e = s.extend({}, n, e);
          t && t.collection && (this.collection = t.collection), this.attributes = {}, this._escapedAttributes = {}, this.cid = s.uniqueId("c"), this.changed = {}, this._silent = {}, this._pending = {}, this.set(e, {
              silent: !0
          }), this.changed = {}, this._silent = {}, this._pending = {}, this._previousAttributes = s.clone(this.attributes), this.initialize.apply(this, arguments)
      };
      s.extend(f.prototype, a, {
          changed: null,
          _silent: null,
          _pending: null,
          idAttribute: "id",
          initialize: function() {},
          toJSON: function(e) {
              return s.clone(this.attributes)
          },
          get: function(e) {
              return this.attributes[e]
          },
          escape: function(e) {
              var t;
              if (t = this._escapedAttributes[e]) return t;
              var n = this.get(e);
              return this._escapedAttributes[e] = s.escape(n == null ? "" : "" + n)
          },
          has: function(e) {
              return this.get(e) != null
          },
          set: function(e, t, n) {
              var r, i, o;
              s.isObject(e) || e == null ? (r = e, n = t) : (r = {}, r[e] = t), n || (n = {});
              if (!r) return this;
              r instanceof f && (r = r.attributes);
              if (n.unset) for (i in r) r[i] = void 0;
              if (!this._validate(r, n)) return !1;
              this.idAttribute in r && (this.id = r[this.idAttribute]);
              var u = n.changes = {},
                  a = this.attributes,
                  l = this._escapedAttributes,
                  c = this._previousAttributes || {};
              for (i in r) {
                  o = r[i];
                  if (!s.isEqual(a[i], o) || n.unset && s.has(a, i)) delete l[i], (n.silent ? this._silent : u)[i] = !0;
                  n.unset ? delete a[i] : a[i] = o, !s.isEqual(c[i], o) || s.has(a, i) != s.has(c, i) ? (this.changed[i] = o, n.silent || (this._pending[i] = !0)) : (delete this.changed[i], delete this._pending[i])
              }
              return n.silent || this.change(n), this
          },
          unset: function(e, t) {
              return (t || (t = {})).unset = !0, this.set(e, null, t)
          },
          clear: function(e) {
              return (e || (e = {})).unset = !0, this.set(s.clone(this.attributes), e)
          },
          fetch: function(e) {
              e = e ? s.clone(e) : {};
              var t = this,
                  n = e.success;
              return e.success = function(r, i, s) {
                  if (!t.set(t.parse(r, s), e)) return !1;
                  n && n(t, r)
              }, e.error = i.wrapError(e.error, t, e), (this.sync || i.sync).call(this, "read", this, e)
          },
          save: function(e, t, n) {
              var r, o;
              s.isObject(e) || e == null ? (r = e, n = t) : (r = {}, r[e] = t), n = n ? s.clone(n) : {};
              if (n.wait) {
                  if (!this._validate(r, n)) return !1;
                  o = s.clone(this.attributes)
              }
              var u = s.extend({}, n, {
                  silent: !0
              });
              if (r && !this.set(r, n.wait ? u : n)) return !1;
              var a = this,
                  f = n.success;
              n.success = function(e, t, i) {
                  var o = a.parse(e, i);
                  n.wait && (delete n.wait, o = s.extend(r || {}, o));
                  if (!a.set(o, n)) return !1;
                  f ? f(a, e) : a.trigger("sync", a, e, n)
              }, n.error = i.wrapError(n.error, a, n);
              var l = this.isNew() ? "create" : "update",
                  c = (this.sync || i.sync).call(this, l, this, n);
              return n.wait && this.set(o, u), c
          },
          destroy: function(e) {
              e = e ? s.clone(e) : {};
              var t = this,
                  n = e.success,
                  r = function() {
                      t.trigger("destroy", t, t.collection, e)
                  };
              if (this.isNew()) return r(), !1;
              e.success = function(i) {
                  e.wait && r(), n ? n(t, i) : t.trigger("sync", t, i, e)
              }, e.error = i.wrapError(e.error, t, e);
              var o = (this.sync || i.sync).call(this, "delete", this, e);
              return e.wait || r(), o
          },
          url: function() {
              var e = C(this, "urlRoot") || C(this.collection, "url") || k();
              return this.isNew() ? e : e + (e.charAt(e.length - 1) == "/" ? "" : "/") + encodeURIComponent(this.id)
          },
          parse: function(e, t) {
              return e
          },
          clone: function() {
              return new this.constructor(this.attributes)
          },
          isNew: function() {
              return this.id == null
          },
          change: function(e) {
              e || (e = {});
              var t = this._changing;
              this._changing = !0;
              for (var n in this._silent) this._pending[n] = !0;
              var r = s.extend({}, e.changes, this._silent);
              this._silent = {};
              for (var n in r) this.trigger("change:" + n, this, this.get(n), e);
              if (t) return this;
              while (!s.isEmpty(this._pending)) {
                  this._pending = {}, this.trigger("change", this, e);
                  for (var n in this.changed) {
                      if (this._pending[n] || this._silent[n]) continue;
                      delete this.changed[n]
                  }
                  this._previousAttributes = s.clone(this.attributes)
              }
              return this._changing = !1, this
          },
          hasChanged: function(e) {
              return arguments.length ? s.has(this.changed, e) : !s.isEmpty(this.changed)
          },
          changedAttributes: function(e) {
              if (!e) return this.hasChanged() ? s.clone(this.changed) : !1;
              var t, n = !1,
                  r = this._previousAttributes;
              for (var i in e) {
                  if (s.isEqual(r[i], t = e[i])) continue;
                  (n || (n = {}))[i] = t
              }
              return n
          },
          previous: function(e) {
              return !arguments.length || !this._previousAttributes ? null : this._previousAttributes[e]
          },
          previousAttributes: function() {
              return s.clone(this._previousAttributes)
          },
          isValid: function() {
              return !this.validate(this.attributes)
          },
          _validate: function(e, t) {
              if (t.silent || !this.validate) return !0;
              e = s.extend({}, this.attributes, e);
              var n = this.validate(e, t);
              return n ? (t && t.error ? t.error(this, n, t) : this.trigger("error", this, n, t), !1) : !0
          }
      });
      var l = i.Collection = function(e, t) {
          t || (t = {}), t.model && (this.model = t.model), t.comparator && (this.comparator = t.comparator), this._reset(), this.initialize.apply(this, arguments), e && this.reset(e, {
              silent: !0,
              parse: t.parse
          })
      };
      s.extend(l.prototype, a, {
          model: f,
          initialize: function() {},
          toJSON: function(e) {
              return this.map(function(t) {
                  return t.toJSON(e)
              })
          },
          add: function(e, t) {
              var n, i, o, u, a, f, l = {},
                  c = {},
                  h = [];
              t || (t = {}), e = s.isArray(e) ? e.slice() : [e];
              for (n = 0, o = e.length; n < o; n++) {
                  if (!(u = e[n] = this._prepareModel(e[n], t))) throw new Error("Can't add an invalid model to a collection");
                  a = u.cid, f = u.id;
                  if (l[a] || this._byCid[a] || f != null && (c[f] || this._byId[f])) {
                      h.push(n);
                      continue
                  }
                  l[a] = c[f] = u
              }
              n = h.length;
              while (n--) e.splice(h[n], 1);
              for (n = 0, o = e.length; n < o; n++)(u = e[n]).on("all", this._onModelEvent, this), this._byCid[u.cid] = u, u.id != null && (this._byId[u.id] = u);
              this.length += o, i = t.at != null ? t.at : this.models.length, r.apply(this.models, [i, 0].concat(e)), this.comparator && this.sort({
                  silent: !0
              });
              if (t.silent) return this;
              for (n = 0, o = this.models.length; n < o; n++) {
                  if (!l[(u = this.models[n]).cid]) continue;
                  t.index = n, u.trigger("add", u, this, t)
              }
              return this
          },
          remove: function(e, t) {
              var n, r, i, o;
              t || (t = {}), e = s.isArray(e) ? e.slice() : [e];
              for (n = 0, r = e.length; n < r; n++) {
                  o = this.getByCid(e[n]) || this.get(e[n]);
                  if (!o) continue;
                  delete this._byId[o.id], delete this._byCid[o.cid], i = this.indexOf(o), this.models.splice(i, 1), this.length--, t.silent || (t.index = i, o.trigger("remove", o, this, t)), this._removeReference(o)
              }
              return this
          },
          push: function(e, t) {
              return e = this._prepareModel(e, t), this.add(e, t), e
          },
          pop: function(e) {
              var t = this.at(this.length - 1);
              return this.remove(t, e), t
          },
          unshift: function(e, t) {
              return e = this._prepareModel(e, t), this.add(e, s.extend({
                  at: 0
              }, t)), e
          },
          shift: function(e) {
              var t = this.at(0);
              return this.remove(t, e), t
          },
          get: function(e) {
              return e == null ? void 0 : this._byId[e.id != null ? e.id : e]
          },
          getByCid: function(e) {
              return e && this._byCid[e.cid || e]
          },
          at: function(e) {
              return this.models[e]
          },
          where: function(e) {
              return s.isEmpty(e) ? [] : this.filter(function(t) {
                  for (var n in e) if (e[n] !== t.get(n)) return !1;
                  return !0
              })
          },
          sort: function(e) {
              e || (e = {});
              if (!this.comparator) throw new Error("Cannot sort a set without a comparator");
              var t = s.bind(this.comparator, this);
              return this.comparator.length == 1 ? this.models = this.sortBy(t) : this.models.sort(t), e.silent || this.trigger("reset", this, e), this
          },
          pluck: function(e) {
              return s.map(this.models, function(t) {
                  return t.get(e)
              })
          },
          reset: function(e, t) {
              e || (e = []), t || (t = {});
              for (var n = 0, r = this.models.length; n < r; n++) this._removeReference(this.models[n]);
              return this._reset(), this.add(e, s.extend({
                  silent: !0
              }, t)), t.silent || this.trigger("reset", this, t), this
          },
          fetch: function(e) {
              e = e ? s.clone(e) : {}, e.parse === undefined && (e.parse = !0);
              var t = this,
                  n = e.success;
              return e.success = function(r, i, s) {
                  t[e.add ? "add" : "reset"](t.parse(r, s), e), n && n(t, r)
              }, e.error = i.wrapError(e.error, t, e), (this.sync || i.sync).call(this, "read", this, e)
          },
          create: function(e, t) {
              var n = this;
              t = t ? s.clone(t) : {}, e = this._prepareModel(e, t);
              if (!e) return !1;
              t.wait || n.add(e, t);
              var r = t.success;
              return t.success = function(i, s, o) {
                  t.wait && n.add(i, t), r ? r(i, s) : i.trigger("sync", e, s, t)
              }, e.save(null, t), e
          },
          parse: function(e, t) {
              return e
          },
          chain: function() {
              return s(this.models).chain()
          },
          _reset: function(e) {
              this.length = 0, this.models = [], this._byId = {}, this._byCid = {}
          },
          _prepareModel: function(e, t) {
              t || (t = {});
              if (e instanceof f) e.collection || (e.collection = this);
              else {
                  var n = e;
                  t.collection = this, e = new this.model(n, t), e._validate(e.attributes, t) || (e = !1)
              }
              return e
          },
          _removeReference: function(e) {
              this == e.collection && delete e.collection, e.off("all", this._onModelEvent, this)
          },
          _onModelEvent: function(e, t, n, r) {
              if ((e == "add" || e == "remove") && n != this) return;
              e == "destroy" && this.remove(t, r), t && e === "change:" + t.idAttribute && (delete this._byId[t.previous(t.idAttribute)], this._byId[t.id] = t), this.trigger.apply(this, arguments)
          }
      });
      var c = ["forEach", "each", "map", "reduce", "reduceRight", "find", "detect", "filter", "select", "reject", "every", "all", "some", "any", "include", "contains", "invoke", "max", "min", "sortBy", "sortedIndex", "toArray", "size", "first", "initial", "rest", "last", "without", "indexOf", "shuffle", "lastIndexOf", "isEmpty", "groupBy"];
      s.each(c, function(e) {
          l.prototype[e] = function() {
              return s[e].apply(s, [this.models].concat(s.toArray(arguments)))
          }
      });
      var h = i.Router = function(e) {
              e || (e = {}), e.routes && (this.routes = e.routes), this._bindRoutes(), this.initialize.apply(this, arguments)
          },
          p = /:\w+/g,
          d = /\*\w+/g,
          v = /[-[\]{}()+?.,\\^$|#\s]/g;
      s.extend(h.prototype, a, {
          initialize: function() {},
          route: function(e, t, n) {
              return i.history || (i.history = new m), s.isRegExp(e) || (e = this._routeToRegExp(e)), n || (n = this[t]), i.history.route(e, s.bind(function(r) {
                  var s = this._extractParameters(e, r);
                  n && n.apply(this, s), this.trigger.apply(this, ["route:" + t].concat(s)), i.history.trigger("route", this, t, s)
              }, this)), this
          },
          navigate: function(e, t) {
              i.history.navigate(e, t)
          },
          _bindRoutes: function() {
              if (!this.routes) return;
              var e = [];
              for (var t in this.routes) e.unshift([t, this.routes[t]]);
              for (var n = 0, r = e.length; n < r; n++) this.route(e[n][0], e[n][1], this[e[n][1]])
          },
          _routeToRegExp: function(e) {
              return e = e.replace(v, "\\$&").replace(p, "([^/]+)").replace(d, "(.*?)"), new RegExp("^" + e + "$")
          },
          _extractParameters: function(e, t) {
              return e.exec(t).slice(1)
          }
      });
      var m = i.History = function() {
              this.handlers = [], s.bindAll(this, "checkUrl")
          },
          g = /^[#\/]/,
          y = /msie [\w.]+/;
      m.started = !1, s.extend(m.prototype, a, {
          interval: 50,
          getHash: function(e) {
              var t = e ? e.location : window.location,
                  n = t.href.match(/#(.*)$/);
              return n ? n[1] : ""
          },
          getFragment: function(e, t) {
              if (e == null) if (this._hasPushState || t) {
                  e = window.location.pathname;
                  var n = window.location.search;
                  n && (e += n)
              } else e = this.getHash();
              return e.indexOf(this.options.root) || (e = e.substr(this.options.root.length)), e.replace(g, "")
          },
          start: function(e) {
              if (m.started) throw new Error("Backbone.history has already been started");
              m.started = !0, this.options = s.extend({}, {
                  root: "/"
              }, this.options, e), this._wantsHashChange = this.options.hashChange !== !1, this._wantsPushState = !! this.options.pushState, this._hasPushState = !! (this.options.pushState && window.history && window.history.pushState);
              var t = this.getFragment(),
                  n = document.documentMode,
                  r = y.exec(navigator.userAgent.toLowerCase()) && (!n || n <= 7);
              r && (this.iframe = o('<iframe src="javascript:0" tabindex="-1" />').hide().appendTo("body")[0].contentWindow, this.navigate(t)), this._hasPushState ? o(window).bind("popstate", this.checkUrl) : this._wantsHashChange && "onhashchange" in window && !r ? o(window).bind("hashchange", this.checkUrl) : this._wantsHashChange && (this._checkUrlInterval = setInterval(this.checkUrl, this.interval)), this.fragment = t;
              var i = window.location,
                  u = i.pathname == this.options.root;
              if (this._wantsHashChange && this._wantsPushState && !this._hasPushState && !u) return this.fragment = this.getFragment(null, !0), window.location.replace(this.options.root + "#" + this.fragment), !0;
              this._wantsPushState && this._hasPushState && u && i.hash && (this.fragment = this.getHash().replace(g, ""), window.history.replaceState({}, document.title, i.protocol + "//" + i.host + this.options.root + this.fragment));
              if (!this.options.silent) return this.loadUrl()
          },
          stop: function() {
              o(window).unbind("popstate", this.checkUrl).unbind("hashchange", this.checkUrl), clearInterval(this._checkUrlInterval), m.started = !1
          },
          route: function(e, t) {
              this.handlers.unshift({
                  route: e,
                  callback: t
              })
          },
          checkUrl: function(e) {
              var t = this.getFragment();
              t == this.fragment && this.iframe && (t = this.getFragment(this.getHash(this.iframe)));
              if (t == this.fragment) return !1;
              this.iframe && this.navigate(t), this.loadUrl() || this.loadUrl(this.getHash())
          },
          loadUrl: function(e) {
              var t = this.fragment = this.getFragment(e),
                  n = s.any(this.handlers, function(e) {
                      if (e.route.test(t)) return e.callback(t), !0
                  });
              return n
          },
          navigate: function(e, t) {
              if (!m.started) return !1;
              if (!t || t === !0) t = {
                  trigger: t
              };
              var n = (e || "").replace(g, "");
              if (this.fragment == n) return;
              this._hasPushState ? (n.indexOf(this.options.root) != 0 && (n = this.options.root + n), this.fragment = n, window.history[t.replace ? "replaceState" : "pushState"]({}, document.title, n)) : this._wantsHashChange ? (this.fragment = n, this._updateHash(window.location, n, t.replace), this.iframe && n != this.getFragment(this.getHash(this.iframe)) && (t.replace || this.iframe.document.open().close(), this._updateHash(this.iframe.location, n, t.replace))) : window.location.assign(this.options.root + e), t.trigger && this.loadUrl(e)
          },
          _updateHash: function(e, t, n) {
              n ? e.replace(e.toString().replace(/(javascript:|#).*$/, "") + "#" + t) : e.hash = t
          }
      });
      var b = i.View = function(e) {
              this.cid = s.uniqueId("view"), this._configure(e || {}), this._ensureElement(), this.initialize.apply(this, arguments), this.delegateEvents()
          },
          w = /^(\S+)\s*(.*)$/,
          E = ["model", "collection", "el", "id", "attributes", "className", "tagName"];
      s.extend(b.prototype, a, {
          tagName: "div",
          $: function(e) {
              return this.$el.find(e)
          },
          initialize: function() {},
          render: function() {
              return this
          },
          remove: function() {
              return this.$el.remove(), this
          },
          make: function(e, t, n) {
              var r = document.createElement(e);
              return t && o(r).attr(t), n && o(r).html(n), r
          },
          setElement: function(e, t) {
              return this.$el && this.undelegateEvents(), this.$el = e instanceof o ? e : o(e), this.el = this.$el[0], t !== !1 && this.delegateEvents(), this
          },
          delegateEvents: function(e) {
              if (!e && !(e = C(this, "events"))) return;
              this.undelegateEvents();
              for (var t in e) {
                  var n = e[t];
                  s.isFunction(n) || (n = this[e[t]]);
                  if (!n) throw new Error('Method "' + e[t] + '" does not exist');
                  var r = t.match(w),
                      i = r[1],
                      o = r[2];
                  n = s.bind(n, this), i += ".delegateEvents" + this.cid, o === "" ? this.$el.bind(i, n) : this.$el.delegate(o, i, n)
              }
          },
          undelegateEvents: function() {
              this.$el.unbind(".delegateEvents" + this.cid)
          },
          _configure: function(e) {
              this.options && (e = s.extend({}, this.options, e));
              for (var t = 0, n = E.length; t < n; t++) {
                  var r = E[t];
                  e[r] && (this[r] = e[r])
              }
              this.options = e
          },
          _ensureElement: function() {
              if (!this.el) {
                  var e = C(this, "attributes") || {};
                  this.id && (e.id = this.id), this.className && (e["class"] = this.className), this.setElement(this.make(this.tagName, e), !1)
              } else this.setElement(this.el, !1)
          }
      });
      var S = function(e, t) {
          var n = N(this, e, t);
          return n.extend = this.extend, n
      };
      f.extend = l.extend = h.extend = b.extend = S;
      var x = {
          create: "POST",
          update: "PUT",
          "delete": "DELETE",
          read: "GET"
      };
      i.sync = function(e, t, n) {
          var r = x[e];
          n || (n = {});
          var u = {
              type: r,
              dataType: "json"
          };
          return n.url || (u.url = C(t, "url") || k()), !n.data && t && (e == "create" || e == "update") && (u.contentType = "application/json", u.data = JSON.stringify(t.toJSON())), i.emulateJSON && (u.contentType = "application/x-www-form-urlencoded", u.data = u.data ? {
              model: u.data
          } : {}), i.emulateHTTP && (r === "PUT" || r === "DELETE") && (i.emulateJSON && (u.data._method = r), u.type = "POST", u.beforeSend = function(e) {
              e.setRequestHeader("X-HTTP-Method-Override", r)
          }), u.type !== "GET" && !i.emulateJSON && (u.processData = !1), o.ajax(s.extend(u, n))
      }, i.wrapError = function(e, t, n) {
          return function(r, i) {
              i = r === t ? i : r, e ? e(t, i, n) : t.trigger("error", t, i, n)
          }
      };
      var T = function() {},
          N = function(e, t, n) {
              var r;
              return t && t.hasOwnProperty("constructor") ? r = t.constructor : r = function() {
                  e.apply(this, arguments)
              }, s.extend(r, e), T.prototype = e.prototype, r.prototype = new T, t && s.extend(r.prototype, t), n && s.extend(r, n), r.prototype.constructor = r, r.__super__ = e.prototype, r
          },
          C = function(e, t) {
              return !e || !e[t] ? null : s.isFunction(e[t]) ? e[t]() : e[t]
          },
          k = function() {
              throw new Error('A "url" property or function must be specified')
          }
  }.call(this), define("backbone", ["underscore", "jquery"], function(e) {
      return function() {
          var t, n;
          return t || e.Backbone
      }
  }(this)), define("models/snippet", ["jquery", "underscore", "backbone"], function(e, t, n) {
      return n.Model.extend({
          initialize: function() {
              this.set("fresh", !0)
          },
          getValues: function() {
              return t.reduce(this.get("fields"), function(e, n, r) {
                  return n["type"] == "select" ? e[r] = t.find(n.value, function(e) {
                      return e.selected
                  }).value : e[r] = n.value, e
              }, {})
          },
          idFriendlyTitle: function() {
              return this.get("title").replace(/\W/g, "").toLowerCase()
          },
          setField: function(e, t) {
              var n = this.get("fields");
              n[e].value = t, this.set("fields", n)
          }
      })
  }), define("text", ["module"], function(e) {
      var t, n, r = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP", "Msxml2.XMLHTTP.4.0"],
          i = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,
          s = /<body[^>]*>\s*([\s\S]+)\s*<\/body>/im,
          o = typeof location != "undefined" && location.href,
          u = o && location.protocol && location.protocol.replace(/\:/, ""),
          a = o && location.hostname,
          f = o && (location.port || undefined),
          l = [],
          c = e.config && e.config() || {};
      t = {
          version: "2.0.5",
          strip: function(e) {
              if (e) {
                  e = e.replace(i, "");
                  var t = e.match(s);
                  t && (e = t[1])
              } else e = "";
              return e
          },
          jsEscape: function(e) {
              return e.replace(/(['\\])/g, "\\$1").replace(/[\f]/g, "\\f").replace(/[\b]/g, "\\b").replace(/[\n]/g, "\\n").replace(/[\t]/g, "\\t").replace(/[\r]/g, "\\r").replace(/[\u2028]/g, "\\u2028").replace(/[\u2029]/g, "\\u2029")
          },
          createXhr: c.createXhr ||
              function() {
                  var e, t, n;
                  if (typeof XMLHttpRequest != "undefined") return new XMLHttpRequest;
                  if (typeof ActiveXObject != "undefined") for (t = 0; t < 3; t += 1) {
                      n = r[t];
                      try {
                          e = new ActiveXObject(n)
                      } catch (i) {}
                      if (e) {
                          r = [n];
                          break
                      }
                  }
                  return e
              },
          parseName: function(e) {
              var t, n, r, i = !1,
                  s = e.indexOf("."),
                  o = e.indexOf("./") === 0 || e.indexOf("../") === 0;
              return s !== -1 && (!o || s > 1) ? (t = e.substring(0, s), n = e.substring(s + 1, e.length)) : t = e, r = n || t, s = r.indexOf("!"), s !== -1 && (i = r.substring(s + 1) === "strip", r = r.substring(0, s), n ? n = r : t = r), {
                  moduleName: t,
                  ext: n,
                  strip: i
              }
          },
          xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/,
          useXhr: function(e, n, r, i) {
              var s, o, u, a = t.xdRegExp.exec(e);
              return a ? (s = a[2], o = a[3], o = o.split(":"), u = o[1], o = o[0], (!s || s === n) && (!o || o.toLowerCase() === r.toLowerCase()) && (!u && !o || u === i)) : !0
          },
          finishLoad: function(e, n, r, i) {
              r = n ? t.strip(r) : r, c.isBuild && (l[e] = r), i(r)
          },
          load: function(e, n, r, i) {
              if (i.isBuild && !i.inlineText) {
                  r();
                  return
              }
              c.isBuild = i.isBuild;
              var s = t.parseName(e),
                  l = s.moduleName + (s.ext ? "." + s.ext : ""),
                  h = n.toUrl(l),
                  p = c.useXhr || t.useXhr;
              !o || p(h, u, a, f) ? t.get(h, function(n) {
                  t.finishLoad(e, s.strip, n, r)
              }, function(e) {
                  r.error && r.error(e)
              }) : n([l], function(e) {
                  t.finishLoad(s.moduleName + "." + s.ext, s.strip, e, r)
              })
          },
          write: function(e, n, r, i) {
              if (l.hasOwnProperty(n)) {
                  var s = t.jsEscape(l[n]);
                  r.asModule(e + "!" + n, "define(function () { return '" + s + "';});\n")
              }
          },
          writeFile: function(e, n, r, i, s) {
              var o = t.parseName(n),
                  u = o.ext ? "." + o.ext : "",
                  a = o.moduleName + u,
                  f = r.toUrl(o.moduleName + u) + ".js";
              t.load(a, r, function(n) {
                  var r = function(e) {
                      return i(f, e)
                  };
                  r.asModule = function(e, t) {
                      return i.asModule(e, f, t)
                  }, t.write(e, a, r, s)
              }, s)
          }
      };
      if (c.env === "node" || !c.env && typeof process != "undefined" && process.versions && !! process.versions.node) n = require.nodeRequire("fs"), t.get = function(e, t) {
          var r = n.readFileSync(e, "utf8");
          r.indexOf("﻿") === 0 && (r = r.substring(1)), t(r)
      };
      else if (c.env === "xhr" || !c.env && t.createXhr()) t.get = function(e, n, r, i) {
          var s = t.createXhr(),
              o;
          s.open("GET", e, !0);
          if (i) for (o in i) i.hasOwnProperty(o) && s.setRequestHeader(o.toLowerCase(), i[o]);
          c.onXhr && c.onXhr(s, e), s.onreadystatechange = function(t) {
              var i, o;
              s.readyState === 4 && (i = s.status, i > 399 && i < 600 ? (o = new Error(e + " HTTP status: " + i), o.xhr = s, r(o)) : n(s.responseText))
          }, s.send(null)
      };
      else if (c.env === "rhino" || !c.env && typeof Packages != "undefined" && typeof java != "undefined") t.get = function(e, t) {
          var n, r, i = "utf-8",
              s = new java.io.File(e),
              o = java.lang.System.getProperty("line.separator"),
              u = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(s), i)),
              a = "";
          try {
              n = new java.lang.StringBuffer, r = u.readLine(), r && r.length() && r.charAt(0) === 65279 && (r = r.substring(1)), n.append(r);
              while ((r = u.readLine()) !== null) n.append(o), n.append(r);
              a = String(n.toString())
          } finally {
              u.close()
          }
          t(a)
      };
      return t
  }), define("text!templates/popover/popover-main.html", [], function() {
      return '<form class=\'form\'>\n  <div class=\'controls\'>\n    <% var compiled =  _.reduce(items, function(str, v, k){ %>\n      <% v["name"] = k; %>\n      <% return str + popoverTemplates[v["type"]](v); %>\n    <% }, "") %>\n    <%= compiled %>\n    <hr/>\n    <button id="save" class=\'btn btn-info\'>Save</button><button id="cancel" class=\'btn btn-danger\'>Cancel</button>\n  </div>\n</form>\n'
  }), define("text!templates/popover/popover-input.html", [], function() {
      return "<label class='control-label'> <%= label %> </label>\n<input class='input-large field' data-type=\"<%- type %>\" type='text' name='<%- name %>' id='<%- name %>' value ='<%- value %>' />\n"
  }), define("text!templates/popover/popover-select.html", [], function() {
      return '<label class=\'control-label\'> <%- label %> </label>\n<select class="field" data-type="<%- type %>" id=\'<%- name %>\'>\n<% _.each(value, function(v,k){ %>\n  <option value="<%- v["value"] %>" <% if (v["selected"]){ %> selected <% } %> ><%- v["label"] %></option>\n<% }); %>\n</select>\n'
  }), define("text!templates/popover/popover-textarea.html", [], function() {
      return "<label class='control-label'> <%- label %> </label>\n<textarea class=\"field\" data-type=\"<%- type %>\" style='min-height: 200px' id='<%- name %>'><%- value %></textarea>\n"
  }), define("text!templates/popover/popover-textarea-split.html", [], function() {
      return "<label class='control-label'> <%- label %> </label>\n<textarea class=\"field\" data-type=\"<%- type %>\" style='min-height: 200px' id='<%- name %>'><% for ( var i = 0; i < value.length ; i++ ) { %><%- value[i] %><% if (i < value.length - 1) { %><%- \"\\n\" %><% } %><% } %></textarea>\n"
  }), define("text!templates/popover/popover-checkbox.html", [], function() {
      return '<label class="checkbox control-group">\n  <input type="checkbox" data-type="<%- type %>" class="input-inline field" name="<%- name %>" id="<%- name %>"<% if(value) {%> checked="checked" <% } %>>\n  <%- label %>\n</label>\n'
  }), define("text!templates/snippet/formname.html", [], function() {
      return "<!-- Form Name -->\n<legend><%- name %></legend>\n"
  }), define("text!templates/snippet/prependedtext.html", [], function() {
      return '<!-- Prepended text-->\n<div class="control-group">\n  <label class="control-label" for="<%- id %>"><%- label %></label>\n  <div class="controls">\n    <div class="input-prepend">\n      <span class="add-on"><%- prepend %></span>\n      <input id="<%- id %>" name="<%- id %>" class="<%- inputsize %>" placeholder="<%- placeholder %>" type="text"<% if(required) {%> required <% } %> />\n    </div>\n    <% if (helptext.length > 0) { %><p class="help-block"><%- helptext %></p><% } %>\n  </div>\n</div>\n'
  }), define("text!templates/snippet/searchinput.html", [], function() {
      return '<!-- Search input-->\n<div class="control-group">\n  <label class="control-label" for="<%- id %>"><%- label %></label>\n  <div class="controls">\n    <input id="<%- id %>" name="<%- id %>" type="text" placeholder="<%- placeholder %>" class="<%- inputsize %> search-query" <% if(required) {%> required <% } %> />\n    <% if (helptext.length > 0) { %><p class="help-block"><%- helptext %></p><% } %>\n  </div>\n</div>\n'
  }), define("text!templates/snippet/textinput.html", [], function() {
      return '<!-- Text input-->\n<div class="control-group">\n  <label class="control-label" for="<%- id %>"><%- label %></label>\n  <div class="controls">\n    <input id="<%- id %>" name="<%- id %>" type="text" placeholder="<%- placeholder %>" class="<%- inputsize %>" <% if(required) {%> required <% } %> />\n    <% if (helptext.length > 0) { %><p class="help-block"><%- helptext %></p><% } %>\n  </div>\n</div>\n'
  }), define("text!templates/snippet/appendedcheckbox.html", [], function() {
      return '<!-- Appended checkbox -->\n<div class="control-group">\n  <label class="control-label" for="<%- id %>"><%- label %></label>\n  <div class="controls">\n    <div class="input-append">\n      <input id="<%- id %>" name="<%- id %>" class="span2" type="text" placeholder="<%- placeholder %>" <% if(required) {%> required <% } %> />\n      <span class="add-on">\n        <input type="checkbox"<% if (checked){ %> checked <% } %>>\n      </span>\n    </div>\n    <% if (helptext.length > 0) { %><p class="help-block"><%- helptext %></p><% } %>\n  </div>\n</div>\n'
  }), define("text!templates/snippet/appendedtext.html", [], function() {
      return '<!-- Appended Input-->\n<div class="control-group">\n  <label class="control-label" for="<%- id %>"><%- label %></label>\n  <div class="controls">\n    <div class="input-append">\n      <input id="<%- id %>" name="<%- id %>" class="<%- inputsize %>" placeholder="<%- placeholder %>" type="text"<% if(required) {%> required <% } %> />\n      <span class="add-on"><%- append %></span>\n    </div>\n    <% if (helptext.length > 0) { %><p class="help-block"><%- helptext %></p><% } %>\n  </div>\n</div>\n'
  }), define("text!templates/snippet/filebutton.html", [], function() {
      return '<!-- File Button --> \n<div class="control-group">\n  <label class="control-label" for="<%- id %>"><%- label %></label>\n  <div class="controls">\n    <input id="<%- id %>" name="<%- id %>" class="input-file" id="fileInput" type="file">\n  </div>\n</div>\n'
  }), define("text!templates/snippet/button.html", [], function() {
      return '<!-- Button -->\n<div class="control-group">\n  <label class="control-label" for="<%- id %>"><%- label %></label>\n  <div class="controls">\n    <button id="<%- id %>" name="<%- id %>" class=\'btn <%- buttontype %>\'><%- buttonlabel %></button>\n  </div>\n</div>\n'
  }), define("text!templates/snippet/buttondouble.html", [], function() {
      return '<!-- Button (Double) -->\n<div class="control-group">\n  <label class="control-label" for="<%- id %>"><%- label %></label>\n  <div class="controls">\n    <button id="<%- id %>" name="<%- id %>" class=\'btn <%- button1type %>\'><%- button1label %></button>\n    <button id="<%- id2 %>" name="<%- id2 %>" class=\'btn <%- button2type %>\'><%- button2label %></button>\n  </div>\n</div>\n'
  }), define("text!templates/snippet/buttondropdown.html", [], function() {
      return '<!-- Button Drop Down -->\n<div class="control-group">\n  <label class="control-label" for="<%- id %>"><%- label %></label>\n  <div class="controls">\n    <div class="input-append">\n      <input id="<%- id %>" name="<%- id %>" class="<%- inputsize %>" placeholder="<%- placeholder %>" type="text" <% if(required) {%> required <% } %> />\n      <div class="btn-group">\n        <button class="btn dropdown-toggle" data-toggle="dropdown">\n          <%- buttontext %>\n          <span class="caret"></span>\n        </button>\n        <ul class="dropdown-menuskip"><% _.each(buttonoptions, function(value) { %>\n          <li><a href="#"><%- value %></a></li><% }); %>\n        </ul>\n      </div>\n    </div>\n  </div>\n</div>\n'
  }), define("text!templates/snippet/multiplecheckboxes.html", [], function() {
      return '<!-- Multiple Checkboxes -->\n<div class="control-group">\n  <label class="control-label" for="<%- name %>"><%- label %></label>\n  <div class="controls"><% _.each(checkboxes, function(checkbox, i){ %>\n    <label class="checkbox" for="<%- id+\'-\'+i %>">\n      <input type="checkbox" name="<%- id %>" id="<%- id+\'-\'+i %>" value="<%- checkbox %>"<% if(required){ %> required="required"<% } %>>\n      <%- checkbox %>\n    </label><% }); %>\n  </div>\n</div>\n'
  }), define("text!templates/snippet/multiplecheckboxesinline.html", [], function() {
      return '<!-- Multiple Checkboxes (inline) -->\n<div class="control-group">\n  <label class="control-label" for="<%- name %>"><%- label %></label>\n  <div class="controls"><% _.each(checkboxes, function(checkbox, i){ %>\n    <label class="checkbox inline" for="<%- id+\'-\'+i %>">\n      <input type="checkbox" name="<%- id %>" id="<%- id+\'-\'+i %>" value="<%- checkbox %>"<% if(required){ %> required="required"<% } %>>\n      <%- checkbox %>\n    </label><% }); %>\n  </div>\n</div>\n'
  }), define("text!templates/snippet/multipleradios.html", [], function() {
      return '<!-- Multiple Radios -->\n<div class="control-group">\n  <label class="control-label" for="<%- id %>"><%- label %></label>\n  <div class="controls"><% _.each(radios, function(radio, i){ %>\n    <label class="radio" for="<%- id+\'-\'+i %>">\n      <input type="radio" name="<%- id %>" id="<%- id+\'-\'+i %>" value="<%- radio %>"  <% if (i < 1) { %> checked="checked" <% } %><% if(required){ %> required="required"<% } %>>\n      <%- radio %>\n    </label><% }); %>\n  </div>\n</div>\n'
  }), define("text!templates/snippet/multipleradiosinline.html", [], function() {
      return '<!-- Multiple Radios (inline) -->\n<div class="control-group">\n  <label class="control-label" for="<%- name %>"><%- label %></label>\n  <div class="controls"><% _.each(radios, function(radio, i){ %>\n    <label class="radio inline" for="<%- id+\'-\'+i %>">\n      <input type="radio" name="<%- id %>" id="<%- id+\'-\'+i %>" value="<%- radio %>" <% if(i < 1) { %>checked="checked" <% } %><% if(required){ %> required="required"<% } %>>\n      <%- radio %>\n    </label><% }); %>\n  </div>\n</div>\n'
  }), define("text!templates/snippet/passwordinput.html", [], function() {
      return '<!-- Password input-->\n<div class="control-group">\n  <label class="control-label" for="<%- id %>"><%- label %></label>\n  <div class="controls">\n    <input id="<%- id %>" name="<%- id %>" type="password" placeholder="<%- placeholder %>" class="<%- inputsize %>" <% if(required) {%> required <% } %> />\n    <% if (helptext.length > 0) { %><p class="help-block"><%- helptext %></p><% } %>\n  </div>\n</div>\n'
  }), define("text!templates/snippet/prependedcheckbox.html", [], function() {
      return '<!-- Prepended checkbox -->\n<div class="control-group">\n  <label class="control-label" for="<%- id %>"><%- label %></label>\n  <div class="controls">\n    <div class="input-prepend">\n      <span class="add-on">\n        <label class="checkbox">\n          <input type="checkbox" <% if (checked){ %>checked="checked"<% } %>>\n        </label>\n      </span>\n      <input id="<%- id %>" name="<%- id %>" class="<%- inputsize %>" type="text" placeholder="<%- placeholder %>" <% if(required) {%> required <% } %> />\n    </div>\n    <% if (helptext.length > 0) { %><p class="help-block"><%- helptext %></p><% } %>\n  </div>\n</div>\n'
  }), define("text!templates/snippet/selectbasic.html", [], function() {
      return '<!-- Select Basic -->\n<div class="control-group">\n  <label class="control-label" for="<%- id %>"><%- label %></label>\n  <div class="controls">\n    <select id="<%- id %>" name="<%- id %>" class="<%- inputsize %>"><% _.each(options, function(option) { %>\n      <option><%- option %></option><% }); %>\n    </select>\n  </div>\n</div>\n'
  }), define("text!templates/snippet/selectmultiple.html", [], function() {
      return '<!-- Select Multiple -->\n<div class="control-group">\n  <label class="control-label" for="<%- id %>"><%- label %></label>\n  <div class="controls">\n    <select id="<%- id %>" name="<%- id %>" class="<%- inputsize %>" multiple="multiple"><% _.each(options, function(option) { %>\n      <option><%- option %></option><% }); %>\n    </select>\n  </div>\n</div>\n'
  }), define("text!templates/snippet/textarea.html", [], function() {
      return '<!-- Textarea -->\n<div class="control-group">\n  <label class="control-label" for ="<%- id %>"><%- label %></label>\n  <div class="controls">                     \n    <textarea id="<%- id %>" name="<%- id %>" ><%- textarea %></textarea>\n  </div>\n</div>\n'
  }), define("templates/snippet/snippet-templates", ["require", "text!templates/snippet/formname.html", "text!templates/snippet/prependedtext.html", "text!templates/snippet/searchinput.html", "text!templates/snippet/textinput.html", "text!templates/snippet/appendedcheckbox.html", "text!templates/snippet/appendedtext.html", "text!templates/snippet/filebutton.html", "text!templates/snippet/button.html", "text!templates/snippet/buttondouble.html", "text!templates/snippet/buttondropdown.html", "text!templates/snippet/multiplecheckboxes.html", "text!templates/snippet/multiplecheckboxesinline.html", "text!templates/snippet/multipleradios.html", "text!templates/snippet/multipleradiosinline.html", "text!templates/snippet/passwordinput.html", "text!templates/snippet/prependedcheckbox.html", "text!templates/snippet/prependedtext.html", "text!templates/snippet/searchinput.html", "text!templates/snippet/selectbasic.html", "text!templates/snippet/selectmultiple.html", "text!templates/snippet/textarea.html", "text!templates/snippet/textinput.html"], function(e) {
      var t = e("text!templates/snippet/formname.html"),
          n = e("text!templates/snippet/prependedtext.html"),
          r = e("text!templates/snippet/searchinput.html"),
          i = e("text!templates/snippet/textinput.html"),
          s = e("text!templates/snippet/appendedcheckbox.html"),
          o = e("text!templates/snippet/appendedtext.html"),
          u = e("text!templates/snippet/filebutton.html"),
          a = e("text!templates/snippet/button.html"),
          f = e("text!templates/snippet/buttondouble.html"),
          l = e("text!templates/snippet/buttondropdown.html"),
          c = e("text!templates/snippet/multiplecheckboxes.html"),
          h = e("text!templates/snippet/multiplecheckboxesinline.html"),
          p = e("text!templates/snippet/multipleradios.html"),
          d = e("text!templates/snippet/multipleradiosinline.html"),
          v = e("text!templates/snippet/passwordinput.html"),
          m = e("text!templates/snippet/prependedcheckbox.html"),
          n = e("text!templates/snippet/prependedtext.html"),
          g = e("text!templates/snippet/searchinput.html"),
          y = e("text!templates/snippet/selectbasic.html"),
          b = e("text!templates/snippet/selectmultiple.html"),
          w = e("text!templates/snippet/textarea.html"),
          i = e("text!templates/snippet/textinput.html");
      return {
          formname: t,
          prependedtext: n,
          search: r,
          textinput: i,
          appendedcheckbox: s,
          appendedtext: o,
          filebutton: u,
          singlebutton: a,
          doublebutton: f,
          buttondropdown: l,
          multiplecheckboxes: c,
          multiplecheckboxesinline: h,
          multipleradios: p,
          multipleradiosinline: d,
          passwordinput: v,
          prependedcheckbox: m,
          prependedtext: n,
          searchinput: g,
          selectbasic: y,
          selectmultiple: b,
          textarea: w,
          textinput: i
      }
  }), !
      function(e) {
          e(function() {
              e.support.transition = function() {
                  var e = function() {
                      var e = document.createElement("bootstrap"),
                          t = {
                              WebkitTransition: "webkitTransitionEnd",
                              MozTransition: "transitionend",
                              OTransition: "oTransitionEnd otransitionend",
                              transition: "transitionend"
                          },
                          n;
                      for (n in t) if (e.style[n] !== undefined) return t[n]
                  }();
                  return e && {
                      end: e
                  }
              }()
          })
      }(window.jQuery), !
      function(e) {
          var t = '[data-dismiss="alert"]',
              n = function(n) {
                  e(n).on("click", t, this.close)
              };
          n.prototype.close = function(t) {
              function n() {
                  s.trigger("closed").remove()
              }
              var r = e(this),
                  i = r.attr("data-target"),
                  s;
              i || (i = r.attr("href"), i = i && i.replace(/.*(?=#[^\s]*$)/, "")), s = e(i), t && t.preventDefault(), s.length || (s = r.hasClass("alert") ? r : r.parent()), s.trigger(t = e.Event("close"));
              if (t.isDefaultPrevented()) return;
              s.removeClass("in"), e.support.transition && s.hasClass("fade") ? s.on(e.support.transition.end, n) : n()
          };
          var r = e.fn.alert;
          e.fn.alert = function(t) {
              return this.each(function() {
                  var r = e(this),
                      i = r.data("alert");
                  i || r.data("alert", i = new n(this)), typeof t == "string" && i[t].call(r)
              })
          }, e.fn.alert.Constructor = n, e.fn.alert.noConflict = function() {
              return e.fn.alert = r, this
          }, e(document).on("click.alert.data-api", t, n.prototype.close)
      }(window.jQuery), !
      function(e) {
          var t = function(t, n) {
              this.$element = e(t), this.options = e.extend({}, e.fn.button.defaults, n)
          };
          t.prototype.setState = function(e) {
              var t = "disabled",
                  n = this.$element,
                  r = n.data(),
                  i = n.is("input") ? "val" : "html";
              e += "Text", r.resetText || n.data("resetText", n[i]()), n[i](r[e] || this.options[e]), setTimeout(function() {
                  e == "loadingText" ? n.addClass(t).attr(t, t) : n.removeClass(t).removeAttr(t)
              }, 0)
          }, t.prototype.toggle = function() {
              var e = this.$element.closest('[data-toggle="buttons-radio"]');
              e && e.find(".active").removeClass("active"), this.$element.toggleClass("active")
          };
          var n = e.fn.button;
          e.fn.button = function(n) {
              return this.each(function() {
                  var r = e(this),
                      i = r.data("button"),
                      s = typeof n == "object" && n;
                  i || r.data("button", i = new t(this, s)), n == "toggle" ? i.toggle() : n && i.setState(n)
              })
          }, e.fn.button.defaults = {
              loadingText: "loading..."
          }, e.fn.button.Constructor = t, e.fn.button.noConflict = function() {
              return e.fn.button = n, this
          }, e(document).on("click.button.data-api", "[data-toggle^=button]", function(t) {
              var n = e(t.target);
              n.hasClass("btn") || (n = n.closest(".btn")), n.button("toggle")
          })
      }(window.jQuery), !
      function(e) {
          var t = function(t, n) {
              this.$element = e(t), this.$indicators = this.$element.find(".carousel-indicators"), this.options = n, this.options.pause == "hover" && this.$element.on("mouseenter", e.proxy(this.pause, this)).on("mouseleave", e.proxy(this.cycle, this))
          };
          t.prototype = {
              cycle: function(t) {
                  return t || (this.paused = !1), this.interval && clearInterval(this.interval), this.options.interval && !this.paused && (this.interval = setInterval(e.proxy(this.next, this), this.options.interval)), this
              },
              getActiveIndex: function() {
                  return this.$active = this.$element.find(".item.active"), this.$items = this.$active.parent().children(), this.$items.index(this.$active)
              },
              to: function(t) {
                  var n = this.getActiveIndex(),
                      r = this;
                  if (t > this.$items.length - 1 || t < 0) return;
                  return this.sliding ? this.$element.one("slid", function() {
                      r.to(t)
                  }) : n == t ? this.pause().cycle() : this.slide(t > n ? "next" : "prev", e(this.$items[t]))
              },
              pause: function(t) {
                  return t || (this.paused = !0), this.$element.find(".next, .prev").length && e.support.transition.end && (this.$element.trigger(e.support.transition.end), this.cycle(!0)), clearInterval(this.interval), this.interval = null, this
              },
              next: function() {
                  if (this.sliding) return;
                  return this.slide("next")
              },
              prev: function() {
                  if (this.sliding) return;
                  return this.slide("prev")
              },
              slide: function(t, n) {
                  var r = this.$element.find(".item.active"),
                      i = n || r[t](),
                      s = this.interval,
                      o = t == "next" ? "left" : "right",
                      u = t == "next" ? "first" : "last",
                      a = this,
                      f;
                  this.sliding = !0, s && this.pause(), i = i.length ? i : this.$element.find(".item")[u](), f = e.Event("slide", {
                      relatedTarget: i[0],
                      direction: o
                  });
                  if (i.hasClass("active")) return;
                  this.$indicators.length && (this.$indicators.find(".active").removeClass("active"), this.$element.one("slid", function() {
                      var t = e(a.$indicators.children()[a.getActiveIndex()]);
                      t && t.addClass("active")
                  }));
                  if (e.support.transition && this.$element.hasClass("slide")) {
                      this.$element.trigger(f);
                      if (f.isDefaultPrevented()) return;
                      i.addClass(t), i[0].offsetWidth, r.addClass(o), i.addClass(o), this.$element.one(e.support.transition.end, function() {
                          i.removeClass([t, o].join(" ")).addClass("active"), r.removeClass(["active", o].join(" ")), a.sliding = !1, setTimeout(function() {
                              a.$element.trigger("slid")
                          }, 0)
                      })
                  } else {
                      this.$element.trigger(f);
                      if (f.isDefaultPrevented()) return;
                      r.removeClass("active"), i.addClass("active"), this.sliding = !1, this.$element.trigger("slid")
                  }
                  return s && this.cycle(), this
              }
          };
          var n = e.fn.carousel;
          e.fn.carousel = function(n) {
              return this.each(function() {
                  var r = e(this),
                      i = r.data("carousel"),
                      s = e.extend({}, e.fn.carousel.defaults, typeof n == "object" && n),
                      o = typeof n == "string" ? n : s.slide;
                  i || r.data("carousel", i = new t(this, s)), typeof n == "number" ? i.to(n) : o ? i[o]() : s.interval && i.pause().cycle()
              })
          }, e.fn.carousel.defaults = {
              interval: 5e3,
              pause: "hover"
          }, e.fn.carousel.Constructor = t, e.fn.carousel.noConflict = function() {
              return e.fn.carousel = n, this
          }, e(document).on("click.carousel.data-api", "[data-slide], [data-slide-to]", function(t) {
              var n = e(this),
                  r, i = e(n.attr("data-target") || (r = n.attr("href")) && r.replace(/.*(?=#[^\s]+$)/, "")),
                  s = e.extend({}, i.data(), n.data()),
                  o;
              i.carousel(s), (o = n.attr("data-slide-to")) && i.data("carousel").pause().to(o).cycle(), t.preventDefault()
          })
      }(window.jQuery), !
      function(e) {
          var t = function(t, n) {
              this.$element = e(t), this.options = e.extend({}, e.fn.collapse.defaults, n), this.options.parent && (this.$parent = e(this.options.parent)), this.options.toggle && this.toggle()
          };
          t.prototype = {
              constructor: t,
              dimension: function() {
                  var e = this.$element.hasClass("width");
                  return e ? "width" : "height"
              },
              show: function() {
                  var t, n, r, i;
                  if (this.transitioning || this.$element.hasClass("in")) return;
                  t = this.dimension(), n = e.camelCase(["scroll", t].join("-")), r = this.$parent && this.$parent.find("> .accordion-group > .in");
                  if (r && r.length) {
                      i = r.data("collapse");
                      if (i && i.transitioning) return;
                      r.collapse("hide"), i || r.data("collapse", null)
                  }
                  this.$element[t](0), this.transition("addClass", e.Event("show"), "shown"), e.support.transition && this.$element[t](this.$element[0][n])
              },
              hide: function() {
                  var t;
                  if (this.transitioning || !this.$element.hasClass("in")) return;
                  t = this.dimension(), this.reset(this.$element[t]()), this.transition("removeClass", e.Event("hide"), "hidden"), this.$element[t](0)
              },
              reset: function(e) {
                  var t = this.dimension();
                  return this.$element.removeClass("collapse")[t](e || "auto")[0].offsetWidth, this.$element[e !== null ? "addClass" : "removeClass"]("collapse"), this
              },
              transition: function(t, n, r) {
                  var i = this,
                      s = function() {
                          n.type == "show" && i.reset(), i.transitioning = 0, i.$element.trigger(r)
                      };
                  this.$element.trigger(n);
                  if (n.isDefaultPrevented()) return;
                  this.transitioning = 1, this.$element[t]("in"), e.support.transition && this.$element.hasClass("collapse") ? this.$element.one(e.support.transition.end, s) : s()
              },
              toggle: function() {
                  this[this.$element.hasClass("in") ? "hide" : "show"]()
              }
          };
          var n = e.fn.collapse;
          e.fn.collapse = function(n) {
              return this.each(function() {
                  var r = e(this),
                      i = r.data("collapse"),
                      s = e.extend({}, e.fn.collapse.defaults, r.data(), typeof n == "object" && n);
                  i || r.data("collapse", i = new t(this, s)), typeof n == "string" && i[n]()
              })
          }, e.fn.collapse.defaults = {
              toggle: !0
          }, e.fn.collapse.Constructor = t, e.fn.collapse.noConflict = function() {
              return e.fn.collapse = n, this
          }, e(document).on("click.collapse.data-api", "[data-toggle=collapse]", function(t) {
              var n = e(this),
                  r, i = n.attr("data-target") || t.preventDefault() || (r = n.attr("href")) && r.replace(/.*(?=#[^\s]+$)/, ""),
                  s = e(i).data("collapse") ? "toggle" : n.data();
              n[e(i).hasClass("in") ? "addClass" : "removeClass"]("collapsed"), e(i).collapse(s)
          })
      }(window.jQuery), !
      function(e) {
          function t() {
              e(r).each(function() {
                  n(e(this)).removeClass("open")
              })
          }
          function n(t) {
              var n = t.attr("data-target"),
                  r;
              n || (n = t.attr("href"), n = n && /#/.test(n) && n.replace(/.*(?=#[^\s]*$)/, "")), r = n && e(n);
              if (!r || !r.length) r = t.parent();
              return r
          }
          var r = "[data-toggle=dropdown]",
              i = function(t) {
                  var n = e(t).on("click.dropdown.data-api", this.toggle);
                  e("html").on("click.dropdown.data-api", function() {
                      n.parent().removeClass("open")
                  })
              };
          i.prototype = {
              constructor: i,
              toggle: function(r) {
                  var i = e(this),
                      s, o;
                  if (i.is(".disabled, :disabled")) return;
                  return s = n(i), o = s.hasClass("open"), t(), o || s.toggleClass("open"), i.focus(), !1
              },
              keydown: function(t) {
                  var i, s, o, u, a, f;
                  if (!/(38|40|27)/.test(t.keyCode)) return;
                  i = e(this), t.preventDefault(), t.stopPropagation();
                  if (i.is(".disabled, :disabled")) return;
                  u = n(i), a = u.hasClass("open");
                  if (!a || a && t.keyCode == 27) return t.which == 27 && u.find(r).focus(), i.click();
                  s = e("[role=menuskip] li:not(.divider):visible a", u);
                  if (!s.length) return;
                  f = s.index(s.filter(":focus")), t.keyCode == 38 && f > 0 && f--, t.keyCode == 40 && f < s.length - 1 && f++, ~f || (f = 0), s.eq(f).focus()
              }
          };
          var s = e.fn.dropdown;
          e.fn.dropdown = function(t) {
              return this.each(function() {
                  var n = e(this),
                      r = n.data("dropdown");
                  r || n.data("dropdown", r = new i(this)), typeof t == "string" && r[t].call(n)
              })
          }, e.fn.dropdown.Constructor = i, e.fn.dropdown.noConflict = function() {
              return e.fn.dropdown = s, this
          }, e(document).on("click.dropdown.data-api", t).on("click.dropdown.data-api", ".dropdown form", function(e) {
              e.stopPropagation()
          }).on("click.dropdown-menuskip", function(e) {
              e.stopPropagation()
          }).on("click.dropdown.data-api", r, i.prototype.toggle).on("keydown.dropdown.data-api", r + ", [role=menuskip]", i.prototype.keydown)
      }(window.jQuery), !
      function(e) {
          var t = function(t, n) {
              this.options = n, this.$element = e(t).delegate('[data-dismiss="modal"]', "click.dismiss.modal", e.proxy(this.hide, this)), this.options.remote && this.$element.find(".modal-body").load(this.options.remote)
          };
          t.prototype = {
              constructor: t,
              toggle: function() {
                  return this[this.isShown ? "hide" : "show"]()
              },
              show: function() {
                  var t = this,
                      n = e.Event("show");
                  this.$element.trigger(n);
                  if (this.isShown || n.isDefaultPrevented()) return;
                  this.isShown = !0, this.escape(), this.backdrop(function() {
                      var n = e.support.transition && t.$element.hasClass("fade");
                      t.$element.parent().length || t.$element.appendTo(document.body), t.$element.show(), n && t.$element[0].offsetWidth, t.$element.addClass("in").attr("aria-hidden", !1), t.enforceFocus(), n ? t.$element.one(e.support.transition.end, function() {
                          t.$element.focus().trigger("shown")
                      }) : t.$element.focus().trigger("shown")
                  })
              },
              hide: function(t) {
                  t && t.preventDefault();
                  var n = this;
                  t = e.Event("hide"), this.$element.trigger(t);
                  if (!this.isShown || t.isDefaultPrevented()) return;
                  this.isShown = !1, this.escape(), e(document).off("focusin.modal"), this.$element.removeClass("in").attr("aria-hidden", !0), e.support.transition && this.$element.hasClass("fade") ? this.hideWithTransition() : this.hideModal()
              },
              enforceFocus: function() {
                  var t = this;
                  e(document).on("focusin.modal", function(e) {
                      t.$element[0] !== e.target && !t.$element.has(e.target).length && t.$element.focus()
                  })
              },
              escape: function() {
                  var e = this;
                  this.isShown && this.options.keyboard ? this.$element.on("keyup.dismiss.modal", function(t) {
                      t.which == 27 && e.hide()
                  }) : this.isShown || this.$element.off("keyup.dismiss.modal")
              },
              hideWithTransition: function() {
                  var t = this,
                      n = setTimeout(function() {
                          t.$element.off(e.support.transition.end), t.hideModal()
                      }, 500);
                  this.$element.one(e.support.transition.end, function() {
                      clearTimeout(n), t.hideModal()
                  })
              },
              hideModal: function() {
                  var e = this;
                  this.$element.hide(), this.backdrop(function() {
                      e.removeBackdrop(), e.$element.trigger("hidden")
                  })
              },
              removeBackdrop: function() {
                  this.$backdrop && this.$backdrop.remove(), this.$backdrop = null
              },
              backdrop: function(t) {
                  var n = this,
                      r = this.$element.hasClass("fade") ? "fade" : "";
                  if (this.isShown && this.options.backdrop) {
                      var i = e.support.transition && r;
                      this.$backdrop = e('<div class="modal-backdrop ' + r + '" />').appendTo(document.body), this.$backdrop.click(this.options.backdrop == "static" ? e.proxy(this.$element[0].focus, this.$element[0]) : e.proxy(this.hide, this)), i && this.$backdrop[0].offsetWidth, this.$backdrop.addClass("in");
                      if (!t) return;
                      i ? this.$backdrop.one(e.support.transition.end, t) : t()
                  } else!this.isShown && this.$backdrop ? (this.$backdrop.removeClass("in"), e.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one(e.support.transition.end, t) : t()) : t && t()
              }
          };
          var n = e.fn.modal;
          e.fn.modal = function(n) {
              return this.each(function() {
                  var r = e(this),
                      i = r.data("modal"),
                      s = e.extend({}, e.fn.modal.defaults, r.data(), typeof n == "object" && n);
                  i || r.data("modal", i = new t(this, s)), typeof n == "string" ? i[n]() : s.show && i.show()
              })
          }, e.fn.modal.defaults = {
              backdrop: !0,
              keyboard: !0,
              show: !0
          }, e.fn.modal.Constructor = t, e.fn.modal.noConflict = function() {
              return e.fn.modal = n, this
          }, e(document).on("click.modal.data-api", '[data-toggle="modal"]', function(t) {
              var n = e(this),
                  r = n.attr("href"),
                  i = e(n.attr("data-target") || r && r.replace(/.*(?=#[^\s]+$)/, "")),
                  s = i.data("modal") ? "toggle" : e.extend({
                      remote: !/#/.test(r) && r
                  }, i.data(), n.data());
              t.preventDefault(), i.modal(s).one("hide", function() {
                  n.focus()
              })
          })
      }(window.jQuery), !
      function(e) {
          var t = function(e, t) {
              this.init("tooltip", e, t)
          };
          t.prototype = {
              constructor: t,
              init: function(t, n, r) {
                  var i, s, o, u, a;
                  this.type = t, this.$element = e(n), this.options = this.getOptions(r), this.enabled = !0, o = this.options.trigger.split(" ");
                  for (a = o.length; a--;) u = o[a], u == "click" ? this.$element.on("click." + this.type, this.options.selector, e.proxy(this.toggle, this)) : u != "manual" && (i = u == "hover" ? "mouseenter" : "focus", s = u == "hover" ? "mouseleave" : "blur", this.$element.on(i + "." + this.type, this.options.selector, e.proxy(this.enter, this)), this.$element.on(s + "." + this.type, this.options.selector, e.proxy(this.leave, this)));
                  this.options.selector ? this._options = e.extend({}, this.options, {
                      trigger: "manual",
                      selector: ""
                  }) : this.fixTitle()
              },
              getOptions: function(t) {
                  return t = e.extend({}, e.fn[this.type].defaults, this.$element.data(), t), t.delay && typeof t.delay == "number" && (t.delay = {
                      show: t.delay,
                      hide: t.delay
                  }), t
              },
              enter: function(t) {
                  var n = e.fn[this.type].defaults,
                      r = {},
                      i;
                  this._options && e.each(this._options, function(e, t) {
                      n[e] != t && (r[e] = t)
                  }, this), i = e(t.currentTarget)[this.type](r).data(this.type);
                  if (!i.options.delay || !i.options.delay.show) return i.show();
                  clearTimeout(this.timeout), i.hoverState = "in", this.timeout = setTimeout(function() {
                      i.hoverState == "in" && i.show()
                  }, i.options.delay.show)
              },
              leave: function(t) {
                  var n = e(t.currentTarget)[this.type](this._options).data(this.type);
                  this.timeout && clearTimeout(this.timeout);
                  if (!n.options.delay || !n.options.delay.hide) return n.hide();
                  n.hoverState = "out", this.timeout = setTimeout(function() {
                      n.hoverState == "out" && n.hide()
                  }, n.options.delay.hide)
              },
              show: function() {
                  var t, n, r, i, s, o, u = e.Event("show");
                  if (this.hasContent() && this.enabled) {
                      this.$element.trigger(u);
                      if (u.isDefaultPrevented()) return;
                      t = this.tip(), this.setContent(), this.options.animation && t.addClass("fade"), s = typeof this.options.placement == "function" ? this.options.placement.call(this, t[0], this.$element[0]) : this.options.placement, t.detach().css({
                          top: 0,
                          left: 0,
                          display: "block"
                      }), this.options.container ? t.appendTo(this.options.container) : t.insertAfter(this.$element), n = this.getPosition(), r = t[0].offsetWidth, i = t[0].offsetHeight;
                      switch (s) {
                          case "bottom":
                              o = {
                                  top: n.top + n.height,
                                  left: n.left + n.width / 2 - r / 2
                              };
                              break;
                          case "top":
                              o = {
                                  top: n.top - i,
                                  left: n.left + n.width / 2 - r / 2
                              };
                              break;
                          case "left":
                              o = {
                                  top: n.top + n.height / 2 - i / 2,
                                  left: n.left - r
                              };
                              break;
                          case "right":
                              o = {
                                  top: n.top + n.height / 2 - i / 2,
                                  left: n.left + n.width
                              }
                      }
                      this.applyPlacement(o, s), this.$element.trigger("shown")
                  }
              },
              applyPlacement: function(e, t) {
                  var n = this.tip(),
                      r = n[0].offsetWidth,
                      i = n[0].offsetHeight,
                      s, o, u, a;
                  n.offset(e).addClass(t).addClass("in"), s = n[0].offsetWidth, o = n[0].offsetHeight, t == "top" && o != i && (e.top = e.top + i - o, a = !0), t == "bottom" || t == "top" ? (u = 0, e.left < 0 && (u = e.left * -2, e.left = 0, n.offset(e), s = n[0].offsetWidth, o = n[0].offsetHeight), this.replaceArrow(u - r + s, s, "left")) : this.replaceArrow(o - i, o, "top"), a && n.offset(e)
              },
              replaceArrow: function(e, t, n) {
                  this.arrow().css(n, e ? 50 * (1 - e / t) + "%" : "")
              },
              setContent: function() {
                  var e = this.tip(),
                      t = this.getTitle();
                  e.find(".tooltip-inner")[this.options.html ? "html" : "text"](t), e.removeClass("fade in top bottom left right")
              },
              hide: function() {
                  function t() {
                      var t = setTimeout(function() {
                          r.off(e.support.transition.end).detach()
                      }, 500);
                      r.one(e.support.transition.end, function() {
                          clearTimeout(t), r.detach()
                      })
                  }
                  var n = this,
                      r = this.tip(),
                      i = e.Event("hide");
                  this.$element.trigger(i);
                  if (i.isDefaultPrevented()) return;
                  return r.removeClass("in"), e.support.transition && this.$tip.hasClass("fade") ? t() : r.detach(), this.$element.trigger("hidden"), this
              },
              fixTitle: function() {
                  var e = this.$element;
                  (e.attr("title") || typeof e.attr("data-original-title") != "string") && e.attr("data-original-title", e.attr("title") || "").attr("title", "")
              },
              hasContent: function() {
                  return this.getTitle()
              },
              getPosition: function() {
                  var t = this.$element[0];
                  return e.extend({}, typeof t.getBoundingClientRect == "function" ? t.getBoundingClientRect() : {
                      width: t.offsetWidth,
                      height: t.offsetHeight
                  }, this.$element.offset())
              },
              getTitle: function() {
                  var e, t = this.$element,
                      n = this.options;
                  return e = t.attr("data-original-title") || (typeof n.title == "function" ? n.title.call(t[0]) : n.title), e
              },
              tip: function() {
                  return this.$tip = this.$tip || e(this.options.template)
              },
              arrow: function() {
                  return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
              },
              validate: function() {
                  this.$element[0].parentNode || (this.hide(), this.$element = null, this.options = null)
              },
              enable: function() {
                  this.enabled = !0
              },
              disable: function() {
                  this.enabled = !1
              },
              toggleEnabled: function() {
                  this.enabled = !this.enabled
              },
              toggle: function(t) {
                  var n = t ? e(t.currentTarget)[this.type](this._options).data(this.type) : this;
                  n.tip().hasClass("in") ? n.hide() : n.show()
              },
              destroy: function() {
                  this.hide().$element.off("." + this.type).removeData(this.type)
              }
          };
          var n = e.fn.tooltip;
          e.fn.tooltip = function(n) {
              return this.each(function() {
                  var r = e(this),
                      i = r.data("tooltip"),
                      s = typeof n == "object" && n;
                  i || r.data("tooltip", i = new t(this, s)), typeof n == "string" && i[n]()
              })
          }, e.fn.tooltip.Constructor = t, e.fn.tooltip.defaults = {
              animation: !0,
              placement: "top",
              selector: !1,
              template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
              trigger: "hover focus",
              title: "",
              delay: 0,
              html: !1,
              container: !1
          }, e.fn.tooltip.noConflict = function() {
              return e.fn.tooltip = n, this
          }
      }(window.jQuery), !
      function(e) {
          var t = function(e, t) {
              this.init("popover", e, t)
          };
          t.prototype = e.extend({}, e.fn.tooltip.Constructor.prototype, {
              constructor: t,
              setContent: function() {
                  var e = this.tip(),
                      t = this.getTitle(),
                      n = this.getContent();
                  e.find(".popover-title")[this.options.html ? "html" : "text"](t), e.find(".popover-content")[this.options.html ? "html" : "text"](n), e.removeClass("fade top bottom left right in")
              },
              hasContent: function() {
                  return this.getTitle() || this.getContent()
              },
              getContent: function() {
                  var e, t = this.$element,
                      n = this.options;
                  return e = (typeof n.content == "function" ? n.content.call(t[0]) : n.content) || t.attr("data-content"), e
              },
              tip: function() {
                  return this.$tip || (this.$tip = e(this.options.template)), this.$tip
              },
              destroy: function() {
                  this.hide().$element.off("." + this.type).removeData(this.type)
              }
          });
          var n = e.fn.popover;
          e.fn.popover = function(n) {
              return this.each(function() {
                  var r = e(this),
                      i = r.data("popover"),
                      s = typeof n == "object" && n;
                  i || r.data("popover", i = new t(this, s)), typeof n == "string" && i[n]()
              })
          }, e.fn.popover.Constructor = t, e.fn.popover.defaults = e.extend({}, e.fn.tooltip.defaults, {
              placement: "right",
              trigger: "click",
              content: "",
              template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
          }), e.fn.popover.noConflict = function() {
              return e.fn.popover = n, this
          }
      }(window.jQuery), !
      function(e) {
          function t(t, n) {
              var r = e.proxy(this.process, this),
                  i = e(t).is("body") ? e(window) : e(t),
                  s;
              this.options = e.extend({}, e.fn.scrollspy.defaults, n), this.$scrollElement = i.on("scroll.scroll-spy.data-api", r), this.selector = (this.options.target || (s = e(t).attr("href")) && s.replace(/.*(?=#[^\s]+$)/, "") || "") + " .nav li > a", this.$body = e("body"), this.refresh(), this.process()
          }
          t.prototype = {
              constructor: t,
              refresh: function() {
                  var t = this,
                      n;
                  this.offsets = e([]), this.targets = e([]), n = this.$body.find(this.selector).map(function() {
                      var n = e(this),
                          r = n.data("target") || n.attr("href"),
                          i = /^#\w/.test(r) && e(r);
                      return i && i.length && [
                          [i.position().top + (!e.isWindow(t.$scrollElement.get(0)) && t.$scrollElement.scrollTop()), r]
                      ] || null
                  }).sort(function(e, t) {
                      return e[0] - t[0]
                  }).each(function() {
                      t.offsets.push(this[0]), t.targets.push(this[1])
                  })
              },
              process: function() {
                  var e = this.$scrollElement.scrollTop() + this.options.offset,
                      t = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight,
                      n = t - this.$scrollElement.height(),
                      r = this.offsets,
                      i = this.targets,
                      s = this.activeTarget,
                      o;
                  if (e >= n) return s != (o = i.last()[0]) && this.activate(o);
                  for (o = r.length; o--;) s != i[o] && e >= r[o] && (!r[o + 1] || e <= r[o + 1]) && this.activate(i[o])
              },
              activate: function(t) {
                  var n, r;
                  this.activeTarget = t, e(this.selector).parent(".active").removeClass("active"), r = this.selector + '[data-target="' + t + '"],' + this.selector + '[href="' + t + '"]', n = e(r).parent("li").addClass("active"), n.parent(".dropdown-menuskip").length && (n = n.closest("li.dropdown").addClass("active")), n.trigger("activate")
              }
          };
          var n = e.fn.scrollspy;
          e.fn.scrollspy = function(n) {
              return this.each(function() {
                  var r = e(this),
                      i = r.data("scrollspy"),
                      s = typeof n == "object" && n;
                  i || r.data("scrollspy", i = new t(this, s)), typeof n == "string" && i[n]()
              })
          }, e.fn.scrollspy.Constructor = t, e.fn.scrollspy.defaults = {
              offset: 10
          }, e.fn.scrollspy.noConflict = function() {
              return e.fn.scrollspy = n, this
          }, e(window).on("load", function() {
              e('[data-spy="scroll"]').each(function() {
                  var t = e(this);
                  t.scrollspy(t.data())
              })
          })
      }(window.jQuery), !
      function(e) {
          var t = function(t) {
              this.element = e(t)
          };
          t.prototype = {
              constructor: t,
              show: function() {
                  var t = this.element,
                      n = t.closest("ul:not(.dropdown-menuskip)"),
                      r = t.attr("data-target"),
                      i, s, o;
                  r || (r = t.attr("href"), r = r && r.replace(/.*(?=#[^\s]*$)/, ""));
                  if (t.parent("li").hasClass("active")) return;
                  i = n.find(".active:last a")[0], o = e.Event("show", {
                      relatedTarget: i
                  }), t.trigger(o);
                  if (o.isDefaultPrevented()) return;
                  s = e(r), this.activate(t.parent("li"), n), this.activate(s, s.parent(), function() {
                      t.trigger({
                          type: "shown",
                          relatedTarget: i
                      })
                  })
              },
              activate: function(t, n, r) {
                  function i() {
                      s.removeClass("active").find("> .dropdown-menuskip > .active").removeClass("active"), t.addClass("active"), o ? (t[0].offsetWidth, t.addClass("in")) : t.removeClass("fade"), t.parent(".dropdown-menuskip") && t.closest("li.dropdown").addClass("active"), r && r()
                  }
                  var s = n.find("> .active"),
                      o = r && e.support.transition && s.hasClass("fade");
                  o ? s.one(e.support.transition.end, i) : i(), s.removeClass("in")
              }
          };
          var n = e.fn.tab;
          e.fn.tab = function(n) {
              return this.each(function() {
                  var r = e(this),
                      i = r.data("tab");
                  i || r.data("tab", i = new t(this)), typeof n == "string" && i[n]()
              })
          }, e.fn.tab.Constructor = t, e.fn.tab.noConflict = function() {
              return e.fn.tab = n, this
          }, e(document).on("click.tab.data-api", '[data-toggle="tab"], [data-toggle="pill"]', function(t) {
              t.preventDefault(), e(this).tab("show")
          })
      }(window.jQuery), !
      function(e) {
          var t = function(t, n) {
              this.$element = e(t), this.options = e.extend({}, e.fn.typeahead.defaults, n), this.matcher = this.options.matcher || this.matcher, this.sorter = this.options.sorter || this.sorter, this.highlighter = this.options.highlighter || this.highlighter, this.updater = this.options.updater || this.updater, this.source = this.options.source, this.$menu = e(this.options.menu), this.shown = !1, this.listen()
          };
          t.prototype = {
              constructor: t,
              select: function() {
                  var e = this.$menu.find(".active").attr("data-value");
                  return this.$element.val(this.updater(e)).change(), this.hide()
              },
              updater: function(e) {
                  return e
              },
              show: function() {
                  var t = e.extend({}, this.$element.position(), {
                      height: this.$element[0].offsetHeight
                  });
                  return this.$menu.insertAfter(this.$element).css({
                      top: t.top + t.height,
                      left: t.left
                  }).show(), this.shown = !0, this
              },
              hide: function() {
                  return this.$menu.hide(), this.shown = !1, this
              },
              lookup: function(t) {
                  var n;
                  return this.query = this.$element.val(), !this.query || this.query.length < this.options.minLength ? this.shown ? this.hide() : this : (n = e.isFunction(this.source) ? this.source(this.query, e.proxy(this.process, this)) : this.source, n ? this.process(n) : this)
              },
              process: function(t) {
                  var n = this;
                  return t = e.grep(t, function(e) {
                      return n.matcher(e)
                  }), t = this.sorter(t), t.length ? this.render(t.slice(0, this.options.items)).show() : this.shown ? this.hide() : this
              },
              matcher: function(e) {
                  return ~e.toLowerCase().indexOf(this.query.toLowerCase())
              },
              sorter: function(e) {
                  var t = [],
                      n = [],
                      r = [],
                      i;
                  while (i = e.shift()) i.toLowerCase().indexOf(this.query.toLowerCase()) ? ~i.indexOf(this.query) ? n.push(i) : r.push(i) : t.push(i);
                  return t.concat(n, r)
              },
              highlighter: function(e) {
                  var t = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
                  return e.replace(new RegExp("(" + t + ")", "ig"), function(e, t) {
                      return "<strong>" + t + "</strong>"
                  })
              },
              render: function(t) {
                  var n = this;
                  return t = e(t).map(function(t, r) {
                      return t = e(n.options.item).attr("data-value", r), t.find("a").html(n.highlighter(r)), t[0]
                  }), t.first().addClass("active"), this.$menu.html(t), this
              },
              next: function(t) {
                  var n = this.$menu.find(".active").removeClass("active"),
                      r = n.next();
                  r.length || (r = e(this.$menu.find("li")[0])), r.addClass("active")
              },
              prev: function(e) {
                  var t = this.$menu.find(".active").removeClass("active"),
                      n = t.prev();
                  n.length || (n = this.$menu.find("li").last()), n.addClass("active")
              },
              listen: function() {
                  this.$element.on("focus", e.proxy(this.focus, this)).on("blur", e.proxy(this.blur, this)).on("keypress", e.proxy(this.keypress, this)).on("keyup", e.proxy(this.keyup, this)), this.eventSupported("keydown") && this.$element.on("keydown", e.proxy(this.keydown, this)), this.$menu.on("click", e.proxy(this.click, this)).on("mouseenter", "li", e.proxy(this.mouseenter, this)).on("mouseleave", "li", e.proxy(this.mouseleave, this))
              },
              eventSupported: function(e) {
                  var t = e in this.$element;
                  return t || (this.$element.setAttribute(e, "return;"), t = typeof this.$element[e] == "function"), t
              },
              move: function(e) {
                  if (!this.shown) return;
                  switch (e.keyCode) {
                      case 9:
                      case 13:
                      case 27:
                          e.preventDefault();
                          break;
                      case 38:
                          e.preventDefault(), this.prev();
                          break;
                      case 40:
                          e.preventDefault(), this.next()
                  }
                  e.stopPropagation()
              },
              keydown: function(t) {
                  this.suppressKeyPressRepeat = ~e.inArray(t.keyCode, [40, 38, 9, 13, 27]), this.move(t)
              },
              keypress: function(e) {
                  if (this.suppressKeyPressRepeat) return;
                  this.move(e)
              },
              keyup: function(e) {
                  switch (e.keyCode) {
                      case 40:
                      case 38:
                      case 16:
                      case 17:
                      case 18:
                          break;
                      case 9:
                      case 13:
                          if (!this.shown) return;
                          this.select();
                          break;
                      case 27:
                          if (!this.shown) return;
                          this.hide();
                          break;
                      default:
                          this.lookup()
                  }
                  e.stopPropagation(), e.preventDefault()
              },
              focus: function(e) {
                  this.focused = !0
              },
              blur: function(e) {
                  this.focused = !1, !this.mousedover && this.shown && this.hide()
              },
              click: function(e) {
                  e.stopPropagation(), e.preventDefault(), this.select(), this.$element.focus()
              },
              mouseenter: function(t) {
                  this.mousedover = !0, this.$menu.find(".active").removeClass("active"), e(t.currentTarget).addClass("active")
              },
              mouseleave: function(e) {
                  this.mousedover = !1, !this.focused && this.shown && this.hide()
              }
          };
          var n = e.fn.typeahead;
          e.fn.typeahead = function(n) {
              return this.each(function() {
                  var r = e(this),
                      i = r.data("typeahead"),
                      s = typeof n == "object" && n;
                  i || r.data("typeahead", i = new t(this, s)), typeof n == "string" && i[n]()
              })
          }, e.fn.typeahead.defaults = {
              source: [],
              items: 8,
              menu: '<ul class="typeahead dropdown-menuskip"></ul>',
              item: '<li><a href="#"></a></li>',
              minLength: 1
          }, e.fn.typeahead.Constructor = t, e.fn.typeahead.noConflict = function() {
              return e.fn.typeahead = n, this
          }, e(document).on("focus.typeahead.data-api", '[data-provide="typeahead"]', function(t) {
              var n = e(this);
              if (n.data("typeahead")) return;
              n.typeahead(n.data())
          })
      }(window.jQuery), !
      function(e) {
          var t = function(t, n) {
              this.options = e.extend({}, e.fn.affix.defaults, n), this.$window = e(window).on("scroll.affix.data-api", e.proxy(this.checkPosition, this)).on("click.affix.data-api", e.proxy(function() {
                  setTimeout(e.proxy(this.checkPosition, this), 1)
              }, this)), this.$element = e(t), this.checkPosition()
          };
          t.prototype.checkPosition = function() {
              if (!this.$element.is(":visible")) return;
              var t = e(document).height(),
                  n = this.$window.scrollTop(),
                  r = this.$element.offset(),
                  i = this.options.offset,
                  s = i.bottom,
                  o = i.top,
                  u = "affix affix-top affix-bottom",
                  a;
              typeof i != "object" && (s = o = i), typeof o == "function" && (o = i.top()), typeof s == "function" && (s = i.bottom()), a = this.unpin != null && n + this.unpin <= r.top ? !1 : s != null && r.top + this.$element.height() >= t - s ? "bottom" : o != null && n <= o ? "top" : !1;
              if (this.affixed === a) return;
              this.affixed = a, this.unpin = a == "bottom" ? r.top - n : null, this.$element.removeClass(u).addClass("affix" + (a ? "-" + a : ""))
          };
          var n = e.fn.affix;
          e.fn.affix = function(n) {
              return this.each(function() {
                  var r = e(this),
                      i = r.data("affix"),
                      s = typeof n == "object" && n;
                  i || r.data("affix", i = new t(this, s)), typeof n == "string" && i[n]()
              })
          }, e.fn.affix.Constructor = t, e.fn.affix.defaults = {
              offset: 0
          }, e.fn.affix.noConflict = function() {
              return e.fn.affix = n, this
          }, e(window).on("load", function() {
              e('[data-spy="affix"]').each(function() {
                  var t = e(this),
                      n = t.data();
                  n.offset = n.offset || {}, n.offsetBottom && (n.offset.bottom = n.offsetBottom), n.offsetTop && (n.offset.top = n.offsetTop), t.affix(n)
              })
          })
      }(window.jQuery), define("bootstrap", ["jquery"], function(e) {
      return function() {
          var t, n;
          return t || e.$.fn.popover
      }
  }(this)), define("views/snippet", ["jquery", "underscore", "backbone", "text!templates/popover/popover-main.html", "text!templates/popover/popover-input.html", "text!templates/popover/popover-select.html", "text!templates/popover/popover-textarea.html", "text!templates/popover/popover-textarea-split.html", "text!templates/popover/popover-checkbox.html", "templates/snippet/snippet-templates", "bootstrap"], function(e, t, n, r, i, s, o, u, a, f) {
      return n.View.extend({
          tagName: "div",
          className: "component",
          initialize: function() {
              this.template = t.template(f[this.model.idFriendlyTitle()]), this.popoverTemplates = {
                  input: t.template(i),
                  select: t.template(s),
                  textarea: t.template(o),
                  "textarea-split": t.template(u),
                  checkbox: t.template(a)
              }
          },
          render: function(e) {
              var n = this,
                  i = t.template(r)({
                      title: n.model.get("title"),
                      items: n.model.get("fields"),
                      popoverTemplates: n.popoverTemplates
                  });
              return e ? this.$el.html(n.template(n.model.getValues())).attr({
                  "data-content": i,
                  "data-title": n.model.get("title"),
                  "data-trigger": "manual",
                  "data-html": !0
              }) : this.$el.html(n.template(n.model.getValues()))
          }
      })
  }), define("text!templates/app/temp.html", [], function() {
      return "<form class='form-horizontal span6' id='temp'>\n  <%= text %>\n</form>\n"
  }), define("helper/pubsub", ["jquery", "underscore", "backbone"], function(e, t, n) {
      return t.extend({}, n.Events)
  }), define("views/temp-snippet", ["jquery", "views/snippet", "text!templates/app/temp.html", "helper/pubsub"], function(e, t, n, r) {
      return t.extend({
          initialize: function() {
              r.on("newTempPostRender", this.postRender, this), this.constructor.__super__.initialize.call(this), this.tempTemplate = _.template(n)
          },
          className: "temp",
          render: function() {
              return this.$el.html(this.tempTemplate({
                  text: this.constructor.__super__.render.call(this).html()
              }))
          },
          postRender: function(e) {
              this.tempForm = this.$el.find("form")[0], this.halfHeight = Math.floor(this.tempForm.clientHeight / 2), this.halfWidth = Math.floor(this.tempForm.clientWidth / 2), this.centerOnEvent(e)
          },
          events: {
              mousemove: "mouseMoveHandler",
              mouseup: "mouseUpHandler"
          },
          centerOnEvent: function(e) {
              var t = e.pageX,
                  n = e.pageY;
              this.tempForm.style.top = n - this.halfHeight + "px", this.tempForm.style.left = t - this.halfWidth + "px", r.trigger("tempMove", e)
          },
          mouseMoveHandler: function(e) {
              e.preventDefault(), this.centerOnEvent(e)
          },
          mouseUpHandler: function(e) {
              e.preventDefault(), r.trigger("tempDrop", e, this.model), this.remove()
          }
      })
  }), define("views/tab-snippet", ["jquery", "underscore", "backbone", "models/snippet", "views/snippet", "views/temp-snippet", "helper/pubsub"], function(e, t, n, r, i, s, o) {
      return i.extend({
          events: {
              mousedown: "mouseDownHandler"
          },
          mouseDownHandler: function(t) {
              t.preventDefault(), t.stopPropagation(), e(".popover").hide(), e("body").append((new s({
                  model: new r(e.extend(!0, {}, this.model.attributes))
              })).render()), o.trigger("newTempPostRender", t)
          }
      })
  }), define("collections/snippets", ["jquery", "underscore", "backbone", "models/snippet", "views/tab-snippet"], function(e, t, n, r, i) {
      return n.Collection.extend({
          model: r,
          renderAll: function() {
              return this.map(function(e) {
                  return (new i({
                      model: e
                  })).render()
              })
          }
      })
  }), define("views/my-form-snippet", ["jquery", "underscore", "backbone", "views/snippet", "views/temp-snippet", "helper/pubsub"], function(e, t, n, r, i, s) {
      return r.extend({
          events: {
              click: "preventPropagation",
              mousedown: "mouseDownHandler",
              mouseup: "mouseUpHandler"
          },
          mouseDownHandler: function(t) {
              t.stopPropagation(), t.preventDefault();
              var n = this;
              e(".popover").remove(), this.$el.popover("show"), e(".popover #save").on("click", this.saveHandler(n)), e(".popover #cancel").on("click", this.cancelHandler(n)), this.model.get("title") !== "Form Name" && e("body").on("mousemove", function(e) {
                  if (Math.abs(t.pageX - e.pageX) > 10 || Math.abs(t.pageY - e.pageY) > 10) n.$el.popover("destroy"), s.trigger("mySnippetDrag", t, n.model), n.mouseUpHandler()
              })
          },
          preventPropagation: function(e) {
              e.stopPropagation(), e.preventDefault()
          },
          mouseUpHandler: function(t) {
              e("body").off("mousemove")
          },
          saveHandler: function(n) {
              return function(r) {
                  r.preventDefault();
                  var i = e(".popover .field");
                  t.each(i, function(r) {
                      var i = e(r),
                          s = i.attr("data-type"),
                          o = i.attr("id");
                      switch (s) {
                          case "checkbox":
                              n.model.setField(o, i.is(":checked"));
                              break;
                          case "input":
                              n.model.setField(o, i.val());
                              break;
                          case "textarea":
                              n.model.setField(o, i.val());
                              break;
                          case "textarea-split":
                              n.model.setField(o, t.chain(i.val().split("\n")).map(function(t) {
                                  return e.trim(t)
                              }).filter(function(e) {
                                  return e.length > 0
                              }).value());
                              break;
                          case "select":
                              var u = t.map(i.find("option"), function(t) {
                                  return {
                                      value: t.value,
                                      selected: t.selected,
                                      label: e(t).text()
                                  }
                              });
                              n.model.setField(o, u)
                      }
                  }), n.model.trigger("change"), e(".popover").remove()
              }
          },
          cancelHandler: function(t) {
              return function(n) {
                  n.preventDefault(), e(".popover").remove(), t.model.trigger("change")
              }
          }
      })
  }), define("collections/my-form-snippets", ["jquery", "underscore", "backbone", "models/snippet", "collections/snippets", "views/my-form-snippet"], function(e, t, n, r, i, s) {
      return i.extend({
          model: r,
          initialize: function() {
              this.counter = {}, this.on("add", this.giveUniqueId)
          },
          giveUniqueId: function(e) {
              if (!e.get("fresh")) return;
              e.set("fresh", !1);
              var t = e.attributes.fields.id.value;
              typeof this.counter[t] == "undefined" ? this.counter[t] = 0 : this.counter[t] += 1, e.setField("id", t + "-" + this.counter[t]), typeof e.get("fields")["id2"] != "undefined" && e.setField("id2", t + "2-" + this.counter[t])
          },
          containsFileType: function() {
              return typeof this.find(function(e) {
                  return e.attributes.title === "File Button"
              }) != "undefined"
          },
          renderAll: function() {
              return this.map(function(e) {
                  return (new s({
                      model: e
                  })).render(!0)
              })
          },
          renderAllClean: function() {
              return this.map(function(e) {
                  return (new s({
                      model: e
                  })).render(!1)
              })
          }
      })
  }), define("text!templates/app/tab-nav.html", [], function() {
      return '<li><a href="#<%= id %>" data-toggle="tab"><%= title %></a></li>\n'
  }), define("views/tab", ["jquery", "underscore", "backbone", "text!templates/app/tab-nav.html"], function(e, t, n, r) {
      return n.View.extend({
          tagName: "div",
          className: "tab-pane",
          initialize: function() {
              this.id = this.options.id.toLowerCase().replace(/\W/g, ""), this.tabNavTemplate = t.template(r), this.render()
          },
          render: function() {
              var n = this;
              n.collection !== undefined ? t.each(this.collection.renderAll(), function(e) {
                  n.$el.append(e)
              }) : n.options.content && n.$el.append(n.options.content), e("#formtabs").append(this.tabNavTemplate({
                  title: this.options.title,
                  id: this.id
              })), this.$el.attr("id", this.id), this.$el.appendTo(".tab-content"), this.delegateEvents()
          }
      })
  }), define("text!templates/app/renderform.html", [], function() {
      return '<form class="form-horizontal" <% if(multipart){ %>enctype="multipart/form-data"<% } %>>\n<fieldset>\n\n<%= text %>\n</fieldset>\n</form>\n'
  }), define("views/my-form", ["jquery", "underscore", "backbone", "views/temp-snippet", "helper/pubsub", "text!templates/app/renderform.html"], function(e, t, n, r, i, s) {
      return n.View.extend({
          tagName: "fieldset",
          initialize: function() {
              this.collection.on("add", this.render, this), this.collection.on("remove", this.render, this), this.collection.on("change", this.render, this), i.on("mySnippetDrag", this.handleSnippetDrag, this), i.on("tempMove", this.handleTempMove, this), i.on("tempDrop", this.handleTempDrop, this), this.$build = e("#build"), this.renderForm = t.template(s), this.render()
          },
          render: function() {
              this.$el.empty();
              var n = this,
                  r = !1;
              t.each(this.collection.renderAll(), function(e) {
                  n.$el.append(e)
              }), e("#render").val(n.renderForm({
                  multipart: this.collection.containsFileType(),
                  text: t.map(this.collection.renderAllClean(), function(e) {
                      return e.html()
                  }).join("\n")
              })), this.$el.appendTo("#build form"), this.delegateEvents()
          },
          getBottomAbove: function(n) {
              var r = e(this.$el.find(".component")),
                  i = t.find(r, function(t) {
                      return e(t).position().top + e(t).height() > n - 90 ? !0 : !1
                  });
              return i ? i : r[0]
          },
          handleSnippetDrag: function(t, n) {
              e("body").append((new r({
                  model: n
              })).render()), this.collection.remove(n), i.trigger("newTempPostRender", t)
          },
          handleTempMove: function(t) {
              e(".target").removeClass("target"), t.pageX >= this.$build.position().left && t.pageX < this.$build.width() + this.$build.position().left && t.pageY >= this.$build.position().top && t.pageY < this.$build.height() + this.$build.position().top ? e(this.getBottomAbove(t.pageY)).addClass("target") : e(".target").removeClass("target")
          },
          handleTempDrop: function(t, n, r) {
              if (t.pageX >= this.$build.position().left && t.pageX < this.$build.width() + this.$build.position().left && t.pageY >= this.$build.position().top && t.pageY < this.$build.height() + this.$build.position().top) {
                  var r = e(".target").index();
                  e(".target").removeClass("target"), this.collection.add(n, {
                      at: r + 1
                  })
              } else e(".target").removeClass("target")
          }
      })
  }), define("text!data/input.json", [], function() {
      return '[\n  {\n    "title": "Text Input",\n    "fields": {\n      "id": {\n        "label": "ID / Name",\n        "type": "input",\n        "value": "textinput"\n      },\n      "label": {\n        "label": "Label Text",\n        "type": "input",\n        "value": "Text Input"\n      },\n      "placeholder": {\n        "label": "Placeholder",\n        "type": "input",\n        "value": "placeholder"\n      },\n      "helptext": {\n        "label": "Help Text",\n        "type": "input",\n        "value": "help"\n      },\n      "required": {\n        "label": "Required",\n        "type": "checkbox",\n        "value": false\n      },\n      "inputsize": {\n        "label": "Input Size",\n        "type": "select",\n        "value": [\n          {\n            "value": "input-mini",\n            "label": "Mini",\n            "selected": false\n          },\n          {\n            "value": "input-small",\n            "label": "Small",\n            "selected": false\n          },\n          {\n            "value": "input-medium",\n            "label": "Medium",\n            "selected": false\n          },\n          {\n            "value": "input-large",\n            "label": "Large",\n            "selected": false\n          },\n          {\n            "value": "input-xlarge",\n            "label": "Xlarge",\n            "selected": true\n          },\n          {\n            "value": "input-xxlarge",\n            "label": "Xxlarge",\n            "selected": false\n          }\n        ]\n      }\n    }\n  },\n  {\n    "title": "Password Input",\n    "fields": {\n      "id": {\n        "label": "ID / Name",\n        "type": "input",\n        "value": "passwordinput"\n      },\n      "label": {\n        "label": "Label Text",\n        "type": "input",\n        "value": "Password Input"\n      },\n      "placeholder": {\n        "label": "Placeholder",\n        "type": "input",\n        "value": "placeholder"\n      },\n      "helptext": {\n        "label": "Help Text",\n        "type": "input",\n        "value": "help"\n      },\n      "required": {\n        "label": "Required",\n        "type": "checkbox",\n        "value": false\n      },\n      "inputsize": {\n        "label": "Input Size",\n        "type": "select",\n        "value": [\n          {\n            "value": "input-mini",\n            "label": "Mini",\n            "selected": false\n          },\n          {\n            "value": "input-small",\n            "label": "Small",\n            "selected": false\n          },\n          {\n            "value": "input-medium",\n            "label": "Medium",\n            "selected": false\n          },\n          {\n            "value": "input-large",\n            "label": "Large",\n            "selected": false\n          },\n          {\n            "value": "input-xlarge",\n            "label": "Xlarge",\n            "selected": true\n          },\n          {\n            "value": "input-xxlarge",\n            "label": "Xxlarge",\n            "selected": false\n          }\n        ]\n      }\n    }\n  },\n  {\n    "title": "Search Input",\n    "fields": {\n      "id": {\n        "label": "ID / Name",\n        "type": "input",\n        "value": "searchinput"\n      },\n      "label": {\n        "label": "Label Text",\n        "type": "input",\n        "value": "Search Input"\n      },\n      "placeholder": {\n        "label": "Placeholder",\n        "type": "input",\n        "value": "placeholder"\n      },\n      "helptext": {\n        "label": "Help Text",\n        "type": "input",\n        "value": "help"\n      },\n      "required": {\n        "label": "Required",\n        "type": "checkbox",\n        "value": false\n      },\n      "inputsize": {\n        "label": "Input Size",\n        "type": "select",\n        "value": [\n          {\n            "value": "input-mini",\n            "label": "Mini",\n            "selected": false\n          },\n          {\n            "value": "input-small",\n            "label": "Small",\n            "selected": false\n          },\n          {\n            "value": "input-medium",\n            "label": "Medium",\n            "selected": false\n          },\n          {\n            "value": "input-large",\n            "label": "Large",\n            "selected": false\n          },\n          {\n            "value": "input-xlarge",\n            "label": "Xlarge",\n            "selected": true\n          },\n          {\n            "value": "input-xxlarge",\n            "label": "Xxlarge",\n            "selected": false\n          }\n        ]\n      }\n    }\n  },\n  {\n    "title": "Prepended Text",\n    "fields": {\n      "id": {\n        "label": "ID / Name",\n        "type": "input",\n        "value": "prependedtext"\n      },\n      "label": {\n        "label": "Label Text",\n        "type": "input",\n        "value": "Prepended Text"\n      },\n      "prepend": {\n        "label": "Prepend",\n        "type": "input",\n        "value": "prepend"\n      },\n      "placeholder": {\n        "label": "Placeholder",\n        "type": "input",\n        "value": "placeholder"\n      },\n      "helptext": {\n        "label": "Help Text",\n        "type": "input",\n        "value": "help"\n      },\n      "required": {\n        "label": "Required",\n        "type": "checkbox",\n        "value": false\n      },\n      "inputsize": {\n        "label": "Input Size",\n        "type": "select",\n        "value": [\n          {\n            "value": "input-mini",\n            "label": "Mini",\n            "selected": false\n          },\n          {\n            "value": "input-small",\n            "label": "Small",\n            "selected": false\n          },\n          {\n            "value": "input-medium",\n            "label": "Medium",\n            "selected": false\n          },\n          {\n            "value": "input-large",\n            "label": "Large",\n            "selected": false\n          },\n          {\n            "value": "input-xlarge",\n            "label": "Xlarge",\n            "selected": true\n          },\n          {\n            "value": "input-xxlarge",\n            "label": "Xxlarge",\n            "selected": false\n          }\n        ]\n      }\n    }\n  },\n  {\n    "title": "Appended Text",\n    "fields": {\n      "id": {\n        "label": "ID / Name",\n        "type": "input",\n        "value": "appendedtext"\n      },\n      "label": {\n        "label": "Label Text",\n        "type": "input",\n        "value": "Appended Text"\n      },\n      "append": {\n        "label": "Append",\n        "type": "input",\n        "value": "append"\n      },\n      "placeholder": {\n        "label": "Placeholder",\n        "type": "input",\n        "value": "placeholder"\n      },\n      "helptext": {\n        "label": "Help Text",\n        "type": "input",\n        "value": "help"\n      },\n      "required": {\n        "label": "Required",\n        "type": "checkbox",\n        "value": false\n      },\n      "inputsize": {\n        "label": "Input Size",\n        "type": "select",\n        "value": [\n          {\n            "value": "input-mini",\n            "label": "Mini",\n            "selected": false\n          },\n          {\n            "value": "input-small",\n            "label": "Small",\n            "selected": false\n          },\n          {\n            "value": "input-medium",\n            "label": "Medium",\n            "selected": false\n          },\n          {\n            "value": "input-large",\n            "label": "Large",\n            "selected": false\n          },\n          {\n            "value": "input-xlarge",\n            "label": "Xlarge",\n            "selected": true\n          },\n          {\n            "value": "input-xxlarge",\n            "label": "Xxlarge",\n            "selected": false\n          }\n        ]\n      }\n    }\n  },\n  {\n    "title": "Prepended Checkbox",\n    "fields": {\n      "id": {\n        "label": "ID / Name",\n        "type": "input",\n        "value": "prependedcheckbox"\n      },\n      "label": {\n        "label": "Label Text",\n        "type": "input",\n        "value": "Prepended Checkbox"\n      },\n      "placeholder": {\n        "label": "Placeholder",\n        "type": "input",\n        "value": "placeholder"\n      },\n      "helptext": {\n        "label": "Help Text",\n        "type": "input",\n        "value": "help"\n      },\n      "checked": {\n        "label": "Checked",\n        "type": "checkbox",\n        "value": false\n      },\n      "required": {\n        "label": "Required",\n        "type": "checkbox",\n        "value": false\n      },\n      "inputsize": {\n        "label": "Input Size",\n        "type": "select",\n        "value": [\n          {\n            "value": "input-mini",\n            "label": "Mini",\n            "selected": false\n          },\n          {\n            "value": "input-small",\n            "label": "Small",\n            "selected": false\n          },\n          {\n            "value": "input-medium",\n            "label": "Medium",\n            "selected": false\n          },\n          {\n            "value": "input-large",\n            "label": "Large",\n            "selected": false\n          },\n          {\n            "value": "input-xlarge",\n            "label": "Xlarge",\n            "selected": true\n          },\n          {\n            "value": "input-xxlarge",\n            "label": "Xxlarge",\n            "selected": false\n          }\n        ]\n      }\n    }\n  },\n  {\n    "title": "Appended Checkbox",\n    "fields": {\n      "id": {\n        "label": "ID / Name",\n        "type": "input",\n        "value": "appendedcheckbox"\n      },\n      "label": {\n        "label": "Label Text",\n        "type": "input",\n        "value": "Appended Checkbox"\n      },\n      "placeholder": {\n        "label": "Placeholder",\n        "type": "input",\n        "value": "placeholder"\n      },\n      "helptext": {\n        "label": "Help Text",\n        "type": "input",\n        "value": "help"\n      },\n      "checked": {\n        "label": "Checked",\n        "type": "checkbox",\n        "value": false\n      },\n      "required": {\n        "label": "Required",\n        "type": "checkbox",\n        "value": false\n      },\n      "inputsize": {\n        "label": "Input Size",\n        "type": "select",\n        "value": [\n          {\n            "value": "input-mini",\n            "label": "Mini",\n            "selected": false\n          },\n          {\n            "value": "input-small",\n            "label": "Small",\n            "selected": false\n          },\n          {\n            "value": "input-medium",\n            "label": "Medium",\n            "selected": false\n          },\n          {\n            "value": "input-large",\n            "label": "Large",\n            "selected": false\n          },\n          {\n            "value": "input-xlarge",\n            "label": "Xlarge",\n            "selected": true\n          },\n          {\n            "value": "input-xxlarge",\n            "label": "Xxlarge",\n            "selected": false\n          }\n        ]\n      }\n    }\n  },\n  {\n    "title": "Button Drop Down",\n    "fields": {\n      "id": {\n        "label": "ID / Name",\n        "type": "input",\n        "value": "buttondropdown"\n      },\n      "label": {\n        "label": "Label Text",\n        "type": "input",\n        "value": "Button Drop Down"\n      },\n      "placeholder": {\n        "label": "Placeholder",\n        "type": "input",\n        "value": "placeholder"\n      },\n      "buttontext": {\n        "label": "Button Text",\n        "type": "input",\n        "value": "Action"\n      },\n      "buttonoptions": {\n        "label": "Options",\n        "type": "textarea-split",\n        "value": [\n          "Option one",\n          "Option two",\n          "Option three"\n        ]\n      },\n      "required": {\n        "label": "Required",\n        "type": "checkbox",\n        "value": false\n      },\n      "inputsize": {\n        "label": "Input Size",\n        "type": "select",\n        "value": [\n          {\n            "value": "input-mini",\n            "label": "Mini",\n            "selected": false\n          },\n          {\n            "value": "input-small",\n            "label": "Small",\n            "selected": false\n          },\n          {\n            "value": "input-medium",\n            "label": "Medium",\n            "selected": false\n          },\n          {\n            "value": "input-large",\n            "label": "Large",\n            "selected": false\n          },\n          {\n            "value": "input-xlarge",\n            "label": "Xlarge",\n            "selected": true\n          },\n          {\n            "value": "input-xxlarge",\n            "label": "Xxlarge",\n            "selected": false\n          }\n        ]\n      }\n    }\n  },\n  {\n    "title": "Text Area",\n    "fields": {\n      "id": {\n        "label": "ID / Name",\n        "type": "input",\n        "value": "textarea"\n      },\n      "label": {\n        "label": "Label Text",\n        "type": "input",\n        "value": "Text Area"\n      },\n      "textarea": {\n        "label": "Starting Text",\n        "type": "textarea",\n        "value": "default text"\n      }\n    }\n  }\n]'
  }), define("text!data/radio.json", [], function() {
      return '[\n  {\n    "title": "Multiple Radios",\n    "fields": {\n      "id": {\n        "label": "ID / Name",\n        "type": "input",\n        "value": "multipleradios"\n      },\n      "label": {\n        "label": "Label Text",\n        "type": "input",\n        "value": "Multiple Radios"\n      },\n      "required": {\n        "label": "Required",\n        "type": "checkbox",\n        "value": false\n      },\n      "radios": {\n        "label": "Radios",\n        "type": "textarea-split",\n        "value": [\n          "Option one",\n          "Option two"\n        ]\n      }\n    }\n  },\n  {\n    "title": "Multiple Radios Inline",\n    "fields": {\n      "id": {\n        "label": "ID / Name",\n        "type": "input",\n        "value": "multipleradiosinline"\n      },\n      "label": {\n        "label": "Label Text",\n        "type": "input",\n        "value": "Inline Radios"\n      },\n      "required": {\n        "label": "Required",\n        "type": "checkbox",\n        "value": false\n      },\n      "radios": {\n        "label": "Radios",\n        "type": "textarea-split",\n        "value": [\n          1,\n          2,\n          3,\n          4\n        ]\n      }\n    }\n  },\n  {\n    "title": "Multiple Checkboxes",\n    "fields": {\n      "id": {\n        "label": "ID / Name",\n        "type": "input",\n        "value": "multiplecheckboxes"\n      },\n      "label": {\n        "label": "Label Text",\n        "type": "input",\n        "value": "Multiple Checkboxes"\n      },\n      "required": {\n        "label": "Required",\n        "type": "checkbox",\n        "value": false\n      },\n      "checkboxes": {\n        "label": "Checkboxes",\n        "type": "textarea-split",\n        "value": [\n          "Option one",\n          "Option two"\n        ]\n      }\n    }\n  },\n  {\n    "title": "Multiple Checkboxes Inline",\n    "fields": {\n      "id": {\n        "label": "ID / Name",\n        "type": "input",\n        "value": "multiplecheckboxesinline"\n      },\n      "label": {\n        "label": "Label Text",\n        "type": "input",\n        "value": "Inline Checkboxes"\n      },\n      "required": {\n        "label": "Required",\n        "type": "checkbox",\n        "value": false\n      },\n      "checkboxes": {\n        "label": "Checkboxes",\n        "type": "textarea-split",\n        "value": [\n          1,\n          2,\n          3,\n          4\n        ]\n      }\n    }\n  }\n]'
  }), define("text!data/select.json", [], function() {
      return '[\n  {\n    "title": "Select Basic",\n    "fields": {\n      "id": {\n        "label": "ID / Name",\n        "type": "input",\n        "value": "selectbasic"\n      },\n      "label": {\n        "label": "Label Text",\n        "type": "input",\n        "value": "Select Basic"\n      },\n      "options": {\n        "label": "Options",\n        "type": "textarea-split",\n        "value": [\n          "Option one",\n          "Option two"\n        ]\n      },\n      "inputsize": {\n        "label": "Input Size",\n        "type": "select",\n        "value": [\n          {\n            "value": "input-mini",\n            "label": "Mini",\n            "selected": false\n          },\n          {\n            "value": "input-small",\n            "label": "Small",\n            "selected": false\n          },\n          {\n            "value": "input-medium",\n            "label": "Medium",\n            "selected": false\n          },\n          {\n            "value": "input-large",\n            "label": "Large",\n            "selected": false\n          },\n          {\n            "value": "input-xlarge",\n            "label": "Xlarge",\n            "selected": true\n          },\n          {\n            "value": "input-xxlarge",\n            "label": "Xxlarge",\n            "selected": false\n          }\n        ]\n      }\n    }\n  },\n  {\n    "title": "Select Multiple",\n    "fields": {\n      "id": {\n        "label": "ID / Name",\n        "type": "input",\n        "value": "selectmultiple"\n      },\n      "label": {\n        "label": "Label Text",\n        "type": "input",\n        "value": "Select Multiple"\n      },\n      "options": {\n        "label": "Options",\n        "type": "textarea-split",\n        "value": [\n          "Option one",\n          "Option two"\n        ]\n      },\n      "inputsize": {\n        "label": "Input Size",\n        "type": "select",\n        "value": [\n          {\n            "value": "input-mini",\n            "label": "Mini",\n            "selected": false\n          },\n          {\n            "value": "input-small",\n            "label": "Small",\n            "selected": false\n          },\n          {\n            "value": "input-medium",\n            "label": "Medium",\n            "selected": false\n          },\n          {\n            "value": "input-large",\n            "label": "Large",\n            "selected": false\n          },\n          {\n            "value": "input-xlarge",\n            "label": "Xlarge",\n            "selected": true\n          },\n          {\n            "value": "input-xxlarge",\n            "label": "Xxlarge",\n            "selected": false\n          }\n        ]\n      }\n    }\n  }\n]'
  }), define("text!data/buttons.json", [], function() {
      return '[\n  {\n    "title": "File Button",\n    "fields": {\n      "id": {\n        "label": "ID / Name",\n        "type": "input",\n        "value": "filebutton"\n      },\n      "label": {\n        "label": "Label Text",\n        "type": "input",\n        "value": "File Button"\n      }\n    }\n  },\n  {\n    "title": "Single Button",\n    "fields": {\n      "id": {\n        "label": "ID / Name",\n        "type": "input",\n        "value": "singlebutton"\n      },\n      "label": {\n        "label": "Label Text",\n        "type": "input",\n        "value": "Single Button"\n      },\n      "buttonlabel": {\n        "label": "Button Label",\n        "type": "input",\n        "value": "Button"\n      },\n      "buttontype": {\n        "label": "Button Type",\n        "type": "select",\n        "value": [\n          {\n            "value": "btn-default",\n            "label": "Default",\n            "selected": false\n          },\n          {\n            "value": "btn-primary",\n            "label": "Primary",\n            "selected": true\n          },\n          {\n            "value": "btn-info",\n            "label": "Info",\n            "selected": false\n          },\n          {\n            "value": "btn-success",\n            "label": "Success",\n            "selected": false\n          },\n          {\n            "value": "btn-warning",\n            "label": "Warning",\n            "selected": false\n          },\n          {\n            "value": "btn-danger",\n            "label": "Danger",\n            "selected": false\n          },\n          {\n            "value": "btn-inverse",\n            "label": "Inverse",\n            "selected": false\n          }\n        ]\n      }\n    }\n  },\n  {\n    "title": "Double Button",\n    "fields": {\n      "id": {\n        "label": "Button 1 ID / Name",\n        "type": "input",\n        "value": "doublebutton"\n      },\n      "label": {\n        "label": "Label Text",\n        "type": "input",\n        "value": "Double Button"\n      },\n      "button1label": {\n        "label": "Button Label",\n        "type": "input",\n        "value": "Good Button"\n      },\n      "button1type": {\n        "label": "Button Type",\n        "type": "select",\n        "value": [\n          {\n            "value": "btn-default",\n            "label": "Default",\n            "selected": false\n          },\n          {\n            "value": "btn-primary",\n            "label": "Primary",\n            "selected": false\n          },\n          {\n            "value": "btn-info",\n            "label": "Info",\n            "selected": false\n          },\n          {\n            "value": "btn-success",\n            "label": "Success",\n            "selected": true\n          },\n          {\n            "value": "btn-warning",\n            "label": "Warning",\n            "selected": false\n          },\n          {\n            "value": "btn-danger",\n            "label": "Danger",\n            "selected": false\n          },\n          {\n            "value": "btn-inverse",\n            "label": "Inverse",\n            "selected": false\n          }\n        ]\n      },\n      "id2": {\n        "label": "Button 2 ID / Name",\n        "type": "input",\n        "value": "button2id"\n      },\n      "button2label": {\n        "label": "Button Label",\n        "type": "input",\n        "value": "Scary Button"\n      },\n      "button2type": {\n        "label": "Button Type",\n        "type": "select",\n        "value": [\n          {\n            "value": "btn-default",\n            "label": "Default",\n            "selected": false\n          },\n          {\n            "value": "btn-primary",\n            "label": "Primary",\n            "selected": false\n          },\n          {\n            "value": "btn-info",\n            "label": "Info",\n            "selected": false\n          },\n          {\n            "value": "btn-success",\n            "label": "Success",\n            "selected": false\n          },\n          {\n            "value": "btn-warning",\n            "label": "Warning",\n            "selected": false\n          },\n          {\n            "value": "btn-danger",\n            "label": "Danger",\n            "selected": true\n          },\n          {\n            "value": "btn-inverse",\n            "label": "Inverse",\n            "selected": false\n          }\n        ]\n      }\n    }\n  }\n]'
  }), define("text!templates/app/render.html", [], function() {
      return '<h3>Rendered source of your form:</h3>\n<textarea id="render" class="span6"></textarea>\n'
  }), define("app/app", ["jquery", "underscore", "backbone", "collections/snippets", "collections/my-form-snippets", "views/tab", "views/my-form", "text!data/input.json", "text!data/radio.json", "text!data/select.json", "text!data/buttons.json", "text!templates/app/render.html"], function(e, t, n, r, i, s, o, u, a, f, l, c) {
      return {
          initialize: function() {
              new s({
                  id: "Input",
                  title: "表单组件",
                  collection: new r(JSON.parse(u))
              }), new s({
                  id: "Radios / Checkboxes",
                  title: "单选/多选组件",
                  collection: new r(JSON.parse(a))
              }), new s({
                  id: "Select",
                  title: "下拉列表组件",
                  collection: new r(JSON.parse(f))
              }), new s({
                  id: "Buttons",
                  title: "按钮组件",
                  collection: new r(JSON.parse(l))
              }), new s({
                  id: "Rendered",
                  title: "查看代码",
                  content: c
              }), e("#components .tab-pane").first().addClass("active"), e("#formtabs li").first().addClass("active"), new o({
                  id: "Original",
                  title: "模板框",
                  collection: new i([{
                      title: "Form Name",
                      fields: {
                          name: {
                              label: "Form Name",
                              type: "input",
                              value: "Form Name"
                          }
                      }
                  }])
              })
          }
      }
  }), require.config({
      baseUrl: "assets/js/lib/",
      shim: {
          backbone: {
              deps: ["underscore", "jquery"],
              exports: "Backbone"
          },
          underscore: {
              exports: "_"
          },
          bootstrap: {
              deps: ["jquery"],
              exports: "$.fn.popover"
          }
      },
      paths: {
          app: "..",
          collections: "../collections",
          data: "../data",
          models: "../models",
          helper: "../helper",
          templates: "../templates",
          views: "../views"
      }
  }), require(["app/app"], function(e) {
      e.initialize()
  }), define("../main", function() {});